Webhook Version V1
Webhooks are events that notify you about the payment status. All Payout integrations should establish a webhook to listen to payout events, like status changes on payments. Webhooks are HTTP callbacks that receive notification messages for events.
Webhooks help you receive automatic updates and are significant for completing the integration with Telr. Webhooks are triggered with a request from your side, for example, when a transfer fails or when a daily report is available. Requests get processed both synchronously and asynchronously. In rare scenarios, for some payment methods, the outcome may take a longer duration to confirm. Telr notifies you once we get updates from the bank about the payment status.
Do not go live without signature verification if you are using webhooks.
The oldest API keys, that are active, for Webhook signature verification to avoid signature mismatch errors.
Add a webhook
Follow the instructions below to configure webhooks for version 2 APIs:
- Log in to the Payouts dashboard using your credentials.
- Navigate to Developers > Webhooks.
- Click Add Webhook URL in the Webhooks page.
- In the Add Webhook popup, enter the following information:
- Webhook URL - Enter the URL where you want to receive the transfer related notifications.
- Select a webhook version - Select V1 from the dropdown menu.
- Click Test & Add Webhook.
Webhook events
Payouts webhooks enable you to receive updates about all event-driven activities originating from your account. Below is the list of payouts webhooks:
Events | Notifications |
---|---|
TRANSFER_SUCCESS | Transfer successful at the bank and account debited. |
TRANSFER_FAILED | Sent whenever a transfer attempt fails. |
TRANSFER_REVERSED | Transfer reversed by the beneficiary bank. |
CREDIT_CONFIRMATION | Confirmation of balance credit. |
TRANSFER_ACKNOWLEDGED | After the beneficiary bank has deposited the money it confirms the transfer. |
TRANSFER_REJECTED | Transfer rejected by Telr. |
BENEFICIARY_INCIDENT | Sent whenever a beneficiary incident is created/resolved. |
LOW_BALANCE_ALERT | Payouts recharge account low balance alert. |
BULK_TRANSFER_REJECTED | One of the transfers in the batch transfer file has been rejected. |
TRANSFER_SUCCESS
Sent when a transfer is attempted successfully at the bank and the beneficiary account is credited.
Parameters | Description |
---|---|
event | It contains the name of the event which just occurred. Value = TRANSFER_SUCCESS. |
transferId | Id of the transfer passed by the merchant. |
referenceId | Id of the transfer generated by Telr. |
acknowledged | The flag indicates if the beneficiary bank has acknowledged the transfer. |
eventTime | Transfer initiation time. |
utr | Unique transaction reference number provided by the bank. |
signature | A unique string that helps distinguish that the request is genuine and initiated by Telr. |
What does the response parameter ‘acknowledged’ mean?
The acknowledged parameter value conveys if the beneficiary received the funds by checking its value. Ack = 1 or 0 . 1 denotes the beneficiary received funds, and 0 denotes the beneficiary had not received funds.
The cash flow happens as explained below:
-
Debit: The debit of the transfers happens on the remitter account. After a successful debit, the beneficiary bank does further processing. When only the debit is successful, Ack = 0.
-
Credit: The beneficiary bank credits the fund to the account. The transfer is sent from the remitter bank to the beneficiary bank after a successful debit. When the credit to the end beneficiary is successful, Ack = 1.
To confirm the status of a payout, you need to check the acknowledged parameter value. If the value is 1, you can mark the transfer as successful. However, if the value is 0, you must either wait for the TRANSFER_ACKNOWLEDGED webhook event or use the Get Transfer Status API and confirm the acknowledged value.
TRANSFER_FAILED
Sent when a transfer attempt fails.
Parameters | Description |
---|---|
event | It contains the name of the event which just occurred. Value = TRANSFER_FAILED. |
transferId | Id of the transfer passed by the merchant |
referenceId | Id of the transfer generated by Telr. |
reason | Reason for failure. |
signature | A unique string that helps distinguish that the request is genuine and initiated by Telr. |
TRANSFER_REVERSED
Sent when the beneficiary bank reverses a transfer.
Parameters | Description |
---|---|
event | It contains the name of the event which just occurred. Value = TRANSFER_REVERSED. |
transferId | Id of the transfer passed by the merchant. |
referenceId | Id of the transfer generated by Telr. |
eventTime | Time at which the transfer was reversed. |
reason | Reason for failure. |
signature | A unique string which helps distinguish that the request is genuine and initiated by Telr. |
CREDIT_CONFIRMATION
Sent when the balance credit is confirmed.
Parameters | Description |
---|---|
event | It contains the name of the event which just occurred. Value = CREDIT_CONFIRMATION. |
ledgerBalance | The overall balance of ledger. |
amount | Amount deposited. |
utr | Unique transaction reference number provided by the bank. |
signature | A unique string which helps distinguish that the request is genuine and initiated by Telr. |
TRANSFER_ACKNOWLEDGED
Sent when the bank acknowledges a transfer.
Parameters | Description |
---|---|
event | It contains the name of the event which just occurred. Value = TRANSFER_ACKNOWLEDGED. |
transferId | Id of the transfer passed by the merchant. |
referenceId | Id of the transfer generated by Telr. |
acknowledged | The flag which illustrates if the beneficiary bank acknowledges the transfer. |
signature | A unique string which helps distinguish that the request is genuine and initiated by Telr. |
TRANSFER_REJECTED
Sent when a transfer is rejected.
Parameter | Description |
---|---|
event | It contains the name of the event which just occurred. Value = TRANSFER_REJECTED. |
transferId | Id of the transfer passed by the merchant. |
referenceId | Id of the transfer generated by Telr. |
reason | Reason for rejection. |
signature | A unique string that helps distinguish that the request is genuine and initiated by Telr. |
BENEFICIARY_INCIDENT
Sent when a beneficiary incident is created or resolved.
Parameter | Description |
---|---|
event | It contains the name of the event which just occurred. Value = BENEFICIARY_INCIDENT. |
beneEntity | The entity of the beneficiary (BANK). |
id | Identifier of the incident. |
mode | Mode of the incident (IMPS/NEFT) |
startedAt | Start time of the incident. |
status | Status of the incident (ACTIVE/RESOLVED). |
isScheduled | Scheduled or unscheduled incident (true or false). |
severity | The severity of the incident (LOW/HIGH). |
entityName | Name of the entity on which incident is created (Bank Name). |
entityCode | Code of the entity on which incident is created. |
resolvedAt | Resolution time of the incident. |
LOW_BALANCE_ALERT
Sent when the payout balance is low.
Parameter | Description |
---|---|
event | It contains the name of the event which just occurred. Value = LOW_BALANCE_ALERT |
currentBalance | The current balance of the beneficiary account |
alertTime | Alert initiation time. |
signature | A unique string which helps distinguish that the request is genuine and initiated by Telr. |
BULK_TRANSFER_REJECTED
Sent when one of the transfers in the batch transfer file has been rejected.
Parameter | Description |
---|---|
event | One of the transfers in the batch transfer file has been rejected |
transferId | It is the unique ID you created to identify the transfer |
batchTransferReferenceId | It is the ID created by Telr for internal reference. |
eventTime | Event initiation time |
reason | It describes the reason for the rejection. |
signature | A unique string which helps distinguish that the request is genuine and initiated by Telr. |
Delay in Receiving the Response
Telr receives a response from the bank with the status of the transfer instantly. At times the response may get delayed due to various reasons, and the transaction status will be marked as Pending, till we get a response.
Telr polls the transaction status from the bank for the next 72 hours. In case we do not receive the status of a transaction after 72 hours, the transaction needs to be manually reconciled.
Signature Verification
Telr sends a signature alongside every webhook, verifying this signature ( passed along with the POST parameters ) is mandatory before processing any response. It helps authenticate that the webhook is from Telr.
We strongly recommend whitelisting Telr production IP to help make your communication with us more secure.
Following are the steps to verify Telr signature:
- Get all the POST parameters except ‘signature’ and assign it to an array as key-value pair.
- Sort the array based on keys.
- Concatenate all the values in this array and resultant is the post data (say, postData).
- postData needs to be encrypted using SHA-256, and then base64 encoded.
- Now verify if both the signature calculated and the signature received match.
- Proceed further if it matches, else discards the request.
Our libraries also support signature verification. To verify the signature returned by Telr call the following methods from the library.
Below are the code snippets that can help you verify the signature:
Webhook Retries
Telr webhooks service does its best to deliver events to your webhook endpoint. It is best practice for your application to respond to the callback. Our webhook service may send many payloads to a single endpoint in quick succession. You will need to build an application and configure your server to receive the response we send when events get triggered during the payout process.
Your server should return a 200 HTTP status code to acknowledge that you received the webhook without any issues. Any other information you return in the request headers or request body gets ignored. Any response code outside the 200 range, including 3xx codes, indicates that you did not receive the webhook.
When Telr does not get the acknowledgement due to any reason, we retry to establish the communication at regular intervals. If we do not receive the response after few attempts, we gradually decrease the rate of retries. Based on this count, the service is disabled if it fails more than five times.
If do not receive notifications from Cashfree Payments as expected, please fill out the Support Form.
IPs to whitelist
When you decide to consume the webhooks, first, you need to verify if your systems need an IP whitelisting to be done at your end or not. Accordingly you can whitelist the below IPs of Telr:
UAT:
52.66.25.127
15.206.45.168
Prod:
52.66.101.190
3.109.102.144
3.111.60.173
18.60.134.245
18.60.183.142
Port: 443 (Secured)