● Reference
Changelog
Every change to the contract, by date version. Breaking changes ship only under a new Anvil-Version date, with a migration note here. Keys stay pinned to their version until you move them.
2026-07-07 · Field contract cleanup
Three request-contract inconsistencies are removed. POST /v1/ledger/recovery-events accepts usd_value as an alias for gross_amount; the canonical field is unchanged. Asset maps and attribution graphs now finish with status: "succeeded", matching Jobs; requests pinned to a version before 2026-07-05 keep reading complete until that window closes. POST /v1/judgments/intake now enforces its documented contract: all eight core fields in one request, 422 with the missing field names on a partial intake.
2026-07-05 · v3 · one protocol, one honest surface
Breaking, with a 90-day compatibility window. The surface collapses to 45 operations, 22 scopes, 11 resources; every operation is system-of-record. Claimants, debtors, and relationships unify into Parties with a role field. Eleven packet creators collapse into one typed POST /v1/packets. Enforcement profile and plan merge into POST /v1/judgments/{id}/enforcement. Capabilities move to the verb catalog, dispatched through Jobs. Claw and Actions leave the protocol for Mandate. v2 paths keep answering until October 3, 2026 with Deprecation/Sunset headers; retired operations return 410 endpoint_retired. Full guide: v3 migration.
2026-07-03 · Webhook delivery log
Additive. New GET /v1/webhook_endpoints/{webhook_endpoint_id}/deliveries: the delivery log for a webhook endpoint you own, most recent first. Each row carries outcome metadata only: status (queued, delivering, delivered, dead), attempts, last status code, last error, and timestamps. Payloads and signing secrets are never exposed. Uses the existing webhook_endpoints:read scope; the surface is now 115 operations, 64 scopes, 22 resources.
2026-06-19 · Jobs resource · asynchronous execution
Additive. New /v1/jobs resource: create, retrieve, and cancel asynchronous jobs (for example crypto.trace). A worker claims the job, runs it, and writes a result; subscribe to job.completed / job.failed to react. Two new scopes (jobs:read / jobs:write); the surface is now 114 operations, 64 scopes, 22 resources.
2026-06-17: Events resource · the account event log
Additive. New /v1/events resource: list and retrieve the events emitted on your account, most recent first. Each event mirrors the signed webhook envelope, so you can reconcile or backfill without depending on delivery. One new scope (events:read); the surface is now 110 operations, 63 scopes, 21 resources.
2026-06-12 · Rate limits
Additive. Per-key rate limits are now enforced: Sandbox 25 req/s (burst 50), Operator 100 req/s (burst 200), Institutional custom. Exceeding them returns 429 rate_limited with Retry-After; every response carries Anvil-RateLimit-Limit and Anvil-RateLimit-Remaining. Details on the Errors page.
2026-06-12 · Webhook endpoints resource · judgment.created
Additive. New /v1/webhook_endpoints resource: create, list, retrieve, update, delete. Per-endpoint signing secret (returned once on create), enabled_events filter, enable/disable. Deliveries now go to registered endpoints; the operator-set org URL remains as fallback. Two new scopes (webhook_endpoints:read/write); the surface is now 108 operations, 62 scopes, 20 resources. The judgment.intaken event is renamed judgment.created; the old name is accepted as an enabled_events alias under 2026-06-11.
2026-06-12 · Cursor pagination on every list
Every list operation now returns the list envelope ({ "object": "list", "data": [...], "has_more": bool }) and takes limit (1–100, default 20), starting_after, and ending_before cursors. This replaces the bare items array and ships under 2026-06-11: the protocol is pre-launch and the contract policy is now stable + additive, so the shape change lands before the first production key is issued. See Pagination.
2026-06-12 · Full error contract
Additive. The error envelope now names ten codes: not_found (404) on every operation that addresses a specific resource, conflict (409) when an Idempotency-Key is reused with a different request body, and internal_error (500) for failures on our side. The three domain gates return 409. All 56 resource-addressing operations document their 404 in openapi.yaml.
2026-06-11 · v1 surface ships
Initial public version of the Kinetic Anvil Protocol: 103 operations across 19 groups, 32 webhook events, 60 scopes. Endpoint paths, event names, error codes, and the three domain gates are stable; the surface grows additively from here. Full surface in openapi.yaml.
Additive changes ship anytime and land here. When a breaking change ships under a new date version, the migration note lands here first.