Challan Payment Initiate
Initiate Challan Payment
Introduction
This service starts the payment for one challan. On success, the total amount (challan amount + convenience fee) is reserved from your prepaid wallet and the challan is submitted for settlement with the authority. The response returns a requestId — your reference for status tracking, receipts and support.
There are two ways to call it:
- By quoteId (recommended) — pass only the quoteId from the Challan Payment Quote API. The amount and challan type are taken from the quote issued to you; the quote must be less than 7 days old.
- By challan details — pass all four of vehicleNumber, challanNumber, challanType, challanAmount together. The amount is verified server-side against the official source before any money moves — a mismatched amount is rejected, with the expected value returned in the error message.
A challan can only ever be paid once. Re-calling this API for a challan you already paid (or have in flight) returns your existing payment with an explanatory message — it never charges twice. No idempotency key is needed; the challan number itself acts as the idempotency key. If a different account is already paying the same challan, you receive status: "ALREADY_IN_PROGRESS" with no payment details.
All amounts are in INR.
How to call the API
You are required to pass your assigned access token as the Authorization header in the request. The endpoint is a POST with a JSON body.
Every successful response is wrapped in a result object. Every error is wrapped in an error object with a machine-readable reason and a human-readable message.
API Input Guidelines
- Send either quoteId or all four detail fields — a partial set is rejected.
- challanAmount is a number in rupees, up to 2 decimals (e.g. 500 or 1250.50).
- challanType must be ONLINE or OFFLINE, exactly as returned by the quote.
- Ensure your wallet balance covers the total payable — otherwise the call fails with 402 and no money is moved.
Sample Curl
Preproduction — by quoteId (recommended)
Preproduction — by challan details
curl --location 'https://api-preproduction.signzy.app/api/v3/challan/initiate-payment' \
--header 'Content-Type: application/json' \
--header 'Authorization: <Auth Token>' \
--data '{
"vehicleNumber": "RJ27UB5269",
"challanNumber": "RJ213002250405165235",
"challanType": "OFFLINE",
"challanAmount": 500
}'Production
curl --location 'https://api.signzy.app/api/v3/challan/initiate-payment' \
--header 'Content-Type: application/json' \
--header 'Authorization: <Auth Token>' \
--data '{
"quoteId": "<Quote ID>"
}'Input Parameters
Parameter | Description | Required |
|---|---|---|
quoteId | Quote id from Challan Payment Quote (≤ 7 days old). When present, no other field is needed | Either this… |
vehicleNumber | Vehicle registration number | …or all four together |
challanNumber | The challan to pay | …or all four together |
challanType | ONLINE or OFFLINE | …or all four together |
challanAmount | Challan (fine) amount in rupees — verified against the official source | …or all four together |
Authorization | Authorization token for API access (header) | Yes |
Content-Type | application/json (header) | Yes |
Sample Response
{
"result": {
"requestId": "8efee8d1-fac1-4906-aede-a3f090dbbcf8",
"status": "PROCESSING",
"challanType": "OFFLINE",
"vehicleNo": "RJ27UB5269",
"challanNumber": "RJ213002250405165235",
"currency": "INR",
"challanAmount": "500.00",
"convenienceFee": "400.00",
"totalCharged": "900.00",
"refundAmount": "0.00",
"paymentReceipt": null,
"failureReason": null,
"paidAt": null,
"lastUpdatedAt": "2026-08-03T10:12:45.000Z"
}
}Repeat call for a challan you already paid / have in flight (HTTP 200):
{
"result": {
"requestId": "8efee8d1-fac1-4906-aede-a3f090dbbcf8",
"status": "PROCESSING",
"message": "This challan is already being processed under request 8efee8d1-fac1-4906-aede-a3f090dbbcf8. You can track its status on the Payments page."
}
}Challan already being paid by another account (HTTP 200):
{
"result": {
"challanNumber": "RJ213002250405165235",
"status": "ALREADY_IN_PROGRESS",
"message": "This challan is already being processed by another entity"
}
}Response Parameters
PARAMETER NAME | REQUIRED/OPTIONAL | DATA TYPE | DESCRIPTION |
|---|---|---|---|
requestId | Yes | string (uuid) | Your payment reference — use it for status checks, receipts and support |
status | Yes | string | Payment lifecycle status: INITIATED, HOLD_PLACED, PROCESSING, PAID, FAILED, REFUND_INITIATED, REFUNDED. A fresh initiate returns PROCESSING |
challanType | Yes | string | ONLINE / OFFLINE |
vehicleNo | Yes | string | Vehicle the challan belongs to |
challanNumber | Yes | string | The challan being paid |
currency | Yes | string | Always INR |
challanAmount | Yes | string | Challan (fine) amount charged |
convenienceFee | Yes | string | Convenience fee charged |
totalCharged | Yes | string | challanAmount + convenienceFee — the amount reserved/charged to your wallet |
refundAmount | Yes | string | Any amount refunded back to your wallet; "0.00" initially |
paymentReceipt | Optional | string | Receipt link once the payment is PAID |
failureReason | Optional | string | Populated when the payment ends FAILED — the reserved amount is released back to your wallet |
paidAt | Optional | string | Settlement timestamp once PAID |
lastUpdatedAt | Yes | string | Last time this payment record changed |
message | Optional | string | Present only on repeat / already-in-progress responses — explains the situation |
Status Codes
CODE | REASON | MESSAGE |
|---|---|---|
400 | VALIDATION_ERROR | Provide either a quoteId, or vehicleNumber, challanNumber, challanType and challanAmount together |
400 | QUOTE_EXPIRED | This quote has expired — please request a new quote |
400 | AMOUNT_MISMATCH | Challan amount mismatch — the expected amount is included in the message |
401 | UNAUTHORIZED | Not Authorized to perform this action |
402 | INSUFFICIENT_BALANCE | Insufficient wallet balance — no money was moved |
404 | QUOTE_NOT_FOUND | Quote not found — please request a new quote |
404 | CHALLAN_NOT_FOUND | Challan number not found for this vehicle |
409 | CHALLAN_SEARCH_ERROR | Could not verify the challan right now — please retry |
422 | CONFIG_ERROR | Payment is temporarily unavailable. Please try again later |
Getting help
Please feel free to contact us if you have any questions, require clarification, or have ideas for how to make the documents or any of our services better.
You can reach out to us at [email protected].