Developer Documentation
Disco is a post-purchase commerce media network. Choose your path below based on how you want to work with us.

DiscoBeat Channel API
For Channel PartnersFull API reference for channel partners. Authentication, publisher management, category configuration, exclusions, reporting, and upcoming features.
How Monetization Works
As a publisher, you display DiscoOffers across your post-purchase surfaces. When shoppers engage with offers from top DTC brands, you earn revenue. No inventory, no fulfillment, just incremental margin.
Products you can publish
DiscoOffers
Curated brand offers on your thank-you page, order tracking, and more
Learn moreDiscoMix
AI-powered offer curation across email, SMS, and app surfaces
Learn moreDiscoBeat
Headless API for SaaS platforms distributing offers to their merchants
Learn moreIntegration paths

Shopify
One-click install. No code required. Automatic order data + conversion tracking.
Install on Shopify
WebSDK / API
For any platform. A few lines of JS on your confirmation page.
DiscoOffers Setup
Get DiscoOffers live on your store in 4 steps.
- Create your account at platform.disconetwork.com
- Set categories & exclusions: Settings → Brand and DiscoOffers → Manage
- Find your Publisher ID: Settings → Integrations
- Click Publish to go live
Publish SDK
Display DiscoOffers on your order confirmation page to monetize post-purchase traffic.
1Load the SDK
Add this script to your <head>.
Replace "disco_pk_live_..." with your disco public key.
<script src="https://d1zcmvsklxjbur.cloudfront.net/static/disco-sdk.js" type="text/javascript" api_key="disco_pk_live_..." ></script>
Environment
Add environment="staging" to hit the staging environment instead of production. When using api_key with staging, make sure to use a _sandbox_ key. _live_ keys are not accepted in staging.
2Add the mount point
Place this where you want DiscoOffers. Top of the page is recommended.
<div id="disco-widget"></div>
3Pass order data
Call loadWidget() as soon as order data is available.
window.discoLauncher.loadWidget({
email: "shopper@example.com", // required (or email_hash)
email_hash: "sha256...", // required (or email)
first_name: "Monica", // required
order_id: "67890XYZ", // required
page_type: "thank_you", // "thank_you" | "order_status"
purchases: [ // required
{
product_id: "PROD123",
name: "Headphones",
type: "Electronics",
quantity: "1"
}
],
cost: "124.00",
phone: "+1 (415) 123-4567",
shipping: {
address_line_1: "123 Main St",
city: "San Francisco",
state: "CA",
zip: "94105"
}
});GTM Setup
Integrate via Google Tag Manager. Direct SDK integration (Publish SDK) is recommended for best results.
1. Push data to the Data Layer
window.dataLayer.push({
email: "shopper@example.com"
});2. Create a Data Layer Variable
- Open Google Tag Manager
- Go to Variables → User-Defined Variables → New
- Set type to Data Layer Variable
- Enter the key name (e.g. email) and save
3. Create a Custom HTML Tag
<script src="https://d1zcmvsklxjbur.cloudfront.net/static/disco-sdk.js?publisher_id=PUBLISHER_ID" type="text/javascript" ></script>
4. Set the Trigger
Single-Page App
- Select History Change trigger
- Set to Some History Changes
- Match your confirmation page URL
Multi-Page App
- Select Page View trigger
- Set to Some Page Views
- Match your confirmation page URL
How Advertising Works
As an advertiser, your brand is shown to high-intent shoppers right after they purchase from complementary brands. You get 100% Share of Voice, outcome-based pricing, and AI-optimized targeting via OffersAI.
Integration paths

Web SDK
Drop a script on your confirmation page to report conversions.

Event API
POST conversion events from your backend for full control.
Track Conversions and Events
Send conversion events to a single unified endpoint. Both GET (postback) and POST (server-side / WebSDK) are supported, authenticated by account_id.
Advertisers can send Disco multiple events, with one designated as the primary conversion event. Any secondary events can be used for secondary optimizations. Note that there must be a persistent identifier across each of the events to ensure accurate attribution and optimization.
No API key required. Authentication is via account_id, provisioned by your Disco account team.
Note: Event names must be configured in Disco's system for events to fire correctly. Please inform your Disco account team of your different event name options.
Required Fields
| Field | Type | Details | Req |
|---|---|---|---|
| account_id | string | Your Disco-provisioned advertiser account ID. | |
| event_name | string | The configured conversion event (e.g. SIGNUP, PURCHASE). Case-insensitive. | |
| click_id | string | One of click_id, email, or email_hash is required as a customer identifier. | |
| string | Plain-text email of the converting shopper. | ||
| email_hash | string | SHA-256 hash of the lowercased email. |
GET. Postback URL
Use GET requests when integrating via postback URL. Pass all parameters as URL query strings. Any additional URL parameters not listed above will be captured and stored as custom metadata for analytics purposes.
https://partners.disconetwork.com/advertiser/events/?account_id=YOUR_ACCOUNT_ID&event_name=SIGNUP&click_id=dsc_abc123
https://partners.disconetwork.com/advertiser/events/?account_id=YOUR_ACCOUNT_ID&event_name=PURCHASE&click_id=dsc_abc123&event_datetime=2026-03-17T12%3A00%3A00Z&sku1=value1&sku2=value2
POST. Server-Side (JSON)
Send Content-Type: application/json from your backend. Use event_properties for identifiers and custom_metadata for anything else.
{
"event_name": "SIGNUP",
"account_id": "YOUR_ACCOUNT_ID",
"event_properties": {
"click_id": "dsc_abc123",
"email": "shopper@example.com",
"email_hash": "c9b780607...",
"event_datetime": "2026-04-20T17:30:00Z",
"custom_metadata": {
"sku1": "SERUM-01",
"sku2": "CREAM-02"
}
}
}WebSDK / GTM
If you are integrating directly on your site or via Google Tag Manager, use one of the following approaches. Both methods send requests directly from the browser to the Disco Events API. GET is recommended. Works out of the box with no additional configuration. Set the script to fire on your conversion event (e.g. a purchase confirmation page load). For Google Tag Manager, add either of the below as a Custom HTML tag with the appropriate Trigger.
<script>
var url = "https://partners.disconetwork.com/advertiser/events/" +
"?account_id=YOUR_ACCOUNT_ID" +
"&event_name=YOUR_EVENT_NAME" +
"&click_id=YOUR_CLICK_ID";
fetch(url);
</script><script>
fetch("https://partners.disconetwork.com/advertiser/events/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
account_id: "YOUR_ACCOUNT_ID",
event_name: "YOUR_EVENT_NAME",
event_properties: {
click_id: "YOUR_CLICK_ID",
}
})
});
</script>Error Responses
| Status | Message | Cause |
|---|---|---|
| 400 | "Request missing required properties." | Request is missing a user identifier or custom metadata. |
| 400 | "Events not configured for this account." | Your account does not have any event names set up yet. Contact your Disco account team. |
| 400 | "event_name not provided on request." | The event_name field is missing from the request. |
| 400 | "Event name not configured for account. Options: [...]" | The event_name you sent does not match any of your configured events. The response will include a list of valid event names. |
| 422 | Detailed JSON response. | Most likely cause is the account_id is missing or incorrect. |
Field Reference
Complete field definitions for loadWidget().
Customer Fields
| Field | Type | Details | Req |
|---|---|---|---|
| String | Plain text email | ||
| email_hash | String | SHA-256 hash (lowercase, trimmed) | |
| first_name | String | Shopper first name | |
| last_name | String | Shopper last name | |
| phone | String | Phone number (any format) | |
| order_id | String | Unique order identifier | |
| confirmation_id | String | Confirmation identifier | |
| cost | String | Total order cost | |
| page_type | Enum | "thank_you" or "order_status" | |
| purchases | Array | Purchased items array | |
| shipping | Object | Shipping address | |
| billing | Object | Billing address | |
| click_id | String | Click identifier for attribution |
Purchase Item Fields
| Field | Type | Details | Req |
|---|---|---|---|
| product_id | String | Unique product ID | |
| name | String | Product name | |
| type | String | Product category | |
| description | String | Product description | |
| variant | String | Color, size, etc. | |
| quantity | String | Quantity purchased |
Address Fields
Used for both shipping and billing.
| Field | Type | Details | Req |
|---|---|---|---|
| address_line_1 | String | Street address | |
| address_line_2 | String | Apt, suite, unit | |
| city | String | City | |
| state | String | State or province | |
| zip | String | ZIP / postal code |
Partner Ecosystem
// we plug into the tools you already use
Need help with your integration?
Our engineering team provides hands-on support for every integration.
Talk to Engineering