Skip to main content
Guardrail templates are tested policies for the app-owned wallets your backend signs with. Pick a scenario, adjust the addresses and amounts, and publish it on beta through the Developer Portal or the CLI. When it behaves as expected there, request a production review to apply it to production. A Guardrail restricts signing. Its rules deny a request or hold it for approval, and a request that no rule blocks signs as usual. When several active Guardrails cover the same wallet, all of them apply, and a block in any of them wins. Each template lists sample signing requests with one of three results: signs, denied, or needs approval. Your platform’s Permissions page shows what your backend receives for each. Raw signatures sign by default as well, and no transfer rule can read them. The message signing templates show how to block or hold them:
While Permissions is on, raw signatures follow the same defaults as other signing requests: an app-owned wallet signs them, and a user-owned wallet sends them to the user for review. Rules that name the raw_signature action, and rules with "actions": "all", can change that. Raw signatures are sign-raw requests, messages from Solana, Stellar and Sui wallets, and REST sign-message requests from a Cosmos wallet that do not pass walletType: "EVM". The SDKs sign messages from Cosmos wallets as EVM sign_message requests. Raw signatures carry no network a selector can name, so only a policy without chainId governs them. A rule that names raw_signature can read only para.wallet.* facts. The Developer Portal forms cannot create one, so write it in policy JSON, with Edit JSON in the Developer Portal or with the CLI.

Choose a scenario

Use a template

Every template comes with a JSON policy. Templates the Developer Portal forms can express also list the form steps. Publish each one on your Development key, which runs on beta, and test it there first.
Follow the template’s Developer Portal tab. A policy saved from the forms gets generated policy and rule IDs, and its JSON can differ in small ways that the template points out. Compare it with the Normalized policy JSON on the Review step before you select Save Draft.
If your key already has a policy of the same type on the same networks, the Developer Portal opens that policy for editing, and the page title changes to Edit Guardrail Policy or Edit Request Policy. The editor holds that policy’s JSON with the next version filled in. Merge the template’s rules into it and keep its id, selector and version, because pasting the template over it fails with policy_record_identity_conflict, policy_record_selector_conflict or policy_record_version_conflict. The button there is Save changes, and an active policy enforces the merged rules as soon as you save.

Conventions

The templates share a few conventions. Keep them when you adapt a template, or validation fails.

Amounts

Amounts are strings of whole base units, such as "1000000". A JSON number fails validation with value_type_mismatch.

Addresses

Para lowercases EVM addresses before it compares them, so checksummed and lowercase addresses match. The templates use lowercase, as the Developer Portal does. Other wallet types need each network’s canonical form: a Solana base58 key as is, a Stellar G… account in upper case, and a Sui 0x address with 64 lowercase hex characters.

Networks

chainId in the selector picks the networks a policy covers. Omit it to cover every network of the wallet type. A personal message and a raw signature carry no network, and the Para SDKs sign typed data and authorizations as messages, so the message signing templates leave chainId out. The treasury templates leave it out as well and check the network through each asset value, such as eip155:8453:native. The other templates use mainnets. To test with testnet funds, swap in the testnet everywhere the template names the network, including asset values and token addresses.

IDs, versions and windows

Give each policy an id your key does not use yet. IDs that start with para- are reserved.
  • Raise version when you publish a change to a policy.
  • window: "24h" is a fixed daily window that resets at 00:00 UTC, not 24 hours after the first transfer. The Developer Portal writes windows in hours, and 1d is the same window. A policy can use one window length per spend fact.
Production keys are read-only in the Developer Portal. Once a template behaves as expected on beta, request a production review from your Production key, and Para applies your active beta policies to production.