Skip to main content

Notifications and Webhooks

Nium uses webhooks to notify you, the clients, of your applications when any of the observable events occur.

You can provide Nium the URL of your host endpoint to receive the webhook events from the Nium One platform. The platform delivers the webhook events to your client-specified endpoint with a POST HTTP request method.

You need to provide the required URL in the following format: https://<customerHost:Port>/webhook

Nium sends different payloads depending on the trigger event. The trigger event can be identified based on the template field in the payload body.

Webhook event structure

  • The body of the webhook event generally carries just enough details about the event. You're expected to use other APIs to fetch more details.
  • The body of the webhook event includes a field template to indicate the webhook event type.
  • Every webhook event includes the x-request-id data element in the header. The platform populates unique values in this data element for every unique webhook event, except when the platform attempts to redeliver a webhook event.
  • You can also configure a static identifier, say x-partner-key, as part of the client setup, so the platform can include the client-specified identifier in the header of every webhook event.

The following is an example of a webhook event:

curl --location --request POST 'https://<customerHost:Port>/webhook' \
-H 'content-type: application/json' \
-H 'x-request-id: 123e4567-e89b-12d3-a456-426655440000' \
-d '{
"name":"Samar",
"customerHashId":"0de1e512-e0d7-4eca-ad41-dd39325facc2",
"walletHashId":"696bad93-bda7-4e8d-8c31-318f8d6cbc5f",
"cardHashId":"a344b0c8-d27d-4db5-8194-aacdefb558ca",
"cardNumber":"4001-35xx-xxxx-1950",
"transactionCurrency":"SGD",
"transactionAmount":"10.00",
"transactionDate":"2020-09-29 09:24:46",
"balanceCurrency":"SGD",
"authAmount":"10.0",
"walletBalance":"102.00",
"mcc":"5499",
"merchantName":"Frankie Tibbs",
"merchantCountry":"IN",
"merchantCity":"MUMBAI",
"authCode":"114733"
"effectiveAuthAmount":"11",
"rhaTransactionId":"55648c70-fa9a-4a4d-aaf6-618174c319d2",
"template":"CARD_POS_APPROVED_WEBHOOK"
}'

Event and notification types

Webhook events and notifications fall into the following categories:

  • Callbacks: Manage compliance-related events, notifications, and customer redirection callbacks.
  • Platform: Monitor core platform events, including client setup, virtual account assignments, and wallet transfers.
  • Payouts: Receive updates on payout lifecycles, such as transaction statuses and beneficiary verification.
  • Payins: Track events related to wallet funding, chargebacks, and funding instrument approvals.
  • Issuing and Cards: Stay informed about card-related events, such as activation, transactions, declines, and settlements.

Delivery

Nium supports two forms of webhook events delivery:

  • At most once, by default
  • Retry delivery, which needs to be explicitly set up

At most once

The default delivery configuration that Nium supports is to deliver every webhook event at most once. An attempt is made to deliver a webhook event. If the delivery fails, due to a timeout or an HTTP response status code, other than 200, the platform does not retry delivering the webhook event.

Retry delivering webhook

You can work with Nium to configure the webhook events that you want the platform to retry delivering. It works in the following way:

  1. We have configured a retry feature, for example, for the Card Wallet Funding webhook. This is an event that gets triggered whenever a customer's wallet receives funds.
  2. As soon as funding is applied to a customer wallet, under your client setup in the platform, Nium triggers the Card Wallet Funding webhook event to your registered endpoint called Original-Attempt.
  3. If that fails for some reason, the platform makes another attempt immediately called Retry-Attempt #1. In this retry, the platform includes the same x-request-id as it sent in the Original-Attempt.
  4. If this Retry-Attempt #1 fails, then the platform waits for 2 hours before trying to redeliver the webhook event, called Retry-Attempt #2.
  5. If this Retry-Attemp #2 fails, the platform waits for 2 hours and tries delivering again. This event is called Retry-Attempt #3.
  6. In this manner, the platform continues retrying up to 20 times, Retry-Attempt #20, with a 2-hour time gap between each retry attempt.

🗒️ NOTE

This is not the default approach available for every webhook event for clients. Clients that want this feature enabled, for example, the platform retrying to deliver webhook events, can reach out to their Nium representative for support. This needs to be configured at the chosen webhook event level as part of the client configuration in the platform.

⚠️ CAUTION

Every redelivered webhook event has the same x-request-id header value to help you identify and ignore such duplicate webhook events.

Notifications

Nium supports three types of system-generated notifications, which are similar to trigger alerts that are sent in response to a specific user action or event.

  • Email notifications
  • SMS notifications
  • Webhooks notifications

Email notifications

Nium can trigger different types of customer notifications through email. The notifications follow the default Nium template but can be customized or turned off based on the client's needs.

SMS notifications

Nium can send Short Message Service (SMS) notifications to customers only for the 3D Secure (3DS) One Time Password (OTP) protocol or the Visa Token Service (VTS) for Google Pay and Apple Pay.

Webhooks notifications

Nium provides webhooks to trigger email, SMS, or in-app notifications. Refer to the Webhooks overview guide.

The following table summarizes different scenarios and corresponding notifications triggered with SMS:

Scenario                                                             Email templateWebhookSMS
This template is triggered while adding a card to Google Pay. See note above.CARD_GOOGLEPAY_EMAILVTS Token
3DS OTP during 3DS online transaction (Version 2 is currently in use).CARD_SAMPLE_EMAIL3DS OTP
3DS OTP during 3DS online transaction.CARD_3DS_OTP_EMAIL3DS OTP
VTS OTP during VTP provisioning.CARD_VTS_PROVISION_EMAILVTS Token

The following table summarizes different scenarios and corresponding notifications triggered without SMS:

Scenario                                                             Email templateWebhook
The cardholder makes a balance transfer from one currency wallet to another currency wallet. This is applicable to the multi-currency program.CARD_BALANCE_TRF_BETWEEN_CURRENCIES_ WITHIN_SAME_WALLET_EMAILBalance Transfer within Wallet
This template is triggered when a customer is registered.CARD_CUSTOMER_REGISTRATION_EMAILCustomer Registration
This template is triggered during a client prefund-request notification.CARD_PRE_FUND_APPROVAL_EMAILPrefund Approval
This template is triggered when the wallet is funded.CARD_WALLET_FUNDING_EMAILWallet Funding
This template is triggered in the event of wallet encashment.CARD_WALLET_ENCASHMENT_EMAILWallet Encashment
This template is triggered when a balance transfer happens within a customer's wallet.CARD_BALANCE_TRF_BETWEEN_CURRENCIES_ WITHIN_SAME_WALLET_EMAILBalance Transfer Within Wallet
This template is triggered when a transfer between two customers occurs under the same client program.CARD_P2P_TRANSFER_BETWEEN_WALLETS_EMAILP2P Transfer Between Wallets
This template is triggered when a physical card is assigned to a customer.CARD_ASSIGN_CARD_EMAILNo webhook
This template is triggered when an ADD-ON card is issued using the Add Card API.CARD_ADD_ON_CARD_ISSUE_EMAILAdd On Card
This template is triggered when the card's Personal Identification Number (PIN) is set.CARD_SET_PIN_EMAILSet Pin
This template is triggered when the transaction is declined due to an incorrect PIN.CARD_PIN_BLOCK_DECLINE_EMAILPin Block Decline
This template is triggered when the card is replaced using the Issue Replacement Card API.CARD_CARD_REPLACEMENT_EMAILNo webhook
This template is triggered when the card is temporarily blocked.CARD_TEMPORARY_BLOCK_EMAILTemporary Block
This template is triggered when a temporarily blocked card is removed.CARD_TEMPORARY_BLOCK_REMOVAL_EMAILTemporary Block Removal
This template is triggered when the card is permanently blocked.CARD_PERMANENT_BLOCK_EMAILPermanent Block
This template is triggered when the permanently blocked card is being replaced with a new card.CARD_PERMANENT_BLOCK_REPLACEMENT_EMAILNo webhook
This template is triggered when the POS transaction is approved.CARD_POS_APPROVED_EMAILPOS Approved
This template is triggered when the transaction is through an ATM.CARD_ATM_APPROVED_EMAILATM Approved
This template is triggered on successful VTS provisioning for Apple Pay.CARD_ADD_CARD_CONFIRMATION_APPLEPAY_EMAILVTS Provisioning walletProvider = applePay
This template is triggered on successful VTS provisioning for Google Pay.CARD_ADD_CARD_CONFIRMATION_GOOGLEPAY_EMAILVTS Provisioning walletProvider = googlePay
This template is triggered when the transaction is declined due to a blocked card.CARD_BLOCK_CARD_DECLINE_EMAILBlock Decline
This template is triggered when the transaction is declined due to an inactive card.CARD_INACTIVE_CARD_DECLINE_EMAILInactive Decline
This template is triggered when the transaction is declined due to insufficient funds.CARD_INSUFFICIENT_FUNDS_DECLINED_EMAILInsufficient Funds Declined
This template is triggered when the transaction is declined because the card is expired.CARD_EXPIRED_CARD_EMAILExpired Card
This template is triggered when the card restricts the transactions.CARD_RESTRICTED_TRANSACTIONS_EMAILRestricted Transactions
This template is triggered when a transaction isn't supported.CARD_TRANSACTION_NOT_SUPPORTED_EMAILTransaction Not Supported
This template is triggered when the card transaction limit is exceeded.CARD_TRANSACTION_LIMIT_EXCEEDS_EMAILTransaction Limit Exceeds
This template is triggered when the card has the wrong Card Verification Value 2 (CVV2).CARD_WRONG_CVV2_EMAILWrong CVV2
This template is triggered when the card has the wrong expiration date.CARD_WRONG_EXPIRY_EMAILWrong Expiry
This template is triggered when the transaction is declined due to the wrong PIN entry.CARD_WRONG_PIN_DECLINE_EMAILWrong PIN Decline
This template is triggered when the transaction is declined due to the wrong PIN entry.CARD_PIN_RETRY_EXCEED_DECLINE_EMAILPin Retry Exceed Decline
This template is triggered manually by the Fraud and Risk team for specific customers.CARD_RISK_AWARENESS_PIN_EMAILNo webhook
This template is triggered manually by the Fraud and Risk team for specific customers.CARD_SUSPECTED_COMPROMISE_EMAILNo webhook
This template is triggered manually by the Fraud and Risk team for specific customers.CARD_SUSPECTED_MISUSE_EMAILNo webhook
3DS OTP during 3DS online transaction.CARD_SAMPLE_EMAIL3DS OTP
This template is triggered when the transaction is declined due to the Security and Risk policy set by Nium.CARD_MISC_EMAILMiscellaneous
This template is triggered when the card system is down.CARD_SYSTEM_DOWN_EMAILCard System Down
This template is triggered after adding a beneficiary with the payout method of the value BANK.ADD_BENEFICIARY_BANK_EMAILNo webhook
This template is triggered after adding a beneficiary with the payout method of the value WALLET.ADD_BENEFICIARY_WALLET_EMAILNo webhook
This template is triggered after adding a beneficiary with the payout method of the value CASH.ADD_BENEFICIARY_CASH_EMAILNo webhook
This template is triggered after adding a beneficiary with the payout method of the valueCARD.ADD_BENEFICIARY_CARD_EMAILNo webhook
This template is triggered after editing a beneficiary with the payout method of the value BANK.EDIT_BENEFICIARY_BANK_EMAILNo webhook
This template is triggered after editing a beneficiary with the payout method of the valueWALLET.EDIT_BENEFICIARY_WALLET_EMAILNo webhook
This template is triggered after editing a beneficiary with the payout method of the value CASH.EDIT_BENEFICIARY_CASH_EMAILNo webhook
This template is triggered after editing a beneficiary with the payout method of the value CARD.EDIT_BENEFICIARY_CARD_EMAILNo webhook
This template is triggered after deleting a beneficiary with the payout method of the value BANK.DELETE_BENEFICIARY_BANK_EMAILNo webhook
This template is triggered after deleting a beneficiary with the payout method of the value WALLET.DELETE_BENEFICIARY_WALLET_EMAILNo webhook
This template is triggered after deleting a beneficiary with the payout method of the value CASH.DELETE_BENEFICIARY_CASH_EMAILNo webhook
This template is triggered after deleting a beneficiary with the payout method of the value CARD.DELETE_BENEFICIARY_CARD_EMAILNo webhook
This template is triggered when a remittance transaction is initiated with the payout method of the value BANK.REMIT_TRANSACTION_INITIATED_EMAILRemit Transaction Initiated
This template is triggered when a remittance transaction is initiated with the payout method of the value CASH.REMIT_TRANSACTION_INITIATED_CASH_EMAILRemit Transaction Initiated
This template is triggered when a remittance transaction is initiated with the payout method of the valueWALLET.REMIT_TRANSACTION_INITIATED_WALLET_EMAILRemit Transaction Initiated
This template is triggered when a remittance transaction is initiated with the payout method of the value CARD.REMIT_TRANSACTION_INITIATED_CARD_EMAILRemit Transaction Initiated
This template is triggered when a payout is done of the value sent to Sender.REMIT_TRANSACTION_SENT_TO_BANK_EMAILRemit Transaction Sent to Bank
This template is triggered when a payout is done of the value sent to Beneficiary.REMIT_TRANSACTION_SENT_TO_BANK_CASH_BENI_EMAILRemit Transaction Sent to Bank
This template is triggered when a remittance transaction is made with the payout method of the value BANK is paid.REMIT_TRANSACTION_PAID_EMAILRemit Transaction Paid
This template is triggered when a remittance transaction is made with the payout method of the value CASH is paid.REMIT_TRANSACTION_PAID_CASH_EMAILRemit Transaction Paid
This template is triggered when a remittance transaction is made with the payout method of the value WALLET is paid.REMIT_TRANSACTION_PAID_WALLET_EMAILRemit Transaction Paid
This template is triggered when a remittance transaction is made with the payout method of the value CARD is paid.REMIT_TRANSACTION_PAID_CARD_EMAILRemit Transaction Paid
This template is triggered to a beneficiary when a remittance transaction is made with the payout method of the value BANK is paid.REMIT_TRANSACTION_PAID_BANK_BENI_EMAILRemit Transaction Paid
This template is triggered to a beneficiary when a remittance transaction is made with the payout method of the value CASH is paid.REMIT_TRANSACTION_PAID_CASH_BENI_EMAILRemit Transaction Paid
This template is triggered to a beneficiary when a remittance transaction is made with the payout method of the value WALLET is paid.REMIT_TRANSACTION_PAID_WALLET_BENI_EMAILRemit Transaction Paid
This template is triggered to a beneficiary when a remittance transaction is made with the payout method of the value CARD is paid.REMIT_TRANSACTION_PAID_CARD_BENI_EMAILRemit Transaction Paid
This template is triggered when a remittance transaction is made with the payout method of the value BANK is rejected.REMIT_TRANSACTION_REJECTED_EMAILNo webhook
This template is triggered when a remittance transaction is made with the payout method of the value CASH is rejected.REMIT_TRANSACTION_REJECTED_CASH_EMAILNo webhook
This template is triggered when a remittance transaction is made with the payout method of the value WALLET is rejected.REMIT_TRANSACTION_REJECTED_WALLET_EMAILNo webhook
This template is triggered when a remittance transaction is made with the payout method of the value BANK is returned.REMIT_TRANSACTION_RETURNED_EMAILRemit Transaction Returned
This template is triggered when a remittance transaction is made with the payout method of the value CASH is returned.REMIT_TRANSACTION_RETURNED_CASH_EMAILRemit Transaction Returned
This template is triggered when a remittance transaction is made with the payout method of the value WALLET is returned.REMIT_TRANSACTION_RETURNED_WALLET_EMAILRemit Transaction Returned
This template is triggered when a remittance transaction is made with the payout method of the value CARD is returned.REMIT_TRANSACTION_RETURNED_CARD_EMAILRemit Transaction Returned
This template is triggered when the compliance status, as a result of the Know Your Business (KYB) process, is anything other than complete for a client.No email templateClient KYB Status
This template is triggered when an ADD_ON card is issued using the Add Card API.CARD_ADD_ON_CARD_ISSUE_EMAILAdd Card
This template is triggered when a card is activate.CARD_ACTIVATION_CARD_EMAILActivate Card
This template is triggered when the transaction is declined due to an insufficient client-prefund balance.CARD_INSUFFICIENT_FUNDS_DECLINED_EMAILInsufficient Funds Declined
This template is triggered after adding a beneficiary with a proxy payout method.ADD_BENEFICIARY_PROXY_EMAILNo webhook
This template is triggered after editing a beneficiary with a proxy payout method.EDIT_BENEFICIARY_PROXY_EMAILNo webhook
This template is triggered after deleting a beneficiary with a proxy payout method.DELETE_BENEFICIARY_PROXY_EMAILNo webhook
This template is triggered when a remittance transaction is initiated with a bank payout method.REMIT_TRANSACTION_INITIATED_PROXY_EMAILRemit Transaction Initiated
This template is triggered when a remittance transaction is paid with a proxy payout method.REMIT_TRANSACTION_PAID_PROXY_EMAILRemit Transaction Paid
This template is triggered when a remittance transaction is returned with a proxy payout method.REMIT_TRANSACTION_RETURNED_PROXY_EMAILRemit Transaction Returned
This template is triggered to a beneficiary when a remittance transaction is paid with a proxy payout method.REMIT_TRANSACTION_PAID_PROXY_BENT_EMAILRemit Transaction Paid