Neither replaces wallet-owner consent for user-owned wallets. A server secret manages authority and configuration; it cannot impersonate a person’s approval or wallet signature.
Configure the workflow
Author arequire_approval rule through the CLI or work with Para. The JSON reference includes an ordered three-stage EVM treasury requirement: two finance reviewers, one compliance reviewer, then every eligible owner.
For that treasury, your backend binds the wallet to an authorization scope and assigns the corresponding roles to Para users. Provision distinct people across stages: a person counts only once in a case, and an authenticated initiator cannot approve their own request. A simple M-of-N workflow uses one stage with a numeric count; unanimous approval uses requiredApprovals: "all".
Configure trusted approval authority
Bind wallets, assign roles or attributes, and manage declared configuration from your backend.
Track the initiator’s request
Submit the transaction through the existing signing integration. A matching authenticated approval requirement creates a case tied to that exact request. App-owned REST signing can reportPOLICY_REVIEW_REQUIRED with an approvalCaseId; the user SDK integration also exposes case discovery for the authenticated initiator.
Let an approver act
The signed-in approver discovers cases they can access:rejectApprovalCase(caseId) for rejection. Para checks the authenticated user, current eligibility, stage, and case state on each mutation. Display returned capabilities and status rather than trusting role names in browser state.
Stages progress in order; eligible decisions within a stage may arrive in any order. Eligibility is snapshotted as a stage opens. A rejection ends the case. Expiry or changes to the relevant policy, authority, or request can prevent the case from authorizing signing.
Continue signing
A completed authenticated case is approval evidence, not a signature response. Continue or retry the original operation through its signing integration. Para rechecks current policy and authorization before signing; the case does not grant blanket permission for another transaction. Keep the user’s transaction review and consent separate from other people’s approval decisions. Never display “transaction sent” merely because the approval case completed.Collect transaction signatures
For a policy withevidence: "transaction_signature", initiate a collection using the original encoded transaction. Para derives the signing context; the client does not supply trusted policy facts.
getApprovalSigningPayload(caseId) and submit through submitApprovalSignature(caseId, { walletId, signature }). Sign the exact returned payload with the required encoding; signing an arbitrary message with the same case ID is not equivalent.
After the case completes, the collection initiator retrieves the signature bundle using their authenticated client. Other participants cannot retrieve it. The case must remain unexpired and valid against the current authorization context.
Sui multisig signer
Read the existing chain-specific signer contract before assembling a Sui multisig transaction.
Signature lifecycle methods
Inspect the payload, signatures, and supported result types.
Let authorized managers adjust a workflow
A policy may expose named settings throughsafeKnobs. Use the authenticated manager’s capabilities to determine what their UI can offer:
reference contains authorizationScopeId, policyId, policyVersion, and requirementId. Use effective.configuration?.revision ?? 0 as expectedRevision when calling updateApprovalConfiguration. A null configuration means the authored defaults apply and no settings have been saved yet. Only declared settings may change; the manager cannot add arbitrary stages or assign themselves a role. Backend assignment management is a separate authority.
These workflow settings are also separate from personal spending parameters. A policy can use both: the user chooses their amount limit, while authorized managers configure the declared approval workflow.
React hooks
Read cases, submit decisions, and update configuration with React hooks.
Policy lifecycle
Handle version changes, expiry, and production publication.