Stickers
Stickers add voting, an event countdown, or a promotional code to a Creative. A creative holds the media and settings used by an ad. Configure a sticker in the creative's stickers array when creating or updating the creative.
| Sticker | What Snapchatters see | Configuration |
|---|---|---|
| Poll | A question with two to four answer choices at the end of the ad. Snapchatters can vote and see results. | type: POLL and poll_properties |
| Countdown | A live countdown to an event, overlaid on the ad. | type: COUNTDOWN and countdown_properties |
| Promo code | Promotional information. Tapping the ad copies the promotional code for use at checkout. | type: PROMO_INFO and promo_info_properties |
Before you start
- Obtain an OAuth access token with the
snapchat-marketing-apiscope by following Authentication. The authenticated user needs permission to create creatives in your ad account. - Create and upload media in that ad account. Wait until its
media_statusisREADY, then use its ID astop_snap_media_id. - Select a Public Profile associated with the ad account and use its ID as
profile_properties.profile_id. - Set the following shell variables. Replace the placeholder values with your own IDs, and make your access token available as
ACCESS_TOKENin your local shell.
export AD_ACCOUNT_ID="YOUR_AD_ACCOUNT_ID"
export TOP_SNAP_MEDIA_ID="YOUR_UPLOADED_MEDIA_ID"
export PROFILE_ID="YOUR_PUBLIC_PROFILE_ID"
The examples below create creatives using:
POST https://adsapi.snapchat.com/v1/adaccounts/{ad_account_id}/creatives
Each example creates one creative. The ad account ID in the request body must match the ID in the URL. Creating a creative does not launch an ad: to use it, create an Ad referencing the returned creative ID in a compatible Ad Squad.
Sticker attributes
Each item in stickers contains a type and the properties object for that type.
| Attribute | Required | Description |
|---|---|---|
type | Yes | POLL, COUNTDOWN, or PROMO_INFO. |
poll_properties | For POLL | Question and answer choices. See Poll sticker. |
countdown_properties | For COUNTDOWN | Event name, time, and time zone. See Countdown sticker. |
promo_info_properties | For PROMO_INFO | Manual or automatic promotional information. See Sticker with promo code. |
sticker_display_properties | No | Optional countdown position. See Countdown positioning. |
A creative can contain at most one interactive sticker: either a poll or a countdown. You cannot combine a poll and a countdown on the same creative. Each example on this page uses a single sticker.
Poll sticker
A poll appears as the final segment of an ad. Snapchatters tap an answer and then see the poll results.
Requirements
- Polls are not supported on Lens creatives, creatives with an
AD_TO_LENSattachment, Dynamic Ads (catalog-powered creatives), or Story Ad creatives. - The ad squad's
optimization_goalmust beIMPRESSIONS,VIDEO_VIEWS,VIDEO_VIEWS_15_SEC, orENGAGED_VIEW. - A poll cannot be combined with App Install End Card media.
Poll properties
These attributes are nested in poll_properties.
| Attribute | Required | Description |
|---|---|---|
question | Yes | An object with id and question, as described below. |
options | Yes | An array of two to four objects, each with id and option. |
| Nested attribute | Required | Description |
|---|---|---|
question.id | Yes | A non-empty, unique identifier you assign to the question. A UUID is recommended. |
question.question | Yes | Non-empty question text, up to 38 characters. |
options[].id | Yes | A non-empty, unique identifier you assign to each answer choice. A UUID is recommended. |
options[].option | Yes | Non-empty answer text, up to 18 characters. |
Create a creative with a poll
Run this request after setting the variables in Before you start.
curl -X POST \
"https://adsapi.snapchat.com/v1/adaccounts/${AD_ACCOUNT_ID}/creatives" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
--data-binary @- <<EOF
{
"creatives": [
{
"ad_account_id": "${AD_ACCOUNT_ID}",
"name": "Poll sticker creative",
"type": "SNAP_AD",
"brand_name": "Example Brand",
"headline": "Vote for your favorite",
"top_snap_media_id": "${TOP_SNAP_MEDIA_ID}",
"profile_properties": {
"profile_id": "${PROFILE_ID}"
},
"stickers": [
{
"type": "POLL",
"poll_properties": {
"question": {
"id": "6f3a37fa-52b6-4d78-a2f9-a3d99e2b3c15",
"question": "Which flavor should we launch?"
},
"options": [
{
"id": "1f0d2f7e-9636-4a4a-8a0c-0e5b3f89a001",
"option": "Chocolate"
},
{
"id": "1f0d2f7e-9636-4a4a-8a0c-0e5b3f89a002",
"option": "Vanilla"
},
{
"id": "1f0d2f7e-9636-4a4a-8a0c-0e5b3f89a003",
"option": "Strawberry"
}
]
}
}
]
}
]
}
EOF
Measure poll votes
The poll_sticker_voted field reports the number of votes submitted on the poll. Include it in the fields query parameter when requesting Measurement statistics.
Countdown sticker
A countdown overlays the time remaining until an event, such as a product launch or sale, on the ad.
Requirements
- Countdowns are not supported on Lens creatives, creatives with an
AD_TO_LENSattachment, or Dynamic Ads (catalog-powered creatives). - The ad squad's
optimization_goalmust beIMPRESSIONS,VIDEO_VIEWS,VIDEO_VIEWS_15_SEC,ENGAGED_VIEW, orSWIPES. - The event time must be now or in the future when you create the creative.
Countdown properties
These attributes are nested in countdown_properties.
| Attribute | Required | Description |
|---|---|---|
event_name | Yes | Non-empty event name displayed above the countdown, up to 50 characters. |
event_timestamp | Yes | Event date and time as an ISO 8601 timestamp, such as 2027-12-31T23:59:00.000Z. Use a time that has not passed. |
time_zone | Yes | Valid IANA time zone name, such as Europe/London or America/Los_Angeles. |
Create a creative with a countdown
This example uses a Web View creative that opens a sale page. Replace the example URL with your destination URL and choose a future event time. The Z in the example timestamp denotes UTC; the example uses Europe/London, which is also UTC on that date.
curl -X POST \
"https://adsapi.snapchat.com/v1/adaccounts/${AD_ACCOUNT_ID}/creatives" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
--data-binary @- <<EOF
{
"creatives": [
{
"ad_account_id": "${AD_ACCOUNT_ID}",
"name": "Countdown sticker creative",
"type": "WEB_VIEW",
"brand_name": "Example Brand",
"headline": "Sale starts soon",
"call_to_action": "SHOP_NOW",
"top_snap_media_id": "${TOP_SNAP_MEDIA_ID}",
"profile_properties": {
"profile_id": "${PROFILE_ID}"
},
"web_view_properties": {
"url": "https://www.example.com/sale"
},
"stickers": [
{
"type": "COUNTDOWN",
"countdown_properties": {
"event_name": "Holiday Sale",
"event_timestamp": "2027-12-31T23:59:00.000Z",
"time_zone": "Europe/London"
}
}
]
}
]
}
EOF
Countdown positioning
Countdown stickers are positioned automatically unless you supply sticker_display_properties. Custom positioning requires enablement for your ad account; contact your Snap account team if you need access.
| Attribute | Required | Description |
|---|---|---|
x_axis_position_percentage | No | Horizontal position of the sticker center as a fraction of screen width from the left edge. Range: 0.0–1.0; recommended: 0.3–0.7. |
y_axis_position_percentage | No | Vertical position of the sticker center as a fraction of screen height from the top edge. Range: 0.0–1.0; recommended: 0.3–0.8. |
For an enabled account, add sticker_display_properties to the COUNTDOWN sticker alongside type and countdown_properties:
{
"sticker_display_properties": {
"x_axis_position_percentage": 0.5,
"y_axis_position_percentage": 0.75
}
}
The property names include percentage, but the values are fractions: 0.5 means 50% of the screen width.
Sticker with promo code
A promo code sticker displays promotional information on a WEB_VIEW creative. When a Snapchatter taps the ad, the promotional code is copied for use at checkout, with an on-screen notification.
Choose one of two configurations:
- Manual: You supply the code, description, expiration date, and time zone.
- Automatic: Snap attempts to extract promotional information from the advertised website. Extraction is not guaranteed, so creating the creative does not guarantee that a promotion will be displayed.
Promo code stickers are supported only on WEB_VIEW creatives. The sticker element is not currently shown in the Creative Preview iframe.
Promo code properties
Set type to PROMO_INFO and add the following attributes within promo_info_properties.
| Attribute | Required | Description |
|---|---|---|
promo_info_type | Yes | MANUAL or AUTO. |
manual_promo_code | For MANUAL | Code copied when a Snapchatter taps the ad. Maximum 14 characters. |
manual_promo_description | For MANUAL | Text displayed in place of the creative headline while the promotion is active. Maximum 34 characters. |
manual_promo_expiration_date | For MANUAL | Promotion expiration date and time, such as 2027-12-31T23:59:00.000Z, used with the expiration time zone. |
manual_promo_expiration_time_zone | For MANUAL | Time zone for the expiration date. See Ad Account time zones. |
After a manual promotion expires, the creative stops displaying the promotional description and stops copying the code. The creative can continue to be used as a normal ad without the promotion.
Create a creative with a manual promo code
Replace the example destination URL, code, description, and expiration with your promotion details. This example expires at 23:59 UTC on December 31, 2027, which is 23:59 in Europe/London on that date.
curl -X POST \
"https://adsapi.snapchat.com/v1/adaccounts/${AD_ACCOUNT_ID}/creatives" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
--data-binary @- <<EOF
{
"creatives": [
{
"ad_account_id": "${AD_ACCOUNT_ID}",
"name": "Manual promo code creative",
"type": "WEB_VIEW",
"brand_name": "Example Brand",
"headline": "Find your perfect fit",
"call_to_action": "SHOP_NOW",
"top_snap_media_id": "${TOP_SNAP_MEDIA_ID}",
"profile_properties": {
"profile_id": "${PROFILE_ID}"
},
"web_view_properties": {
"url": "https://www.example.com/promotion"
},
"stickers": [
{
"type": "PROMO_INFO",
"promo_info_properties": {
"promo_info_type": "MANUAL",
"manual_promo_code": "HAPPY15",
"manual_promo_description": "15% off with code HAPPY15",
"manual_promo_expiration_date": "2027-12-31T23:59:00.000Z",
"manual_promo_expiration_time_zone": "Europe/London"
}
}
]
}
]
}
EOF
Create a creative with an automatic promo code
Replace the example URL with the website from which Snap should attempt to extract promotional information. For AUTO, supply only promo_info_type within promo_info_properties.
curl -X POST \
"https://adsapi.snapchat.com/v1/adaccounts/${AD_ACCOUNT_ID}/creatives" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
--data-binary @- <<EOF
{
"creatives": [
{
"ad_account_id": "${AD_ACCOUNT_ID}",
"name": "Automatic promo code creative",
"type": "WEB_VIEW",
"brand_name": "Example Brand",
"headline": "Find your perfect fit",
"call_to_action": "SHOP_NOW",
"top_snap_media_id": "${TOP_SNAP_MEDIA_ID}",
"profile_properties": {
"profile_id": "${PROFILE_ID}"
},
"web_view_properties": {
"url": "https://www.example.com/promotion"
},
"stickers": [
{
"type": "PROMO_INFO",
"promo_info_properties": {
"promo_info_type": "AUTO"
}
}
]
}
]
}
EOF
Update a sticker
Update an existing creative's stickers array with a PUT request:
PUT https://adsapi.snapchat.com/v1/adaccounts/{ad_account_id}/creatives
Set CREATIVE_ID to the ID returned when you created the countdown creative above. This example changes its event name and time. Use the same ad account, media, and Public Profile variables from Before you start.
Send the entire creative object, including its id and the settings you want to keep. Omitting attributes with default values resets them to their defaults. If you have changed other settings on the creative, include their current values in the request. See Updating a Creative.
Updating a creative affects all ads that reference it. Associated ads pause for re-review and resume delivery after approval.
export CREATIVE_ID="YOUR_COUNTDOWN_CREATIVE_ID"
curl -X PUT \
"https://adsapi.snapchat.com/v1/adaccounts/${AD_ACCOUNT_ID}/creatives" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
--data-binary @- <<EOF
{
"creatives": [
{
"id": "${CREATIVE_ID}",
"ad_account_id": "${AD_ACCOUNT_ID}",
"name": "Countdown sticker creative",
"type": "WEB_VIEW",
"brand_name": "Example Brand",
"headline": "Sale starts soon",
"call_to_action": "SHOP_NOW",
"top_snap_media_id": "${TOP_SNAP_MEDIA_ID}",
"profile_properties": {
"profile_id": "${PROFILE_ID}"
},
"web_view_properties": {
"url": "https://www.example.com/sale"
},
"stickers": [
{
"type": "COUNTDOWN",
"countdown_properties": {
"event_name": "New Year Sale",
"event_timestamp": "2028-01-01T12:00:00.000Z",
"time_zone": "Europe/London"
}
}
]
}
]
}
EOF
The response contains the updated creative with the same id and the new countdown properties in its stickers array.
Check the result
For each create or update request, check request_status and the individual item's sub_request_status in the creatives array. On success, save creatives[0].creative.id for use when creating an ad. The returned creative's stickers array contains its sticker configuration.
Check the creative's packaging_status and review_status before using it in an ad. A successful create request does not mean packaging or review has finished.
Troubleshooting
Polls and countdowns can fail validation when creating or updating a creative, or when using the creative in an ad. Check the ad squad's optimization goal and placements as well as the sticker configuration. See Errors for general API errors.
| Error code | What to check |
|---|---|
E23302 | Include the properties object matching the sticker's type. |
E23307 | Reduce the number of stickers. Include at most one poll or countdown per creative. |
E23308 | Custom positioning is not enabled for the organization or ad account. Omit sticker_display_properties to use automatic positioning. |
E23309 | Custom position values must be within 0.0–1.0. |
E23310 | The creative type does not support custom sticker positioning. |
E39200, E39201 | Polls and countdowns cannot be used with Dynamic Ads. |
E39202, E39203 | Use an optimization goal supported by the sticker type. |
E39204, E39205 | One or more selected placement positions do not support the sticker. |
E39206–E39209 | The ad type or creative type does not support the sticker. |
E39210, E39211 | Supply non-empty poll text within the question and answer length limits. |
E39212, E39213 | Supply non-empty question and option IDs. |
E39214–E39216 | Supply a question and an options array with two to four answers. |
E39217–E39220 | Supply all required countdown properties and a non-empty event name of at most 50 characters. |
E39221 | Choose a countdown event time that has not passed. |
E39222 | Use a valid IANA time zone for the countdown. |
E39223 | Remove App Install End Card media when using a poll. |