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.- Developer Portal forms
- Developer Portal JSON editor
- CLI
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 StellarG… 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 anid your key does not use yet. IDs that start with para- are reserved.
- Raise
versionwhen 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, and1dis 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.