Agents
Register AI agent identities, submit Ed25519-signed payment intents, audit the log.
POST /api/agents
Bearer apk_ · write:agents · Idempotent · Live: KYB approved
{
"agentName": "research-assistant",
"description": "Reads + drafts research, pays for OpenAI + arxiv API calls",
"protocols": ["TAP", "MPP", "ACP"],
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\n..." // optional but recommended
}If publicKeyPem is provided, the server uses it directly and the private key never touches us.
If omitted, the server generates a keypair and returns the private key ONCE in the response.
GET /api/agents
Bearer apk_
List agents in the workspace.
PATCH /api/agents/[id]
Bearer apk_ · write:agents
{
"state": "frozen" // "active" | "frozen" | "terminated"
}terminated is irreversible.
POST /api/agents/[id]/intents
Bearer apk_ · write:agents
{
"intent": {
"agent_id": "agent_…",
"merchant": { "name": "OpenAI API", "mcc": "5734" },
"amount": { "currency": "USD", "cents": 1500 },
"intent_id": "uuid-…",
"iat": 1716200000,
"exp": 1716200300,
"protocol": "TAP"
},
"signature": "<base64url Ed25519 sig over canonical JSON>",
"key_id": "<base64url sha256 of public-key SPKI>"
}Errors:
401 signature_invalid— sig doesn't match registered public key401 intent_expired—expin the past401 intent_iat_future—iattoo far in the future422 intent_id_replay— duplicateintent_id
GET /api/agents/[id]/intents
Bearer apk_
Audit log — including invalid submissions with rejection_reason.