Skip to main content

Events

This page documents the events eSingPay can deliver, the HTTP request format, and the structure of the payload your endpoint receives. To configure an endpoint, see Setup.

Event Types

When you create a webhook subscription, you choose which of the following event types to receive. Each event corresponds to a status change on a deposit or a withdrawal intent.

Event KeyTriggered When
deposit.createdA deposit has been detected and is being prepared.
deposit.completedA deposit has completed and funds are credited.
deposit.failedA deposit has failed or is invalid.
deposit.under_reviewA deposit has entered review and is on hold pending the outcome.
deposit.blockedA deposit has been blocked.
withdrawal.createdA withdrawal intent has been created and is being prepared.
withdrawal.completedA withdrawal intent has completed.
withdrawal.failedA withdrawal intent has failed.
withdrawal.cancelledA withdrawal intent has been cancelled.

Request Format

eSingPay delivers each event as an HTTP request with the following characteristics:

  • Method: POST
  • Content-Type: application/json
  • Body: the event payload as JSON.

Payload

Every event shares the same top-level envelope. The data field holds the resource that changed.

FieldTypeDescription
idstringUnique delivery ID, prefixed with WD_. Use it as an idempotency key.
eventKeystringThe event type. See Event Types.
occurredAtIsoDateTimeUtcTime the underlying status change occurred.
deliveredAtIsoDateTimeUtcTime this delivery attempt was sent.
merchantIdstringID of the merchant the event belongs to.
apiVersionstringPayload schema version, currently 2026-06-29.
dataobjectThe resource that changed. A Deposit for deposit.* events, or a Withdrawal Intent for withdrawal.* events.

Deposit Event Example

For deposit.* events, data is a Deposit object.

{
"id": "WD_n3qafPOL",
"eventKey": "deposit.completed",
"occurredAt": "2026-05-21T15:24:36.468Z",
"deliveredAt": "2026-05-21T15:24:37.012Z",
"merchantId": "8f14e45f-ceea-467a-9c1e-3b2a7d5f0c41",
"apiVersion": "2026-06-29",
"data": {
"id": "DE_7Kd2mVQ1",
"wallet": {
"id": "k2pQ7mXd",
"type": "merchant_wallet"
},
"transaction": {
"type": "blockchain",
"provider": "tron",
"blockchain": null,
"legs": [
{ "type": "principal", "currencyCode": "USDT", "amount": "15.0000000000000000" },
{ "type": "network_fee", "currencyCode": "USDT", "amount": "1.1000000000000000" }
]
},
"source": {
"type": "crypto",
"rail": "tron",
"identifier": "TXk...aB9"
},
"status": "completed",
"currencyCode": "USDT",
"amount": "15.0000000000000000",
"amountFee": "1.1000000000000000",
"amountNet": "13.9000000000000000",
"finalizedAt": "2026-05-21T15:24:36.468Z",
"createdAt": "2026-05-21T15:23:10.001Z",
"updatedAt": "2026-05-21T15:24:36.468Z"
}
}

Withdrawal Event Example

For withdrawal.* events, data is a Withdrawal Intent object.

{
"id": "WD_pQ8rLm4T",
"eventKey": "withdrawal.completed",
"occurredAt": "2026-05-21T16:02:11.900Z",
"deliveredAt": "2026-05-21T16:02:12.334Z",
"merchantId": "8f14e45f-ceea-467a-9c1e-3b2a7d5f0c41",
"apiVersion": "2026-06-29",
"data": {
"id": "WI_3Fv9nHs2",
"wallet": {
"id": "k2pQ7mXd",
"type": "merchant_wallet"
},
"transaction": null,
"destination": {
"type": "crypto",
"rail": "tron",
"routingCode": "tron:nile",
"identifier": "TYm...cD4"
},
"status": "completed",
"amount": "50.0000000000000000",
"amountFee": "1.0000000000000000",
"amountNet": "49.0000000000000000",
"submittedAt": "2026-05-21T16:00:05.120Z",
"finalizedAt": "2026-05-21T16:02:11.900Z",
"createdAt": "2026-05-21T16:00:05.120Z",
"updatedAt": "2026-05-21T16:02:11.900Z"
}
}

:::note Blockchain transaction details In the current release, transaction.blockchain on deposits and the transaction object on withdrawal intents are null. On-chain transaction details (chain ID, hash, addresses) will be populated in a future release. Retrieve the resource through the REST API for the most complete state. :::