{
"id": "<string>",
"date": "<string>",
"kind": "policy.triggered",
"data": {},
"status": "<string>",
"timestampSent": 123,
"error": "<string>"
}wallet.transfer.requested” delivered to your webhook:
{
"id": "wh-xxx-xxxxxxx",
"kind": "wallet.transfer.requested",
"date": "2023-12-04T10:02:22.280Z",
"data": {
"transferRequest": {
"id": "xfr-1vs8g-c1ub1-xxxxxxxxxxxxxxxx",
"walletId": "wa-39abb-e9kpk-xxxxxxxxxxxxxxxx",
"network": "EthereumSepolia",
"requester": {
"userId": "us-3v1ag-v6b36-xxxxxxxxxxxxxxxx",
"tokenId": "to-7mkkj-c831n-xxxxxxxxxxxxxxxx",
},
"requestBody": {
"kind": "Native",
"to": "0xb282dc7cde21717f18337a596e91ded00b79b25f",
"amount": "1000000000"
},
"dateRequested": "2023-05-08T19:14:25.568Z",
"status": "Pending"
}
},
"status": "200",
"timestampSent": 1701684144,
}
| Event Enum | Description |
|---|---|
wallet.blockchainevent.detected | A wallet event has been detected on chain (eg. a deposit). Note: This is only available for Tier-1 chains. |
wallet.created | A wallet has been created. |
wallet.exported | A wallet has been exported (deprecated). |
wallet.delegated | A wallet has been delegated. |
wallet.signature.requested | A generate signature request has been created. |
wallet.signature.failed | A generate signature request has failed to process. |
wallet.signature.rejected | A generate signature request with a policy approval has been rejected. |
wallet.signature.signed | A generate signature request has completed. |
wallet.transaction.requested | A broadcast transaction request has been created. |
wallet.transaction.failed | A broadcast transaction request has failed to process. |
wallet.transaction.rejected | A broadcast transaction request with a policy approval has been rejected. |
wallet.transaction.broadcasted | A broadcast transaction request has been submitted to the mempool. |
wallet.transaction.confirmed | A broadcast transaction request has been confirmed on chain. Note: This is only available for Tier-1 chains. |
wallet.transfer.requested | A wallet transfer request has been created. |
wallet.transfer.failed | A wallet transfer request has failed to process. |
wallet.transfer.rejected | A wallet transfer request with a policy approval has been rejected. |
wallet.transfer.broadcasted | A wallet transfer request has been submitted to the mempool. |
wallet.transfer.confirmed | A wallet transfer request has been confirmed on chain. Note: This is only available for Tier-1 chains. |
wallet.offer.received | A new transfer offer has been made to a wallet. |
wallet.offer.accepted | A transfer offer has been accepted and settlement confirmed on chain. |
wallet.offer.rejected | A transfer offer has been rejected and settlement confirmed on chain. |
wallet.offer.withdrawn | A transfer offer has been withdrawn by the sender. |
wallet.tags.modified | A wallet’s tags have been modified. |
policy.triggered | A policy got triggered upon some activity (the policy rule got evaluated, and it triggered) |
policy.approval.pending | A new Approval process has been created and is pending. |
policy.approval.resolved | A new Approval process is finalized: it’s either approved or rejected. |
data” property, which shape depends on its kind. Here’s an overview of the shape of the data for each kind:
wallet.created, wallet.exported, wallet.delegated see the Get Wallet response:{ // Wallet object, as in "Create Wallet" endpoint response
"wallet": {
"id": "wa-xxx-xxxxxxxxx",
...
}
}
wallet.transfer.requested, wallet.transfer.failed, wallet.transfer.rejected, wallet.transfer.broadcasted, wallet.transfer.confirmed see the Get Transfer response:{ // Wallet Transfer Request object as in "Wallet Send Transfer" endpoint
"transferRequest": {
"id": "xfr-xxx-xxxxxxxxx",
"walletId": "wa-xxx-xxxxxxxx",
...
}
}
wallet.transaction.requested, wallet.transaction.failed, wallet.transaction.rejected, wallet.transaction.broadcasted, wallet.transaction.confirmed see the Get Transaction response :{ // Wallet Transaction Request as in "Wallet Broadcast Transaction" endpoint
"transactionRequest": {
"id": "tx-xxx-xxxxxxxxx",
"walletId": "wa-xxx-xxxxxxxx",
...
}
}
wallet.signature.requested, wallet.signature.failed, wallet.signature.rejected, wallet.signature.signed see the Get Signature response:{ // Wallet Signature Request object as in "Wallet Generate Signature" endpoint
"signatureRequest": {
"id": "sig-xxx-xxxxxxxxx",
"walletId": "wa-xxx-xxxxxxxx",
...
}
}
wallet.offer.received, wallet.offer.accepted, wallet.offer.rejected, wallet.offer.withdrawn, see the Get Offer response:{ // Offer object as in "Get Offer" endpoint
"offer": {
"id": "ofr-xxx-xxxxxxxxx",
"walletId": "wa-xxx-xxxxxxxx",
...
}
}
wallet.tags.modified:{
"wallet": {
"id": "wa-xxx-xxxxxxxxx",
...
},
"tagsAdded": ["tag1"],
"tagsRemoved": ["tag2"]
}
wallet.blockchainevent.detected various event kinds are available depending on the indexed chain:\| Kind | Chains |
|---|---|
| NativeTransfer | All |
| Aip21Transfer | Aptos |
| AsaTransfer | Algorand |
| CoinTransfer, LockedCoinTransfer | Iota |
| Erc20Transfer, Erc721Transfer | Evm |
| Tep74Transfer | Ton |
| Trc10Transfer, Trc20Transfer, Trc721Transfer | Tron |
| Sep41Transfer | Stellar |
| SplTransfer, Spl2022Transfer | Solana |
| UtxoTransfer | Bitcoin, Litecoin, Dogecoin, Kaspa |
{ // Blockchain Event object as in "Wallet Get Wallet History" endpoint
"blockchainEvent": {
"kind": "Erc20Transfer",
"contract": "0x......",
"from": "0x......",
"to": "0x......",
"direction": "In",
...
}
}
policy.triggered{
"policyEvaluation": {
"id": "plce-xxxxxxx",
"triggered": true,
"reason": "Transfer amount (USD 10000) is above limit (USD 5000). ",
"date": "2024-06-28T09:09:54.437Z",
"policy": { // policy object as in "Get Policy" endpoint
"id": "plc-xxxxxxx",
"name": "Accounting wallet transfer limit",
...,
},
"activity": {
"kind": "Wallets:Sign"
"transferRequest": { // transfer request object as in "Get Transfer" endpoint
"id": "xfr-xxxxxxx",
...
}
},
"context": { // its content depends on the kind of the policy rule
"transactionAmount": {
"value": "10000,
"currency": "USD",
},
},
}
}
policy.approval.pending and policy.approval.resolved, see the List Approvals response:{ // Approval object
"approval": {
"activityId": "cr-2100g-xxxxxxxxx",
...
}
}
wallet.transfer.confirmed - this event notifies you that the Transfer Request that you made has been confirmed on chainwallet.blockchainevent.detected- this event notifies you of the new Blockchain Event detected and added to your Wallet History blockchain eventsdata than the previous event which failed delivering. So in the List Webhook Events endpoint, every Webhook Event you will see is a unique delivery attempt (potentially of the same original event).
The event that your webhook handler will receive (in your server), will include the attempt number in the payload (deliveryAttempt: 1 for the first attempt). Also, if it includes the field retryOf: "whe-xxxxxxx" , it indicates that this event you are receiving, is a “retry of” a previous Webhook Event which failed delivering.
Additionally, if you fetch Webhook Events we tried delivering, using the List Webhook Events or Get Webhook , you will be able to see the deliveryFailed boolean field indicating if delivery succeeded or not, as well as the nextAttemptDate: "2024-01-24-xxxxxx" date showing you around which time the next delivery attempt to your webhook will occur (if delivery failed).
If you want to fetch all Webhook Events which failed delivering to your webhook, you can use the List Webhook Events with the query parameter deliveryFailed=true. And amongst all those returned, you can see those which failed delivering, and will not retry in future (because reached maximum retry attempt), by filtering those which have no nextAttemptDate .
If your webhook has been disabled or deleted when Dfns attempts a retry, future retries of that event are prevented. However, if you disable and then re-enable a webhook endpoint before Dfns can retry, you can still expect to see future retry attempts.
WebhookEvent ID
ISO date string when event was raised
Webhook event
policy.triggered, policy.approval.pending, policy.approval.resolved, key.created, key.deleted, key.delegated, key.exported, wallet.blockchainevent.detected, wallet.created, wallet.activated, wallet.delegated, wallet.exported, wallet.signature.failed, wallet.signature.rejected, wallet.signature.requested, wallet.signature.signed, wallet.transaction.broadcasted, wallet.transaction.confirmed, wallet.transaction.failed, wallet.transaction.rejected, wallet.transaction.requested, wallet.transfer.broadcasted, wallet.transfer.confirmed, wallet.transfer.failed, wallet.transfer.rejected, wallet.transfer.requested, wallet.offer.received, wallet.offer.accepted, wallet.offer.rejected, wallet.offer.withdrawn, wallet.tags.modified, payout.action.required Show child attributes
Status code of the webhook request
Unix timestamp when the event was forwarded to the webhook url by our servers.
Error message if any error happened during the webhook request.
Was this page helpful?