curl --request GET \
--url https://api.apostra.com/api/v2/storefront/reporting/metrics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.apostra.com/api/v2/storefront/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.apostra.com/api/v2/storefront/reporting/metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"advertisers": [
{
"advertiserId": "<string>",
"advertiserName": "<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
},
"mediaBuys": [
{
"mediaBuyId": "<string>",
"name": "<string>",
"status": "<string>",
"budget": 123,
"inventorySourceId": "<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
},
"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
}
}
]
}
]
}
],
"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
},
"periodStart": "<string>",
"periodEnd": "<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": {}
}
}Get storefront reporting
Get reporting metrics for every media buy the Merchandising Agent participates in through the Storefront inventory sources. The Storefront does not own the underlying media buys; reporting is visible because the Merchandising Agent is the ADCP party to those transactions. The response is hierarchical for view=summary, source-aware flat leaf-by-day rows for view=timeseries, or a signed CSV download descriptor when download=true.
curl --request GET \
--url https://api.apostra.com/api/v2/storefront/reporting/metrics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.apostra.com/api/v2/storefront/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.apostra.com/api/v2/storefront/reporting/metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"advertisers": [
{
"advertiserId": "<string>",
"advertiserName": "<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
},
"mediaBuys": [
{
"mediaBuyId": "<string>",
"name": "<string>",
"status": "<string>",
"budget": 123,
"inventorySourceId": "<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
},
"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
}
}
]
}
]
}
],
"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
},
"periodStart": "<string>",
"periodEnd": "<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
Query Parameters
Filter to media buys flowing through a single inventory source (storefront_inventory_source.source_id). When omitted, includes every inventory source on the storefront.
Filter to one Interchange media buy ID, as returned by seller reporting. When omitted, includes every media buy on the storefront.
Start date in ISO format (YYYY-MM-DD)
^\d{4}-\d{2}-\d{2}$"2026-01-01"
End date in ISO format (YYYY-MM-DD)
^\d{4}-\d{2}-\d{2}$"2026-01-31"
Number of days to include (default: 7, min: 1, max: 90).
1 <= x <= 907
Response format: "summary" for hierarchical advertiser/media-buy/package breakdown, "timeseries" for flat per-day rows.
summary, timeseries 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
When true, timeseries rows are split by each contributing inventory source. The default preserves the legacy media-buy/package/date row grain.
true, false Response
Get storefront reporting
- Option 1
- Option 2
- Option 3
Hierarchical storefront reporting response: advertiser → media buy → package
Advertiser-level reporting data
Show child attributes
Show child attributes
Aggregated totals across all advertisers
Show child attributes
Show child attributes
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}$