Endpoints
| Export | Path |
|---|---|
| Country breakdown | GET /v1/campaigns/{campaignId}/metrics/breakdown/export |
| Track engagement | GET /v1/campaigns/{campaignId}/metrics/engagement/export |
metrics:read scope.
Request
startDate,endDate— inclusiveYYYY-MM-DDengagementContext—catalogorplaylist(engagement export only)
Date windows
Responses are capped at 90 days per request. If you omit both dates, the API uses a default window of the last 90 days ending today. For longer campaign histories, page in 90-day slices:endDate is before startDate, or the range exceeds 90 days, you get 400 with invalid_date_range or invalid_query_parameter.
Response headers
| Header | Purpose |
|---|---|
Content-Type: application/x-ndjson | One JSON object per line |
Content-Disposition | Suggested filename, e.g. breakdown_{id}_{start}_{end}.jsonl |
X-Row-Count | Total lines in the response (progress tracking) |
Ingest pattern
for await over metrics.breakdown.export).
Treat each line as an upsert on the schema primary key (documented in Understanding metrics). Re-running the same window after the 7-day mutability period is safe.
Paginated vs export
Paginated (/metrics/breakdown) | Export (/metrics/.../export) | |
|---|---|---|
| Format | JSON envelope + pagination | Raw JSONL stream |
| Max rows per call | pageSize up to 500 | Full window (≤ 90 days) |
| Best for | UI, small probes | Warehouses, scheduled jobs |