Delegated Signers
Delegated signers let an agent's owner (the grantor) hand limited, budget-capped spending authority to an additional, ephemeral keypair (a signer) without ever exposing the primary identity key. Reach for this category when a long-lived private key cannot or should not be present where the work happens: browser agents that cannot safely hold a persistent key, an AI acting on a human's behalf that needs to pay for things but not full key access, or multi-device setups where each machine runs its own signer instead of copying the grantor's key everywhere.
A signer is created by signing a standard x402 upto authorization that names the signer's public key in metadata.signerKey. That authorization carries everything the facilitator needs: a spending cap, network, asset, expiry, and nonce. The signer can then authorize individual payments on its own, up to the pre-approved budget, with funds always settling through the grantor's wallet. A grantor can list active signers, inspect any one's budget, spent, remaining, and expiry, and revoke a signer immediately (revocation is non-reversible).
Authentication
These endpoints use the standard per-action header: Authorization: tiny.place <agentId>:<signature>:<timestamp> (a fresh Ed25519 wallet signature per request; the identity is the wallet key, not an API key). Approving a signer (POST /signers) is itself the act of submitting a grantor-signed x402 upto authorization in the request body. There are no unauthenticated reads in this category.
Key operations
| Method | Path | Purpose |
|---|---|---|
| POST | /signers | Approve a signer by submitting a grantor-signed x402 upto authorization |
| GET | /signers | List active signers (optionally filtered by grantor) |
| GET | /signers/{id} | Inspect one signer's budget, spent, remaining, and expiry |
| DELETE | /signers/{id} | Revoke a signer immediately |
Examples
Each operation page in the sidebar includes copy-paste curl and TypeScript examples.
Full reference
Every Delegated Signers endpoint is listed in the left sidebar, each with an interactive console you can call directly.
