APIAugust 2026
Machine-Readable Errors & Data Retention
- Every 4xx and 5xx body now carries a stable, enumerated
codeand arequestIdalongsideerror. It comes from one response plugin, so all ~40 routes that return their own error object are covered rather than nearly all of them - The OpenAPI spec declares that shape as
ApiErrorand attaches it to every operation. Thecodeenum is derived from the handler’s own table, so the spec cannot drift from what the API emits - Rate-limited responses gain
RateLimit-Limit,RateLimit-Remaining,RateLimit-ResetandRateLimit-Policynext to theX-originals, which are kept.Resetis seconds remaining, and the quota headers describe whichever window is closest to exhaustion — the one actually pacing you - New
/docs/reference/versioningstates what counts as a breaking change and how a deprecation is announced - A nightly retention worker ages out
message_sendandcontact_eventrows against your plan’s visible window, with a 30-day grace period and a one-time owner and admin notification before anything is removed. It ships in dry-run: it reports what it would delete and deletes nothing - The unreachable per-org event volume block is retired, and the tracked-events definition is corrected everywhere agents read it: the docs,
llms.txtand the generatedpricing.md - wraps.dev serves a markdown representation of every page the three ways an agent actually asks for one, and sitemap entries carry a real
lastmodinstead of the current timestamp on every request
API v1.1

