anonymous
→ user-claimed flow. An agent registers an unclaimed personal account on a
person’s behalf and receives an abu_ personal API key immediately. The human
then claims the account with a 6-digit code emailed to them, binding their
verified email to the account. After the claim, the agent manages that person’s
credentials through the normal items and
profiles surface.
These endpoints live at the root of the API host (not under
/v1) and are
all unauthenticated. The issued credential is a standard personal API key
(abu_): a management-surface session bound to the new account. It can never
reach the agent-gated access surface
— it cannot reveal or mount secret values.Base URL
Discovery
Discovery is two-hop, per RFC 9728. A401 from any route carries a WWW-Authenticate header pointing at the
protected-resource metadata, so an agent can bootstrap from a single failed
request:
The flow
1
Register anonymously
POST /agent/auth provisions an unclaimed personal account (a
placeholder-email owner, an org, and a default server_managed profile) and
returns an abu_ credential plus a clm_ claim token. The credential
authenticates immediately but the account stays inert until it is claimed.2
Start the claim
POST /agent/auth/claim with the human’s email. abadge emails them a
6-digit code. The agent asks the human for that code.3
Complete the claim
POST /agent/auth/claim/complete with the code. abadge binds the human’s
verified email to the account in place and upgrades the credential’s scopes.4
Use the credential
Send
Authorization: Bearer abu_.... The agent can now read and manage the
person’s vault through the normal management surface.Register
string
default:"anonymous"
Identity type. Only
anonymous is supported.string
default:"api_key"
Credential type. Only
api_key is supported.string
Opaque registration identifier.
string
Always
anonymous.string
Always
api_key.string
The
abu_ personal API key. Shown once — store it now.null
Personal API keys do not expire on their own; the owner revokes them.
string[]
Pre-claim scopes (
abadge:account.read).string
The URL to call for the claim step.
string
A
clm_ token. Pass it to both claim calls. Expires after 24 hours.string
ISO 8601 expiry of the claim token.
string[]
Scopes granted after a successful claim (
abadge:account.read, abadge:account.manage).Start the claim
string
required
The
clm_ token from registration.string
required
The human owner’s email. abadge sends a 6-digit code here.
string
The registration being claimed.
string
Identifier for this claim attempt.
string
Always
initiated.string
ISO 8601 expiry of the emailed code (10 minutes).
Complete the claim
string
required
The same
clm_ token.string
required
The 6-digit code the human received by email.
string
The claimed registration.
string
Always
claimed. The credential’s scopes are upgraded in place.Limits and lifetimes
Errors
This surface returns the standard{ code, message, hint, meta }
error envelope. The auth.md-specific codes are:
Revocation
There is no agent-facing revoke. The account owner revokes the agent’s credential from the dashboard; a revoked credential then returns401.