Agent wallets
Give every agent its own wallet, key and spend limits. Agents pay per token from their own balance, with no cards, no invoices and no humans in the loop.
Why agent wallets
One shared key works until an agent loops. Agent wallets isolate spend: each agent has its own balance, limits and audit trail, funded from the team wallet or from any on-chain address.
Create an agent
curl https://api.topolabs.ai/v1/agents \ -H "Authorization: Bearer $TOPO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "support-triage", "fund": { "amount": "50.00", "currency": "usdt" }, "limits": { "daily": "10.00", "per_request": "0.25" } }'from topolabs import Topo topo = Topo() agent = topo.agents.create( name="support-triage", fund={"amount": "50.00", "currency": "usdt"}, limits={"daily": "10.00", "per_request": "0.25"},) print(agent.key) # tp_agent_…import { Topo } from "@topolabs/sdk"; const topo = new Topo(); const agent = await topo.agents.create({ name: "support-triage", fund: { amount: "50.00", currency: "usdt" }, limits: { daily: "10.00", per_request: "0.25" },}); console.log(agent.key); // tp_agent_…{ "object": "agent", "id": "agt_support_triage", "key": "tp_agent_4c1d…77ab", "wallet": "0x2b9e…41f0", "balance": "50.00", "limits": { "daily": "10.00", "per_request": "0.25" }, "status": "active"}Limits
limits.dailystring (USDT)Maximum spend per UTC day.
limits.monthlystring (USDT)Maximum spend per calendar month.
limits.per_requeststring (USDT)Reject any single request whose estimated cost is higher.
limits.modelsstring[]Allow list of model IDs the agent may call.
Default: every model
expires_atstring (ISO 8601)Freeze the agent and its key at this time.
Signed requests
Agents that hold their own wallet can skip API keys and sign every request. Send the address, a timestamp and an EIP-191 signature over the timestamp and the SHA-256 of the body.
curl https://api.topolabs.ai/v1/chat/completions \ -H "X-Topo-Wallet: 0x2b9e…41f0" \ -H "X-Topo-Timestamp: 1792142596" \ -H "X-Topo-Signature: 0x9d0f…e3c1" \ -H "Content-Type: application/json" \ -d @request.jsonRevoke an agent
Revoking freezes the key immediately and returns the remaining balance to the team wallet in the next settlement batch.
curl -X DELETE https://api.topolabs.ai/v1/agents/agt_support_triage \ -H "Authorization: Bearer $TOPO_API_KEY"