Webhook Events Reference

Complete reference of all webhook events and their payload schemas.

This page documents every webhook event IvoryPay can send, along with the exact payload schema for each.

Payload envelope

All webhook payloads follow this structure:

{
  "event": "event.name",
  "data": { ... }
}

On-Ramp Events

onramp.success

Fired when an on-ramp transaction completes successfully — crypto has been delivered to the user's wallet.

{
  "event": "onramp.success",
  "data": {
    "reference": "550e8400-e29b-41d4-a716-446655440000",
    "amount": 31.25,
    "platformFeeInCrypto": 0.15,
    "businessFeeInCrypto": 0,
    "gasFee": 0.5,
    "walletAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD68",
    "network": "BSC_MAINNET",
    "token": "USDT",
    "transactionHash": "0xabc123...",
    "status": "SUCCESS",
    "customer": {
      "refCode": "abc123def4",
      "email": "amina@example.com",
      "userId": "user-uuid",
      "firstName": "Amina",
      "lastName": "Okafor",
      "context": "LIVE",
      "createdAtDateOnly": "2026-03-26",
      "createdAt": "2026-03-26T12:00:00.000Z"
    }
  }
}
Field
Type
Description

reference

string

Your transaction reference

amount

number

Crypto amount delivered

platformFeeInCrypto

number

IvoryPay platform fee in crypto

businessFeeInCrypto

number

Your business fee in crypto

gasFee

number

Blockchain gas fee

walletAddress

string

Destination wallet

network

string

Blockchain network

token

string

Crypto token

transactionHash

string

On-chain transaction hash

status

string

Transaction status

customer

object

Customer details


onramp.fiatPaymentReceived

Fired when the user's fiat payment has been detected and confirmed.


onramp.cryptoPayoutProcessing

Fired when the crypto payout is being processed (sent on-chain).


onramp.failed

Fired when an on-ramp transaction fails.


Off-Ramp Events

offramp.success

Fired when fiat has been successfully paid out to the user's bank account.


offramp.cryptoPaymentReceived

Fired when the user's crypto deposit has been detected on-chain.


offramp.failed

Fired when an off-ramp transaction fails.


offramp.declined

Fired when an off-ramp transaction is declined (e.g., compliance check failure).


Buy Events

buy.success

Fired when a Buy (fiat collection) transaction completes.

buy.failed

Fired when a Buy transaction fails.

buy.mismatch

Fired when the amount received differs from the expected amount.


Sell Events

sell.success

Fired when a Sell (fiat payout) transaction completes.

sell.failed

Fired when a Sell payout fails.

sell.cancelled

Fired when a Sell payout is cancelled.


Deposit Events

deposit.received

Fired when fiat is deposited into a virtual account.

Field
Type
Description

reference

string

Deposit reference

processorReference

string

Payment processor's reference

accountNumber

string

Virtual account that received the deposit

receivedAmount

number

Gross amount received

settledAmount

number

Net amount after processor fees

sourceAccountNumber

string

Sender's bank account

sourceAccountName

string

Sender's account name

sourceBankName

string

Sender's bank

paymentDate

string

ISO 8601 payment timestamp


Settlement Events

settlement.awaitingSettlementAccount

Settlement waiting for account configuration.

settlement.converting

Fiat-to-crypto conversion in progress.

settlement.payoutInitiated

Crypto payout queued.

settlement.payoutProcessing

Crypto being sent on-chain.

settlement.success

Settlement completed — crypto delivered.

settlement.failed

Settlement failed — check failureReason.


Customer object (shared across events)

The customer object appears in on-ramp, off-ramp, buy, and sell webhook payloads:

Field
Type
Description

refCode

string

IvoryPay customer reference

email

string

Customer's email

userId

string

Business user ID

firstName

string

Customer's first name

lastName

string

Customer's last name

context

string

TEST or LIVE

createdAtDateOnly

string

Date customer was created

createdAt

string

Full ISO 8601 timestamp

Last updated