account | DynamicAccount | Yes | - | Select the Spotify Ads account to create the ad set in. |
campaign_id | string or SelectItem | Yes | - | Campaign the ad set belongs to. |
name | string | Yes | - | Ad set name, 2 to 200 characters. |
start_time | string | No | - | When the ad set starts, ISO 8601 UTC, for example 2026-09-01T00:00:00Z. Spotify requires it to be at least 15 minutes in the future. Defaults to 20 minutes from now when omitted. |
end_time | string | No | - | When the ad set ends, ISO 8601 UTC. Runs until paused when omitted. |
budget_value | number | Yes | - | Budget in the ad account’s currency (for example 500 for $500), converted to Spotify micro-currency automatically. |
budget_type | enum (DAILY, LIFETIME) | Yes | - | Whether budget_value is a DAILY or LIFETIME budget. |
asset_format | enum (AUDIO, VIDEO, IMAGE, CATALOG) | Yes | - | Creative format this ad set delivers: AUDIO, VIDEO, IMAGE, or CATALOG. CATALOG is the carousel format, where listeners swipe through 2 to 6 images; its items are set on the ad’s catalog field. |
bid_strategy | enum (COST_PER_RESULT, MAX_BID, AUTOBID, UNSET) | Yes | - | How Spotify bids: AUTOBID, MAX_BID (needs bid_value), COST_PER_RESULT (needs bid_value), or UNSET. |
bid_value | number | No | - | Bid per 1,000 impressions in the account’s currency, converted to micro-currency automatically. Required by MAX_BID and COST_PER_RESULT. |
base_rate_value | number | No | - | Base rate in the account’s currency, converted to micro-currency automatically. |
delivery_goal | enum (UNSET, IMPRESSIONS, REACH, VIDEO_VIEWS, CLICKS, PAGE_VIEWS, APP_INSTALLS, STREAMS, …) | No | - | What delivery optimizes for: IMPRESSIONS, REACH, VIDEO_VIEWS, CLICKS, PAGE_VIEWS, APP_INSTALLS, STREAMS, LEADS, or UNSET. |
delivery | enum (ON, OFF) | No | - | Whether the ad set starts delivering (ON) or paused (OFF). |
pacing | enum (PACING_EVEN, PACING_ASAP) | No | - | Spend pacing: PACING_EVEN spreads the budget, PACING_ASAP spends it as fast as possible. |
slot_positions | array of string or SelectableOption | No | - | Podcast slot positions to deliver in: PRE_ROLL, MID_ROLL, POST_ROLL. |
video_delivery_formats | array of string or SelectableOption | No | - | Video delivery formats: IN_STREAM, OPT_IN. |
category | string | No | - | Advertising category code for the ad set, for example ADV_1_1. |
mobile_app_id | string | No | - | Mobile app ID for app promotion ad sets. |
dataset_id | string | No | - | Measurement dataset ID used for conversion tracking. |
targets | object or string | Yes | - | The Spotify targeting object for this ad set, sent to the API as-is. placements is required: a list of MUSIC and/or PODCAST. Other keys: age_ranges (list of {min, max} between 13 and 99), genders (MALE, FEMALE, NON_BINARY), geo_targets (object with country_code, city_ids, region_ids, postal_code_ids), language (2-letter code), platforms (ANDROID, DESKTOP, IOS; all when omitted), artist_ids, genre_ids, playlist_ids, interest_ids, podcast_episode_topic_ids, audience_ids, audience_ids_exclusions, sensitive_topic_exclusions, and user_day_parts. Use spotify_ads_search_targeting to look up artist, genre, geo, interest, language, playlist, episode topic and sensitive topic ids. Example: {“placements”: [“MUSIC”], “geo_targets”: {“country_code”: “US”}, “age_ranges”: [{“min”: 18, “max”: 34}]} |
frequency_caps | array of any or string | No | - | Up to 6 frequency caps, sent as-is. Each item is {frequency_unit: DAY|WEEK|MONTH, frequency_period: integer, max_impressions: integer}. Example: [{“frequency_unit”: “DAY”, “frequency_period”: 1, “max_impressions”: 3}] |
promotion | object or string | No | - | Artist or podcast promotion object, sent as-is: {promotion_goal: ARTIST_PROMO|PODCAST_PROMO, promotion_target_id, conversion_events: [{tracking_event_type: IMPRESSION|CLICKED|COMPLETE, window_duration_ms}]}. |
cost_modifiers | array of any or string | No | - | Cost modifier objects, sent as-is: [{id, name, rate}]. |