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

FieldData TypeExampleDescription
"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:

  1. 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"}}

  2. 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 ]

  3. 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 ]

  4. 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 ]

  5. 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