---
title: "Get email metrics"
method: GET
path: "/email/metrics"
tags: ["Email"]
---

# Get email metrics

`GET /email/metrics`

## Request

- Base URL: `https://api.crevio.co/v1`
- URL: `https://api.crevio.co/v1/email/metrics`
- Auth: API key in header `Authorization`

Account-wide email performance over a date range, across both send paths: 1:1 messages and broadcasts. Per-broadcast numbers stay on `GET /broadcasts/{id}/stats`; this is the rollup.

Two metrics are source-specific, and blending them would misreport: `opened`, `clicked` and `unsubscribed` are broadcast-only (1:1 mail carries no open pixel or link rewriting by design), while `suppressed` is 1:1-only (a broadcast drops suppressed addresses before recipient rows exist). Group by `source` to see them apart.

Rates are computed over `sent`. Grouping by `broadcast` returns broadcast rows only; grouping by `inbox` returns message rows only.

## Query parameters

- `start_date` string, date
- `end_date` string, date
- `group_by` 'period' | 'source' | 'broadcast' | 'inbox'
- `granularity` 'hour' | 'day' | 'week' | 'month'
- `source` 'all' | 'broadcast' | 'message'
- `timezone` string

## Response `200`

Email metrics for the range

- EmailMetrics
  - `object` 'email_metrics', required
  - `start_date` string, date, required
  - `end_date` string, date, required
  - `timezone` string, required
  - `source` 'all' | 'broadcast' | 'message', required
  - `group_by` 'period' | 'source' | 'broadcast' | 'inbox' | 'null', nullable
  - `granularity` 'hour' | 'day' | 'week' | 'month': Present only when grouping by period.
  - `totals` object, required
    - `sent` integer, required
    - `delivered` integer, required
    - `bounced` integer, required
    - `complained` integer, required
    - `failed` integer, required
    - `opened` integer, required
    - `clicked` integer, required
    - `unsubscribed` integer, required
    - `suppressed` integer, required
    - `delivery_rate` number, float, required
    - `bounce_rate` number, float, required
    - `complaint_rate` number, float, required
    - `open_rate` number, float, required
    - `click_rate` number, float, required
    - `unsubscribe_rate` number, float, required
  - `data` EmailMetricsBucket[], required: Per-group rows. Empty when `group_by` is omitted — `totals` is the whole answer.
    - `period` string, date-time: Bucket start, when grouping by period.
    - `source` 'broadcast' | 'message': Send path, when grouping by source.
    - `broadcast` string: Broadcast id, when grouping by broadcast.
    - `inbox` string: Inbox id, when grouping by inbox.
    - `sent` integer, required
    - `delivered` integer, required
    - `bounced` integer, required
    - `complained` integer, required
    - `failed` integer, required
    - `opened` integer, required
    - `clicked` integer, required
    - `unsubscribed` integer, required
    - `suppressed` integer, required
    - `delivery_rate` number, float, required
    - `bounce_rate` number, float, required
    - `complaint_rate` number, float, required
    - `open_rate` number, float, required
    - `click_rate` number, float, required
    - `unsubscribe_rate` number, float, required

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Resource not found
- `422`: Validation error
- `429`: Rate limit exceeded — 600 requests per minute per credential. Retry after the number of seconds in `Retry-After`.
- `500`: Internal server error

---

[API](https://skmtc.dev/crevio/apis/crevio-api-v1.md) · [All operations](https://skmtc.dev/crevio/apis/crevio-api-v1/llms.txt) · [OpenAPI document](https://skmtc.dev/crevio/apis/crevio-api-v1/revisions/2219f18ad651?raw)
