curl --request GET \
--url https://api.interchange.io/api/v2/buyer/reporting/metrics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/buyer/reporting/metrics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/buyer/reporting/metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"advertisers": [
{
"advertiserId": "<string>",
"advertiserName": "<string>",
"currency": "<string>",
"metrics": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
},
"campaigns": [
{
"campaignId": "<string>",
"campaignName": "<string>",
"management": "tracked",
"metrics": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
},
"mediaBuys": [
{
"mediaBuyId": "<string>",
"name": "<string>",
"status": "<string>",
"budget": 123,
"metrics": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
},
"packages": [
{
"packageId": "<string>",
"productId": "<string>",
"productName": "<string>",
"metrics": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
}
}
],
"channelGroup": {
"channelGroupId": "<string>",
"name": "<string>"
},
"deliveryFxConversion": {
"fromCurrency": "<string>",
"rate": 123,
"asOfDate": "<string>",
"source": "booked"
}
}
]
}
]
}
],
"totals": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
},
"totalsCurrency": "<string>",
"periodStart": "<string>",
"periodEnd": "<string>",
"consolidated": {
"totals": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
},
"byAdvertiser": [
{
"advertiserId": "<string>",
"currency": "<string>",
"spend": 123
}
],
"conversionInfo": {
"displayCurrency": "<string>",
"asOf": "<string>",
"rateSource": "fx_rate_snapshots",
"rateBasis": "as-of",
"rates": [
{
"pair": "<string>",
"rate": 123
}
],
"unconverted": [
"<string>"
],
"estimate": true
}
}
}{
"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": {}
}
}Get reporting
Get reporting metrics across all advertisers and campaigns. The response is hierarchical for view=summary, flat leaf-by-day rows for view=timeseries, or a signed CSV download descriptor when download=true.
curl --request GET \
--url https://api.interchange.io/api/v2/buyer/reporting/metrics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/buyer/reporting/metrics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/buyer/reporting/metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"advertisers": [
{
"advertiserId": "<string>",
"advertiserName": "<string>",
"currency": "<string>",
"metrics": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
},
"campaigns": [
{
"campaignId": "<string>",
"campaignName": "<string>",
"management": "tracked",
"metrics": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
},
"mediaBuys": [
{
"mediaBuyId": "<string>",
"name": "<string>",
"status": "<string>",
"budget": 123,
"metrics": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
},
"packages": [
{
"packageId": "<string>",
"productId": "<string>",
"productName": "<string>",
"metrics": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
}
}
],
"channelGroup": {
"channelGroupId": "<string>",
"name": "<string>"
},
"deliveryFxConversion": {
"fromCurrency": "<string>",
"rate": 123,
"asOfDate": "<string>",
"source": "booked"
}
}
]
}
]
}
],
"totals": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
},
"totalsCurrency": "<string>",
"periodStart": "<string>",
"periodEnd": "<string>",
"consolidated": {
"totals": {
"impressions": 4503599627370495,
"spend": 1,
"clicks": 4503599627370495,
"views": 4503599627370495,
"completedViews": 4503599627370495,
"conversions": 4503599627370495,
"leads": 4503599627370495,
"videoCompletions": 4503599627370495,
"conversionValue": 1,
"ecpm": 123,
"cpc": 123,
"ctr": 123,
"completionRate": 123,
"cpa": 123,
"roas": 123
},
"byAdvertiser": [
{
"advertiserId": "<string>",
"currency": "<string>",
"spend": 123
}
],
"conversionInfo": {
"displayCurrency": "<string>",
"asOf": "<string>",
"rateSource": "fx_rate_snapshots",
"rateBasis": "as-of",
"rates": [
{
"pair": "<string>",
"rate": 123
}
],
"unconverted": [
"<string>"
],
"estimate": true
}
}
}{
"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
Query Parameters
Filter to campaigns on this advertiser
Filter to a specific campaign. If advertiserId is also provided, the campaign must belong to that advertiser
Filter to media buys in one campaign channel group. May be combined with advertiserId or campaignId to assert the expected parent scope
1 - 128Filter to a specific media buy owned by the authenticated buyer. May be combined with advertiserId or campaignId to assert the expected parent scope
Start date in ISO format (YYYY-MM-DD)
^\d{4}-\d{2}-\d{2}$"2025-01-01"
End date in ISO format (YYYY-MM-DD)
^\d{4}-\d{2}-\d{2}$"2025-01-31"
Number of days to include (default: 7, max: 90). Use 0 for the full campaign timeframe.
0 <= x <= 907
Response format: "summary" for hierarchical advertiser/campaign/media-buy/package breakdown, "timeseries" for flat rows with one entry per (advertiser → campaign → media buy → package) × day
summary, timeseries ISO-4217 currency for the consolidated (FX-converted) cross-advertiser rollup. Defaults to the buyer home currency when the advertisers share one; must be a platform-supported currency. Summary view only. The converted figures are display estimates, never billing inputs
^[A-Za-z]{3}$"EUR"
When true, generates a CSV file and returns a signed download URL instead of JSON data
When true, returns auto-generated demo data instead of querying real data sources
Response
Get reporting
- Option 1
- Option 2
- Option 3
Hierarchical reporting response: advertiser → campaign → media buy → package
Advertiser-level reporting data
Show child attributes
Show child attributes
Aggregated totals across all advertisers, exact and native. Money metrics are present only when every advertiser shares one currency (totalsCurrency); when currencies mix they are null — see the consolidated block for the converted rollup
Show child attributes
Show child attributes
ISO-4217 currency the native totals are denominated in; null when the advertisers span multiple currencies (money metrics in totals are then null)
Start of the reporting period (YYYY-MM-DD)
^\d{4}-\d{2}-\d{2}$End of the reporting period (YYYY-MM-DD)
^\d{4}-\d{2}-\d{2}$FX-converted cross-advertiser rollup in the display currency (explicit displayCurrency, or the buyer home currency when resolvable). Omitted when no conversion applies (single-currency buyer viewing natively). Display estimate only — never a billing input
Show child attributes
Show child attributes