Payout Webhooks

Click the tabs below to see what webhooks you will receive from Coindirect while processing payout requests.

The scenario in this example is the following:

  1. The Customer requests a payout in cryptocurrency in the Merchant's platform

  2. The Merchant makes a POST /api/v1/pay/summary call to request a payout

  3. Coindirect receives the API call and creates a payout with the status of PENDING and then immediately updates the status to PROCESSING

  4. Once the payout status is updated to PROCESSING, Coindirect sends a relevant webhook - see examples below

  5. As soon as Coindirect sends a cryptocurrency transaction to a destination address, the payout updates its status from PROCESSING to COMPLETE - Coindirect sends a relevant webhook

  6. If the payout status updates from PROCESSING to CANCELLED instead of being updated to COMPLETE, it means that the payout request has been failed and no cryptocurrency transaction has been sent

Once you finalize the payment on your side, please ensure that no more transactions will appear on the customer's balance in case you receive further webhooks with the same payment UUID from us - this is to avoid potential issues with duplicate balance transactions.

No under circumstances should you completely rely only on webhooks when finalizing the payment on your side.

Once a webhook is received, we highly recommend making an additional API call to retrieve the payment details via GET /api/pay/v1/:uuid/summary (link) to check both the status and displayCurrency.actual field values.

{
  "source": "payment",
  "event": "statusChanged",
  "data": {
    "uuid": "0e135a7e-82e5-4b59-8682-d6e7db362c1d",
    "merchantId": "9a57c17a-1eef-48ff-83d0-b5892c99f767",
    "dateCreated": 1633010474797,
    "expiryDate": 1633014067303,
    "reference": "af1f5c35-a818-4493-957b-8678f6b90ff6",
    "type": "OUT",
    "status": "PROCESSING",
    "displayCurrency": {
      "currency": "JPY",
      "amount": 5000,
      "actual": 5000
    },
    "walletCurrency": {
      "currency": "EUR",
      "amount": 38.59,
      "actual": 38.59
    },
    "paidCurrency": {
      "currency": null,
      "amount": 0,
      "actual": 0
    },
    "feeCurrency": {
      "currency": "EUR",
      "amount": 0.38,
      "actual": 0.38
    },
    "displayRate": {
      "base": "EUR",
      "counter": "JPY",
      "rate": 129.567245400362788287
    },
    "exchangeRate": {
      "base": "USDT",
      "counter": "EUR",
      "rate": 0.545751261991275176
    },
    "address": {
      "protocol": null,
      "address": "THr6oYBp7mgUHiLoxYcqKtoKneKvEhyE22",
      "tag": "[]"
    },
    "redirectUrl": null,
    "returnUrl": "https://yourwebsitename.com",
    "transactions": [
      {
        "dateCreated": 1633010478635,
        "dateConfirmed": null,
        "hash": null,
        "amount": 21.0605412,
        "risk": "UNKNOWN",
        "networkFeeCurrency": null,
        "networkFeeAmount": null,
        "sources": null,
        "exchangeRate": {
          "base": "USDT",
          "counter": "EUR",
          "rate": 1.8323365783
        },
        "displayRate": {
          "base": "JPY",
          "counter": "USDT",
          "rate": 0.007718
        }
      }
    ]
  }
}

Webhook Payload Data

Last updated