{
"id": "<string>",
"initiatorId": "<string>",
"activity": {
"kind": "Wallets:Sign",
"transferRequest": {
"id": "xfr-20g4k-nsdpo-mg6arrifgvid4orn",
"walletId": "wa-5pfuu-9euek-h0odgb6snva8ph3k",
"network": "Algorand",
"requester": {
"userId": "us-6b58p-r53sr-rlrd3l5cj3uc4ome",
"tokenId": "to-202a0-cdo33-o65mbt6q758lvvnt"
},
"requestBody": {
"kind": "Native",
"to": "<string>",
"amount": "<string>",
"memo": "<string>",
"priority": "Slow",
"createDestinationAccount": true,
"offer": true,
"expiresAt": "2023-11-07T05:31:56Z",
"externalId": "<string>",
"travelRule": {
"kind": "Notabene",
"originator": {},
"beneficiary": {},
"beneficiaryVASPdid": "<string>",
"beneficiaryProof": {}
},
"feeSponsorId": "fs-5vqdl-gliqk-b4rfukqauov1sp7j"
},
"metadata": {
"asset": {
"symbol": "<string>",
"decimals": 123,
"verified": true,
"quotes": {
"EUR": 123,
"USD": 123
}
}
},
"status": "Pending",
"dateRequested": "2023-04-14T20:41:28.715Z",
"reason": "<string>",
"txHash": "<string>",
"fee": "<string>",
"datePolicyResolved": "2023-04-14T20:41:28.715Z",
"dateBroadcasted": "2023-04-14T20:41:28.715Z",
"dateConfirmed": "2023-04-14T20:41:28.715Z",
"approvalId": "ap-2a9in-tt2a1-983lho480p35ejd0",
"externalId": "<string>",
"feeSponsorId": "fs-5vqdl-gliqk-b4rfukqauov1sp7j"
},
"transactionRequest": {
"id": "tx-583hu-sp2p7-slvb9nqpa3hd8bus",
"walletId": "wa-5pfuu-9euek-h0odgb6snva8ph3k",
"network": "Algorand",
"requester": {
"userId": "us-6b58p-r53sr-rlrd3l5cj3uc4ome",
"tokenId": "to-202a0-cdo33-o65mbt6q758lvvnt"
},
"requestBody": {
"kind": "Transaction",
"transaction": "<string>",
"externalId": "<string>"
},
"status": "Pending",
"dateRequested": "2023-04-14T20:41:28.715Z",
"reason": "<string>",
"txHash": "<string>",
"fee": "<string>",
"approvalId": "ap-2a9in-tt2a1-983lho480p35ejd0",
"datePolicyResolved": "2023-04-14T20:41:28.715Z",
"dateBroadcasted": "2023-04-14T20:41:28.715Z",
"dateConfirmed": "2023-04-14T20:41:28.715Z",
"externalId": "<string>"
},
"signatureRequest": {
"id": "sig-4sfvl-f4iha-umighfi3hk4t54dr",
"keyId": "key-01snl-t56gb-j8tsok0vn802p80i",
"requester": {
"userId": "us-6b58p-r53sr-rlrd3l5cj3uc4ome",
"tokenId": "to-202a0-cdo33-o65mbt6q758lvvnt"
},
"requestBody": {
"kind": "Hash",
"hash": "<string>",
"taprootMerkleRoot": "<string>",
"network": "Algorand",
"blockchainKind": "Algorand",
"externalId": "<string>"
},
"status": "Pending",
"dateRequested": "2023-04-14T20:41:28.715Z",
"reason": "<string>",
"signature": {
"r": "<string>",
"s": "<string>",
"recid": 123,
"encoded": "<string>"
},
"signatures": [
{
"r": "<string>",
"s": "<string>",
"recid": 123,
"encoded": "<string>"
}
],
"signedData": "<string>",
"network": "Algorand",
"txHash": "<string>",
"fee": "<string>",
"approvalId": "ap-2a9in-tt2a1-983lho480p35ejd0",
"datePolicyResolved": "2023-04-14T20:41:28.715Z",
"dateSigned": "2023-04-14T20:41:28.715Z",
"dateConfirmed": "2023-04-14T20:41:28.715Z",
"externalId": "<string>"
},
"swapRequest": {
"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"
}
}
},
"status": "Pending",
"dateUpdated": "<string>",
"policyEvaluations": [
{
"policyId": "<string>",
"triggered": true,
"reason": "<string>",
"context": "<unknown>"
}
],
"decisions": [
{
"userId": "<string>",
"date": "<string>",
"reason": "<string>",
"value": "Approved"
}
],
"expirationDate": "<string>",
"dateCreated": "<string>",
"dateResolved": "<string>"
}RequestApproval, an Approval object is created containing:
policy.approval.pending”). You can subscribe to it to react to this event, eg. send notifications to the users that need to give their approval.
The Approval object can be queried using the approvalId returned from the endpoint that triggered the approval process, using the Get Approval / List Approvals endpoints.
Users can then call the Create Approval Decision endpoint to either approve / reject this activity. Of course this can also be done via the Dfns dashboard.
A user can only give his approval / rejection if he is defined inside one of the approval groups defined on the policies that triggered.
A given user can only approve or reject once. If multiple approval groups exist, a decision from a single user will count as a decision for any of the groups this user belongs to.
A rejection from any user of any groups immediately rejects an activity.
The initiator is not allowed to approve their activity, but can deny it if they need to cancel it.
Here’s an Approval object example
{
"id":"ap-...",
"initiatorId":"us-...",
"status":"Pending",
"expirationDate":"2023-12-22T21:16:16.659Z",
"dateCreated":"2023-12-22T20:56:16.662Z",
"dateUpdated":"2023-12-22T20:56:16.662Z",
"activity":{
"kind": "Wallets:Sign",
"transferRequest": { // the transfer request object from transfer endpoint
"id": "xfr-...",
...
},
},
"evaluatedPolicies":[
{
"policyId":"plc-...",
"triggerStatus":"Triggered",
"reason":"Number of transactions (2) is above limit (2)."
},
{
"policyId":"plc-...",
"triggerStatus":"Triggered",
"reason":"Cumulative transfer amount (USD 20) is above limit (USD 2)."
}
],
"decisions":[
{
"userId":"us-...",
"dateActioned":"2023-12-22T20:56:16.662Z",
"value":"Approved"
}
],
}
A "`Wallets:Sign`" activity represents any activity which involves signing with a wallet. Currently, in our API, these can be:Show child attributes
Pending, Approved, Denied, Expired Show child attributes
Show child attributes
Was this page helpful?