KEY_ID with your beta API key ID and RECORD_ID with the policy.recordId that create returns. The Portal shows the policy it generates in the JSON Preview tab.
Amounts are integer strings in base units, not decimal token amounts. ETH uses wei, so 1 ETH is
1000000000000000000. USDC has 6 decimals, so 1 USDC is 1000000.Cap native spending
Deny ETH transfers on Base above 0.1 ETH in one transaction or above 1 ETH in a 24-hour window. Use it to limit how much a compromised or misbehaving backend can move.- Developer Portal
- CLI
- Open Permissions, select the Guardrails tab, and select Add. Once the key has a Guardrail, the button is New Guardrail.
- Enter a Guardrail Policy Name, select Base (8453) under Networks, and select Continue.
- Select Transfer ETH, then Add Condition: Transaction amount, is at most,
0.1, ETH, per transaction. - Select Add Action, select Transfer ETH again, and add a condition: Transaction amount, is at most,
1, ETH, per time window,24, hours. - Select Review, then Save Draft. Activate the draft from the Drafts list.
gt.
Spending limits cover native transfers on every wallet type and token transfers on EVM (ERC-20), Solana, Cosmos, and Stellar. Sui limits cover native transfers only. A token limit counts only the asset it names. Each network and asset has its own budget, so a limit of 1 ETH per day on Ethereum and Base allows 1 ETH per day on each network. Amounts Para cannot decode do not count toward a limit. Smart account user operations do not count toward EVM limits, except ERC-20 transfers sent through Para gas sponsorship.
chainId to a list such as ["1", "8453"]. For Solana, Cosmos, Stellar, or Sui, use the Native transfer action in the Portal.
Cap daily USDC transfers
Deny USDC transfers on Base once the wallet would send more than 1,000 USDC in a 24-hour window. USDC on Base is0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913.
- Developer Portal
- CLI
- Open Permissions, select the Guardrails tab, and select Add or New Guardrail.
- Enter a Guardrail Policy Name, select Base (8453) under Networks, and select Continue.
- Select Transfer tokens and enter the USDC address in Contract Address. Function Name is fixed to
transfer. - Select Add Condition: Transaction amount, is at most,
1000000000token base units, per time window,24, hours. - Select Review, then Save Draft. Activate the draft from the Drafts list.
transfer(address,uint256) calls; see Windowed spend limits for what it excludes. On Solana, Cosmos, and Stellar, use the Token transfer action and enter the asset in Token Asset. Sui has no token transfer action.
Allow only approved recipients
Deny ETH transfers on Base to any address outside an allowlist. Use it when the wallet should only pay addresses you already know.- Developer Portal
- CLI
- Open Permissions, select the Guardrails tab, and select Add or New Guardrail.
- Enter a Guardrail Policy Name, select Base (8453) under Networks, and select Continue.
- Select Transfer ETH, then Add Condition: Recipient address, is one of, and the approved addresses separated by commas.
- Select Review, then Save Draft. Activate the draft from the Drafts list.
Allow only an approved contract
Deny contract calls on Base unless they calldeposit on one approved contract. Use it when the wallet should interact with a single protocol function.
- Developer Portal
- CLI
- Open Permissions, select the Guardrails tab, and select Add or New Guardrail.
- Enter a Guardrail Policy Name, select Base (8453) under Networks, and select Continue.
- Select Call a contract. Enter the contract in Contract Address and
depositin Function Name. No condition is needed. - Select Review, then Save Draft. Activate the draft from the Drafts list.
call_contract action. ERC-20 transfers and approvals, Safe transactions, and deployments are separate actions. On Solana, Cosmos, Stellar, or Sui, use the Execution target action in the Portal.
Require approval above a threshold
Hold ETH transfers on Base above 1 ETH until one person with theapprover role approves them. Smaller transfers sign without review. The Developer Portal forms cannot express approval requirements, so create this policy with the CLI.
Para enables conditional approvals per app. Until then, validating this policy returns a
permissions_v2_extension_unavailable error, and the approval administration endpoints return 403 PERMISSIONS_V2_EXTENSION_UNAVAILABLE.guardrail-approval-threshold.json
approver role to at least one user and bind the wallet to the authorization scope. A transfer above the threshold returns 403 POLICY_REVIEW_REQUIRED with an approvalCaseId. Retry it after approval as described in Conditional approvals.
To require more people or several stages, extend stages as shown in Conditional approval requirements. Guardrails accept only authenticated_approval evidence.
Allow Solana message signing
Allowsign-message and sign-raw requests from app-owned Solana wallets.
While Permissions is on, Para denies raw signatures for app-owned and user-owned wallets unless an active policy that applies to the wallet has a rule allowing the raw_signature action. Raw signatures include sign-raw requests and message signing from wallets that cannot sign as EVM, such as Solana, Stellar, and Sui wallets. The Developer Portal forms cannot create this rule; use JSON authoring.
guardrail-solana-message-signing.json
raw_signature rule can read only para.wallet.* facts. The condition para.wallet.hasUserOwner equals false holds for every app-owned wallet, and a Guardrail applies only to app-owned wallets. As a result, the rule allows raw signatures from every Solana wallet the selector covers. Add walletId to the selector to limit it to specific wallets.
To allow raw signatures for another wallet type, set walletType to COSMOS, STELLAR, SUI, or EVM, which covers sign-raw requests. A policy governs one wallet type, so write one policy per wallet type.