Skip to main content
POST
/
v2
/
policy-approvals
/
{approvalId}
/
decisions
Create Approval Decision
curl --request POST \
  --url https://api.dfns.io/v2/policy-approvals/{approvalId}/decisions \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'X-DFNS-USERACTION: <api-key>' \
  --data '{
  "value": "Approved",
  "reason": "<string>"
}'
{
  "id": "<string>",
  "initiatorId": "<string>",
  "activity": {
    "kind": "Wallets:Sign",
    "transferRequest": {
      "id": "<string>",
      "walletId": "<string>",
      "network": "Algorand",
      "requester": {
        "userId": "<string>",
        "tokenId": "<string>"
      },
      "requestBody": {
        "kind": "Native",
        "to": "<string>",
        "amount": "<string>",
        "memo": "<string>",
        "priority": "Slow",
        "createDestinationAccount": true,
        "offer": true,
        "expiresAt": "2023-11-07T05:31:56Z",
        "targetChain": "<string>",
        "externalId": "<string>",
        "travelRule": {
          "kind": "Notabene",
          "beneficiaryVASPdid": "<string>",
          "beneficiaryProof": {},
          "originator": {},
          "beneficiary": {}
        },
        "feeSponsorId": "<string>"
      },
      "metadata": {
        "asset": {
          "symbol": "<string>",
          "decimals": 123,
          "verified": true,
          "quotes": {
            "EUR": 123,
            "USD": 123
          }
        }
      },
      "status": "Pending",
      "reason": "<string>",
      "txHash": "<string>",
      "fee": "<string>",
      "dateRequested": "<string>",
      "datePolicyResolved": "<string>",
      "dateBroadcasted": "<string>",
      "dateConfirmed": "<string>",
      "approvalId": "<string>",
      "externalId": "<string>",
      "feeSponsorId": "<string>"
    },
    "transactionRequest": {
      "id": "<string>",
      "walletId": "<string>",
      "network": "Algorand",
      "requester": {
        "userId": "<string>",
        "tokenId": "<string>"
      },
      "requestBody": {
        "kind": "Transaction",
        "transaction": "<string>",
        "externalId": "<string>"
      },
      "status": "Pending",
      "reason": "<string>",
      "txHash": "<string>",
      "fee": "<string>",
      "approvalId": "<string>",
      "dateRequested": "<string>",
      "datePolicyResolved": "<string>",
      "dateBroadcasted": "<string>",
      "dateConfirmed": "<string>",
      "externalId": "<string>"
    },
    "signatureRequest": {
      "id": "<string>",
      "keyId": "<string>",
      "requester": {
        "userId": "<string>",
        "tokenId": "<string>"
      },
      "requestBody": {
        "kind": "Hash",
        "hash": "<string>",
        "taprootMerkleRoot": "<string>",
        "network": "Algorand",
        "blockchainKind": "Algorand",
        "externalId": "<string>"
      },
      "status": "Pending",
      "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": "<string>",
      "dateRequested": "<string>",
      "datePolicyResolved": "<string>",
      "dateSigned": "<string>",
      "dateConfirmed": "<string>",
      "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",
  "expirationDate": "<string>",
  "dateCreated": "<string>",
  "dateUpdated": "<string>",
  "dateResolved": "<string>",
  "policyEvaluations": [
    {
      "policyId": "<string>",
      "triggered": true,
      "reason": "<string>"
    }
  ],
  "decisions": [
    {
      "userId": "<string>",
      "date": "<string>",
      "reason": "<string>",
      "value": "Approved"
    }
  ]
}

Authentication

✅ Organization User (CustomerEmployee)
❌ Delegated User (EndUser)
❌ Service Account

Required Permissions

Policies:Approvals:Approve: Always required.

Authorizations

Authorization
string
header
required

Bearer Token: Used to authenticate API requests. More details how to generate the token: Authentication flows

X-DFNS-USERACTION
string
header
required

User Action Signature: Used to sign the change-inducing API requests. More details how to generate the token: User Action Signing flows

Path Parameters

approvalId
string
required
Minimum length: 1

Body

application/json
value
enum<string>
required
Available options:
Approved,
Denied
reason
string
Maximum length: 1000

Response

200 - application/json

Success

id
string
required
initiatorId
string
required
activity
object
required
A "`Wallets:Sign`" activity represents any activity which involves signing with a wallet. Currently, in our API, these can be:
  • Wallets:Sign
  • Wallets:IncomingTransaction
  • Policies:Modify
  • Permissions:Modify
  • Permissions:Assign
  • Alias:Modify
status
enum<string>
required
Available options:
Pending,
Approved,
Denied,
Expired
dateUpdated
string
required
policyEvaluations
object[]
required
decisions
object[]
required
expirationDate
string
dateCreated
string
dateResolved
string
I