The agent object
| Field | Type | Description |
|---|---|---|
id | string | Stable user-provided identifier. Unique within (account, mode). |
status | "no_permissions" | "active" | active once at least one wallet has authorized this agent. |
mode | "test" | "live" | Derived from the API key; can’t be changed after creation. |
created_at | ISO 8601 string | When the agent was first registered. |
active_signers | number | Non-revoked, activated signers across all wallets. |
pending_signers | number | Non-revoked signers awaiting the wallet owner’s passkey signature. |
POST /v1/agents
Create an agent if it doesn’t exist; no-op if it does. Idempotent — safe to call on every deploy.
Request
| Body field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Stable identifier, 1–64 chars. Must be unique within (account, mode). |
Response
201 Created:
Errors
| Status | type | When |
|---|---|---|
| 400 | validation_failed | id is missing, empty, or fails server-side format checks. |
| 401 | unauthenticated | API key is missing, invalid, or out of its rotation grace window. |
| 429 | rate_limited | Default bucket: 60 req/min per key exceeded. |
GET /v1/agents
List every agent in this (account, mode).
Request
Response
200 OK:
created_at ascending. Stable across calls.
Errors
| Status | type | When |
|---|---|---|
| 401 | unauthenticated | API key invalid. |
| 429 | rate_limited | Default bucket exceeded. |
GET /v1/agents/{id}
Retrieve a single agent by its public id.
Request
| Path param | Description |
|---|---|
id | The agent’s public identifier. URL-encode it (handled automatically by the SDK). |
Response
200 OK:
Errors
| Status | type | When |
|---|---|---|
| 401 | unauthenticated | API key invalid. |
| 404 | not_found | No agent with that id in this (account, mode). |
| 429 | rate_limited | Default bucket exceeded. |
Patterns
Register required agents at boot
BecausePOST /v1/agents is idempotent, the cleanest pattern is to declare the agents your service needs at startup:
Gate spend on status
agent.status === "active" means at least one wallet has authorized this agent. Use it as a gate before submitting payments:
Not yet exposed
DELETE /v1/agents/{id}— soft-delete an agent.GET /v1/agentswith cursor pagination — for accounts with hundreds of agents.GET /v1/agents/{id}/permissions— list active grants for an agent, with policy summary.