Vehicle Application History API
Vehicle Application History API
Introduction
The Vehicle Application History API returns the RTO application (transaction) history of a vehicle as recorded in the national vehicle registry. For every fee line ever raised against the vehicle, the API returns the application number it belongs to, the amount paid, the transaction date, the purpose (for example New Registration, Hypothecation Addition, Transfer of Ownership, MV Tax) and its status. This gives you a lifecycle view of the vehicle: when it was registered, whether it has been financed or refinanced, whether ownership has changed hands, and which taxes and fees have been paid.
To perform a lookup you are required to pass the vehicle registration number. The chassis number (VIN) is optional. When you provide it, the registry uses its last 5 characters as a second factor, so a correct registration number with a wrong chassis tail is treated as not found. When you omit it or send an empty string, the API determines the chassis automatically from the registration number and completes the lookup for you. You may pass the full chassis number; only the last 5 characters are used.
The response is a flat list of fee lines, not a list of applications. One application typically produces several lines (for example the registration fee, the smart-card fee and the road tax of a single new-registration application), and each line carries the same applicationNumber. Group the lines by applicationNumber if you need a per-application view. Lines are returned in registry order, which is not guaranteed to be chronological.
Amounts are returned as INR rupee strings without decimals (for example "13573"). Dates are returned as YYYY-MM-DD strings. Every call performs a fresh lookup against the registry; nothing is cached on our side, so a repeat call with the same inputs returns the current state of the record.
How to call the API
The API is called with an HTTP POST request to the endpoint below, with a JSON body and the following headers:
- Authorization: <Auth Token> — your Signzy API key.
- Content-Type: application/json
Only POST is supported. Requests with any other HTTP method are not processed.
A successful call returns HTTP 200 with the data wrapped in a result object:
{
"result": {
"applicationStatusDetails": {
"details": [ ... ]
}
}
}A failed call returns a non-2xx HTTP status with the details wrapped in an error object. reason is a machine-readable code you can branch on; message is a human-readable explanation:
{
"error": {
"name": "error",
"message": "Chassis number must be the last 5 characters",
"status": 400,
"reason": "VALIDATION_ERROR",
"type": "Bad Request",
"statusCode": 400
}
}Authentication failures (HTTP 401) are returned before the request reaches the API and are not wrapped in the error envelope. They have the shape {"message": "No API key found in request"} or {"message": "Invalid authentication credentials"}.
API Input Guidelines
- vehicleNumber is required and may not be omitted or empty. chassisNumber is optional.
- To make a lookup without a chassis number, omit the chassisNumber field or send an empty string (""). Do not send null — it is rejected with chassisNumber must be a string.
- When chassisNumber is omitted or empty, the API resolves the chassis for the registration number automatically. If the chassis cannot be determined, the call fails with 404 (vehicle not found) or 409 (Failed to get the Detail.). A 409 is safe to retry, or you can repeat the call with the chassisNumber supplied.
- Values that are present must be JSON strings. A null, boolean, numeric, object or array value is rejected with vehicleNumber must be a string / chassisNumber must be a string — for example "chassisNumber": 20861 (without quotes) is rejected even though the digits are correct.
- vehicleNumber is case-insensitive and whitespace-tolerant: mp04ab1234 and MP 04 AB 1234 are both accepted and normalised to MP04AB1234. Hyphens and other separators are not accepted (MP-04-AB-1234 is rejected with vehicleNumber is Invalid).
- After normalisation, vehicleNumber must be 6 to 10 alphanumeric characters and contain at least one digit; otherwise the call fails with Invalid registration number.
- When chassisNumber is provided, it must be at least 5 characters ignoring whitespace. Only the last 5 characters are used, so you may pass either the 5-character tail or the full 17-character chassis number. It is case-insensitive.
- The last 5 characters of chassisNumber must be actual characters from the chassis number. Masked values (a * or an XXXX placeholder in the last 5 characters) are rejected with Chassis number must be the last 5 characters.
- A correct registration number with a wrong chassis tail returns 404, the same response as an unknown vehicle. If you receive a 404 on a call that included chassisNumber, verify both fields before retrying — or retry without chassisNumber to let the API resolve the chassis itself.
- Unknown extra fields in the request body are ignored.
- The request body must be valid, non-empty JSON. An empty or malformed body is rejected with HTTP 400.
- The lookup is read-only and safe to retry. Allow a client-side timeout of at least 45 seconds; a typical call completes in 1–3 seconds, but the registry lookup may take longer under load.
Sample Curl
Preproduction
curl --location 'https://api-preproduction.signzy.app/api/v3/vehicle/applicationHistory' \
--header 'Content-Type: application/json' \
--header 'Authorization: <Auth Token>' \
--data '{
"vehicleNumber": "MP04AB1234",
"chassisNumber": "45678"
}'Production
curl --location 'https://api.signzy.app/api/v3/vehicle/applicationHistory' \
--header 'Content-Type: application/json' \
--header 'Authorization: <Auth Token>' \
--data '{
"vehicleNumber": "MP04AB1234",
"chassisNumber": "45678"
}'chassisNumber may be omitted or sent as an empty string; the same request without it is equally valid:
curl --location 'https://api.signzy.app/api/v3/vehicle/applicationHistory' \
--header 'Content-Type: application/json' \
--header 'Authorization: <Auth Token>' \
--data '{
"vehicleNumber": "MP04AB1234"
}'Input Parameters
Parameter | Description | Required |
|---|---|---|
Authorization | Header. Your Signzy API key. | Yes |
Content-Type | Header. Must be application/json. | Yes |
vehicleNumber | Body. Vehicle registration number, for example MP04AB1234. Case-insensitive; spaces are ignored; hyphens are not allowed. Must be 6–10 alphanumeric characters with at least one digit after normalisation. | Yes |
chassisNumber | Body. Last 5 characters of the vehicle's chassis number (VIN), for example 45678. You may pass the full chassis number; only the last 5 characters are used. When provided it must be a string of at least 5 unmasked characters; case-insensitive. Omit the field or send "" to have the API resolve the chassis automatically. | No |
Sample Response
{
"result": {
"applicationStatusDetails": {
"details": [
{
"applicationNumber": "MP25042107213456",
"transactionAmount": "300",
"transactionDate": "2025-04-21",
"transactionPurpose": "New Registration (RTO Side)",
"transactionStatus": "Successful"
},
{
"applicationNumber": "MP25042107213456",
"transactionAmount": "500",
"transactionDate": "2025-04-21",
"transactionPurpose": "Hypothecation Addition",
"transactionStatus": "Successful"
},
{
"applicationNumber": "MP25042107213456",
"transactionAmount": "200",
"transactionDate": "2025-04-21",
"transactionPurpose": "Plastic Card Fee",
"transactionStatus": "Successful"
},
{
"applicationNumber": "MP25042107213456",
"transactionAmount": "63",
"transactionDate": "2025-04-21",
"transactionPurpose": "Service/User Charge",
"transactionStatus": "Successful"
},
{
"applicationNumber": "MP25042107213456",
"transactionAmount": "6",
"transactionDate": "2025-04-21",
"transactionPurpose": "SGST",
"transactionStatus": "Successful"
},
{
"applicationNumber": "MP25042107213456",
"transactionAmount": "6",
"transactionDate": "2025-04-21",
"transactionPurpose": "CGST",
"transactionStatus": "Successful"
},
{
"applicationNumber": "MP25042107213456",
"transactionAmount": "13573",
"transactionDate": "2025-04-21",
"transactionPurpose": "MV Tax",
"transactionStatus": "Successful"
}
]
}
}
}Response Parameters
PARAMETER NAME | REQUIRED/OPTIONAL | DATA TYPE | DESCRIPTION |
|---|---|---|---|
result | Required | Object | Wrapper object present on every successful (200) response. |
result.applicationStatusDetails | Required | Object | Container for the vehicle's application history. |
result.applicationStatusDetails.details | Required | Array of objects | One element per fee line recorded against the vehicle. Several lines usually share one applicationNumber. Order follows the registry and is not guaranteed to be chronological. Rows are returned exactly as the registry records them and are not de-duplicated; two identical rows can occur, so do not treat rows as unique. |
details[].applicationNumber | Required | String | Registry application number the fee line belongs to, for example MP25042107213456. Repeats across all lines of the same application. The key is always present but the value may be an empty string ("") when the registry holds no application number for the line; handle the empty value when grouping. |
details[].transactionAmount | Required | String | Amount paid for this line in INR rupees, as a numeric string without decimals, for example "13573". |
details[].transactionDate | Required | String | Date of the transaction in YYYY-MM-DD format. |
details[].transactionPurpose | Required | String | Purpose of the fee line as recorded by the registry. Free text; commonly observed values include New Registration (RTO Side), Hypothecation Addition, Hypothecation Termination, Transfer of Ownership, Smart Card Fee, Plastic Card Fee, Postal Fee, Service/User Charge, MV Tax, Road Safety Fee/Tax/Cess, SGST, CGST. New values may appear; do not treat this list as closed. |
details[].transactionStatus | Required | String | Status of the fee line as recorded by the registry. Observed value: Successful. Treat the field as free text. |
Status Codes
CODE | REASON | MESSAGE |
|---|---|---|
400 | VALIDATION_ERROR | vehicleNumber is required |
400 | VALIDATION_ERROR | vehicleNumber cannot be empty |
400 | VALIDATION_ERROR | vehicleNumber must be a string |
400 | VALIDATION_ERROR | vehicleNumber is Invalid |
400 | VALIDATION_ERROR | Invalid registration number |
400 | VALIDATION_ERROR | chassisNumber must be a string |
400 | VALIDATION_ERROR | Chassis number must be the last 5 characters |
401 | — | No API key found in request |
401 | — | Invalid authentication credentials |
404 | Vehicle Data not found | No record was found for the given Registration number |
409 | Upstream Error | Error in fetching data from upstream |
409 | Upstream Error | Failed to get the Detail. |
Notes:
- 400 is returned before any lookup is performed. vehicleNumber is Invalid indicates a disallowed character such as a hyphen; Invalid registration number indicates the value is not 6–10 alphanumeric characters or contains no digit. Chassis number must be the last 5 characters indicates a provided chassisNumber that is shorter than 5 characters or masked in its last 5 characters.
- 404 is returned when the registration number is unknown, when a provided chassis tail does not match the registration number, or when the vehicle exists but has no transactions on record. The API does not distinguish between these cases.
- 409 indicates the registry could not be queried or did not respond in time (Error in fetching data from upstream), or that the chassis number could not be determined automatically for a call made without chassisNumber (Failed to get the Detail.). The request itself was valid; retry after a short delay, or retry with chassisNumber supplied.
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].