Skip to main content

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_id and client_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

GoalStart Here
Target specific audiencesTargeting, Audience Creation
Track conversionsSnap Pixel, Conversions API
Drive app installsApp Install creatives, Snap App ID
Run dynamic product adsDynamic Product Ads
Pull performance dataMeasurement
Was this page helpful?
Yes
No