Skip to main content
POST /api/v2/buyer/advertisers/{advertiserId}/measurement-data/sync Advertisers or MMPs call this to provide performance data instead of the Conversion API. Accepts time-series measurement points keyed by campaign, media buy, package, and/or creative. Up to 1,000 measurements per call; deduplicates on external_row_id.

Request

curl -X POST https://api.interchange.io/api/v2/buyer/advertisers/12345/measurement-data/sync \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "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",
        "source": "advertiser",
        "source_platform": "acme-analytics",
        "source_metric_name": "Incremental Revenue",
        "external_row_id": "acme_row_001"
      }
    ]
  }'

Parameters

FieldTypeRequiredNotes
measurementsarrayYes1–1000 measurement points
measurements[].start_timestringYesISO 8601 with timezone offset
measurements[].end_timestringYesISO 8601 with timezone offset
measurements[].metric_idenumYesrevenue, incremental_revenue, conversions, incremental_conversions, page_view_count, add_to_cart_count, purchase_count, ltv_1d, ltv_7d, ltv_30d
measurements[].metric_valuenumberYesMeasured value
measurements[].unitenumYescurrency, count, ratio, percentage
measurements[].currencystringConditionalISO 4217 (^[A-Z]{3}$). Required when unit is currency
measurements[].campaign_idstringNoAttach to a campaign (max 255)
measurements[].media_buy_idstringNoAttach to a media buy (max 255)
measurements[].package_idstringNoAttach to a package (max 255)
measurements[].creative_idstringNoAttach to a creative (max 255)
measurements[].sourceenumNoadvertiser, mmp, measurement_partner
measurements[].source_platformstringNoOriginating platform (max 255)
measurements[].source_metric_namestringNoRaw partner metric name (max 255)
measurements[].external_row_idstringNoIdempotency key for re-syncs (max 255)

Response

{
  "measurements": [
    { "index": 0, "action": "created" },
    { "index": 1, "action": "updated" }
  ]
}
Each result reports its index in the request array and an action of created, updated, unchanged, or failed. Failed rows include an error string.

Errors

  • 400 VALIDATION_ERROR — missing required field, start_time not before end_time, missing currency when unit is currency, or more than 1,000 measurements.
See Errors for the full error contract.

Measurement tasks

All measurement operations

Measurement overview

Pipeline, belief state, and concepts

Upload measurement records

Batch per-geo outcome records

Get measurement freshness

Confirm data is arriving