# Changelog

Source: https://docs.usetone.ai/changelog

> Every change to the /v1 contract. Additive only — see the versioning policy for what that guarantees.

Changes are additive: nothing listed here removes or retypes anything you
already receive. See [Versioning](/versioning) for what that commits us to.

Subscribe by watching [`openapi.json`](https://docs.usetone.ai/openapi.json) —
it is regenerated from the code and is the machine-readable record of everything
below.

---

## 2026-08-25 — First published

The initial `/v1` contract: **92 operations** an API key can call, **12 webhook
events**, and **32 error codes**.

### Added

- **Agents** — create, publish, roll back, and read any published version.
  Every call pins the version that ran it.
- **Phone numbers** — search carrier inventory, buy, route to a Tone agent or
  your own stack, and read the rental state.
- **Calls** — place outbound, receive inbound, and read the detail record,
  transcript and recording.
- **Campaigns** — 20 operations covering recipients, pre-flight, launch,
  pacing, retries and outcomes.
- **Compliance** — the pre-dial gate as a standalone verdict API, a consent
  ledger, suppression lists, outcome ingestion and evidence packs.
- **Knowledge bases** — documents an agent answers from, with a retrieval
  preview that runs the same path a live turn runs.
- **Wallet** — balance, ledger and usage by category.
- **Webhooks** — endpoint management, per-endpoint secrets with 24-hour
  rotation overlap, delivery history and replay.
- **Limits** — request budget and both concurrency pools.

### Conventions established

- `Idempotency-Key`, **required** on number purchase and campaign launch.
- Rate-limit headers on every keyed response, successes included.
- `doc_url` on every error, pointing at [the catalog](/errors).
- Every enum published as an **open set** — see [Versioning](/versioning).

---

## How an entry gets written

The contract is diffed on every change:

```bash
pnpm --filter backend openapi:diff --markdown
```

That produces the mechanical half — what was added, and whether anything was
breaking. The prose is written by hand, because "new field `agentVersion`" is
not the same as "a call now records which version of the agent ran it, so a
finished call stays explainable after the prompt changes".
