What is the Snapchat Conversions API?
The Snapchat Conversions API (CAPI) is Snap's server-to-server interface for sending web, app and offline conversion events, such as purchases, add to cart and sign-ups, from your server to Snapchat. It complements the Snap Pixel, which records the same actions in the visitor's browser, and lets conversions reach Snapchat even when the browser blocks the pixel.
Snap's own guidance is to run both. Its Snap Pixel page says the Conversions API "can capture events that may not be tracked by Snap Pixel" and recommends using the two together. The same page cites one advertiser, the French Army, that saw a 10% lower cost per action and 20% higher signal volume after adding CAPI to the pixel. That is a single case published by Snap, not a benchmark for your store. The API itself is free to install, although some partner options carry a cost.
A note on SignalBridge. We do not send conversions to Snapchat today. A Snap Conversions API destination is planned, with no release date. So this guide covers the routes that exist now: Snap's own Shopify app, partner tools and a direct integration. We describe Snap's behavior from its public documentation, which we last checked on October 18, 2026.
How does the Snapchat Conversions API work?
The flow is the same whichever route you choose:
- A shopper taps a Snapchat ad. Snap appends a
ScCidclick ID to the landing page address. - The Snap Pixel records events in the browser, and your server or tool records the same events on its side.
- Each server event goes to Snap's v3 endpoint with hashed customer identifiers, the click ID and an event ID.
- Snap matches the event to a Snapchatter, removes duplicates of events it already received from the pixel, and attributes the conversion.
By default, Snap attributes a conversion to an ad within a 28-day window after a click and a 1-day window after a view. You can adjust the window in your Manage Ads reporting, according to Snap's campaign FAQ. When Snap's numbers differ from another tool's, a different attribution window is often part of the reason.
| What you need | Where it comes from |
|---|---|
| Pixel ID | Ads Manager, Snap Pixel. Web events use the same ID as the pixel, so both feed one pipeline |
| Conversions API token | Ads Manager, Business Details, Conversions API Tokens |
| A Business Manager | Required by Snap to use the API |
| Events with identifiers | Your store, a tag manager or a partner |
Which Snapchat CAPI setup method should you use?
| Method | Best for | Effort | Weak spot |
|---|---|---|---|
| Snapchat Ads app for Shopify | Shopify stores | A couple of clicks, no code | Captures only events on Shopify-hosted pages |
| Partner gateway such as Datahash | Stores that want no code on Shopify, WooCommerce, WordPress or Magento | One click in Events Manager | You depend on the partner, and pricing varies |
| Server-side GTM with a Snapchat CAPI tag (Stape) | Teams already running server-side Google Tag Manager | Medium, needs GTM skills | The web GTM Snap tag lacks event_id, so deduplication needs extra work |
| Direct integration | Custom stacks and developers | High | You own hashing, retries, deduplication and monitoring |
Snap's partner list also names Google Tag Manager, Stape's CAPI gateway, Segment, Tealium, Zapier, LeadsBridge and others. For most Shopify stores, the first row is the right start. The steps below cover it and the direct route, because the hard parts, the token, the identifiers and the deduplication, are the same.
How to set up the Snapchat Conversions API (6 steps)
Step 1: Check your Snap Pixel and Business Manager
You need a Business Manager and a Snap Pixel before anything else. In Ads Manager open the menu, choose Snap Pixel, click Set up my Pixel and note the Pixel ID. If you plan to send web events from a server, the ID in the API address must be the same Pixel ID your pixel uses. That shared ID is what lets Snap deduplicate the two sources later.
Step 2: Generate a Conversions API token
In Ads Manager open the menu and choose Business Details. Under OAuth Apps, find Conversions API Tokens and click Generate Token. You must be an Organization Admin to see this section. Snap recommends these static long-lived tokens, which do not expire and need no refresh. You can create several and delete one to invalidate it.
A token only works for pixel and app IDs that belong to the organization that generated it. Treat it like a password: store it on your server or in your partner tool, never in page code, because anyone holding it can send events to your pixel.
Step 3: Choose your route and connect it
For a Shopify store, install the Snapchat Ads app from the Shopify App Store, connect your ad account and tick Connect Snap Pixel. Snap's own page says that when you install the pixel with the app, CAPI is installed automatically. Then open Settings, Customer events, App pixels in Shopify, find the Snap pixel and change its data setting from Optimized to Always on, as Snap recommends to protect campaign performance.
For a partner, enable the gateway in Events Manager or add Snap's CAPI tag to your server GTM container with the pixel ID and token. For a direct integration, continue with the next two steps and build the request yourself.
Step 4: Build the event payload
A web event is a POST to https://tr.snapchat.com/v3/{PIXEL_ID}/events?access_token={TOKEN} with a JSON body, as shown in Snap's API guide. Snap requires event_name, event_time, event_source_url, action_source and a user_data object that carries at least one matching identifier: a hashed email (em), a hashed phone number (ph), or client_ip_address together with client_user_agent. A PURCHASE also needs currency and value. Snap says sc_click_id improves ad measurement and highly recommends sc_cookie1, because it raises the user match rate.
Here is an illustrative purchase, with placeholder values:
{
"data": [
{
"event_name": "PURCHASE",
"event_time": 1792834200,
"event_id": "1001",
"action_source": "WEB",
"event_source_url": "https://www.example-store.com/checkout/thank-you",
"user_data": {
"em": ["542d240129883c019e106e3b1b2d3f3cb3537c43c425364de8e951d5a3083345"],
"client_ip_address": "203.0.113.42",
"client_user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X)",
"sc_click_id": "7b3a7917-a82a-47e8-9728-e1b3b045abb2",
"sc_cookie1": "<value of the _scid cookie>"
},
"custom_data": {
"currency": "USD",
"value": 89.5,
"order_id": "1001",
"num_items": "2",
"content_ids": ["sku-001", "sku-002"],
"content_type": "product"
}
}
]
}
Snap requires identifiers to be normalized first and then hashed as lowercase hex SHA-256. Trim and lowercase an email before hashing. For a phone number, keep the country code, drop a leading double zero and any leading zero of the number itself, and remove every non-digit. The IP address and user agent are not hashed, and the IP must be the shopper's device, not your server's. In Node, hashing an email takes three lines:
import { createHash } from 'node:crypto';
const sha256Hex = (value) => createHash('sha256').update(value).digest('hex');
const em = sha256Hex('Person@Example.com'.trim().toLowerCase());
Snap's documentation lists this exact email and its hash, 542d2401...083345, as the expected result, which makes it a handy self-test.
The event_time is a Unix timestamp, and Snap requires it to be no more than 7 days in the past. Send events as they happen, not in a nightly batch.
Step 5: Deduplicate with the Snap Pixel
If the pixel and the API both report an event, give them the same ID so Snap counts it once. Snap's deduplication guide sets these rules for the web:
- The pixel's
client_dedup_idand the API'sevent_idmust be identical, for the same Pixel ID and the same event name, within a 48-hour window. - For purchases, add the order reference as well: the pixel calls it
transaction_idand CAPI v3 calls itorder_id, insidecustom_data. This pair adds a fallback of up to 30 days, and the cross-channel ID pair takes precedence when both are present. - Use one ID per conversion, not per session. Reusing a session ID across several events collapses them into one.
- Set the pixel's ID yourself. If you do not pass
client_dedup_id, the pixel generates one that starts with@-, which is known only to the browser and can never match your server.
A matching pixel call for the purchase above looks like this:
snaptr('track', 'PURCHASE', {
client_dedup_id: '1001',
transaction_id: '1001',
price: '89.50',
currency: 'USD',
});
On Shopify with Snap's app, Snap handles this for you. With server-side GTM, Stape notes that the Snap tag for web GTM does not support event_id, so you need a custom HTML tag in web GTM to set the same ID on the pixel side.
Step 6: Test and verify
Validate before you go live. Snap's test event tool accepts the same body at POST https://tr.snapchat.com/v3/{PIXEL_ID}/events/validate?access_token={TOKEN}, without processing it as production data. Its validate/logs and validate/stats endpoints summarize what you sent in the past day, and Events Manager, Test Events shows the same events with warnings and recommendations.
curl -X POST "https://tr.snapchat.com/v3/$PIXEL_ID/events/validate?access_token=$SNAP_CAPI_TOKEN" \
-H "Content-Type: application/json" \
-d @event.json
After launch, allow 1 to 2 hours for events to appear in Events Manager marked "Via Conversions API", and up to 24 hours for the deduplication diagnostics on each event to settle. On Shopify, the Snapchat Pixel Helper extension should show your Pixel ID and an integration value of shopify-wpe.
Which events should an online store send to Snapchat?
Snap's v3 API uses fixed event names. These are the ones an e-commerce store normally needs:
| Store moment | event_name | What to include |
|---|---|---|
| Page loaded | PAGE_VIEW | event_source_url |
| Product page viewed | VIEW_CONTENT | content_ids, content_type, content_name, currency, value |
| Product added to cart | ADD_CART | The same product fields plus num_items |
| Checkout started | START_CHECKOUT | contents, value, currency |
| Payment details added | ADD_BILLING | value, currency |
| Order placed | PURCHASE | currency and value (required), order_id, contents |
| Account created | SIGN_UP | A hashed email |
| Site search | SEARCH | search_string |
| Wishlist add | ADD_TO_WISHLIST | content_ids |
For dynamic product ads, content_ids carries your product IDs, content_type is product or product_group, and contents is a list of items with id, quantity and item_price. Snap accepts a defined subset of ISO 4217 currency codes, so check its parameters page if you sell in an uncommon currency.
How do you improve Snapchat CAPI match quality?
Match quality decides how many server events Snap can connect to an ad interaction. These are the levers, in order of impact:
| Field | Hash it? | Notes |
|---|---|---|
em and ph | Yes, SHA-256 | Strongest identifiers. Normalize before hashing |
fn, ln, ct, st, zp, country | Yes, SHA-256 | Add what you have from the checkout |
client_ip_address | No | The shopper's IP, not your server's. IPv4 and IPv6 are accepted |
client_user_agent | No | Recommended for all web events |
sc_click_id | No | The ScCid value from the landing page address |
sc_cookie1 | No | The _scid cookie set by the Snap Pixel |
external_id | Hashing recommended | Your own customer or first-party cookie ID |
The click ID deserves special care. Parse &ScCid= from the landing page URL when the shopper arrives, store it for the session and send it as sc_click_id on every later event. Snap also encourages advertisers who use the click ID to pass the full landing page URL as the event's source URL. Alongside it, send the _scid cookie as sc_cookie1, which Snap says increases the user match rate.
Consent matters too. Snap's data_processing_options parameter accepts LMU to flag an opted-out user on web events, and its documentation ties that flag to iOS 14.5 and later opt-outs, so leave it unset otherwise. It does not replace your own consent logic: your cookie banner should decide which events leave your server at all. Our guide to Consent Mode v2 explains how consent shapes what you can measure.
Why are Snapchat CAPI events missing or duplicated?
| Symptom | Likely cause | Fix |
|---|---|---|
| No events in Events Manager | Wrong Pixel ID, or a token from a different organization | Use the pixel's ID and a token generated in the same organization, then wait 1 to 2 hours |
| Events not accepted | event_time more than 7 days old, or a missing event_source_url or action_source | Send events promptly and include every required field |
| Purchases without revenue | PURCHASE sent without currency and value, which Snap requires | Add both to custom_data |
| Purchases counted twice | event_id differs from client_dedup_id, a placeholder such as {{order.order_number}}, or a fresh UUID created on the server | Reuse the exact same real ID on both sides |
| Page views and add to cart doubled | The pixel's auto-generated @- ID cannot match your server | Set client_dedup_id explicitly |
| Dedup fails on purchases only | The order reference is missing from the server event | Send order_id inside custom_data to match the pixel's transaction_id |
| Low match rate | Missing em and ph, unnormalized hashes, or your server's IP address | Hash after normalizing and send the shopper's IP |
| Shopify events missing on some pages | Snap's app captures only Shopify-hosted pages, so headless or external pages are missed | Check those pages with the Pixel Helper and send them another way |
| Fewer pixel events than expected on Shopify | Pixel data setting left on Optimized, while Snap recommends Always on | Switch it to Always on in Customer events |
If counts still look inflated, check the deduplication diagnostics in Events Manager, and allow up to 24 hours after a fix before you recheck.
What does SignalBridge cover today?
SignalBridge sends server-side events to Meta, Google Ads, GA4, TikTok, Microsoft Ads, Taboola and Klaviyo. Snapchat is not among them, and we will not describe a setup that does not exist. If you advertise on Snapchat and those platforms together, run Snap's own route for Snapchat and use SignalBridge for the others. See our TikTok Events API setup guide and our guide to what Meta CAPI is for the same server-side logic on those platforms.
If you want to follow our Snapchat plans, the integrations page shows the current status of every destination. Plans start at $29 a month for the platforms we support, with a 14-day free trial.
FAQ
What is the Snapchat Conversions API?
It is Snap's server-to-server interface for sending web, app and offline conversion events to Snapchat. Your server or a partner tool posts each event, with hashed customer identifiers and the ScCid click ID, to Snap's v3 endpoint. It complements the Snap Pixel and lets conversions reach Snapchat when the browser blocks the pixel.
Is the Snapchat Conversions API free?
Yes. Snap says the API itself is free to install, although some partner installation options might have a cost. A direct integration costs developer time, and hosting a server-side GTM container costs whatever the host charges.
Do I need both the Snap Pixel and the Conversions API?
Snap recommends using both. Running them together gives Snap a fuller picture and covers events one source misses. It works safely only if every event carries the same ID on both sides, so Snap counts it once.
How does Snapchat deduplicate pixel and CAPI events?
For web events, the pixel's client_dedup_id must equal the API's event_id, for the same Pixel ID and event name, within 48 hours. For purchases, matching transaction_id on the pixel and order_id in the API's custom_data adds a fallback of up to 30 days.
What is ScCid and do I need it?
ScCid is the click ID Snap appends to the landing page address when someone taps your ad. Snap does not list it as mandatory, but it says sending it as sc_click_id improves ad measurement. Snap also highly recommends sending the _scid cookie as sc_cookie1, which raises the user match rate.
Can I set up Snapchat CAPI on Shopify without code?
Yes. Install the Snapchat Ads app, connect your ad account and the Snap Pixel, and the app installs CAPI automatically. Set the pixel to Always on in Customer events. The app captures only events on Shopify-hosted pages, so headless storefronts need another route.
Does SignalBridge support the Snapchat Conversions API?
Not yet. A Snap Conversions API destination is planned, with no release date. SignalBridge currently supports Meta, Google Ads, GA4, TikTok, Microsoft Ads, Taboola and Klaviyo.
Related reading
- TikTok Events API: Complete Setup Guide for E-Commerce — the same server-side pattern on TikTok
- Pinterest Conversions API: Complete Setup Guide for E-Commerce — another click-ID-based social platform
- What is CAPI? Meta CAPI (Conversions API) Explained for 2026 — the original conversions API explained
- What is Event Deduplication? (And Why You're Double-Counting) — the general theory behind shared event IDs
- Meta CAPI vs Facebook Pixel: Why Server-Side Tracking Wins in 2026 — why pixel and server work best together
- 7 Best TikTok Events API Tools in 2026 (From $29/mo) — another platform's tool landscape
- Best Facebook CAPI Tools in 2026 (Ranked & Compared) — what to look for in a CAPI tool
- Server-Side Tracking for Shopify: Complete 2026 Guide — how Shopify exposes events to apps
- What is Consent Mode v2? (GDPR Tracking Without Data Loss) — how consent affects what you can send
- Ad Blocker Usage Statistics 2026: Users, Rates by Country and Tracking Impact — how many visitors a browser pixel misses
- What is Server-Side Tracking? (Complete 2026 Guide) — the foundational guide
Related Articles
Taboola Conversions API Setup: S2S Postback Without Code
Set up the Taboola Conversions API (S2S postback) with no code. Create the Realize conversion, connect SignalBridge, and verify in minutes. Start free.
Pinterest Conversions API: Complete Setup Guide for E-Commerce
Set up Pinterest Conversions API for server-side tracking in 2026. Recover lost conversions, improve Pinterest ad optimization, and boost ROAS with server-to-server event delivery.
