A policy got triggered upon some activity (the policy rule got evaluated, and it triggered).
policy.triggered Show child attributes
Show child attributes
Show child attributes
Active, Archived Registry:Addresses:Modify This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.
This action means that activity will first require an Approval process to be completed before it can be executed (or be aborted if someone rejects it during the approval process).
One or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.
The activity will only be executed if all approver groups reach their "quorum" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.
The example below shows a RequestApproval action, configured with one approval group requiring 2 approvals amongst three specific users.
{
"action": {
"kind": "RequestApproval",
"autoRejectTimeout": 60, // minutes
"approvalGroups": [
{
"name": "Admins",
"quorum": 2, // only 2 approvers required in that group
"approvers": {
"userId": {
"in": ["us-...1", "us-...2", "us-...3"],
}
}
}
],
}
}Don't lock yourself up
By default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set initiatorCanApprove: true.
Example 1: For any wallet transfer, a policy is setup to require approval from 1 specific admin user (eg. the CEO). initiatorCanApprove was not set to true. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.
Example 2: Company has only 3 users. A policy is setup to require approval from any 3 users (quorum: 3) for any modification of a policy. initiatorCanApprove was not set to true. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.
Show child attributes
RequestApproval 1Show child attributes
x >= 1Whether the initiator of the activity can participate in the approval.
x >= 1A "`Wallets:Sign`" activity represents any activity which involves signing with a wallet. Currently, in our API, these can be:Show child attributes
Wallets:Sign Show child attributes
Algorand, AlgorandTestnet, Aptos, AptosTestnet, ArbitrumOne, ArbitrumSepolia, AvalancheC, AvalancheCFuji, BabylonGenesis, BabylonTestnet5, Base, BaseSepolia, Berachain, BerachainBepolia, Bitcoin, BitcoinSignet, BitcoinTestnet3, BitcoinCash, Bob, BobSepolia, Bsc, BscTestnet, Canton, CantonTestnet, Cardano, CardanoPreprod, Celo, CeloAlfajores, Codex, CodexSepolia, CosmosHub4, CosmosIcsTestnet, Dogecoin, Ethereum, EthereumGoerli, EthereumSepolia, EthereumHolesky, EthereumHoodi, FantomOpera, FantomTestnet, FlareC, FlareCCoston2, FlowEvm, FlowEvmTestnet, Hedera, HederaTestnet, Ink, InkSepolia, InternetComputer, Ion, IonTestnet, Iota, IotaTestnet, Kaspa, Kusama, KusamaAssetHub, Litecoin, Near, NearTestnet, Optimism, OptimismSepolia, Origyn, Plasma, PlasmaTestnet, Plume, PlumeSepolia, Paseo, PaseoAssetHub, Polkadot, PolkadotAssetHub, Polygon, PolygonAmoy, Polymesh, PolymeshTestnet, Race, RaceSepolia, SeiAtlantic2, SeiPacific1, Solana, SolanaDevnet, Starknet, StarknetSepolia, Stellar, StellarTestnet, Sui, SuiTestnet, Tsc, TscTestnet1, Tezos, TezosGhostnet, Ton, TonTestnet, Tron, TronNile, Westend, WestendAssetHub, XrpLedger, XrpLedgerTestnet Transfer the native token of the network. All networks support the native token type.
Show child attributes
Native The destination address.
The amount of native tokens to transfer in minimum denomination.
The memo or destination tag. Stellar, TON and XrpLedger support memo. Not valid for other networks.
The priority that determines the fees paid for the transfer. All EVM compatible networks and Bitcoin support priority. Not supported for other networks. It uses the estimate fees API to calculate the transfer fees. When not specified, defaults to Standard priority.
Slow, Standard, Fast Whether to create the destination account on chains that require account creation (e.g., Stellar). Only valid for chains that require the receiver account to exist before transfer.
Optional field for Canton, if true it will create a transfer offer.
Optional field for Canton, especially useful in the context of offers
A travel rule payload to associate with the transfer. (read more here)
Show child attributes
Notabene Show child attributes
Show child attributes
Pending, Executing, Broadcasted, Confirmed, Failed, Rejected Show child attributes
Algorand, AlgorandTestnet, Aptos, AptosTestnet, ArbitrumOne, ArbitrumSepolia, AvalancheC, AvalancheCFuji, BabylonGenesis, BabylonTestnet5, Base, BaseSepolia, Berachain, BerachainBepolia, Bitcoin, BitcoinSignet, BitcoinTestnet3, BitcoinCash, Bob, BobSepolia, Bsc, BscTestnet, Canton, CantonTestnet, Cardano, CardanoPreprod, Celo, CeloAlfajores, Codex, CodexSepolia, CosmosHub4, CosmosIcsTestnet, Dogecoin, Ethereum, EthereumGoerli, EthereumSepolia, EthereumHolesky, EthereumHoodi, FantomOpera, FantomTestnet, FlareC, FlareCCoston2, FlowEvm, FlowEvmTestnet, Hedera, HederaTestnet, Ink, InkSepolia, InternetComputer, Ion, IonTestnet, Iota, IotaTestnet, Kaspa, Kusama, KusamaAssetHub, Litecoin, Near, NearTestnet, Optimism, OptimismSepolia, Origyn, Plasma, PlasmaTestnet, Plume, PlumeSepolia, Paseo, PaseoAssetHub, Polkadot, PolkadotAssetHub, Polygon, PolygonAmoy, Polymesh, PolymeshTestnet, Race, RaceSepolia, SeiAtlantic2, SeiPacific1, Solana, SolanaDevnet, Starknet, StarknetSepolia, Stellar, StellarTestnet, Sui, SuiTestnet, Tsc, TscTestnet1, Tezos, TezosGhostnet, Ton, TonTestnet, Tron, TronNile, Westend, WestendAssetHub, XrpLedger, XrpLedgerTestnet Signs an unsigned transaction and broadcasts it to chain. For EVM transactions, you may use JSON objects:
| Field | Description | Type - Optional |
|---|---|---|
| type | Ethereum transaction type. 0 for legacy transaction; 2 for EIP-1559 transaction; 4 for EIP-7702 transaction. Default is 2 if undefined. | Integer (optional) |
| to | The destination address or target contract. Leave undefined when the transaction is a contract deployment. | String (optional) |
| value | The amount of native tokens to transfer in minimum denomination. | String (optional) |
| data | ABI encoded function call data in hex format. Can also be the encoded smart contract data when the transaction is a contract deployment. | String (optional) |
| nonce | The transaction number to guarantee idempotency. If omitted, it will be provided automatically. Note the same nonce can be submitted multiple times with a higher maxFeePerGas to "overwrite" existing transactions in the mempool. | Integer or String (optional) |
| gasLimit | The maximum amount of gas that can be spent for executing the transaction. If omitted, it will be calculated automatically. | String (optional) |
| gasPrice | The amount of per unit gas. Only valid for a type 0 legacy transaction. If omitted, it will be calculated automatically. | String (optional) |
| maxFeePerGas | The maximum amount of per unit gas willing to be paid for the transaction. Valid for type 2 and type 4 transactions. If omitted, it will be calculated automatically. | String (optional) |
| maxPriorityFeePerGas | The maximum amount of per unit gas to be included as a tip to the validator. Valid for type 2 and type 4 transactions. If omitted, it will be calculated automatically. | String (optional) |
| authorizationList | A list that indicates what code the signer of each authorization desires to execute in the context of their EOA. Only valid for type 4 transaction. | Authorization (optional) |
For Starknet transactions, you may use invocation request objects:
| Field | Description | Type - Optional |
|---|---|---|
| calls | Array of contract calls to execute. Each element contains: | Array (required) |
| ↳ calls[0].contractAddress | The target contract address | String (required) |
| ↳ calls[0].entrypoint | The function name to call | String (required) |
| ↳ calls[0].calldata | Parameters for the function call | Array of Strings (optional) |
| nonce | Transaction nonce. If omitted, will be determined automatically. | String/Number/BigInt (optional) |
| resourceBounds | Gas bounds for L1 and L2. If omitted, will be estimated automatically. | Object (optional) |
| ↳ resourceBounds.l1Gas | L1 gas configuration with maxAmount and maxPricePerUnit | Object (optional) |
| ↳ resourceBounds.l2Gas | L2 gas configuration with maxAmount and maxPricePerUnit | Object (optional) |
| ↳ resourceBounds.l1DataGas | L1 data gas configuration with maxAmount and maxPricePerUnit | Object (optional) |
| tip | Transaction tip. Defaults to 0 if omitted. | String/Number/BigInt (optional) |
{
"kind": "Transaction",
"transaction": {
"to": "0x00fb58432ef9d418bf6688bcf0a226d2fcaa18e2",
"data": "0x40d097c3000000000000000000000000d2f77f85a50cdd650ca562f3a180284e1d5b4934",
"maxFeePerGas": "1626000000000",
"maxPriorityFeePerGas": "1332000000000"
}
}{
"kind": "Transaction",
"transaction": {
"calls": [
{
"contractAddress": "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
"entrypoint": "transfer",
"calldata": ["0x123...", "0x1000000000000000000", "0x0"]
}
],
"nonce": "0x3a",
"resourceBounds": {
"l2Gas": {
"maxAmount": "0x1694a0",
"maxPricePerUnit": "0x10c388d00"
},
"l1Gas": {
"maxAmount": "0x0",
"maxPricePerUnit": "0x2e83a3bfd70a"
},
"l1DataGas": {
"maxAmount": "0x120",
"maxPricePerUnit": "0xc7c6"
}
},
"tip": 0,
}
}Show child attributes
Transaction The unsigned hex encoded transaction. EVM transactions also accept JSON objects.
Pending, Executing, Broadcasted, Confirmed, Failed, Rejected Show child attributes
All cryptographic scheme support hash signing. Different blockchains will apply different hash functions to compute the hash.
Show child attributes
Hash 32-byte hash in hex encoded format.
Required when signing with a Schnorr key. Specify the merkle root for tweaking the signing key, or the empty string "" to tweak with the default merkle root.
Algorand, AlgorandTestnet, Aptos, AptosTestnet, ArbitrumOne, ArbitrumSepolia, AvalancheC, AvalancheCFuji, BabylonGenesis, BabylonTestnet5, Base, BaseSepolia, Berachain, BerachainBepolia, Bitcoin, BitcoinSignet, BitcoinTestnet3, BitcoinCash, Bob, BobSepolia, Bsc, BscTestnet, Canton, CantonTestnet, Cardano, CardanoPreprod, Celo, CeloAlfajores, Codex, CodexSepolia, CosmosHub4, CosmosIcsTestnet, Dogecoin, Ethereum, EthereumGoerli, EthereumSepolia, EthereumHolesky, EthereumHoodi, FantomOpera, FantomTestnet, FlareC, FlareCCoston2, FlowEvm, FlowEvmTestnet, Hedera, HederaTestnet, Ink, InkSepolia, InternetComputer, Ion, IonTestnet, Iota, IotaTestnet, Kaspa, Kusama, KusamaAssetHub, Litecoin, Near, NearTestnet, Optimism, OptimismSepolia, Origyn, Plasma, PlasmaTestnet, Plume, PlumeSepolia, Paseo, PaseoAssetHub, Polkadot, PolkadotAssetHub, Polygon, PolygonAmoy, Polymesh, PolymeshTestnet, Race, RaceSepolia, SeiAtlantic2, SeiPacific1, Solana, SolanaDevnet, Starknet, StarknetSepolia, Stellar, StellarTestnet, Sui, SuiTestnet, Tsc, TscTestnet1, Tezos, TezosGhostnet, Ton, TonTestnet, Tron, TronNile, Westend, WestendAssetHub, XrpLedger, XrpLedgerTestnet Algorand, Aptos, Bitcoin, BitcoinCash, Canton, Cardano, Cosmos, Evm, Hedera, Icp, Iota, Kaspa, Near, Polymesh, Solana, Starknet, Stellar, Substrate, Sui, Tezos, Ton, Tron, Xrpl Pending, Executing, Signed, Confirmed, Failed, Rejected Show child attributes
Show child attributes
Algorand, AlgorandTestnet, Aptos, AptosTestnet, ArbitrumOne, ArbitrumSepolia, AvalancheC, AvalancheCFuji, BabylonGenesis, BabylonTestnet5, Base, BaseSepolia, Berachain, BerachainBepolia, Bitcoin, BitcoinSignet, BitcoinTestnet3, BitcoinCash, Bob, BobSepolia, Bsc, BscTestnet, Canton, CantonTestnet, Cardano, CardanoPreprod, Celo, CeloAlfajores, Codex, CodexSepolia, CosmosHub4, CosmosIcsTestnet, Dogecoin, Ethereum, EthereumGoerli, EthereumSepolia, EthereumHolesky, EthereumHoodi, FantomOpera, FantomTestnet, FlareC, FlareCCoston2, FlowEvm, FlowEvmTestnet, Hedera, HederaTestnet, Ink, InkSepolia, InternetComputer, Ion, IonTestnet, Iota, IotaTestnet, Kaspa, Kusama, KusamaAssetHub, Litecoin, Near, NearTestnet, Optimism, OptimismSepolia, Origyn, Plasma, PlasmaTestnet, Plume, PlumeSepolia, Paseo, PaseoAssetHub, Polkadot, PolkadotAssetHub, Polygon, PolygonAmoy, Polymesh, PolymeshTestnet, Race, RaceSepolia, SeiAtlantic2, SeiPacific1, Solana, SolanaDevnet, Starknet, StarknetSepolia, Stellar, StellarTestnet, Sui, SuiTestnet, Tsc, TscTestnet1, Tezos, TezosGhostnet, Ton, TonTestnet, Tron, TronNile, Westend, WestendAssetHub, XrpLedger, XrpLedgerTestnet Show child attributes
Swap id.
1 - 64"swap-5ch70-fc3n7-3k2cbo8d7q5lnts4"
Id of the quote this swap is based on.
1 - 64"swapQuote-7n9p0-cth75-6l74n2sj7u73ooeq"
Optional user-defined reference for this Swap.
Id of the Dfns wallet spending the sourceAsset.
1 - 64"wa-5pfuu-9euek-h0odgb6snva8ph3k"
Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the walletId.
1 - 64"wa-5pfuu-9euek-h0odgb6snva8ph3k"
Swap status.
PendingPolicyApproval, InProgress, Completed, Failed, Rejected Swap provider.
UniswapX, UniswapClassic The source asset for this swap transaction.
Show child attributes
Native Show child attributes
Algorand, AlgorandTestnet, Aptos, AptosTestnet, ArbitrumOne, ArbitrumSepolia, AvalancheC, AvalancheCFuji, BabylonGenesis, BabylonTestnet5, Base, BaseSepolia, Berachain, BerachainBepolia, Bitcoin, BitcoinSignet, BitcoinTestnet3, BitcoinCash, Bob, BobSepolia, Bsc, BscTestnet, Canton, CantonTestnet, Cardano, CardanoPreprod, Celo, CeloAlfajores, Codex, CodexSepolia, CosmosHub4, CosmosIcsTestnet, Dogecoin, Ethereum, EthereumGoerli, EthereumSepolia, EthereumHolesky, EthereumHoodi, FantomOpera, FantomTestnet, FlareC, FlareCCoston2, FlowEvm, FlowEvmTestnet, Hedera, HederaTestnet, Ink, InkSepolia, InternetComputer, Ion, IonTestnet, Iota, IotaTestnet, Kaspa, Kusama, KusamaAssetHub, Litecoin, Near, NearTestnet, Optimism, OptimismSepolia, Origyn, Plasma, PlasmaTestnet, Plume, PlumeSepolia, Paseo, PaseoAssetHub, Polkadot, PolkadotAssetHub, Polygon, PolygonAmoy, Polymesh, PolymeshTestnet, Race, RaceSepolia, SeiAtlantic2, SeiPacific1, Solana, SolanaDevnet, Starknet, StarknetSepolia, Stellar, StellarTestnet, Sui, SuiTestnet, Tsc, TscTestnet1, Tezos, TezosGhostnet, Ton, TonTestnet, Tron, TronNile, Westend, WestendAssetHub, XrpLedger, XrpLedgerTestnet The target asset for this swap transaction.
Show child attributes
Native Show child attributes
Algorand, AlgorandTestnet, Aptos, AptosTestnet, ArbitrumOne, ArbitrumSepolia, AvalancheC, AvalancheCFuji, BabylonGenesis, BabylonTestnet5, Base, BaseSepolia, Berachain, BerachainBepolia, Bitcoin, BitcoinSignet, BitcoinTestnet3, BitcoinCash, Bob, BobSepolia, Bsc, BscTestnet, Canton, CantonTestnet, Cardano, CardanoPreprod, Celo, CeloAlfajores, Codex, CodexSepolia, CosmosHub4, CosmosIcsTestnet, Dogecoin, Ethereum, EthereumGoerli, EthereumSepolia, EthereumHolesky, EthereumHoodi, FantomOpera, FantomTestnet, FlareC, FlareCCoston2, FlowEvm, FlowEvmTestnet, Hedera, HederaTestnet, Ink, InkSepolia, InternetComputer, Ion, IonTestnet, Iota, IotaTestnet, Kaspa, Kusama, KusamaAssetHub, Litecoin, Near, NearTestnet, Optimism, OptimismSepolia, Origyn, Plasma, PlasmaTestnet, Plume, PlumeSepolia, Paseo, PaseoAssetHub, Polkadot, PolkadotAssetHub, Polygon, PolygonAmoy, Polymesh, PolymeshTestnet, Race, RaceSepolia, SeiAtlantic2, SeiPacific1, Solana, SolanaDevnet, Starknet, StarknetSepolia, Stellar, StellarTestnet, Sui, SuiTestnet, Tsc, TscTestnet1, Tezos, TezosGhostnet, Ton, TonTestnet, Tron, TronNile, Westend, WestendAssetHub, XrpLedger, XrpLedgerTestnet The slippage tolerance for this trade in basis point (BPS). Slippage tolerance defines the maximum price difference you are willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%.
The full request used for initiating this swap.
Show child attributes
Quote to use for this swap.
1 - 64"swapQuote-7n9p0-cth75-6l74n2sj7u73ooeq"
Provided for this swap. Used for attesting that the swap is being created with the same parameters as the quote.
UniswapX, UniswapClassic Id of the Dfns wallet spending the sourceAsset. Used for attesting that the swap is being created with the same parameters as the quote.
1 - 64"wa-5pfuu-9euek-h0odgb6snva8ph3k"
The slippage tolerance for this trade in basis point (BPS). Slippage tolerance defines the maximum price difference you are willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%. Used for attesting that the swap is being created with the same parameters as the quote.
The source asset that will be spent on the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote.
The target asset that will be received with the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote.
An optional reference for this Swap.
Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the walletId. Used for attesting that the swap is being created with the same parameters as the quote.
1 - 64"wa-5pfuu-9euek-h0odgb6snva8ph3k"
Show child attributes
User (could be a service account) who requested the resource.
1 - 64"us-6b58p-r53sr-rlrd3l5cj3uc4ome"
Service Account token or Personal Access token used when requesting the resource.
1 - 64"to-202a0-cdo33-o65mbt6q758lvvnt"
{
"id": "swap-6a3ku-bn8d7-8u5rs1oukojms7k8",
"quoteId": "swapQuote-3hgv4-q8tbf-8v2ajmrbmg6m4i9t",
"reference": null,
"walletId": "wa-3l3cj-l8mq7-8q78f9nopq7f1qjv",
"targetWalletId": "wa-3l3cj-l8mq7-8q78f9nopq7f1qjv",
"status": "PendingPolicyApproval",
"provider": "UniswapClassic",
"quotedSourceAsset": {
"kind": "Native",
"amount": "10000000000",
"metadata": {
"network": "EthereumSepolia",
"name": "Ethereum",
"symbol": "SepoliaETH",
"decimals": 18,
"tid": "native:eth"
}
},
"quotedTargetAsset": {
"kind": "Erc20",
"contract": "0xda0be7efd234295395d4204d0df4358339b57b27",
"amount": "6467571553831928182",
"metadata": {
"network": "EthereumSepolia",
"name": "Test",
"symbol": "Test",
"decimals": 18,
"tid": "erc20:0xda0be7efd234295395d4204d0df4358339b57b27"
}
},
"slippageBps": 100,
"dateCreated": "2025-09-11T10:57:55.758Z",
"requestBody": {
"quoteId": "swapQuote-3hgv4-q8tbf-8v2ajmrbmg6m4i9t",
"walletId": "wa-3l3cj-l8mq7-8q78f9nopq7f1qjv",
"targetWalletId": "wa-3l3cj-l8mq7-8q78f9nopq7f1qjv",
"provider": "UniswapClassic",
"slippageBps": 100,
"sourceAsset": { "kind": "Native", "amount": "10000000000" },
"targetAsset": {
"kind": "Erc20",
"contract": "0xda0be7efd234295395d4204d0df4358339b57b27",
"amount": "653003161"
}
},
"requester": {
"userId": "us-48r5q-eshfg-9pmr2lo6bmpr4i4i",
"tokenId": "to-4etah-smoal-9n3rmhul4dpaueg5"
}
}Cleared, Blocked, Pending, ApprovalRequired x >= 1Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details here.
Was this page helpful?