> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get reporting metrics

> Read delivery metrics across advertisers and campaigns

`GET /api/v2/buyer/reporting/metrics`

Returns delivery metrics rolled up across the **advertiser → campaign → media buy → package** tree. Choose a hierarchical `summary` or flat `timeseries` view, scope with `advertiserId` and `campaignId`, and set the window with `days` or an explicit `startDate`/`endDate`. This endpoint is day-grain only — for hourly counts use [Get event summary](/v2/buyer/reporting/tasks/get-event-summary).

## Request

<CodeGroup>
  ```bash Summary theme={null}
  curl "https://api.interchange.io/api/v2/buyer/reporting/metrics?days=14&advertiserId=42&demo=false" \
    -H "Authorization: Bearer $SCOPE3_API_KEY"
  ```

  ```bash Time-series CSV theme={null}
  curl "https://api.interchange.io/api/v2/buyer/reporting/metrics?view=timeseries&days=90&download=true&demo=false" \
    -H "Authorization: Bearer $SCOPE3_API_KEY"
  ```
</CodeGroup>

## Parameters

| Param          | Type    | Required | Notes                                                                               |
| -------------- | ------- | -------- | ----------------------------------------------------------------------------------- |
| `advertiserId` | string  | No       | Filter to one advertiser                                                            |
| `campaignId`   | string  | No       | Filter to one campaign. Must belong to `advertiserId` if both are passed            |
| `startDate`    | string  | No       | `YYYY-MM-DD`. Overrides the `days` window when set                                  |
| `endDate`      | string  | No       | `YYYY-MM-DD`. Defaults to today                                                     |
| `days`         | integer | No       | `0`–`90`, default `7`. Use `0` for the full campaign timeframe                      |
| `view`         | enum    | No       | `summary` (default) or `timeseries`                                                 |
| `download`     | boolean | No       | Default `false`. When `true`, returns a signed CSV URL instead of JSON              |
| `demo`         | boolean | No       | Default `false`. When `true`, returns auto-generated demo data instead of real data |

## Response

```json theme={null}
{
  "advertisers": [
    {
      "advertiserId": "42",
      "advertiserName": "Northwind Outdoors",
      "metrics": { "impressions": 12345, "spend": 678.9, "clicks": 210, "views": 9800, "completedViews": 4200, "conversions": 18, "leads": 3, "videoCompletions": 4200, "ecpm": 55.0, "cpc": 3.23, "ctr": 0.017, "completionRate": 0.43 },
      "campaigns": [
        {
          "campaignId": "cmp_001",
          "campaignName": "Spring Trail Series",
          "management": "managed",
          "metrics": { "impressions": 12345, "spend": 678.9, "clicks": 210, "views": 9800, "completedViews": 4200, "conversions": 18, "leads": 3, "videoCompletions": 4200, "ecpm": 55.0, "cpc": 3.23, "ctr": 0.017, "completionRate": 0.43 },
          "mediaBuys": []
        }
      ]
    }
  ],
  "totals": { "impressions": 12345, "spend": 678.9, "clicks": 210, "views": 9800, "completedViews": 4200, "conversions": 18, "leads": 3, "videoCompletions": 4200, "ecpm": 55.0, "cpc": 3.23, "ctr": 0.017, "completionRate": 0.43 },
  "periodStart": "2026-05-24",
  "periodEnd": "2026-06-06"
}
```

Each campaign block (and each timeseries row) carries a `management` state:
`tracked` (a campaign you did not set up through the platform, mirrored
read-only from a connected seller account) or `managed` (authored or adopted
through the platform). This surface currently reports managed campaigns only —
tracked mirror delivery is excluded — so totals never silently mix the two
states.

When `download=true`, the response is instead `{ downloadUrl, expiresAt, fileName, rowCount }` with a signed URL that expires in 7 days. Treat that URL as a bearer credential.

## Errors

* `400 VALIDATION_ERROR` — malformed `startDate`/`endDate`, `days` outside `0`–`90`, or a `campaignId` that does not belong to the given `advertiserId`.

See [Errors](/v2/reference/errors) for the full error contract.

## Related

<CardGroup cols={2}>
  <Card title="Reporting tasks" href="/v2/buyer/reporting/tasks" icon="list-check">
    All reporting operations
  </Card>

  <Card title="Reporting overview guide" href="/v2/guides/reporting-overview" icon="book">
    Hierarchy, metrics, CSV export, delivery flow
  </Card>

  <Card title="Get event summary" href="/v2/buyer/reporting/tasks/get-event-summary" icon="clock">
    Hourly event counts by type
  </Card>
</CardGroup>
