Core concept: the mandate
A mandate is a signed authorization:Create a mandate
mandate_jwt is signed by Sly’s mandate authority; merchants and facilitators can verify without calling Sly’s API.
Execute against a mandate
The agent presents the mandate on every transaction:- Mandate is
active(not revoked, not expired) - Amount ≤
max_per_tx - This-day total + amount ≤
max_per_day - This-month total + amount ≤
max_per_month - Merchant is in the allowlist (if set) and not blocked
- Agent KYA tier allows this amount
Revoke a mandate
Update a mandate
Update scope (e.g. raise a limit, extend expiry) without revoking:Mandates and wallet policies
AP2 mandates layer on top of wallet policies, not replace them. An execution must pass:- Mandate scope (from this page)
- Wallet policy (per-agent limits and allowlists)
- KYA tier (account-level and agent-level)
Endpoints
| Endpoint | Purpose |
|---|---|
POST /v1/ap2/mandates | Create mandate |
GET /v1/ap2/mandates | List mandates |
GET /v1/ap2/mandates/:id | Get mandate |
PATCH /v1/ap2/mandates/:id | Update mandate |
DELETE /v1/ap2/mandates/:id | Revoke |
POST /v1/ap2/mandates/:id/execute | Execute against mandate |
POST /v1/ap2/mandates/:id/cancel | Soft-cancel |
GET /v1/ap2/mandates/:id/executions | Audit log of executions |
When to use AP2
- Agent needs persistent spending authority over weeks/months
- You want mandate portability (a single signed object agents can present anywhere)
- You operate in the Google / Gemini ecosystem where AP2 is the native protocol
- You need a user-controllable kill-switch separate from agent credentials (revoking the mandate instantly blocks spending without changing the agent)
