🧪 Callback Lab PAYOUT endpoint

A runnable reference implementation of the PayRails webhook receiver and HMAC verifier described in the Webhook Authentication / HMAC Signature Verification sections of the PayIn and Payout guides.

📖 What is Callback Lab?

Callback Lab is a living integration guide, not a dashboard. It is the same code path your real PayIn and Payout webhooks travel through, so what you see below — the verification result, the headers, the payload — is exactly what your own backend would see and should check.

PayIn callback URLPOST /callbacks/payin.php
Payout callback URLPOST /callbacks/payout.php
Canonical endpointPOST /callback-example.php (still fully supported — classifies by payload shape when accessed directly)
This page's endpoint/callbacks/payout.php
PAYIN secretconfigured (current)
PAYOUT secretconfigured (current)
Stored deliveriesLast 20 (oldest automatically dropped)
  1. In your PayRails merchant Dashboard, set your PAYIN callback URL to https://<this-domain>/callbacks/payin.php and your PAYOUT callback URL to https://<this-domain>/callbacks/payout.php (see Configure Callback URLs on the PayIn/Payout pages). The original /callback-example.php URL still works too, and infers the type from the payload if you prefer a single shared endpoint.
  2. Copy the webhook secret shown when you configure or rotate it, and set PAYRAILS_WEBHOOK_SECRET_PAYIN / PAYRAILS_WEBHOOK_SECRET_PAYOUT in this site's .env file (add the _PREVIOUS variant too during a rotation grace period).
  3. Trigger a real PayIn/Payout transaction from this portal and wait for the callback to arrive — it will appear below, tagged with the endpoint and Callback Type it arrived on.
  4. Don't have a secret configured yet, or want to see the flow immediately? Use Simulate Callback at the bottom of this page.

🗂️ Latest Callback Summary

The most recent delivery (real or simulated) received on this endpoint, summarised in plain language before any raw data.

Callback Type
PAYIN
Verification
UNSIGNED
Received
2026-09-23T15:30:01+05:30
Endpoint
/callback-example.php
HTTP Method
POST
Source
live
Algorithm
—
Key Version
—
Response Sent
HTTP 200

🛡️ Verification Result

What each signature-verification outcome means, so you know how to react to it in your own webhook handler.

⚠ UNSIGNED

No signature headers were present on this delivery. This is expected if webhook authentication is not yet configured for this merchant/callback type — treat it as informational only.

Verification messageNo X-Payrails-Signature / Timestamp / Event-Id headers present. This delivery was not signed — webhook authentication may not be configured yet for this merchant/callback type.
Matched secret—
Signature—

📋 HTTP Headers Received

All headers PayRails sent with the latest delivery, exactly as received by PHP.

{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}

📦 Raw Callback Payload

The exact, unmodified request body (php://input) as PayRails sent it — this is what your HMAC signature must be computed over.

{"transaction_id":"f180f6a8-e907-4c05-8cf8-144146c42384","merchant_txn_id":"T20260922150536","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30850398518","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-23T10:00:00.850Z"}

🧩 Parsed Callback Data

The same body, decoded and pretty-printed as JSON for easier reading.

{
    "transaction_id": "f180f6a8-e907-4c05-8cf8-144146c42384",
    "merchant_txn_id": "T20260922150536",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30850398518",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-23T10:00:00.850Z"
}

🧠 Implementation Notes

A short checklist for your own webhook handler (see the full HMAC guide for details):

🧪 Simulate Callback

Builds a sample payload, signs it with your configured secret (if any), and runs it through the exact same verification code used for real deliveries — a safe way to see the whole flow without waiting for live traffic.

This endpoint is dedicated to PAYOUT callbacks, so only the matching simulate button is shown. Visit /callback-example.php directly to simulate either type from one page.

🔍 Callback History

Every stored delivery (real and simulated), newest first. The most recent one is expanded by default; click any other entry to expand it.

PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-23T15:30:01+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"f180f6a8-e907-4c05-8cf8-144146c42384","merchant_txn_id":"T20260922150536","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30850398518","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-23T10:00:00.850Z"}
Parsed Callback Data
{
    "transaction_id": "f180f6a8-e907-4c05-8cf8-144146c42384",
    "merchant_txn_id": "T20260922150536",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30850398518",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-23T10:00:00.850Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-22T10:30:01+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "315",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"f07464f3-dd2b-4030-8f35-e3ac51e5d2cf","merchant_txn_id":"T20260921093719","status":"CANCELLED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":null,"bank_reference":null,"failure_code":null,"failure_reason":"Transaction timed out","completed_at":"2026-09-22T05:00:01.019Z"}
Parsed Callback Data
{
    "transaction_id": "f07464f3-dd2b-4030-8f35-e3ac51e5d2cf",
    "merchant_txn_id": "T20260921093719",
    "status": "CANCELLED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": null,
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": "Transaction timed out",
    "completed_at": "2026-09-22T05:00:01.019Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-08T13:30:01+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "315",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"9ebec4aa-5987-4c4e-80d7-a52fb9e34517","merchant_txn_id":"T20260907123602","status":"CANCELLED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":null,"bank_reference":null,"failure_code":null,"failure_reason":"Transaction timed out","completed_at":"2026-09-08T08:00:00.433Z"}
Parsed Callback Data
{
    "transaction_id": "9ebec4aa-5987-4c4e-80d7-a52fb9e34517",
    "merchant_txn_id": "T20260907123602",
    "status": "CANCELLED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": null,
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": "Transaction timed out",
    "completed_at": "2026-09-08T08:00:00.433Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-08T12:30:01+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"359e0545-8cec-4a6e-b559-ec17d437527c","merchant_txn_id":"T20260907121807","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30555626879","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-08T07:00:01.073Z"}
Parsed Callback Data
{
    "transaction_id": "359e0545-8cec-4a6e-b559-ec17d437527c",
    "merchant_txn_id": "T20260907121807",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30555626879",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-08T07:00:01.073Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-07T16:30:01+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"8c9e721a-e7f2-4634-8e01-7c7af23a9534","merchant_txn_id":"T20260906162956","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30541188058","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-07T11:00:00.648Z"}
Parsed Callback Data
{
    "transaction_id": "8c9e721a-e7f2-4634-8e01-7c7af23a9534",
    "merchant_txn_id": "T20260906162956",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30541188058",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-07T11:00:00.648Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-07T15:30:03+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"0d3e2a75-2982-489b-b027-fcc19c58b827","merchant_txn_id":"T20260906150902","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30539896306","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-07T10:00:00.771Z"}
Parsed Callback Data
{
    "transaction_id": "0d3e2a75-2982-489b-b027-fcc19c58b827",
    "merchant_txn_id": "T20260906150902",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30539896306",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-07T10:00:00.771Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-07T15:30:01+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"b854e2fd-fa9c-4577-92c3-603c313f8531","merchant_txn_id":"T20260906144339","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30539467602","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-07T10:00:00.747Z"}
Parsed Callback Data
{
    "transaction_id": "b854e2fd-fa9c-4577-92c3-603c313f8531",
    "merchant_txn_id": "T20260906144339",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30539467602",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-07T10:00:00.747Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-03T17:30:04+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"1c972649-46a2-4f16-b17a-8a8b4eb25075","merchant_txn_id":"T20260902163316","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30458946848","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-03T12:00:01.656Z"}
Parsed Callback Data
{
    "transaction_id": "1c972649-46a2-4f16-b17a-8a8b4eb25075",
    "merchant_txn_id": "T20260902163316",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30458946848",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-03T12:00:01.656Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-03T17:30:04+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"263cd7c6-d961-4e4e-b2f1-68c6183344d0","merchant_txn_id":"T20260902165643","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30459323095","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-03T12:00:01.372Z"}
Parsed Callback Data
{
    "transaction_id": "263cd7c6-d961-4e4e-b2f1-68c6183344d0",
    "merchant_txn_id": "T20260902165643",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30459323095",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-03T12:00:01.372Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-03T17:30:04+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"0b5be70b-af2e-4492-b156-d895008f053c","merchant_txn_id":"T20260902163317","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30458946878","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-03T12:00:01.244Z"}
Parsed Callback Data
{
    "transaction_id": "0b5be70b-af2e-4492-b156-d895008f053c",
    "merchant_txn_id": "T20260902163317",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30458946878",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-03T12:00:01.244Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-03T17:30:03+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"b58a6a35-db74-400e-a200-9f1b82c50348","merchant_txn_id":"T20260902163312","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30458946849","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-03T12:00:01.047Z"}
Parsed Callback Data
{
    "transaction_id": "b58a6a35-db74-400e-a200-9f1b82c50348",
    "merchant_txn_id": "T20260902163312",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30458946849",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-03T12:00:01.047Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-09-03T17:30:01+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "302",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"c630fd36-642c-47d9-b961-9025dc73ec2e","merchant_txn_id":"T20260902163219","status":"FAILED","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"30458931131","bank_reference":null,"failure_code":null,"failure_reason":null,"completed_at":"2026-09-03T12:00:01.047Z"}
Parsed Callback Data
{
    "transaction_id": "c630fd36-642c-47d9-b961-9025dc73ec2e",
    "merchant_txn_id": "T20260902163219",
    "status": "FAILED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "30458931131",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-09-03T12:00:01.047Z"
}
PAYIN VERIFIED endpoint: /callbacks/payin.php source: simulated method: POST received: 2026-08-10T15:43:40+05:30 response: HTTP 200
Verification resultVERIFIED
AlgorithmHMAC_SHA256
Key version1
Matched secretcurrent
Signaturev1=abbb2e9ee32f1e79ef5bb419b536370b25297338387edd2e6dd664f4d08b421d
HTTP Headers Received
{
    "content-type": "application\/json",
    "x-payrails-signature": "v1=abbb2e9ee32f1e79ef5bb419b536370b25297338387edd2e6dd664f4d08b421d",
    "x-payrails-timestamp": "1786356820",
    "x-payrails-event-id": "bf69b6c957a235fcd3f8a8d603f563af",
    "x-payrails-algorithm": "HMAC_SHA256",
    "x-payrails-key-version": "1"
}
Raw Callback Payload
{"transaction_id":"sim-20260810154340","merchant_txn_id":"SIM-TXN-20260810154340","status":"SUCCESS","amount":"100","currency":"INR","provider":"stub","provider_txn_id":"SIMPAY123","bank_reference":"SIMBANK789","failure_code":null,"failure_reason":null,"completed_at":"2026-08-10T15:43:40+05:30"}
Parsed Callback Data
{
    "transaction_id": "sim-20260810154340",
    "merchant_txn_id": "SIM-TXN-20260810154340",
    "status": "SUCCESS",
    "amount": "100",
    "currency": "INR",
    "provider": "stub",
    "provider_txn_id": "SIMPAY123",
    "bank_reference": "SIMBANK789",
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-08-10T15:43:40+05:30"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-08-06T12:44:23+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "308",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"a2047260-1bd1-42b1-81bc-2850190b67e0","merchant_txn_id":"6446201839","status":"SUCCESS","amount":"100.00","currency":"INR","provider":"payu","provider_txn_id":"29960982288","bank_reference":"066127894907","failure_code":null,"failure_reason":null,"completed_at":"2026-08-06T07:14:23.261Z"}
Parsed Callback Data
{
    "transaction_id": "a2047260-1bd1-42b1-81bc-2850190b67e0",
    "merchant_txn_id": "6446201839",
    "status": "SUCCESS",
    "amount": "100.00",
    "currency": "INR",
    "provider": "payu",
    "provider_txn_id": "29960982288",
    "bank_reference": "066127894907",
    "failure_code": null,
    "failure_reason": null,
    "completed_at": "2026-08-06T07:14:23.261Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-07-31T00:30:00+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "346",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"eef7fe4e-d08d-4a21-81c5-7ac331c9273b","merchant_txn_id":"E2E_VISA_CERT_1785347983","status":"CANCELLED","amount":"100.00","currency":"INR","provider":"razorpay","provider_txn_id":"order_TJPUbZotfaiojc","bank_reference":null,"failure_code":null,"failure_reason":"Transaction timed out","completed_at":"2026-07-30T19:00:00.347Z"}
Parsed Callback Data
{
    "transaction_id": "eef7fe4e-d08d-4a21-81c5-7ac331c9273b",
    "merchant_txn_id": "E2E_VISA_CERT_1785347983",
    "status": "CANCELLED",
    "amount": "100.00",
    "currency": "INR",
    "provider": "razorpay",
    "provider_txn_id": "order_TJPUbZotfaiojc",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": "Transaction timed out",
    "completed_at": "2026-07-30T19:00:00.347Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-07-27T23:30:02+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "344",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"9a14effd-70f8-4474-8dd2-1e41088df012","merchant_txn_id":"P1TEST_VISA_1785088552","status":"CANCELLED","amount":"150.00","currency":"INR","provider":"razorpay","provider_txn_id":"order_TIDmExP3yIf3D0","bank_reference":null,"failure_code":null,"failure_reason":"Transaction timed out","completed_at":"2026-07-27T18:00:00.345Z"}
Parsed Callback Data
{
    "transaction_id": "9a14effd-70f8-4474-8dd2-1e41088df012",
    "merchant_txn_id": "P1TEST_VISA_1785088552",
    "status": "CANCELLED",
    "amount": "150.00",
    "currency": "INR",
    "provider": "razorpay",
    "provider_txn_id": "order_TIDmExP3yIf3D0",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": "Transaction timed out",
    "completed_at": "2026-07-27T18:00:00.345Z"
}
PAYIN UNSIGNED endpoint: /callback-example.php source: live method: POST received: 2026-07-27T23:30:00+05:30 response: HTTP 200
Verification resultUNSIGNED
Algorithm—
Key version—
Matched secret—
Signature—
HTTP Headers Received
{
    "accept-encoding": "gzip, compress, deflate, br",
    "user-agent": "axios\/1.13.2",
    "content-type": "application\/json",
    "accept": "application\/json, text\/plain, *\/*",
    "content-length": "343",
    "x-forwarded-for": "213.210.37.89",
    "x-real-ip": "213.210.37.89",
    "x-forwarded-host": "dummy.payrails.in",
    "host": "dummy.payrails.in"
}
Raw Callback Payload
{"transaction_id":"f604ccf7-c5da-4cd8-b573-a6bdedf703f5","merchant_txn_id":"P1TEST_UPI_1785088533","status":"CANCELLED","amount":"150.00","currency":"INR","provider":"razorpay","provider_txn_id":"order_TIDltfZsNHl3Z0","bank_reference":null,"failure_code":null,"failure_reason":"Transaction timed out","completed_at":"2026-07-27T18:00:00.308Z"}
Parsed Callback Data
{
    "transaction_id": "f604ccf7-c5da-4cd8-b573-a6bdedf703f5",
    "merchant_txn_id": "P1TEST_UPI_1785088533",
    "status": "CANCELLED",
    "amount": "150.00",
    "currency": "INR",
    "provider": "razorpay",
    "provider_txn_id": "order_TIDltfZsNHl3Z0",
    "bank_reference": null,
    "failure_code": null,
    "failure_reason": "Transaction timed out",
    "completed_at": "2026-07-27T18:00:00.308Z"
}