Skip to main content

Overview

Scope3’s Conversion API follows the AdCP log_event specification for server-to-server conversion measurement. This enables you to:
  • Send purchase, sign-up, and other conversion events
  • Attribute conversions back to ad impressions and clicks
  • Optimize campaigns based on actual outcomes
Privacy-First Design: Raw PII (emails, phone numbers) is NOT accepted. You may send pre-hashed email/phone (SHA-256) or pre-resolved identity tokens (e.g., LiveRamp RampIDs, UID2).

Prerequisites

Before sending conversion events, you’ll need two things:

1. Configure an Event Source

Register an event source for your advertiser using the REST sync endpoint. This gives you an event_source_id to include in all event requests:
account.account_id is required and must equal the path {advertiserId}. Response shape:
The action field on each result will be one of created, updated, unchanged, failed, or deleted. Pass "delete_missing": true to archive any previously-configured sources not included in the payload.
Events sent to an unconfigured event source are rejected. Always sync your event sources before sending events for the first time.

2. Get Your API Key

  1. Visit interchange.io/user-api-keys
  2. Sign up or log into your Scope3 account
  3. Generate a new API key (starts with scope3_)
See Authentication for detailed setup instructions.

Endpoints

Different host on purpose. The Conversion API ingests events at ping.interchange.io, not the main api.interchange.io host. CAPI runs on separate high-throughput ingestion infrastructure tuned for event firehose workloads, so the host difference is intentional — not a typo.

Request Format

Minimal Example (Purchase with Click ID)

Full Example (with Identity Tokens and Line Items)

Batch Example (Multiple Events)

Send up to 10,000 events in a single request:

Request Fields

Top-Level

Event Object

UserMatch Object

Provide the strongest identifiers available. Sending multiple types increases match rates.

CustomData Object

Supported Event Types

| Event Type | Description | |------------|-------------| | lead | User expressed interest (form submission, signup, etc.) | | qualify_lead | Lead qualified by sales or scoring criteria | | close_convert_lead | Lead converted to a customer or closed deal | | disqualify_lead | Lead disqualified or marked as not viable | | complete_registration | User completed account registration | | subscribe | User subscribed to a service or newsletter | | start_trial | User started a free trial | | submit_application | User submitted an application (loan, job, etc.) |
| Event Type | Description | |------------|-------------| | page_view | User viewed a page | | view_content | User viewed specific content (product, article, etc.) where the view is mostly context for a lower-funnel goal | | content_view | User meaningfully consumed a content unit (a watch, listen, stream, episode play, or read) where the consumption itself is the optimized event | | watch_milestone | User reached a content progress threshold (25%, 50%, 75%, 100%, or a seconds-viewed milestone) | | follow | User made a free, durable opt-in to an account, channel, feed, list, podcast, or similar owned property | | select_content | User selected or clicked on content | | select_item | User selected a specific product or item from a list | | search | User performed a search | | share | User shared content via social or messaging |
See the AdCP conversion tracking spec for the complete list of supported event types.

Attribution Methods

Scope3 supports two attribution methods depending on your use case:

Click Attribution (Online)

When a user clicks an ad served through Scope3, we append a unique sc3clid parameter to the landing page URL:
To enable click attribution:
  1. Capture the sc3clid from the URL when the user lands
  2. Store it (cookie, session, or database)
  3. Include it as user_match.click_id with click_id_type: "sc3clid" when sending conversion events
Click attribution is the simplest and most accurate method when the user converts in the same browser session.

Offline Attribution (Cross-Device / Offline)

For conversions that happen on a different device or offline, use pre-resolved identity tokens or hashed identifiers. These allow Scope3 to match the conversion back to ad exposure even without a click ID. Use cases:
  • User sees ad on mobile, purchases on desktop
  • User sees ad online, purchases in physical store
  • CRM/offline sales data upload

Supported Identity Types

Hashing requirements for hashed_email and hashed_phone:
  • Must be SHA-256 hex strings (64 characters, lowercase)
  • Emails: normalize to lowercase with whitespace trimmed before hashing
  • Phone numbers: normalize to E.164 format (e.g. +12065551234) before hashing
Identity tokens must be pre-resolved via your identity partner. Raw PII (plain-text emails, phone numbers, addresses) is NOT accepted.

Test Events

Use test_event_code to validate your integration without affecting production attribution or reporting:
Test events appear in the test events UI but do not affect production campaigns.

Response Format

Success (200 OK)

Partial Failures

Events within a batch are processed independently. Failed events are reported in partial_failures without rejecting the entire batch:

Error Responses

Operation-level errors (auth failure, invalid event source) return an errors array instead of the success fields:

Code Examples

Best Practices

Always run sync_event_sources before sending events. Events sent to unconfigured sources are rejected with EVENT_SOURCE_NOT_FOUND.
Store the sc3clid parameter immediately when users land from ads. Use cookies, session storage, or your database to persist it until conversion.
Never expose your API key in client-side code. Always send conversion events from your backend server.
Use order numbers, transaction IDs, or composite keys (e.g. "purchase_user123_20260115") as event_id rather than random UUIDs. Events are deduplicated by event_id + event_type + event_source_id, so stable IDs ensure safe retries without duplicate counting.
Provide as many user identifiers as available in user_match (click ID, hashed email, UIDs). More identifiers increases match rates across devices and channels.
For purchase events, always include custom_data.value and custom_data.currency to enable ROAS reporting and optimization.
Set event_time to when the event actually occurred, not when you’re sending the request. Events outside the attribution window may not be matched.
Send up to 10,000 events per request to reduce API calls. Events within a batch are processed independently — a failure in one won’t affect others.
Set test_event_code during integration to validate events without affecting production data.

Event Deduplication

Events are deduplicated by the combination of event_id + event_type + event_source_id. Sending the same event multiple times is safe — duplicates are silently ignored.

Next Steps

Measurement & Incrementality

Use conversion data to power incrementality tests and lift measurement

Reporting

Analyze conversion performance across campaigns

Authentication

Learn more about API key management

Campaign object guide

Set up campaigns that optimize toward your conversion events