Permissions supports EVM, Solana, Cosmos, Stellar, and Sui wallets. The Developer Portal forms cover a subset of policy shapes; use JSON authoring or work with Para for other supported configurations. Each policy selects one wallet type and can narrow it to specific networks, and each rule names the actions it governs. Check the policy reference for the facts supported by each request.
Ordinary Guardrails allow or deny requests without asking for user consent. A policy with conditional approvals adds a separate approval flow. For user-owned SDK wallets, configure Requests: consent grants the application the standing access specified by the policy.
Configure a Guardrail
Create and test Guardrails against a Development API key in the Developer Portal:- Open Permissions and select Guardrails.
- Select Add, choose the networks, and optionally set a policy window.
- Add each transaction action you want to guard and the condition that defines its permitted boundary.
- Review the normalized policy and save it as a draft.
- Activate the draft, then test a transaction inside the boundary and one outside it.
Developer Portal actions
The Developer Portal walkthrough above exposes these EVM transaction actions:
For Solana, Cosmos, Stellar, and Sui policies, it exposes these actions:
The Developer Portal supports one authored condition per action. Advanced JSON policies can use other supported facts and nested conditions described in the Permissions Reference. Use authenticated CLI authoring on beta or contact Para for help with a policy beyond the Portal controls.
Enforcement behavior
For a Guardrail created with these Developer Portal forms, when the REST API receives a transaction signing request:- Para selects the active Guardrail policies that match the API key and transaction selector.
- Para evaluates the transaction action and its configured boundary.
- A transaction inside the boundary continues to signing.
- A transaction outside the boundary is rejected before signing.
- A transaction action that no active Guardrail covers remains allowed for the app-owned wallet.
Handle a denial
A policy denial returns an HTTP403 with the code POLICY_DENIED. No signature is created, no transaction is broadcast, and no pending user review is created. The response body names the denial:
ParaRestError.body. policyId and ruleId are present when a specific rule decided the outcome.
Handle a denial as an expected application-level rejection and log enough request context to identify the attempted action.
A Solana or Sui request whose
network field contradicts the network Para proves for the transaction returns 400 INVALID_REQUEST, not a policy denial. Correct the network value before sending it again.Conditional approvals
A matching conditional approval requirement pauses signing with an HTTP403 and the code POLICY_REVIEW_REQUIRED. No signature is produced while the requirement remains unsatisfied. The response body includes:
Eligible people authenticate and complete their approval through the user flow. The partner backend can inspect cases and administer allowed configuration, but cannot approve on a person’s behalf. After the case is approved, retry the original signing request; Para evaluates it again before signing.
Para keys each case to the request’s
Idempotency-Key, or to a hash of the payload when the request has no key. Retry with the same Idempotency-Key and an identical body to continue the case. A new key opens a new case, and the same key with a different transaction returns 409 CONFLICT.403 FORBIDDEN.
Authenticated approvals record people’s decisions. Signature-based requirements collect the configured wallet signatures; completing a case does not itself assemble or broadcast an onchain multisig transaction.
Manage permissions from your backend
Assign roles, bind wallet scopes, configure declared approval settings, and read approval cases.
Selectors and versions
The Portal selects current Guardrails by their complete network set. Ethereum + Base is the same selector regardless of order. Base only is a different selector, so it can have an independent Guardrail. Editing an active Guardrail for the same selector creates its next version and replaces the active version when you select Save changes. Editing a draft keeps the new version in draft. A different selector starts a separate Guardrail.Windowed spend limits
An amount condition can apply to each transaction or to cumulative spend over a fixed window. Cumulative limits are available for every wallet type. 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. Cumulative limits:- Use the asset’s base unit.
- Use a window of hours, days, or weeks in the Developer Portal, or a positive integer with
ms,m,h, ordin JSON. - Are scoped to the API key, wallet, network, asset, and window.
- Do not include gas or fees.
ERC-20 limits count direct
transfer(address,uint256) calls. They do not aggregate approvals, transferFrom, router calls, multicalls, non-transfer contract calls, or USD-normalized amounts.Production
Development and Production API keys do not share policy records. Creating a Production key does not copy or activate the tested Development Guardrail. Para reviews the active Development policy and independently publishes the approved production policy. The Production Permissions page is read-only.Permissions setup
Follow the Development draft, activation, testing, and production workflow.
Permissions reference
Review policy JSON, selectors, actions, conditions, and current limits.