Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.khaime.com/llms.txt

Use this file to discover all available pages before exploring further.

Webhook Events

Events use dot-notation grouping: {object}.{action}. All events share the same envelope structure — the data field contains the event-specific object documented below.

Event Taxonomy

payment.*

EventWhen it fires
payment.succeededA charge completed successfully (one-time, subscription, or installment)
payment.failedA charge attempt failed
payment.refundedA full or partial refund was processed
payment.disputedA customer opened a chargeback/dispute

subscription.*

EventWhen it fires
subscription.createdA new subscription was initiated
subscription.renewedA recurring charge succeeded
subscription.payment_failedA renewal charge failed
subscription.cancelledSubscription was cancelled (immediately or at period end)
subscription.expiredPeriod ended without renewal
subscription.trial_startedTrial period began
subscription.trial_ending3 days before trial ends (grace notification)
subscription.trial_endedTrial period ended (converted or expired)

wallet.*

EventWhen it fires
wallet.creditedMerchant wallet was credited (after a successful sale)
wallet.debitedWallet was debited (refund issued, dispute hold placed, payout)

settlement.*

EventWhen it fires
settlement.initiatedPayout/withdrawal was requested
settlement.processingGateway confirmed it is processing
settlement.completedFunds confirmed delivered to the merchant’s bank
settlement.failedPayout failed at the gateway level

dispute.*

EventWhen it fires
dispute.createdDispute was opened
dispute.evidence_dueEvidence deadline is approaching
dispute.wonDispute resolved in the merchant’s favour
dispute.lostDispute resolved against the merchant

order.* (physical products only)

EventWhen it fires
order.createdOrder was placed and paid
order.shippedShipping label generated, tracking available
order.deliveredDelivery confirmed
order.refundedOrder-level refund (also fires payment.refunded)

Event Payloads

payment.succeeded

Fired when a payment is completed successfully.
{
  "api_version": "2026-03-27",
  "event_id": "evt_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "event_type": "payment.succeeded",
  "occurred_at": "2026-03-27T14:32:00Z",
  "is_live": true,
  "business_id": "1042",
  "data": {
    "object": "payment",
    "id": "98234",
    "status": "succeeded",
    "payment_type": "one_time",
    "gateway": "paystack",
    "gateway_reference": "ps_ref_abc123",
    "partner_reference": "order_XYZ",
    "amounts": {
      "customer_paid": { "amount": 5000000, "currency": "NGN" },
      "merchant_gross": { "amount": 306, "currency": "USD" },
      "merchant_net": { "amount": 270, "currency": "USD" },
      "fees": {
        "platform_fee": { "amount": 18, "currency": "USD" },
        "gateway_fee": { "amount": 18, "currency": "USD" },
        "total": { "amount": 36, "currency": "USD" }
      },
      "conversion": {
        "from_currency": "NGN",
        "to_currency": "USD",
        "rate": 1630.5,
        "surcharge_percent": 1.0
      }
    },
    "product": {
      "id": "512",
      "title": "Advanced React Course",
      "type": "self_pace_training"
    },
    "customer": {
      "email": "ada@example.com",
      "first_name": "Ada",
      "last_name": "Obi"
    },
    "metadata": { "partner_reference": "order_XYZ" },
    "created_at": "2026-03-27T14:30:00Z",
    "paid_at": "2026-03-27T14:32:00Z"
  }
}

payment.failed

Fired when a payment attempt fails. Same structure as payment.succeeded with status: "failed" and paid_at: null.
{
  "api_version": "2026-03-27",
  "event_id": "evt_789_failed",
  "event_type": "payment.failed",
  "occurred_at": "2026-03-27T14:35:00Z",
  "is_live": true,
  "business_id": "1042",
  "data": {
    "object": "payment",
    "id": "98235",
    "status": "failed",
    "payment_type": "one_time",
    "gateway": "stripe",
    "gateway_reference": "ch_failed_abc",
    "amounts": {
      "customer_paid": { "amount": 5000, "currency": "USD" },
      "merchant_gross": { "amount": 5000, "currency": "USD" },
      "merchant_net": { "amount": 0, "currency": "USD" },
      "fees": {
        "platform_fee": { "amount": 0, "currency": "USD" },
        "gateway_fee": { "amount": 0, "currency": "USD" },
        "total": { "amount": 0, "currency": "USD" }
      }
    },
    "customer": { "email": "jane@example.com" },
    "created_at": "2026-03-27T14:34:00Z",
    "paid_at": null
  }
}

payment.refunded

Fired when a full or partial refund is processed.
{
  "api_version": "2026-03-27",
  "event_id": "evt_refund_456",
  "event_type": "payment.refunded",
  "occurred_at": "2026-03-28T10:00:00Z",
  "is_live": true,
  "business_id": "1042",
  "data": {
    "object": "payment",
    "id": "98234",
    "status": "refunded",
    "payment_type": "one_time",
    "gateway": "paystack",
    "gateway_reference": "ps_ref_abc123",
    "amounts": {
      "customer_paid": { "amount": 5000000, "currency": "NGN" },
      "merchant_gross": { "amount": 306, "currency": "USD" },
      "merchant_net": { "amount": 270, "currency": "USD" },
      "fees": {
        "platform_fee": { "amount": 18, "currency": "USD" },
        "gateway_fee": { "amount": 18, "currency": "USD" },
        "total": { "amount": 36, "currency": "USD" }
      }
    },
    "refund": {
      "id": "ref_001",
      "refund_amount": { "amount": 270, "currency": "USD" },
      "is_partial": false,
      "reason": "Customer requested"
    },
    "customer": {
      "email": "ada@example.com",
      "first_name": "Ada",
      "last_name": "Obi"
    },
    "created_at": "2026-03-27T14:30:00Z",
    "paid_at": "2026-03-27T14:32:00Z"
  }
}

payment.disputed

Fired when a customer opens a chargeback or dispute. Same payment structure with status: "disputed".

subscription.created

Fired when a new subscription is initiated.
{
  "api_version": "2026-03-27",
  "event_id": "evt_sub_create_001",
  "event_type": "subscription.created",
  "occurred_at": "2026-03-27T15:00:00Z",
  "is_live": true,
  "business_id": "1042",
  "data": {
    "object": "subscription",
    "id": "psub_abc123",
    "status": "active",
    "product": {
      "id": "512",
      "title": "Premium Membership",
      "type": "digital"
    },
    "plan": {
      "interval": "monthly",
      "amount": { "amount": 2999, "currency": "USD" }
    },
    "current_period": {
      "start": "2026-03-27T15:00:00Z",
      "end": "2026-04-27T15:00:00Z"
    },
    "customer": {
      "email": "jane@example.com",
      "first_name": "Jane",
      "last_name": "Doe"
    },
    "created_at": "2026-03-27T15:00:00Z"
  }
}

subscription.renewed

Fired when a recurring charge succeeds. Includes latest_payment_id and amounts with the renewal payment breakdown.

subscription.payment_failed

Fired when a renewal charge fails. Subscription status changes to past_due.

subscription.cancelled

Fired when a subscription is cancelled (immediately or at period end). Includes cancellation_reason if provided.

subscription.expired

Fired when the subscription period ends without renewal.

subscription.trial_started

Fired when a trial period begins. Subscription status is trialing and the trial object is present.

subscription.trial_ending

Fired 3 days before a trial ends — a grace notification to prompt conversion.

subscription.trial_ended

Fired when the trial period ends (whether the subscription converted to paid or expired).

wallet.credited

Fired when the merchant wallet is credited (e.g., after a successful sale).
{
  "api_version": "2026-03-27",
  "event_id": "evt_wallet_credit_001",
  "event_type": "wallet.credited",
  "occurred_at": "2026-03-27T14:32:05Z",
  "is_live": true,
  "business_id": "1042",
  "data": {
    "object": "wallet",
    "id": "wt_ref_00112",
    "type": "credit",
    "reason": "sale",
    "amount": { "amount": 4640000, "currency": "NGN" },
    "balance_after": { "amount": 12450000, "currency": "NGN" },
    "related_payment_id": "98234",
    "occurred_at": "2026-03-27T14:32:05Z"
  }
}

wallet.debited

Fired when the merchant wallet is debited (refund issued, dispute hold placed, or payout). Same structure as wallet.credited with type: "debit".

settlement.initiated

Fired when a payout or withdrawal is requested.
{
  "api_version": "2026-03-27",
  "event_id": "evt_settle_001",
  "event_type": "settlement.initiated",
  "occurred_at": "2026-03-27T09:00:00Z",
  "is_live": true,
  "business_id": "1042",
  "data": {
    "object": "settlement",
    "id": "wd_00445",
    "status": "initiated",
    "gateway": "paystack",
    "payout_method": "transfer",
    "requested": { "amount": 10000000, "currency": "NGN" },
    "fee": { "amount": 53000, "currency": "NGN" },
    "settled": { "amount": 9947000, "currency": "NGN" },
    "initiated_at": "2026-03-27T09:00:00Z"
  }
}

settlement.completed

Fired when funds are confirmed delivered to the merchant’s bank.
{
  "api_version": "2026-03-27",
  "event_id": "evt_settle_complete_001",
  "event_type": "settlement.completed",
  "occurred_at": "2026-03-27T11:45:00Z",
  "is_live": true,
  "business_id": "1042",
  "data": {
    "object": "settlement",
    "id": "wd_00445",
    "status": "completed",
    "gateway": "paystack",
    "payout_method": "transfer",
    "requested": { "amount": 10000000, "currency": "NGN" },
    "fee": { "amount": 53000, "currency": "NGN" },
    "settled": { "amount": 9947000, "currency": "NGN" },
    "initiated_at": "2026-03-27T09:00:00Z",
    "completed_at": "2026-03-27T11:45:00Z"
  }
}
Cross-currency settlement example (USD wallet to NGN bank account):
{
  "data": {
    "object": "settlement",
    "id": "wd_00446",
    "status": "completed",
    "gateway": "paystack",
    "payout_method": "transfer",
    "requested": { "amount": 50000, "currency": "USD" },
    "fee": { "amount": 500, "currency": "USD" },
    "settled": { "amount": 49500, "currency": "USD" },
    "cross_currency": {
      "source": { "amount": 49500, "currency": "USD" },
      "destination": { "amount": 80752500, "currency": "NGN" },
      "rate": 1631.36
    },
    "initiated_at": "2026-03-27T09:00:00Z",
    "completed_at": "2026-03-27T12:10:00Z"
  }
}

settlement.processing

Fired when the gateway confirms the payout is being processed.

settlement.failed

Fired when a payout fails at the gateway level. Includes failure_reason.

dispute.created

Fired when a dispute is opened on a payment.
{
  "api_version": "2026-03-27",
  "event_id": "evt_dispute_001",
  "event_type": "dispute.created",
  "occurred_at": "2026-03-28T09:00:00Z",
  "is_live": true,
  "business_id": "1042",
  "data": {
    "object": "dispute",
    "id": "disp_001",
    "status": "needs_response",
    "reason": "product_not_received",
    "gateway": "stripe",
    "gateway_dispute_id": "dp_abc123",
    "disputed_amount": { "amount": 5000, "currency": "USD" },
    "chargeback_fee": { "amount": 1500, "currency": "USD" },
    "hold_amount": { "amount": 6500, "currency": "USD" },
    "related_payment_id": "98234",
    "evidence_due_by": "2026-04-11T23:59:59Z",
    "customer": {
      "email": "ada@example.com",
      "first_name": "Ada",
      "last_name": "Obi"
    },
    "occurred_at": "2026-03-28T09:00:00Z"
  }
}

dispute.evidence_due

Fired when the evidence deadline is approaching.

dispute.won

Fired when the dispute is resolved in the merchant’s favour. Held funds are released.

dispute.lost

Fired when the dispute is resolved against the merchant.

order.created

Fired when a physical product order is placed and paid.
{
  "api_version": "2026-03-27",
  "event_id": "evt_order_001",
  "event_type": "order.created",
  "occurred_at": "2026-03-27T16:00:00Z",
  "is_live": true,
  "business_id": "1042",
  "data": {
    "object": "order",
    "id": "98240",
    "status": "created",
    "amounts": {
      "customer_paid": { "amount": 7500, "currency": "USD" },
      "merchant_gross": { "amount": 7500, "currency": "USD" },
      "merchant_net": { "amount": 6900, "currency": "USD" },
      "fees": {
        "platform_fee": { "amount": 300, "currency": "USD" },
        "gateway_fee": { "amount": 300, "currency": "USD" },
        "total": { "amount": 600, "currency": "USD" }
      }
    },
    "product": {
      "id": "800",
      "title": "Wireless Headphones",
      "type": "physical_product"
    },
    "shipping": {},
    "customer": {
      "email": "jane@example.com",
      "first_name": "Jane",
      "last_name": "Doe",
      "shipping_address": {
        "line1": "123 Main St",
        "city": "Austin",
        "state": "TX",
        "postal_code": "78701",
        "country": "US"
      }
    },
    "created_at": "2026-03-27T16:00:00Z"
  }
}

order.shipped

Fired when a shipping label is generated and tracking is available. Includes shipping.tracking_number, shipping.carrier, and shipping.shipped_at.

order.delivered

Fired when delivery is confirmed. Includes shipping.delivered_at.

order.refunded

Fired on an order-level refund. Also fires a payment.refunded event for the associated payment.