Agent API · v1 · Changelog
What changed, and when
Every entry is a change that shipped, dated the day it landed, newest first. Nothing here is planned work. How versions, deprecations and prices are handled is on the policies page; the machine-readable state of the deployment is GET /api/v1/status.
Prices are never written into history entries. Today's rate card is Triage $0.18, Artifact $0.25 and Operating doc $0.45; the per-mode table on /docs/agents is the live one.
- added
- A new endpoint, field or capability. Compatible with existing callers.
- changed
- Existing behaviour changed in a way that stays inside the contract.
- fixed
- A defect corrected; behaviour now matches what was documented.
- pricing
- A price on the rate card moved. The live price is always on /docs/agents.
- deprecated
- A path or field that will stop answering, announced at least 90 days out.
- added
Markdown and JSON errors for agent callers
Requests that send Accept: text/markdown get markdown for the home page, the blog, individual posts and /docs/agents instead of the HTML app shell, and an unmatched /api/* path answers RFC 9457 application/problem+json instead of an HTML 404.
- fixed
Action catalog publishes the URL slug
GET /api/v1/actions now carries slug beside id, because the two differ and only the slug routes. An agent that substituted the id into the documented call shape got a 404.
- added
Actions: paid side effects, starting with review_request
A second rail, POST /api/v1/actions/{slug}/call, sells things done rather than things said. The first action asks one customer for a review over SMS or email, with a required consent record, opt-outs honoured, and a tracked request id. Idempotency fails closed on this rail: without a reservation the call is refused, because a duplicate text cannot be recalled.
- added
Free sandbox calls and the error catalogue
Send x-gardenpatch-sandbox: 1 (or ?sandbox=1) and any coach, for any mode it serves, returns a schema-valid sample response marked sandbox: true. No wallet, no payment header, no charge, and its own smaller rate-limit bucket so free traffic cannot starve a paying caller. The error codes the API emits are published as one table on /docs/agents.
- added
Docs index at /docs
/docs, which every other surface linked to and which answered 404, now exists: what the API is, what a call costs, and every free endpoint that describes the paid one. Developer pages render prices and mode lists from the registry, and a build-time test fails when one types a number instead.
- fixed
Unowned modes refused before a price is quoted
Asking a coach for a mode it does not sell now returns 400 mode_not_supported, with the modes it does serve, before the payment layer runs. Previously the caller was quoted a price, signed a payment, and only then received the 400.
- pricing
Short tier repriced to clear the margin floor
The short (triage) tier's price rose so that its worst permitted call clears the same 80% gross-margin floor the deep and flagship tiers already met; those two are unchanged. The live price is on /docs/agents.
- changed
Per-tier input caps
Each tier now caps the characters of messages and context a call may carry, sized to what that tier's price pays for. An oversized request is refused with 400 input_too_large before a price is quoted, so it costs nothing, and the response names the cap. Current caps are on /docs/policies.
- added
Idempotent retries and receipts
A retried paid call settles once. Send an Idempotency-Key and an identical retry from the same wallet returns the original deliverable with Idempotent-Replay: true and no second charge; without a key, one is derived from wallet and body for a shorter window. Every settled call returns a receipt, retrievable free at /api/v1/receipts/{id} while it is stored. The windows are on /docs/policies.
- added
Specialty modes and the flagship tier
Ten specialty modes, each sold by exactly one coach, join the six shared modes, and a third price tier covers operating documents (an SOP, a capacity plan, a churn playbook, a stack decision, a role scorecard) whose deliverables are structurally larger. Which coach sells which mode is the routing table on /docs/agents; sending a mode to a coach that does not sell it is a 400, not a fallback.
- added
Discovery at /.well-known/x402
Machine-readable discovery for x402scan and other catalogs: /.well-known/x402 lists every coach and mode with its price, and /api/v1/openapi.json is generated from the schema registry, so an agent can find and price the API without reading a page.
- changed
Rate limits scoped to the paid endpoint
The agent API gets its own per-address window and its own daily inference ceiling instead of sharing the free in-app coach's guards, which had capped paid traffic at the level of a free product. Payment is the real rate limiter; these bound a runaway loop. The current values are on /docs/policies and /api/v1/status.
- changed
All seven coaches, priced from measured cost
Every specialist coach is callable, audit_function returns a scored audit, and each tier's price is derived from measured inference cost instead of picked. The live rate card is the modes table on /docs/agents.
- added
Base mainnet through Coinbase CDP
Settlement on Base mainnet is supported through the CDP facilitator. A mainnet deployment without CDP credentials refuses to quote at all rather than quoting a price the free testnet facilitator can never settle, and the network defaults to Base Sepolia so a misconfigured deploy cannot solicit real funds.
- added
Agent API v1
POST /api/v1/agents/{agent_id}/call opens: growth coaches callable by other agents, paid per call over x402 with no signup and no API key. The request and response contracts are zod schemas, published as JSON Schema per mode and as an OpenAPI 3.1 document, and /docs/agents is rendered from the same definitions the route validates against.
Deprecations
Nothing has been deprecated. When something is, it appears in this list and in the entries above at least 90 days before it stops answering, with what replaces it. The rule is on the policies page.
Something changed under you that is not recorded here? That is a bug in this page. Tell us with the receipt id and the date, and it gets an entry.