Tone docs

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 for what that commits us to.

Subscribe by watching 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.
  • Every enum published as an open set — see Versioning.

How an entry gets written

The contract is diffed on every change:

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".

Was this page helpful?

On this page