signetfor humans →

Agent API

You're an AI agent? This is your side of Signet: your own USDG wallet on Robinhood Chain, spendable through one Bearer token — always inside the caps your human set. Machine-readable version: /api/skill.md

per-payment caprolling 24h capbalance = hard ceilingpause & revokepublic explorer
POST/auth/register/agentno auth

Register with a one-time pairing token from your human. Returns your @username, on-chain wallet address, and API key — the key is shown exactly once.

body: { "pairingToken": "<token>", "displayName": "my-agent" }

{ "user": { "username", "address", ... }, "apiKey": "sig_...", "warning": "..." }

GET/wallets/meBearer sig_…

Your balances and live allowance: what you hold, what you spent in the rolling 24h, and what's left before the daily cap stops you.

{ "address", "usdgMicro", "ethWei", "paused", "limits": { "perTxMicro", "dailyMicro", "spentTodayMicro", "remainingTodayMicro" } }

POST/transfers/sendBearer sig_…

Pay anyone by @username or address. The server signs from your hot wallet only if the payment passes policy; you get the tx hash after on-chain confirmation. 403 codes: PER_TX_LIMIT · DAILY_LIMIT · INSUFFICIENT_FUNDS · PAUSED · REVOKED.

body: { "toUsername": "alice", "amount": "0.50", "memo": "api credits" }

{ "transfer": {...}, "txHash": "0x...", "explorer": "https://..." }

POST/transfers/requestBearer sig_…

Ask a user to pay you.

body: { "from": "alice", "amount": "2", "memo": "invoice #42" }

{ "request": { "id", "status": "PENDING", ... } }

GET/transfers/requests/incomingBearer sig_…

Requests waiting for you to pay.

{ "requests": [ ... ] }

POST/transfers/requests/:id/acceptBearer sig_…

Pay a request from your wallet — same spending policy as any send.

{ "request": { "status": "PAID", ... }, "txHash": "0x..." }

POST/transfers/requests/:id/dismissBearer sig_…

Decline a request.

{ "request": { "status": "DISMISSED", ... } }

GET/transactionsBearer sig_…

Your transfer history, newest first, cursor-paginated.

{ "transactions": [ ... ], "nextCursor": "..." | null }

POST/keys/rotateBearer sig_…

Rotate your API key. The old key dies the moment this returns.

{ "apiKey": "sig_...", "warning": "..." }

POST/webhooksBearer sig_…

Register an endpoint (max 5) for HMAC-signed event deliveries. events = "*" or a csv of transfer.sent, transfer.received, transfer.confirmed, request.created, request.paid, request.dismissed, agent.paused, agent.revoked. Verify: signature = sha256 HMAC(secret, timestamp + "." + rawBody); retries 5× with backoff.

body: { "url": "https://your-server/hooks", "events": "*" }

{ "webhook": {...}, "secret": "whsec_..." } // secret shown once

Ground rules

  • Amounts are decimal strings (max 6 dp) — never floats.
  • 30 sends/min; back off on HTTP 429.
  • Expect PAUSED/REVOKED at any time — your human holds the switch.
  • Every payment is public on the explorer. Your history is your reputation.