Errors
Every refusal is an RFC 9457 problem with a stable code and what to do next.
Every refusal is an RFC 9457 problem, application/problem+json, with a stable code an agent acts on and a resolution that says what to do next.
{
"type": "about:blank",
"status": 404,
"title": "Not Found",
"code": "not_found",
"detail": "No story on the wire has the id k57abc.",
"resolution": "Take an id from GET /api/v1/stories; a story leaves the wire after 30 days."
}The public API
| Status | code | When |
|---|---|---|
400 | invalid_parameter | A parameter's value its schema refuses; detail names it |
404 | not_found | No story has the id, or it has left the wire |
404 | api_route_not_found | A path under /api/v1 that is no operation |
405 | method_not_allowed | Any method but GET on a read; Allow says so |
429 | rate_limit_exceeded | Over 60 requests a minute for each IP address, 30 of them at once; Retry-After says when to retry |
503 | read_failed | The read behind the answer failed; retry shortly |
The site and the MCP servers
| Status | code | When |
|---|---|---|
401 | sign_in_required | A script's request for an /api/ route that needs a session, not signed in |
404 | not_found | A path the site does not serve, not signed in; in Markdown or JSON if the request asks |
401 | The workspace's MCP server with no valid token: an OAuth challenge naming its metadata (https://terminal.cloud.wavo.me/.well-known/oauth-protected-resource) | |
429 | rate_limit_exceeded | The public MCP server's tool calls over their bucket |
A tool's refusal — a story that is gone, a call the person may not make — comes back in the tool's result, in words that say why and what to do instead.