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",
    "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>"
}

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 string length: 1

Body

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

Response

200 - application/json

Success

id
string
required
initiatorId
string
required
activity
Wallets:Sign · object
required
  A "`Wallets:Sign`" activity represents any activity which involves signing with a wallet. Currently, in our API, these can be:
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
Last modified on April 2, 2026