Developer Documentation

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

1,000+
Brands
160M+
Shoppers
47ms
Avg response
2.5×
Higher LTV
API References

DiscoBeat Channel API

For Channel Partners

Full API reference for channel partners. Authentication, publisher management, category configuration, exclusions, reporting, and upcoming features.

View Documentation
Monetize. For Publishers

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

Integration 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.

  1. Create your account at platform.disconetwork.com
  2. Set categories & exclusions: Settings → Brand and DiscoOffers → Manage
  3. Find your Publisher ID: Settings → Integrations
  4. Click Publish to go live
💡
Don't overly exclude advertisers. It reduces your earnings. Be specific with categories and subcategories.

Publish SDK

Display DiscoOffers on your order confirmation page to monetize post-purchase traffic.

1Load the SDK

Add this script to your <head>.

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.

confirmation-page.html
<div id="disco-widget"></div>

3Pass order data

Call loadWidget() as soon as order data is available.

script.js
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"
  }
});
ℹ️
page_type only accepts "thank_you" or "order_status".

GTM Setup

Integrate via Google Tag Manager. Direct SDK integration (Publish SDK) is recommended for best results.

1. Push data to the Data Layer

confirmation-page.html
window.dataLayer.push({
  email: "shopper@example.com"
});

2. Create a Data Layer Variable

  1. Open Google Tag Manager
  2. Go to Variables → User-Defined Variables → New
  3. Set type to Data Layer Variable
  4. Enter the key name (e.g. email) and save

3. Create a Custom HTML Tag

GTM Custom HTML
<script
  src="https://d1zcmvsklxjbur.cloudfront.net/static/disco-sdk.js?publisher_id=PUBLISHER_ID"
  type="text/javascript"
></script>
ℹ️
Enable Support document.write in the tag settings.

4. Set the Trigger

Single-Page App

  1. Select History Change trigger
  2. Set to Some History Changes
  3. Match your confirmation page URL

Multi-Page App

  1. Select Page View trigger
  2. Set to Some Page Views
  3. Match your confirmation page URL
Advertise. For Advertisers

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.

ℹ️
Endpoint: https://partners.disconetwork.com/advertiser/events/
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

FieldTypeDetailsReq
account_idstringYour Disco-provisioned advertiser account ID.
event_namestringThe configured conversion event (e.g. SIGNUP, PURCHASE). Case-insensitive.
click_idstringOne of click_id, email, or email_hash is required as a customer identifier.
emailstringPlain-text email of the converting shopper.
email_hashstringSHA-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.

Basic postback
https://partners.disconetwork.com/advertiser/events/?account_id=YOUR_ACCOUNT_ID&event_name=SIGNUP&click_id=dsc_abc123
With event_datetime + custom metadata
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.

POST https://partners.disconetwork.com/advertiser/events/
{
  "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.

GET Request (recommended)
<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>
POST Request
<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

StatusMessageCause
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.
422Detailed JSON response.Most likely cause is the account_id is missing or incorrect.
💡
event_name is case-insensitive. Never include PII in custom_metadata. Contact your Disco account team to provision new event_name or account_id values.
Reference

Field Reference

Complete field definitions for loadWidget().

Customer Fields

FieldTypeDetailsReq
emailStringPlain text email
email_hashStringSHA-256 hash (lowercase, trimmed)
first_nameStringShopper first name
last_nameStringShopper last name
phoneStringPhone number (any format)
order_idStringUnique order identifier
confirmation_idStringConfirmation identifier
costStringTotal order cost
page_typeEnum"thank_you" or "order_status"
purchasesArrayPurchased items array
shippingObjectShipping address
billingObjectBilling address
click_idStringClick identifier for attribution

Purchase Item Fields

FieldTypeDetailsReq
product_idStringUnique product ID
nameStringProduct name
typeStringProduct category
descriptionStringProduct description
variantStringColor, size, etc.
quantityStringQuantity purchased

Address Fields

Used for both shipping and billing.

FieldTypeDetailsReq
address_line_1StringStreet address
address_line_2StringApt, suite, unit
cityStringCity
stateStringState or province
zipStringZIP / postal code

Partner Ecosystem

// we plug into the tools you already use

E-Commerce Platforms
Shopify
BigCommerce
Salesforce Commerce Cloud
Marketing & CRM
Klaviyo
PostScript
Attentive
Measurement & Attribution
impact.com
Rockerbox
Northbeam
Snowflake
Infrastructure
AWS
Vercel

Need help with your integration?

Our engineering team provides hands-on support for every integration.

Talk to Engineering