---
title: "Every distinct email security state for a domain, newest first, with what changed"
method: GET
path: "/domains/{id}/email/history"
---

# Every distinct email security state for a domain, newest first, with what changed

`GET /domains/{id}/email/history`

## Request

- Base URL: `https://www.domainlab.app/api/v1`
- URL: `https://www.domainlab.app/api/v1/domains/{id}/email/history`
- Auth: HTTP bearer

## Path parameters

- `id` integer, required

## Query parameters

- `limit` integer
- `offset` integer

## Response `200`

{ domain_id, domain_name, states: [{ scan_id, first_seen_at, last_checked_at, confirmed, grade, rubric, statuses, changes: [{ protocol, label, before, after, before_status, after_status }] }], total, limit, offset }

## Other responses

- `401`: Missing or invalid API key
- `403`: Account lacks API access (no active subscription or trial)
- `404`: NOT_FOUND
- `429`: Rate limit or monthly quota exceeded. Respect the Retry-After header. code is RATE_LIMITED (short-lived) or MONTHLY_QUOTA_EXCEEDED (resets next period).

---

[API](https://skmtc.dev/domainlab/apis/domain-lab-api.md) · [All operations](https://skmtc.dev/domainlab/apis/domain-lab-api/llms.txt) · [OpenAPI document](https://skmtc.dev/domainlab/apis/domain-lab-api/revisions/5dade951c661?raw)
