Sync measurement data
curl --request POST \
--url https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/measurement-data/sync \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"measurements": [
{
"start_time": "2026-03-01T00:00:00-05:00",
"end_time": "2026-03-07T23:59:59-05:00",
"metric_id": "incremental_revenue",
"metric_value": 8450.75,
"unit": "currency",
"currency": "USD",
"campaign_id": "camp_456",
"media_buy_id": "mb_789",
"package_id": "pkg_001",
"creative_id": "cr_002",
"source": "advertiser",
"source_platform": "billy_grace",
"source_metric_name": "Incremental Revenue",
"external_row_id": "bg_row_001"
}
]
}
'import requests
url = "https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/measurement-data/sync"
payload = { "measurements": [
{
"start_time": "2026-03-01T00:00:00-05:00",
"end_time": "2026-03-07T23:59:59-05:00",
"metric_id": "incremental_revenue",
"metric_value": 8450.75,
"unit": "currency",
"currency": "USD",
"campaign_id": "camp_456",
"media_buy_id": "mb_789",
"package_id": "pkg_001",
"creative_id": "cr_002",
"source": "advertiser",
"source_platform": "billy_grace",
"source_metric_name": "Incremental Revenue",
"external_row_id": "bg_row_001"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
measurements: [
{
start_time: '2026-03-01T00:00:00-05:00',
end_time: '2026-03-07T23:59:59-05:00',
metric_id: 'incremental_revenue',
metric_value: 8450.75,
unit: 'currency',
currency: 'USD',
campaign_id: 'camp_456',
media_buy_id: 'mb_789',
package_id: 'pkg_001',
creative_id: 'cr_002',
source: 'advertiser',
source_platform: 'billy_grace',
source_metric_name: 'Incremental Revenue',
external_row_id: 'bg_row_001'
}
]
})
};
fetch('https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/measurement-data/sync', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"measurements": [
{
"index": 4503599627370495,
"error": "<string>"
}
]
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Measurement
Sync measurement data
Inbound sync_measurement_data endpoint. Advertisers or MMPs call this to provide performance data as an alternative to CAPI. Accepts time-series measurement data keyed by campaign, media buy, package, and/or creative.
POST
/
advertisers
/
{advertiserId}
/
measurement-data
/
sync
Sync measurement data
curl --request POST \
--url https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/measurement-data/sync \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"measurements": [
{
"start_time": "2026-03-01T00:00:00-05:00",
"end_time": "2026-03-07T23:59:59-05:00",
"metric_id": "incremental_revenue",
"metric_value": 8450.75,
"unit": "currency",
"currency": "USD",
"campaign_id": "camp_456",
"media_buy_id": "mb_789",
"package_id": "pkg_001",
"creative_id": "cr_002",
"source": "advertiser",
"source_platform": "billy_grace",
"source_metric_name": "Incremental Revenue",
"external_row_id": "bg_row_001"
}
]
}
'import requests
url = "https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/measurement-data/sync"
payload = { "measurements": [
{
"start_time": "2026-03-01T00:00:00-05:00",
"end_time": "2026-03-07T23:59:59-05:00",
"metric_id": "incremental_revenue",
"metric_value": 8450.75,
"unit": "currency",
"currency": "USD",
"campaign_id": "camp_456",
"media_buy_id": "mb_789",
"package_id": "pkg_001",
"creative_id": "cr_002",
"source": "advertiser",
"source_platform": "billy_grace",
"source_metric_name": "Incremental Revenue",
"external_row_id": "bg_row_001"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
measurements: [
{
start_time: '2026-03-01T00:00:00-05:00',
end_time: '2026-03-07T23:59:59-05:00',
metric_id: 'incremental_revenue',
metric_value: 8450.75,
unit: 'currency',
currency: 'USD',
campaign_id: 'camp_456',
media_buy_id: 'mb_789',
package_id: 'pkg_001',
creative_id: 'cr_002',
source: 'advertiser',
source_platform: 'billy_grace',
source_metric_name: 'Incremental Revenue',
external_row_id: 'bg_row_001'
}
]
})
};
fetch('https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/measurement-data/sync', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"measurements": [
{
"index": 4503599627370495,
"error": "<string>"
}
]
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Authorizations
API key or access token
Path Parameters
Unique identifier for the advertiser
Minimum string length:
1Example:
"12345"
Body
application/json
Request body for syncing measurement data (ADCP spec alternative to CAPI)
Measurement data points to sync (up to 1000 per call)
Required array length:
1 - 1000 elementsShow child attributes
Show child attributes
Response
Sync measurement data
Response from sync_measurement_data
Per-record sync results
Show child attributes
Show child attributes
⌘I