Event Notification
Global Collections is an event-driven service. Many operations complete asynchronously — virtual account approval, incoming funds, payout results, refund and sub-merchant status changes are all delivered to the Merchant as webhooks.
This page explains how to configure and verify webhooks. The payload of each event type is documented in its own webhook page (linked below).
Configuration
There is no self-service Merchant Portal screen for webhook configuration. Instead:
For most event types,
webhookUrlis supplied directly in the request body of the relevant Create API call — the URL is scoped to that specific request/entity, not managed separately. See:Onboard Sub-Merchant for
SUBMERCHANT_ONBOARDING_RESULT.Create Virtual Account for the virtual account events.
Register Beneficiary for
BENEFICIARY_REGISTRATION.Create Payout Request for the payout events.
The collection-transaction event group (7 event types — see the catalogue below) is the exception: it has no natural per-request origin, so its delivery URL and signing secret are pre-configured centrally for your merchant account rather than supplied by the Merchant. There is no self-service UI for this today — contact NeoX to have it configured. This also applies to refund status changes on trade/platform collections: although Create Refund Request accepts a
webhookUrlfield, it is not used for webhook delivery — refund status is delivered through this same pre-configured collection-transaction channel instead. See Refund Requests Webhook for details.
Delivery
NeoX sends an HTTP
POSTrequest to the configured URL whenever a subscribed event occurs.The request body is
application/json.The Merchant endpoint must respond with HTTP 200 to acknowledge receipt.
If the endpoint does not acknowledge, NeoX retries the delivery with a backoff schedule. Webhook handlers must therefore be idempotent — the same event may be delivered more than once. De-duplicate on the event's primary identifier (e.g.
requestId,transId,collectionOrderId).
Verifying secureHash
Every webhook payload includes a secureHash field, computed and embedded in the JSON body (never sent as a header). To verify it:
Take all payload fields except
secureHashitself.Sort the keys in alphabetical order, then concatenate their values only — not
key=valuepairs, just the values, in that sorted-key order.Append the Secret Key configured for your merchant account.
Compute the
SHA256hash of the resulting string and Base64-encode the digest.Compare the result with the received
secureHash. Reject the payload if they differ.
Event catalogue
1
SUBMERCHANT_ONBOARDING_RESULT
A sub-merchant onboarding application reaches a terminal review outcome.
2
VA_SUPPLEMENT_REQUIRED
A virtual account application requires supplementary KYC material.
3
TRADE_COLLECTION_RECEIVED
Funds arrive in a virtual account for a trade-collection order.
4
PLATFORM_COLLECTION_RECEIVED
Funds arrive in a virtual account for a platform-collection order.
5
COLLECTION_COMPLETED
A collection order finishes matching/review and funds are credited.
8
TRADE_COLLECTION_REFUND_PROCESS
A refund against a collection order starts processing.
9
TRADE_COLLECTION_REFUND_SUCCESS
A refund against a collection order completes successfully.
10
VA_CREATION_RESULT
A virtual account application reaches a terminal outcome (approved or rejected).
13
PAYMENT_RESULT
A payout request (or per-payee distribution) reaches a terminal outcome.
14
BENEFICIARY_REGISTRATION
A beneficiary registration is reviewed, including supplement requests.
Last updated
Was this helpful?