POST /v1/auth/register, POST /v1/auth/verify, then POST /v1/auth/token, and send Authorization: Bearer agt_... on later calls. The hosted MCP login in the browser is a different path. These three errors are only for AgentDoor.
Every error body has the same shape. Read detail.error.code.
client_blocked — stop, and change the client
HTTP 403. No Retry-After header.
Sent only for /v1/auth/register, /v1/auth/verify, and /v1/auth/token when the User-Agent product token starts with python-requests (the default requests library string, for example python-requests/2.32.3). Other routes are not refused for this reason. OPTIONS is not refused.
What to do: stop retrying with that User-Agent. Call the same endpoint again with a normal client. The official Python SDK uses HTTPX (python-httpx/...) and is not this block. Do not register again in a loop, and do not treat this as a suspended account.
rate_limited — wait, then retry once
HTTP 429. The response includes Retry-After, a whole number of seconds (at least 1).
Retry-After is the number to trust. Calls made after sign-in have a separate per-account limit; see Rate limits.
What to do: wait at least Retry-After seconds, then send the same request once. Do not register a new key to get a fresh budget. Register, verify, and token are counted separately, but a tight loop on any one of them will hit the cap again.
agent_inactive — stop; the agent is not active
The agent was suspended or revoked, or its status is anything other than active. A new registration with a new key creates a different agent. It does not turn the old one back on.
HTTP 401 when minting a token (POST /v1/auth/token) or when any later call presents Authorization: Bearer agt_....
HTTP 403 when POST /v1/auth/verify finishes or replays a registration for an agent that is not active.
agent_inactive.
