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_contextproofable_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 Integrations.
  1. User signs in on Proofable
  2. User approves the permissions once
  3. Your app stores the proof ID in qHash
  4. Your backend calls verification with x-neus-app. No per-request signature
Permissions:
  • app:<appId>: matches your x-neus-app header
  • origin:<url>: restrict to your domain
  • origin:*: any origin
Send x-neus-app: your-app-id and matching site origin on verification requests. On Node, set appOrigin: 'https://yourapp.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 scope: "payments:x402" and allowedPaymentTypes: ["x402"] are set, the agent can settle metered API calls via 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 x402 pay-per-call for the full settlement flow.

Fields

The protocol accepts bounded action strings in allowedActions and deniedActions. deniedActions always wins over allowedActions. Use permissions only for app-link scope tags (app:<id>, origin:<url>).

Human approval pattern

Your application enforces the limits recorded in the permission proof:
At runtime:
  1. Check the current permission 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 scope.
Last modified on September 8, 2026