Wraps Logo
← All changes
APIAugust 2026

Machine-Readable Errors & Data Retention

  • Every 4xx and 5xx body now carries a stable, enumerated code and a requestId alongside error. 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 ApiError and attaches it to every operation. The code enum 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-Reset and RateLimit-Policy next to the X- originals, which are kept. Reset is seconds remaining, and the quota headers describe whichever window is closest to exhaustion — the one actually pacing you
  • New /docs/reference/versioning states what counts as a breaking change and how a deprecation is announced
  • A nightly retention worker ages out message_send and contact_event rows 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.txt and the generated pricing.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 lastmod instead of the current timestamp on every request

API v1.1