Skip to main content
Set spend and action limits for an agent. A signed-in-profile agent can act after identity is on file. A separate spend account also needs this permission record. The record shows who approved the agent, what it may do, how much it may spend, and when access expires. Verifier ID: agent-delegation controllerWallet is the approving account, the address that signs this step. See Agent concepts.

Setup

1

Check

proofable_context → proofable_agent_link
2

Create

proofable_agent_create. Leave out controllerWallet when the signed-in profile account should approve.
3

Confirm

proofable_agent_link until linked: true
Or finish on Proofable via hosted verify.

SDK

Both accounts need a CAIP-2 network reference (controllerChainRef, agentChainRef) unless the request already includes chain or chainId. One-time user approval lets your backend create proofs without asking for a signature on every request. This is different from creating a listing in your profile for hosted verification. See Server integrations.
  1. User signs in on Proofable
  2. User approves the delegation once
  3. Your app stores the proof ID in qHash
  4. Your backend calls verification with x-proofable-app. No per-request signature
agentId matches your x-proofable-app header. allowedOrigins lists the exact web origins your app may act from; use "*" for server-to-server callers with no browser origin. Send x-proofable-app: your-app-id and matching site origin on verification requests. On Node, set appOrigin: 'https://app.example.com' on ProofableClient (or pass Origin via extraHeaders).

Payment limits

maxSpend is a whole-number string in token base units. For USDC (6 decimals), 25 USDC = "25000000". Use toAgentDelegationMaxSpend('25', 6) from @proofable/sdk. When allowedActions includes make_payment, allowedPaymentTypes and maxSpend are both required. The agent can then settle metered API calls via the allowed rails, such as x402, without a Proofable account. The calling application enforces the maxSpend cap client-side before signing each payment. The protocol does not decrement maxSpend server-side. When the cap is exhausted, the application stops signing payments and the agent is refused. See Pay per call for the full settlement flow.

Fields

The protocol accepts canonical action strings only in allowedActions and deniedActions. deniedActions always wins over allowedActions, and an empty allow-list grants nothing.

Human approval pattern

Your application enforces the limits recorded in the delegation proof:
At runtime:
  1. Check the current delegation proof before the tool call.
  2. Apply deniedActions first.
  3. Pause when the policy requires human approval.
  4. Continue only after approval is confirmed.
Schema: agent-delegation.json.

Result

A proof ID returned in qHash. Read that exact record with proofable_proofs_get. Use proofable_proofs_check only when you need a yes/no eligibility decision before an action.

Revoke

Set expiresAt and maxSpend when money or high-risk actions are in play.
Last modified on October 5, 2026