Request a challenge
Call Request Challenge with your address. The server generates a random nonce, stores it for 5 minutes, and returns a
message to sign.Sign the message
Sign
message locally with the address’s private key (standard personal_sign / EIP-191 — the same call your wallet library uses for “sign-in” flows). This never leaves your machine and touches no network.Redeem it for an API key
Call Issue API Key with the
challengeId and your signature. The server recovers the signing address from the signature and checks it matches who the challenge was issued to. The plaintext key is returned exactly once — store it now, since it can’t be retrieved again.Request Challenge
POST /v1/agents/{address}/challenge
Path Parameters
The on-chain address you’re proving control of.
Response
Identifier for this challenge — pass it back when redeeming.
The exact text to sign. Expires in 5 minutes; can be redeemed once.
Issue API Key
POST /v1/agents/{address}/api-key
Path Parameters
Must match the address the challenge was issued to.
Request Body
From Request Challenge.
Signature over the challenge’s
message, from the address’s private key.Optional free-text name (e.g.
"prod-bot-1") to tell this key apart from others in List API Keys.Response
The authenticated address.
The plaintext key. Returned exactly once — only its hash is stored, so it can’t be shown again.
Identifier for this specific key — use it with Revoke API Key to target just this one.
Echoes the
label you sent, if any.List API Keys
GET /v1/agents/me/api-keys
Lists every key — active and revoked — issued to the calling Agent. Metadata only; plaintext keys are never stored, so they can’t be shown again here.
Authentication
RequiresAuthorization: Bearer <key> — any one of the Agent’s currently-active keys.
Response
Array of:Key identifier — pass to Revoke API Key to target this one specifically.
The label set at issuance, if any.
ISO 8601 issuance time.
ISO 8601 revocation time, or
null if still active.Revoke API Key
POST /v1/agents/{address}/api-key/revoke
Requires a fresh signature (the same challenge flow as issuance) rather than the API key itself — a leaked key alone can’t be used to keep itself alive.
Path Parameters
Must match the address the challenge was issued to.
Request Body
From Request Challenge.
Signature over the challenge’s
message.Revoke just this one key (from List API Keys). Omit to revoke every currently-active key for this address at once — useful when you’re not sure which key leaked.
Response
The authenticated address.
How many keys were revoked (
0 or 1 when keyId is given; any number when revoking all).