Skip to content

Revocation ​

Pick the narrowest control that stops the problem. All of them stop new authority at once on the hosted gateway and API; customer-hosted gateways learn of them on their next bundle (within the 300-second freshness window, see Relay and status freshness).

You want to stopUseWho can
One key or workload identityRevoke the credentialagent.write on the tenant
One agent's access to one serviceRevoke the grantgrant.write on the tenant
Everything one agent doesSuspend the agentagent.write on the tenant
An agent, key, grant, tenant, service or project across the org, nowOpen an incident with emergency deniesincident.respond on the org (Control)

Revoke a credential ​

http
POST /v1/agents/{agent_id}/credentials/{credential_id}/revoke
content-type: application/json

{ "reason": "Key file copied to an unmanaged laptop" }
  • The credential becomes revoked and every access token issued with it is revoked immediately. The next call with such a token fails with 401 invalid_token (credential_revoked).
  • The agent ID, its grants and its pending actions are untouched. Bind a new key (see Registering and admitting agents) and the agent continues; it may resume its own approved actions with the new key.
  • A resume of an action that was submitted with the revoked credential is refused: the action becomes revoked (credential_revoked). The agent must submit again with its new credential.
  • For a certificate-backed credential Axiom also asks the CA to revoke the certificate by serial. This is best effort: a CA outage never blocks revoking the credential in Axiom, which is what stops new authority; the failure is logged for follow-up. (In SCM mock mode the revocation goes to the local development CA.)

Revoke a grant ​

http
POST /v1/grants/{grant_id}/revoke
content-type: application/json

{ "reason": "Customer ended the pilot" }

The grant and every descendant (delegated child grants) are revoked; the response lists the revoked IDs. A child grant is also unusable if any ancestor is revoked, suspended or expired, even before the tree walk reaches it.

Suspend an agent ​

http
POST /v1/agents/{agent_id}/status
content-type: application/json

{ "status": "suspended", "reason": "Investigating unexpected refunds" }

All of the agent's tokens are revoked; token requests are refused (agent_suspended); submits and status reads with an old token fail. Reactivate with "status": "active" and a reason. "retired" is permanent.

Emergency deny (Control) ​

An incident (POST /v1/orgs/{oid}/incidents, console Incidents at /control/orgs/:oid/incidents) publishes emergency denies against agents, credentials, grants, tenants, services or projects, optionally suspending org-owned agents and revoking grants. Agent and tenant targets also deny their grants, so delegates holding descendant grants are blocked. An identity outside your org cannot be suspended; it is contained by denying its grants on your services. Denies are lifted only by releasing the incident with a recorded reason, and release never reactivates agents. See the safe release runbook.

What happens to work in flight ​

Action state when you revokeWhat happens
pending_approvalStays pending; approvers may still decide. When the agent resumes, the recheck closes it as revoked (or denied). Nothing executes.
approvedThe resume recheck closes it as revoked (grant_revoked, agent_suspended, credential_revoked or emergency_deny).
executing, outcome_unknownAlready dispatched under the old authority. Revocation is recorded separately; the operation is still reconciled with the provider by operation key, and the receipt records what the provider confirmed.
succeeded, failedUnchanged. Receipts stay verifiable: retired and revoked keys remain published, marked with their status.

The incident detail screen lists in-flight actions and previously dispatched work separately from the local block, so you can see what revocation could and could not stop. A provider that must undo a committed write does so in its own system; Axiom never sends a compensating request.

Developer preview. Contract version 2026-11-14.