Webhook Events

Complete reference of all webhook events sent by Inkress and their payload structures.

Event Structure

All webhook events follow a consistent structure:

{
  "event": "resource.action",
  "facilitator": "Inkress",
  "resource_name": {
    // Resource data
  }
}

Order Events

Events related to one-time payments and orders.

orders.paid

Success

Triggered when an order is successfully paid.

{
  "event": "orders.paid",
  "order": {
    "id": 2345,
    "status": "paid",
    "total": 14000,
    "reference": "53837|42iyvtv",
    "currency": "JMD",
    "lines": [],
    "customer": {
      "id": 4829,
      "email": "customer@example.com",
      "first_name": "John",
      "last_name": "Doe"
    },
    "uid": "278282jbsh-595e-4011-b808-2872872",
    "updated_at": "2025-12-27T18:39:07.670135Z",
    "meta_data": null,
    "created_at": "2025-12-27T18:39:07.670135Z",
    "payment_details": {
      "provider": "fac",
      "brand": "MasterCard",
      "last4": "1821"
    }
  },
  "facilitator": "Inkress"
}

How order events are named

Order events are not a fixed list. The event name is derived from the order's status at the moment it changes, in the form orders.<status> — so an order moving to shipped emits orders.shipped.

orders.paid

Payment succeeded. This is the event to build on for fulfilment.

orders.pending

The order was created but has not been paid yet.

orders.cancelled

The order was cancelled.

orders.prepared

The order is packed and ready to ship.

orders.shipped

The order has been despatched.

orders.delivered

The order reached the customer.

orders.completed

The order is fully complete.

orders.returned

The customer returned the order.

orders.verifying

The order is undergoing merchant checks.

Don't hard-code the full set. Several order statuses share an underlying status code, so the exact event name for failed, voided, error and refunded states is not guaranteed to be stable. Treat orders.paid as the reliable signal that money moved, subscribe to the wildcard below for everything else, and branch on the order payload rather than on the event name alone.

Subscribing to every order event

Wildcard

Rather than registering one endpoint per event, a webhook can subscribe to a wildcard and receive the whole family. This is the recommended setup — it means a new order status never silently stops reaching you.

orders

Receives every orders.* event.

all

Receives every event Inkress delivers.

Set the wildcard as the webhook's event when you create it. The actual event name still arrives in the event field of the payload and in the X-Inkress-Webhook-Event header, so you can branch on it in your handler.

Subscription Events

Events related to recurring billing and subscriptions.

subscriptions.created

Created

Triggered when a new subscription is created.

{
  "event": "subscriptions.created",
  "facilitator": "Inkress",
  "subscription": {
    "id": "sub_1234567890",
    "customer_id": "cus_1234567890",
    "plan_id": "plan_1234567890",
    "status": "active",
    "current_period_start": "2023-01-01T00:00:00Z",
    "current_period_end": "2023-02-01T00:00:00Z",
    "cancel_at_period_end": false
  }
}

subscriptions.created

A new subscription was created.

subscriptions.trial_started

A free trial began. No charge has been taken yet.

subscriptions.trial_ending

The trial is approaching its end — a good moment to prompt the customer.

subscriptions.trial_ended

The trial finished and billing begins.

subscriptions.activated

The subscription became active.

subscriptions.payment_success

A recurring charge succeeded.

subscriptions.payment_failed

A recurring charge failed — often an expired card. See the card update flow in Subscriptions.

subscriptions.adhoc_charge

A one-off charge was raised against the subscriber outside the billing cycle.

subscriptions.cancelled

The subscription was cancelled.

The subscriptions wildcard subscribes to all of the above, and all subscribes to everything Inkress delivers.

Payout Events

Not currently delivered

Do not build against these yet. The payout event shapes below are documented for reference, but Inkress does not currently deliver financial_requests.* webhooks. Payouts are processed internally without emitting a webhook. To track payout state today, poll the payouts endpoints or check the dashboard. This page will be updated if and when these events start being delivered.

financial_requests.requested

Reference only

Would be triggered when a payout is requested.

{
  "event": "financial_requests.requested",
  "financial_request": {
    "id": 2233,
    "status": "pending",
    "total": 1400,
    "currency": "JMD",
    "source_account": {
      "name": "Inkress Wallet",
      "currency_code": "JMD"
    },
    "destination_account": {
      "name": "Scotiabank",
      "currency_code": "JMD",
      "bank_name": "Scotiabank",
      "account_number": "******7618",
      "branch_name": "Half Way Tree",
      "account_holder_name": "John Doe",
      "account_type": "Chequing"
    },
    "uid": "18272872-595e-4011-b808-28728hbussbuyy628g"
  },
  "facilitator": "Inkress"
}

financial_requests.processing

financial_requests.processed

financial_requests.failed

financial_requests.rejected

Payment Link Events

Not currently delivered

Do not build against this yet. Inkress does not currently deliver payment_links.visited webhooks. The shape is documented for reference only. To know when a link converts, use orders.paid.

payment_links.visited

Reference only

Would be triggered when a customer visits a payment link.

{
  "event": "payment_links.visited",
  "payment_link": {
    "id": 2233,
    "currency": "JMD",
    "title": "Payment Link",
    "description": "hello world",
    "status": "active",
    "usage_limit": 999,
    "total": 4000,
    "data": {
      // Custom data
    },
    "customer": {
      "name": "Scotiabank",
      "id": "28728",
      "first_name": "Altou",
      "last_name": "Brown",
      "email": "alro@gmail.com"
    },
    "uid": "18272872-595e-4011-b808-28728hbussbuyy628g"
  },
  "facilitator": "Inkress"
}