account | DynamicAccount | Yes | - | Select the Snapchat Ads account that owns the campaign. |
campaign_id | string or SelectItem | Yes | - | ID of the Snapchat campaign to create the ad squad in. |
ad_squad_name | string | Yes | - | Name of the ad squad (sent to Snapchat as ‘name’). Max 375 characters. |
type | string or SelectableOption | No | {'value': 'SNAP_ADS', 'label': 'Snap Ads'} | Ad squad type: SNAP_ADS (default), LENS, or FILTER. |
status | string or SelectableOption | No | {'value': 'PAUSED', 'label': 'Paused'} | Status when the ad squad is created: ACTIVE or PAUSED. Default: PAUSED. |
optimization_goal | string or SelectableOption | Yes | - | Optimization goal for delivery. The available goals depend on the parent campaign’s objective_v2_type and where the conversion happens (web, app, or lead form). PIXEL_* goals require pixel_id. APP_* goals should set event_sources to the Snap App ID. |
bid_strategy | string or SelectableOption | No | {'value': 'AUTO_BID', 'label': 'Auto Bid'} | Bidding strategy: AUTO_BID (default), LOWEST_COST_WITH_MAX_BID, or TARGET_COST. LOWEST_COST_WITH_MAX_BID and TARGET_COST require bid_amount. |
bid_amount | number | No | - | Bid in the ad account’s currency (for example 2 for $2.00), sent to Snapchat as bid_micro. Required for LOWEST_COST_WITH_MAX_BID and TARGET_COST strategies; not used with AUTO_BID. Minimum 0.01; maximum varies by currency. |
daily_budget | number | No | - | Daily budget in the ad account’s currency, sent as daily_budget_micro. Minimum 5. Provide either daily_budget or lifetime_budget, unless the parent campaign uses Smart Budgets (pacing_level CAMPAIGN), where budgets are managed at the campaign level. |
lifetime_budget | number | No | - | Lifetime budget in the ad account’s currency, sent as lifetime_budget_micro. Requires start_time and end_time. Provide either daily_budget or lifetime_budget. |
start_time | integer or string | No | - | Optional start as a Unix timestamp or ISO datetime string. Required when using lifetime_budget. |
end_time | integer or string | No | - | Optional end as a Unix timestamp or ISO datetime string. Must be after start_time. Required when using lifetime_budget. |
targeting | object or string | Yes | - | The Snapchat targeting spec for this ad squad, as a JSON object sent to Snapchat as-is. geos is required; every other key is optional and Snapchat applies its own defaults when omitted. Use snapchat_ads_search_targeting to look up valid IDs for any dimension (region_id, metro_id, postal_code, interest category_id, languages, carriers, device makes, and more). Common keys: - geos (required): list of geo objects, e.g. [{“country_code”: “us”}]. Supports region_id, metro_id, postal_code, and operation (INCLUDE/EXCLUDE). - demographics: list, e.g. [{“min_age”: “18”, “max_age”: “34”, “gender”: “MALE”}]. Also supports languages and advanced_demographics. - devices: list, e.g. [{“os_type”: “iOS”, “os_version_min”: “11.3”}]. Also supports connection_type, carrier_id, marketing_name. - interests: list, e.g. [{“category_id”: [“SLC_36”]}] for Snap Lifestyle Categories. - segments: list for custom audiences, e.g. [{“segment_id”: [“<id>”], “operation”: “INCLUDE”}]. - locations: list for location categories with circles. - regulated_content: boolean, set true for age-regulated ads. - enable_targeting_expansion: boolean. - auto_expansion_options: object with interest_expansion_option and custom_audience_expansion_option. Example: {“regulated_content”: false, “geos”: [{“country_code”: “us”}], “demographics”: [{“min_age”: “18”}]} |
placement_v2 | object or string | No | - | Placement spec as a JSON object, sent to Snapchat as-is. Defaults to {“config”: “AUTOMATIC”} when omitted. Keys: config (AUTOMATIC or CUSTOM), platforms (e.g. [“snapchat”]), snapchat_positions (for CUSTOM config: INTERSTITIAL_USER, INTERSTITIAL_CONTENT, INSTREAM, FEED, CAMERA, INTERSTITIAL_SPOTLIGHT, PUBLIC_STORIES_INSTREAM). LIMITED_INVENTORY brand safety is only compatible with PUBLIC_STORIES_INSTREAM, INTERSTITIAL_CONTENT, INTERSTITIAL_SPOTLIGHT, or AUTOMATIC placement. Example: {“config”: “CUSTOM”, “platforms”: [“snapchat”], “snapchat_positions”: [“INTERSTITIAL_USER”]} |
conversion_window | string or SelectableOption | No | - | Delivery optimization window: SWIPE_28DAY_VIEW_1DAY (Snapchat default) or SWIPE_7DAY. |
pixel_id | string | No | - | Snap Pixel ID associated with the ad squad. Required for PIXEL_* optimization goals. |
pacing_type | string or SelectableOption | No | - | Pacing: STANDARD (Snapchat default) or ACCELERATED. |
child_ad_type | string or SelectableOption | No | - | Ad type the ad squad will contain. If omitted, Snapchat sets it automatically from the first ad added, after which it becomes immutable. |
forced_view_setting | string or SelectableOption | No | - | Whether the ad squad contains creatives that can serve as a Commercial: FULL_DURATION, SIX_SECONDS, or NONE. |
story_ad_creative_type | string or SelectableOption | No | - | Creative type for Dynamic Story Ads: APP_INSTALL, WEB_VIEW, or DEEP_LINK. Required when using Dynamic Story Ads. |
inventory_option | string or SelectableOption | No | - | Brand safety inventory filter, sent as brand_safety_config: {inventory_option: …}. FULL_INVENTORY (Snapchat default) maximizes reach; LIMITED_INVENTORY shows ads only near content that passed additional moderation, which may decrease reach and increase costs. |
measurement_provider_names | string or SelectableOption | No | - | Approved third-party measurement provider, sent as a one-item list: DOUBLEVERIFY. |
event_sources | object or string | No | - | Snap App ID associated with the ad squad, as a JSON object sent as-is. Shape: {“MOBILE_APP”: [“<snap_app_id>”]}. Recommended for APP_INSTALLS and DEEP_LINK goals, and a prerequisite for SKAdNetwork enrollment and App Install state targeting. |
skadnetwork_properties | object or string | No | - | SKAdNetwork enrollment at creation time, as a JSON object. Keys: enroll_action (OPT_IN), enable_skoverlay (boolean). Enrollment requires event_sources set to the Snap App ID, iOS-only device targeting, and an available Apple Campaign ID. Enrolled ad squads cannot use APP_REENGAGE_OPEN or APP_REENGAGE_PURCHASE goals, or the TARGET_COST bid strategy. Example: {“enroll_action”: “OPT_IN”, “enable_skoverlay”: true} |
cap_and_exclusion_config | object or string | No | - | Frequency cap and exclusion spec, as a JSON object sent to Snapchat as-is, following the Snapchat frequency cap specification, e.g. {“frequency_cap_config”: [{“frequency_cap_count”: 2, “time_interval”: 24, “frequency_cap_interval”: “HOURS”, “frequency_cap_type”: “IMPRESSIONS”}]}. When set inside an Auction campaign, all ads in the ad squad must be of the same ad type (no Multi-format Delivery). |
ad_scheduling_config | object or string | No | - | Schedule for running ads, as a JSON object sent to Snapchat as-is, following the Snapchat ad scheduling specification (days and hours of the week when ads are eligible to serve). |
campaign_budget_optimization_properties | object or string | No | - | Per-ad-squad spend constraints, only when the parent campaign uses Smart Budgets (pacing_level CAMPAIGN), as a JSON object with micro-currency integers passed as-is. Keys: daily_min_spend_micro, daily_max_spend_micro (daily budget campaigns) or lifetime_min_spend_micro, lifetime_max_spend_micro (lifetime cap campaigns); daily and lifetime constraints cannot be mixed. Minimum spend must not exceed 90% of the campaign budget. Example: {“daily_min_spend_micro”: 5000000, “daily_max_spend_micro”: 20000000} |
reach_goal | integer | No | - | Reach & Frequency bookings only: reach goal matching the forecasting request. Requires impression_goal and a RESERVED campaign. Markifact sets reach_and_frequency_status to PENDING and delivery_constraint to REACH_AND_FREQUENCY automatically. |
impression_goal | integer | No | - | Reach & Frequency bookings only: impression goal matching the forecasting request. Requires reach_goal. |