Webhook Examples (v2)
This guide shows sample payloads for payment-transaction-processing-finished
webhooks in v2. These are triggered when a transaction (payment, withdrawal, deposit, return, etc.) progresses through key lifecycle stages.
Fiat Withdrawals
In Progress
{
"organizationId": "d00d58b1-c577-4e71-ab79-b02ef6bef12c",
"action": "payment-transaction-processing-finished",
"id": "11e09c14-7332-4615-9929-2b61280fd09b",
"resourceId": "5376003a-eb03-4635-9cf4-f84c15010e9f",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-24T09:36:52.2888531+00:00",
"changes": {
"payment-id": "e2cec124-46b3-4792-9230-f8cdd7cfc0de",
"transaction-id": "5376003a-eb03-4635-9cf4-f84c15010e9f",
"transaction-status": "InProgress",
"transaction-amount": "100.00"
}
}
Completed
{
"organizationId": "d00d58b1-c577-4e71-ab79-b02ef6bef12c",
"action": "payment-transaction-processing-finished",
"id": "03f816ef-b9a6-4339-8060-4bb375b67bd6",
"resourceId": "c0638595-4c96-4dc8-9c50-dd0f2adb58f6",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-24T09:42:38.0688156+00:00",
"changes": {
"payment-id": "e2cec124-46b3-4792-9230-f8cdd7cfc0de",
"transaction-id": "c0638595-4c96-4dc8-9c50-dd0f2adb58f6",
"transaction-status": "Completed",
"transaction-amount": "11.00"
}
}
Fiat Deposits / Internal Transfers
{
"organizationId": "d00d58b1-c577-4e71-ab79-b02ef6bef12c",
"action": "payment-transaction-processing-finished",
"id": "5088f7f9-7416-4569-8076-4adf09fc7348",
"resourceId": "e9b37a5c-e1b9-43a2-b599-65f8624bdc81",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-25T11:43:19.1614946+00:00",
"changes": {
"payment-id": "2351b4e4-8e95-46f0-bc18-998e2b0add21",
"transaction-id": "e9b37a5c-e1b9-43a2-b599-65f8624bdc81",
"transaction-status": "Completed",
"transaction-amount": "10.03"
}
}
Wire/ACH Return (Withdrawal or Deposit)
{
"organizationId": "d00d58b1-c577-4e71-ab79-b02ef6bef12c",
"action": "payment-transaction-processing-finished",
"id": "83c3c1ed-149b-4d92-8e8a-d241c1227449",
"resourceId": "5a6fa527-e13f-4f90-a7d3-58a50d76c682",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-23T09:07:39.6025705+00:00",
"changes": {
"payment-id": "90709bc3-9a7e-436f-a304-7197b6bae346",
"transaction-id": "5a6fa527-e13f-4f90-a7d3-58a50d76c682",
"transaction-status": "Completed",
"transaction-amount": "100.00"
}
}
ACH Incoming Deposit (Full Amount)
{
"organizationId": "657400fa-dcf8-483e-b7a6-6a52d1466503",
"action": "payment-transaction-processing-finished",
"id": "cf7dca5b-f55e-4ea2-bd97-2af03ae6dbdd",
"resourceId": "f63e060e-5171-43fb-b325-12a035603e2f",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-26T12:32:06.9639206+00:00",
"changes": {
"payment-id": "99d35419-bfcc-49c6-9259-1cb938f91614",
"transaction-id": "f63e060e-5171-43fb-b325-12a035603e2f",
"transaction-status": "Completed",
"transaction-amount": "45.00"
}
}
Fee Portion
{
"organizationId": "657400fa-dcf8-483e-b7a6-6a52d1466503",
"action": "payment-transaction-processing-finished",
"id": "cf5dbe5d-cbec-41c8-bc6c-a8decc5cc20c",
"resourceId": "a7d18547-7806-4432-ad29-c7762a013b6a",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-26T12:32:06.9639207+00:00",
"changes": {
"payment-id": "99d35419-bfcc-49c6-9259-1cb938f91614",
"transaction-id": "a7d18547-7806-4432-ad29-c7762a013b6a",
"transaction-status": "Completed",
"transaction-amount": "6.60"
}
}
International Wire Withdrawal
Initial Payment
{
"organizationId": "657400fa-dcf8-483e-b7a6-6a52d1466503",
"action": "payment-transaction-processing-finished",
"id": "473dc4c4-1659-41fc-93ca-c5deb94b9766",
"resourceId": "4d0c305d-8777-4053-8056-9a63217a7375",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-26T13:29:50.6441309+00:00",
"changes": {
"payment-id": "b434ba34-7e10-4332-8eb9-7cdd20ba4897",
"transaction-id": "4d0c305d-8777-4053-8056-9a63217a7375",
"transaction-status": "InProgress",
"transaction-amount": "62.00"
}
}
Final Payment + Fee
{
"organizationId": "657400fa-dcf8-483e-b7a6-6a52d1466503",
"action": "payment-transaction-processing-finished",
"id": "8d9b1ea1-0229-4053-8436-a72ce8d3eed9",
"resourceId": "4d0c305d-8777-4053-8056-9a63217a7375",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-26T13:34:50.7385834+00:00",
"changes": {
"payment-id": "b434ba34-7e10-4332-8eb9-7cdd20ba4897",
"transaction-id": "4d0c305d-8777-4053-8056-9a63217a7375",
"transaction-status": "Completed",
"transaction-amount": "62.00"
}
}
{
"organizationId": "657400fa-dcf8-483e-b7a6-6a52d1466503",
"action": "payment-transaction-processing-finished",
"id": "04e34d7d-8198-4154-b2eb-005dfb23ecab",
"resourceId": "6487a892-9a91-4e6d-aeed-a8ecaab1acc8",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-26T13:34:50.7385834+00:00",
"changes": {
"payment-id": "b434ba34-7e10-4332-8eb9-7cdd20ba4897",
"transaction-id": "6487a892-9a91-4e6d-aeed-a8ecaab1acc8",
"transaction-status": "Completed",
"transaction-amount": "7.48"
}
}
Crypto Deposits/Withdrawals
In Progress
{
"organizationId": "d00d58b1-c577-4e71-ab79-b02ef6bef12c",
"action": "payment-transaction-processing-finished",
"id": "cd73dc17-e48c-4d5f-8af3-3e78b853c1a4",
"resourceId": "e4a64e2e-60a6-4d37-bbc0-729f006502a9",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-25T11:47:49.1398814+00:00",
"changes": {
"payment-id": "3dd88784-cbfa-4331-b4bd-bb4d6dcba8c6",
"transaction-id": "e4a64e2e-60a6-4d37-bbc0-729f006502a9",
"transaction-status": "InProgress",
"transaction-amount": "0.01"
}
}
Completed
{
"organizationId": "d00d58b1-c577-4e71-ab79-b02ef6bef12c",
"action": "payment-transaction-processing-finished",
"id": "2a439bf5-f879-4ae1-9ca3-48ff052929b7",
"resourceId": "e4a64e2e-60a6-4d37-bbc0-729f006502a9",
"resourceType": "Transaction",
"createdAtUtc": "2025-06-25T11:49:18.3555359+00:00",
"changes": {
"payment-id": "3dd88784-cbfa-4331-b4bd-bb4d6dcba8c6",
"transaction-id": "e4a64e2e-60a6-4d37-bbc0-729f006502a9",
"transaction-status": "Completed",
"transaction-hash": "0x5c2452eb4c3fda70155d3d8a3907038a3b42f7d6240a407226e26deeeea07471",
"transaction-amount": "0.01"
}
}
Webhook Structure
Field | Data Type | Example | Description |
---|---|---|---|
"organizationId" | guid | "organizationId": "a8b4fc9e-4803-47c6-9671-f0a386c095c9" | organization id |
"action" | string | "action": "payment-transaction-processing-finished" | description of the event that triggered the webhook |
"id" | guid | "id": "37a5e6f1-53d2-43ee-b66e-c014f5311ca3" | unique id of the webhook |
"resourceId" | guid | "resourceId": "0496202b-3700-420f-b244-7cb522d7525f" | id of the object related to the "resourceType" |
"resourceType" | string | "resourceType": "Transaction" | API object related to the triggered event |
"createdAtUtc" | date time | "createdAtUtc": "2022-12-15T13:35:55.4736488+00:00" | time of webhook creation |
"changes" | object | "changes": { "payment-id": "a502bd6c-bb19-4552-b985-f0baefe1f819", "transaction-details": null, "transaction-status": "Completed" } | event specific data |
Webhook Security Example
Below is an example of how you would calculate your HMAC header to make sure your webhook delivery is successful:
-
Serialize payload without any formatting and indentations
{"organizationId":"b8da806b-2eec-4e96-856c-63fe382ea13c","action":"payment-transaction-processing-finished","id":"c781e315-6677-4622-8004-eb26cae0bf67","resourceId":"d52800df-5cb0-41d2-ab62-c18eadf3a603","resourceType":"Transaction","createdAtUtc":"2023-02-03T16:30:56.6511575+00:00","changes":{"payment-id":"3c91b3da-eaf9-4afe-8929-8fb213df9d95","transaction-details":null,"transaction-status":"Completed","created-at":"2023-02-03T16:30:37.7165140\u002B00:00","updated-at":"2023-02-03T16:30:53.5367004\u002B00:00"}}
-
Take UTF-8 bytes from that serialized payload string (in C# that's Encoding.UTF8.GetBytes(str)):
[ 123, 34, 111, 114, 103, 97, 110, 105, 122, 97, 116, 105, 111, 110, 73, 100, 34, 58, 34, 98, 56, 100, 97, 56, 48, 54, 98, 45, 50, 101, 101, 99, 45, 52, 101, 57, 54, 45, 56, 53, 54, 99, 45, 54, 51, 102, 101, 51, 56, 50, 101, 97, 49, 51, 99, 34, 44, 34, 97, 99, 116, 105, 111, 110, 34, 58, 34, 112, 97, 121, 109, 101, 110, 116, 45, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 45, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 45, 102, 105, 110, 105, 115, 104, 101, 100, 34, 44, 34, 105, 100, 34, 58, 34, 99, 55, 56, 49, 101, 51, 49, 53, 45, 54, 54, 55, 55, 45, 52, 54, 50, 50, 45, 56, 48, 48, 52, 45, 101, 98, 50, 54, 99, 97, 101, 48, 98, 102, 54, 55, 34, 44, 34, 114, 101, 115, 111, 117, 114, 99, 101, 73, 100, 34, 58, 34, 100, 53, 50, 56, 48, 48, 100, 102, 45, 53, 99, 98, 48, 45, 52, 49, 100, 50, 45, 97, 98, 54, 50, 45, 99, 49, 56, 101, 97, 100, 102, 51, 97, 54, 48, 51, 34, 44, 34, 114, 101, 115, 111, 117, 114, 99, 101, 84, 121, 112, 101, 34, 58, 34, 84, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 34, 44, 34, 99, 114, 101, 97, 116, 101, 100, 65, 116, 85, 116, 99, 34, 58, 34, 50, 48, 50, 51, 45, 48, 50, 45, 48, 51, 84, 49, 54, 58, 51, 48, 58, 53, 54, 46, 54, 53, 49, 49, 53, 55, 53, 43, 48, 48, 58, 48, 48, 34, 44, 34, 99, 104, 97, 110, 103, 101, 115, 34, 58, 123, 34, 112, 97, 121, 109, 101, 110, 116, 45, 105, 100, 34, 58, 34, 51, 99, 57, 49, 98, 51, 100, 97, 45, 101, 97, 102, 57, 45, 52, 97, 102, 101, 45, 56, 57, 50, 57, 45, 56, 102, 98, 50, 49, 51, 100, 102, 57, 100, 57, 53, 34, 44, 34, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 45, 100, 101, 116, 97, 105, 108, 115, 34, 58, 110, 117, 108, 108, 44, 34, 116, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 45, 115, 116, 97, 116, 117, 115, 34, 58, 34, 67, 111, 109, 112, 108, 101, 116, 101, 100, 34, 44, 34, 99, 114, 101, 97, 116, 101, 100, 45, 97, 116, 34, 58, 34, 50, 48, 50, 51, 45, 48, 50, 45, 48, 51, 84, 49, 54, 58, 51, 48, 58, 51, 55, 46, 55, 49, 54, 53, 49, 52, 48, 92, 117, 48, 48, 50, 66, 48, 48, 58, 48, 48, 34, 44, 34, 117, 112, 100, 97, 116, 101, 100, 45, 97, 116, 34, 58, 34, 50, 48, 50, 51, 45, 48, 50, 45, 48, 51, 84, 49, 54, 58, 51, 48, 58, 53, 51, 46, 53, 51, 54, 55, 48, 48, 52, 92, 117, 48, 48, 50, 66, 48, 48, 58, 48, 48, 34, 125, 125 ]
-
Take UTF-8 bytes from secret string (in our case - ac5b16fa568a7b3847c10d4b8198030d):
[ 97, 99, 53, 98, 49, 54, 102, 97, 53, 54, 56, 97, 55, 98, 51, 56, 52, 55, 99, 49, 48, 100, 52, 98, 56, 49, 57, 56, 48, 51, 48, 100 ]
-
Compute HMAC-SHA256 using those two byte array from the previous steps (in C# that's new HMACSHA256(secretBytes).ComputeHash(dataBytes)):
[ 121, 142, 50, 191, 3, 31, 226, 223, 121, 59, 195, 238, 22, 121, 209, 52, 172, 159, 32, 9, 137, 30, 29, 224, 202, 175, 134, 176, 191, 242, 120, 92 ]
-
Convert those hash bytes to base64 (in C# that's Convert.ToBase64String(hashBytes)):
eY4yvwMf4t95O8PuFnnRNKyfIAmJHh3gyq+GsL/yeFw=
You can use some online tools to verify the correctness of your algorithm:
https://www.devglan.com/online-tools/hmac-sha256-online
Webhook HMAC Calculation
Be sure you're not reformatting/restructuring the webhook payload as it will provide a different hashed output then what you're expecting
Updated 19 days ago