agent-delegation
controllerWallet is the approving account, the address that signs this step. See Agent concepts.
Setup
1
Check
proofable_context → proofable_agent_link2
Create
proofable_agent_create. Leave out controllerWallet when the signed-in profile account should approve.3
Confirm
proofable_agent_link until linked: trueSDK
controllerChainRef, agentChainRef) unless the request already includes chain or chainId.
App link
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.- User signs in on Proofable
- User approves the delegation once
- Your app stores the proof ID in
qHash - 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:- Check the current delegation proof before the tool call.
- Apply
deniedActionsfirst. - Pause when the policy requires human approval.
- Continue only after approval is confirmed.
agent-delegation.json.
Result
A proof ID returned inqHash. 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
expiresAt and maxSpend when money or high-risk actions are in play.