Quick Start
This guide walks you through launching your first Snap Ad via the API—from authentication through a live ad. All requests use the base URL https://adsapi.snapchat.com/v1.
Before You Begin
You'll need:
- An OAuth app created in Snap Business Manager (requires Organization Admin role)
- Your app's
client_idandclient_secret - An Organization, Funding Source, and Ad Account set up in Business Manager
See Authentication for the full OAuth flow. The short version:
# 1. Direct your user to authorize
https://accounts.snapchat.com/login/oauth2/authorize
?client_id={client_id}
&redirect_uri={redirect_uri}
&response_type=code
&scope=snapchat-marketing-api
# 2. Exchange the returned code for an access token
curl -X POST \
-d "grant_type=authorization_code" \
-d "client_id={client_id}" \
-d "client_secret={client_secret}" \
-d "code={code}" \
-d "redirect_uri={redirect_uri}" \
https://accounts.snapchat.com/login/oauth2/access_token
The response includes an access_token (valid 60 min) and a refresh_token for renewal. Pass the access token in all subsequent requests as Authorization: Bearer {access_token}.
Step 1: Find Your Organization and Ad Account
Retrieve your Organization ID and the Ad Account ID you'll use for the campaign.
curl "https://adsapi.snapchat.com/v1/me/organizations?with_ad_accounts=true" \
-H "Authorization: Bearer {access_token}"
The response lists your organizations and the ad accounts under each. Note the id values—you need {organization_id} and {ad_account_id} for the following steps.
See Organizations and Ad Accounts for full details.
Step 2: Create a Media Object
A Media object is a container for your video asset. Create it before uploading the file.
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {access_token}" \
-d '{"media": [{"name": "My Video", "type": "VIDEO", "ad_account_id": "{ad_account_id}"}]}' \
https://adsapi.snapchat.com/v1/adaccounts/{ad_account_id}/media
Save the id from the response—this is your {media_id}. The media_status reads PENDING_UPLOAD until you upload the file.
See Media for full details.
Step 3: Upload Your Video
Upload your video file to the Media object. Videos must be 1080×1920px, MP4 or MOV, between 3–180 seconds, and under 32 MB (or use chunked upload for up to 1 GB).
curl -X POST \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer {access_token}" \
-F 'file=@/path/to/your/video.mp4' \
https://adsapi.snapchat.com/v1/media/{media_id}/upload
Once complete, media_status becomes READY.
Again, see Media for full details.
Step 4: Create a Creative
A Creative wraps your media with display metadata (headline, brand name, call-to-action). It's owned by the Ad Account and can be reused across multiple ads.
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {access_token}" \
-d '{
"creatives": [{
"ad_account_id": "{ad_account_id}",
"name": "My First Creative",
"type": "SNAP_AD",
"top_snap_media_id": "{media_id}",
"headline": "Check this out",
"profile_properties": {
"profile_id": "{public_profile_id}"
}
}]
}' \
https://adsapi.snapchat.com/v1/adaccounts/{ad_account_id}/creatives
Save the id as {creative_id}. The review_status starts as PENDING_REVIEW.
See Creatives for full details.
Step 5: Create a Campaign
A Campaign defines your business objective and acts as the top-level container for your Ad Squads.
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {access_token}" \
-d '{
"campaigns": [{
"name": "My First Campaign",
"ad_account_id": "{ad_account_id}",
"status": "ACTIVE",
"start_time": "2025-01-01T00:00:00.000Z",
"buy_model": "AUCTION",
"objective_v2_properties": {
"objective_v2_type": "AWARENESS_AND_ENGAGEMENT"
}
}]
}' \
https://adsapi.snapchat.com/v1/adaccounts/{ad_account_id}/campaigns
Save the id as {campaign_id}.
See Campaigns for full details, including objectives options.
Step 6: Create an Ad Squad
An Ad Squad lives inside a Campaign and controls targeting, budget, bid, and placement for a group of ads.
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {access_token}" \
-d '{
"adsquads": [{
"name": "My First Ad Squad",
"campaign_id": "{campaign_id}",
"type": "SNAP_ADS",
"status": "ACTIVE",
"placement_v2": { "config": "AUTOMATIC" },
"billing_event": "IMPRESSION",
"optimization_goal": "IMPRESSIONS",
"bid_strategy": "LOWEST_COST_WITH_MAX_BID",
"bid_micro": 1000000,
"daily_budget_micro": 50000000,
"delivery_constraint": "DAILY_BUDGET",
"targeting": {
"geos": [{ "country_code": "us" }]
},
"start_time": "2025-01-01T00:00:00.000Z"
}]
}' \
https://adsapi.snapchat.com/v1/campaigns/{campaign_id}/adsquads
Save the id as {ad_squad_id}.
See Ad Squads for full details, including targeting and bidding options.
Step 7: Create an Ad
An Ad links your Creative to an Ad Squad. It's the unit that users actually see.
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {access_token}" \
-d '{
"ads": [{
"name": "My First Ad",
"ad_squad_id": "{ad_squad_id}",
"creative_id": "{creative_id}",
"type": "SNAP_AD",
"status": "ACTIVE"
}]
}' \
https://adsapi.snapchat.com/v1/adsquads/{ad_squad_id}/ads
The ad enters review_status: PENDING and goes live once approved.
See Ads for full details, including ad types and the Creative type mapping.
What's Next
| Goal | Start Here |
|---|---|
| Target specific audiences | Targeting, Audience Creation |
| Track conversions | Snap Pixel, Conversions API |
| Drive app installs | App Install creatives, Snap App ID |
| Run dynamic product ads | Dynamic Product Ads |
| Pull performance data | Measurement |