Introduction
Fastag Dashboard APIs
This document includes Fastag Dashboard APIs that provide integration with the National Electronic Toll Collection (NETC) system for FASTag payments. These APIs are used for:
- Customer onboarding and management
- Fastag application submission and tracking
- Wallet management and recharge
- Transaction history and reporting
- Vehicle management
- Complaint handling
API Categories
The Fastag APIs are organized into the following categories:
- Landing Page - Customer Summary, Transaction List, Fastag List, Get Fastag Applications
- Onboarding APIs - Application Creation, Submission, Add vehicle, Validate tag
- Proof of Fitment - Vehicle Fitment Details
- Vehicle Update APIs - Initiate, calculate cost, submit, list, get details
- Transaction APIs - Transaction history, statements, application transactions
- Auto-Recharge APIs - Automatic wallet top-up configuration and OTP validation
- Complaint APIs - Raise and track complaints
HTTP Response Codes
200 - OK: For all successful queries. Any business logic or validation error can have a response as 200 OK but the data will have status = FAILURE. Details of this behavior will be explained later in this document.
400 - Bad Request: Invalid request parameters, missing required fields, or malformed request body. Check the request payload for validation errors.
401 - Unauthorized: In case of signature mismatch, invalid credentials, or missing authentication token. The request lacks valid authentication credentials.
403 - Forbidden: Access denied - insufficient permissions to access the requested resource. User is authenticated but not authorized.
404 - Not Found: The requested resource (API endpoint or data) does not exist or has been removed.
500 - Internal Server Error: This error will only come in case any of the internal service is down. Some examples are network issue, server crashes, database connection failures, or unhandled exceptions.
Fastag API Response Codes
Fastag Dashboard APIs use the following response codes in the response_code field:
| Response Code |
Description |
00 |
Success - Request completed successfully |
BAD_REQUEST |
Invalid request parameters or format |
UNAUTHORIZED |
Authentication failed or missing credentials |
FORBIDDEN |
Access denied - insufficient permissions |
INTERNAL_SERVER_ERROR |
Internal server error |
CUSTOMER_NOT_FOUND |
Customer not found |
APPLICATION_NOT_FOUND |
Fastag application not found |
INVALID_REQUEST |
Request validation failed |
OTP_ALREADY_ACTIVE |
OTP already active - please wait or wait for expiry |
NO_ACTIVE_OTP |
No active OTP found |
OTP_REFERENCE_MISMATCH |
OTP reference mismatch |
OTP_GENERATION_ERROR |
OTP generation failed |
OTP_VALIDATION_ERROR |
OTP validation failed |
WALLET_INELIGIBLE |
Wallet not eligible for operation |
WALLET_CREDIT_FREEZE |
Wallet is credit-frozen |
WALLET_DEBIT_FREEZE |
Wallet is debit-frozen |
WALLET_FREEZE |
Wallet is completely frozen |
WALLET_CLOSED |
Wallet is closed |
WALLET_NOT_FOUND |
Wallet not found |
WALLET_INACTIVE |
Wallet is inactive |
WALLET_LIMIT_EXCEEDED |
Wallet limit exceeded |
ACTIVE_TRANSACTION_EXISTS |
Transaction already in progress |
INCOMPLETE_CUSTOMER_DETAILS |
Customer details incomplete |
NOT_FOUND |
Request resource not found |
SMS_ERROR |
SMS sending failed |
REPLAYED_REQUEST_ERROR |
Request already processed |
REQUEST_DECODE_FAILURE |
Request decode failed |
INVALID_REQUEST_PAYLOAD |
Invalid request payload |
RECHARGE_FAILED |
Wallet recharge failed |
AUTO_RECHARGE_ENABLE_FAILED |
Auto-recharge enable failed |
VALIDATION_ERROR |
Validation error |
DATABASE_ERROR |
Database error |
Note:
For Fastag APIs, always check the status field first. If status is FAILURE, check response_code and response_message for error details.
Request Structure
{
"x-client-source": "811",
"Authorization": Bearer <session_token>,
"x-customer-crn": "100196918"
}
For Fastag Dashboard APIs, all the request must have following headers.
| Header Name |
Description |
Required |
| x-client-source |
Source of the request ("811") |
Yes |
| Authorization |
OAuth Bearer token |
Yes |
| x-customer-crn |
Customer Reference Number (CRN) |
Yes |
Response Structure
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
// API-specific response data
}
}
| Parameter |
Data Type |
Description |
| status |
String |
"SUCCESS" or "FAILURE" |
| response_code |
String |
Response code (e.g., "00", "BAD_REQUEST", etc.,) |
| response_message |
String |
Human-readable message |
| payload |
Object/Array |
API-specific response data (null on error) |
Success Response Example
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"customerDetails": {
"crn": "100196918",
"mobileNumber": "9876543210"
}
}
}
Failure Response Example
{
"status": "FAILURE",
"response_code": "CUSTOMER_NOT_FOUND",
"response_message": "Customer not found",
"payload": null
}
Landing Page
Customer Status
Checks whether the customer is registered with the Fastag system. This endpoint is typically called first to determine the customer's registration state before making other API calls.
Endpoint: GET /api/v1/fastag/dashboard/customer/status
curl -L -X GET '{{host}}/api/v1/fastag/dashboard/customer/status' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'Authorization: Bearer <session_token>' \
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"is_registered": true
}
}
Response Parameters:
| Parameter |
Data Type |
Description |
| is_registered |
Boolean |
Whether the customer is registered with the Fastag system |
Error Codes:
| Error Code |
Description |
UNAUTHORIZED |
No active session found or invalid token |
Customer Summary
Retrieves the customer's information including Wallet and Fastag details.
Endpoint: GET /api/v1/fastag/dashboard/customer/summary
curl -L -X GET '{{host}}/api/v1/fastag/dashboard/customer/summary' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"customer_details": {
"customer_id": "CUST_123456",
"customer_seq_id": "SEQ_001",
"crn": "100196918",
"mobile_number": "9876543210",
"first_name": "John",
"middle_name": "Kumar",
"last_name": "Doe",
"kyc_status": "FKYC",
"email_address": "john.doe@example.com",
"delivery_address": {
"address_1": "123 Main Street",
"address_2": "Apt 4B",
"address_3": "Near Station",
"city": "Mumbai",
"state": "Maharashtra",
"pincode": "400001"
},
"total_active_tags": 2,
"total_tag_count": 2,
"auto_recharge_enabled": true,
"auto_recharge_wallet": "MASTER",
"is_wallet_closure_application_raised": false
},
"wallet_details": [
{
"balance": "1500.00",
"status": "Active",
"wallet_type": "PPI"
}
],
"fastag_details": [
{
"fastag_id": "FTG_001",
"vehicle_id": "Veh_001",
"tag_id": "TAG001",
"tid": "TID001",
"tag_serial_number": "SN001234",
"barcode": "BC001234",
"fastag_status": "ACTIVE",
"vrn": "MH01AB1234",
"vin": "VIN1234567890",
"vehicle_class": "VC4",
"kyv_application_id": "KYV_001",
"kyv_application_ref_id": "KYV_REF_001",
"kyv_status": "APPROVED",
"tag_register_date": "2024-01-15T10:30:00Z",
"security_deposit": 200.00,
"tag_cost": 100.00,
"exception_codes": [
{
"code": "04",
"remarks": "Low balance"
}
],
"mobile_number": "9876543210",
"is_commercial_vehicle": false
}
]
}
}
Response Parameters:
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Customer not registered / Customer not found |
INTERNAL_SERVER_ERROR |
Failed to retrieve customer summary |
Customer Details Object
| Parameter |
Data Type |
Description |
| customer_id |
String |
Internal customer ID |
| customer_seq_id |
String |
Customer sequence ID |
| crn |
String |
Customer Reference Number |
| mobile_number |
String |
Customer mobile number |
| first_name |
String |
Customer first name |
| middle_name |
String |
Customer middle name |
| last_name |
String |
Customer last name |
| kyc_status |
Enum |
KYC verification status. See KycStatus |
| email_address |
String |
Customer email |
| delivery_address |
Object(Delivery Details Object) |
Delivery address details |
| total_active_tags |
Number |
Count of active tags |
| total_tag_count |
Number |
Total tag count |
| auto_recharge_enabled |
Boolean |
Whether auto-recharge is enabled |
| auto_recharge_wallet |
String |
Auto-recharge wallet type. See FastagWalletType |
| is_wallet_closure_application_raised |
Boolean |
Whether wallet closure application has been raised |
Delivery Details Object
| Parameter |
Data Type |
Description |
| address_1 |
String |
Address line 1 |
| address_2 |
String |
Address line 2 (optional) |
| address_3 |
String |
Address line 3 (optional) |
| city |
String |
City |
| state |
String |
State |
| pincode |
String |
Pincode |
Wallet Details Object
| Parameter |
Data Type |
Description |
| balance |
String |
Wallet balance |
| status |
String |
Wallet status. See WalletStatus |
| wallet_type |
String |
Wallet type. See WalletType |
Fastag Detail Object
| Parameter |
Data Type |
Description |
| fastag_id |
String |
Fastag ID |
| vehicle_id |
String |
Vehicle ID |
| tag_id |
String |
Tag ID |
| tid |
String |
Transducer ID |
| tag_serial_number |
String |
Tag serial number |
| barcode |
String |
Barcode |
| fastag_status |
String |
Fastag status. See FastagStatus |
| vrn |
String |
Vehicle registration number (optional) |
| vin |
String |
Vehicle identification number |
| vehicle_class |
Enum |
Vehicle class. See VehicleClass |
| kyv_application_id |
String |
KYV application ID (optional) |
| kyv_application_ref_id |
String |
KYV application reference ID (optional) |
| kyv_status |
Enum |
KYV application status. See KyvApplicationStatus |
| tag_register_date |
DateTime |
Tag registration date (UTC) |
| security_deposit |
Decimal |
Security deposit amount |
| tag_cost |
Decimal |
Tag cost |
| exception_codes |
Array(Exception Code Detail Object) |
Active exception codes |
| mobile_number |
String |
Registered mobile number |
| is_commercial_vehicle |
Boolean |
Commercial vehicle flag |
Exception Code Detail Object
| Parameter |
Data Type |
Description |
| code |
String |
Exception code |
| remarks |
String |
Remarks (optional) |
Transaction List
Lists all transactions for the customer with filtering and pagination.
Endpoint: POST /api/v1/fastag/dashboard/customer/transactions/list
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/transactions/list' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"vehicle_list": ["KA09AB1234"],
"page_no": 1,
"page_size": 10,
"status": ["SUCCESS"],
"initiation_start_time": "2024-01-01T00:00:00Z",
"initiation_end_time": "2024-01-31T23:59:59Z",
"sources": ["NETC"],
"transaction_types": ["DR"]
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"transactions": [
{
"id": "TXN_123456",
"gateway_ref_id": "GW_REF_789",
"amount": "150.75",
"transaction_init_timestamp": "2024-01-15T10:30:00Z",
"transaction_processing_time": "2024-01-15T10:31:00Z",
"transaction_type": "DEBIT_TOLL",
"transaction_status": "SUCCESS",
"wallet_type": "PPI_MASTER",
"wallet_transaction_id": "WALLET_TXN_001",
"plaza_name": "KIAL Toll Plaza",
"vrn": "KA01AB1234",
"vin": "CHASSIS123456",
"tag_id": "TAG123456",
"transaction_description": "Toll payment",
"txn_narration": "Narration text"
}
],
"summary_details": {
"total_row_count": 10
}
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| vehicle_list |
Array |
List of vehicle IDs to filter |
No |
| page_no |
Number |
Page number (1-indexed) |
Yes |
| page_size |
Number |
Items per page (10, 20, 50) |
Yes |
| status |
Array(Enum) |
Filter by transaction status. See DbTransactionStatus |
No |
| initiation_start_time |
String |
Start time in RFC3339 format |
Yes |
| initiation_end_time |
String |
End time in RFC3339 format |
Yes |
| sources |
Array(Enum) |
Filter by transaction source. See FastagTransactionSource |
No |
| transaction_types |
Array(Enum) |
Filter by transaction type. See DbTransactionType |
No |
Note for status parameter: If you do not wish to filter by transaction status, omit the status field entirely from the request. If the field is included, it must contain at least one valid status (i.e., it cannot be an empty array).
Response Parameters:
Transaction Detail Object
| Parameter |
Data Type |
Description |
| id |
UUID |
Internal transaction ID |
| gateway_ref_id |
String |
Gateway transaction reference ID |
| amount |
String |
Transaction amount |
| transaction_init_timestamp |
DateTime |
When transaction was initiated |
| transaction_processing_time |
DateTime |
When transaction was processed |
| transaction_type |
String |
Transaction type. See DbTransactionType |
| transaction_status |
String |
Transaction status. See DbTransactionStatus |
| wallet_type |
String |
Type of wallet |
| wallet_transaction_id |
UUID |
Internal wallet transaction identifier |
| plaza_name |
String |
Toll plaza name |
| vrn |
String |
Vehicle registration number |
| vin |
String |
Vehicle identification number |
| tag_id |
String |
Fastag tag ID |
| transaction_description |
String |
Human-readable description |
| txn_narration |
String |
Transaction narration |
Summary Details Object
| Parameter |
Data Type |
Description |
| total_row_count |
Integer |
Total number of matching records |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Customer not registered / Validation error |
INTERNAL_SERVER_ERROR |
Failed to list transactions |
Lists all Fastags associated with the customer with filtering and pagination.
Endpoint: POST /api/v1/fastag/dashboard/customer/fastags/list
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/fastags/list' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"crn": "100196918",
"page_no": 1,
"page_size": 10,
"status": ["ACTIVE"],
"send_fastag_exception_codes": true,
"vrn": "MH01AB1234",
"tag_id": "1234567890ABCDEF12345678",
"mobile_number": "9876543210",
"start_time": "2024-01-01T00:00:00Z",
"end_time": "2024-12-31T23:59:59Z",
"orderby": "asc"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"fastag_details": [
{
"customer_ref_id": "100196918",
"fastag_id": "550e8400-e29b-41d4-a716-446655440000",
"vehicle_id": "660e8400-e29b-41d4-a716-446655440000",
"tag_id": "1234567890ABCDEF12345678",
"tid": "TID123456",
"tag_serial_number": "SN123456",
"barcode": "BC123456",
"fastag_status": "ACTIVE",
"vrn": "MH01AB1234",
"vin": "CHASSIS123456",
"vehicle_class": "VC4",
"tag_register_date": "2024-01-15T10:30:00Z",
"security_deposit": 200.00,
"tag_cost": 100.00,
"mobile_number": "9876543210",
"exception_code_details": []
}
],
"total_pages": 1
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| crn |
String |
Customer Reference Number (auto-set from session) |
No |
| page_no |
Number |
Page number (1-indexed) |
Yes |
| page_size |
Number |
Items per page |
Yes |
| status |
Array(FastagStatus) |
Filter by Fastag status |
Yes |
| send_fastag_exception_codes |
Boolean |
Include exception codes in response |
Yes |
| vrn |
String |
Filter by vehicle registration number |
No |
| tag_id |
String |
Filter by tag ID |
No |
| mobile_number |
String |
Filter by mobile number |
No |
| start_time |
String |
Start date in RFC3339 format |
No |
| end_time |
String |
End date in RFC3339 format |
No |
| orderby |
String - See OrderBy |
Sort order |
No |
Response Parameters:
| Parameter |
Data Type |
Description |
| fastag_details |
Array(Fastag Details Object) |
List of Fastag details |
| total_pages |
Number |
Total number of pages available |
Fastag Details Object
| Parameter |
Data Type |
Description |
| customer_ref_id |
String |
Customer reference ID |
| fastag_id |
String |
Fastag ID |
| vehicle_id |
String |
Vehicle ID |
| tag_id |
String |
Tag ID |
| tid |
String |
Tag TID |
| tag_serial_number |
String |
Tag serial number |
| barcode |
String |
Barcode |
| fastag_status |
String - See FastagStatus |
Fastag status |
| vrn |
String |
Vehicle registration number (optional) |
| vin |
String |
Vehicle identification number (chassis) |
| vehicle_class |
String - See VehicleClass |
Vehicle class |
| tag_register_date |
String |
Tag registration date (ISO 8601) |
| security_deposit |
Decimal |
Security deposit amount |
| tag_cost |
Decimal |
Tag cost |
| mobile_number |
String |
Mobile number |
| exception_code_details |
Array(Exception Code Details Object) |
Exception code details (optional) |
Exception Code Details Object
| Parameter |
Data Type |
Description |
| exc_code |
String |
Exception code |
| source |
String - See ExceptionSource |
Exception source |
| status |
String - See ExceptionCodeStatus |
Exception code status |
| start_time |
String |
Start time (ISO 8601) |
| end_time |
String |
End time (ISO 8601, optional) |
Error Codes:
| Error Code |
Description |
UNAUTHORIZED |
Your session isn't valid, please try logging again |
BAD_REQUEST |
Customer not found / Breached max page size limit / Validation error |
INTERNAL_SERVER_ERROR |
Internal server error |
Get Latest Fastag Applications
Fetches all the application associated with the customer's CRN.
Endpoint: GET /api/v1/fastag/dashboard/customer/applications/latest
curl -L -X GET '{{host}}/api/v1/fastag/dashboard/customer/applications/latest' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>'
# Response: 200 OK
{
"response_code": "00",
"response_message": "Request Success",
"status": "SUCCESS",
"payload": {
"application_details": {
"applicationId": "dcb2691b-1980-4a95-a8a5-dc7c40cefeb7",
"applicationRefId": "FA8BD95CEC9D85467ABEDD8A0C3CDC0FAB",
"applicationStatus": "PAYMENT_INITIATED",
"crn": "909461524",
"deliveryAddress": {
"address_1": "123 Main St",
"address_2": "Apt 4B",
"address_3": "Near City Center",
"city": "Mumbai",
"pincode": "400001",
"state": "MH"
},
"demographicAddress": {
"address_1": "456 Park Ave",
"address_2": "Floor 3",
"address_3": "Block B",
"city": "Delhi",
"pincode": "110001",
"state": "DL"
},
"email": "john.doe@example.com",
"fullName": "John Doe",
"mobileNumber": "6545123313"
},
"refund_details": [],
"transaction_details": [
{
"amount": "600.00",
"orderId": "pg_09c275d8-a87c-4beb-a38c-5c89f18bbf4d",
"paymentMode": "PG",
"transactionCompletionDate": "2026-04-29 15:35:00.000000 +00:00",
"transactionId": "a3ea86e4094649d4bcacf6fe858f42fd",
"transactionRefId": "REF_789",
"transactionInitiationDate": "2026-04-29 15:31:26.692273 +00:00",
"transactionStatus": "PENDING"
}
],
"vehicle_details": [
{
"applicationId": "dcb2691b-1980-4a95-a8a5-dc7c40cefeb7",
"pricing": {
"initial_wallet_load": "300.00",
"non_discounted_tag_price": "100.00",
"tag_cost_breakdown": {
"gst": "15.25",
"tag_cost_base": "84.75"
},
"tag_price": "100.00",
"tag_security_deposit": "200.00",
"vc": "VC4",
"vehicle_linking_id": "87f5881c-3655-4d4f-ae0f-223acb763d29"
},
"rcDocuments": [
{
"downloadUri": "https://s3-bucket.amazonaws.com/docs/RC_F.jpeg",
"extension": "jpeg",
"path": "909461524/dcb2691b-1980-4a95-a8a5-dc7c40cefeb7/87f5881c-3655-4d4f-ae0f-223acb763d29/RC_F",
"remarks": "Document uploaded",
"reupload_count": 0,
"reupload_path": "reupload/RC_F_path",
"status": "Pending",
"status_updated_at": "2026-04-29T15:31:13.450566Z",
"type": "RC_F",
"upload_at": "2026-04-29T15:31:13.450566Z"
},
{
"downloadUri": "https://s3-bucket.amazonaws.com/docs/RC_B.jpeg",
"extension": "jpeg",
"path": "909461524/dcb2691b-1980-4a95-a8a5-dc7c40cefeb7/87f5881c-3655-4d4f-ae0f-223acb763d29/RC_B",
"remarks": "Document uploaded",
"reupload_count": 0,
"reupload_path": "reupload/RC_B_path",
"status": "Pending",
"status_updated_at": "2026-04-29T15:31:13.450566Z",
"type": "RC_B",
"upload_at": "2026-04-29T15:31:13.450566Z"
}
],
"status": "Submitted",
"tagDetails": {
"tagId": "1234567890ABCDEF12345678",
"barcode": "1234567890",
"inventoryId": "INV123456"
},
"vehicleDetails": {
"chassisNumber": "KA09AB1234ERLF2S0",
"documents": [
{
"extension": "jpeg",
"type": "RC_F"
},
{
"extension": "jpeg",
"type": "RC_B"
}
],
"engineNumber": "ENG123456789",
"fuelType": "PETROL",
"gvwWeight": "12500",
"hasTagInHand": false,
"isCommercial": false,
"isVahanVerified": true,
"nationalPermit": false,
"nationalPermitExpiry": "2027-12-31",
"state": "MH",
"tagId": "1234567890ABCDEF12345678",
"vehicleClass": "VC4",
"vehicleLinkingId": "87f5881c-3655-4d4f-ae0f-223acb763d29",
"vehicleNumber": "KA09AB1234"
},
"vin": "KA09AB1234ERLF2S0",
"vrn": "KA09AB1234"
}
]
}
}
Response Parameters:
Application Details Object
| Parameter |
Data Type |
Description |
| applicationId |
String (UUID) |
Unique application identifier |
| applicationRefId |
String |
Application reference ID |
| applicationStatus |
Enum - See FastagApplicationStatus |
Application status |
| crn |
String |
Customer Reference Number |
| deliveryAddress |
Object(Delivery Address Object) |
Delivery address (nullable) |
| demographicAddress |
Object(Delivery Address Object) |
Demographic address from customer details (optional) |
| email |
String |
Customer email address (nullable) |
| fullName |
String |
Customer full name |
| mobileNumber |
String |
Customer mobile number |
Delivery Address Object
| Parameter |
Data Type |
Description |
| address_1 |
String |
Address line 1 |
| address_2 |
String |
Address line 2 (nullable) |
| address_3 |
String |
Address line 3 (nullable) |
| city |
String |
City |
| pincode |
String |
Pincode |
| state |
String |
State code |
Vehicle Details Object
Pricing Object
| Parameter |
Data Type |
Description |
| initial_wallet_load |
String |
Initial wallet load amount |
| non_discounted_tag_price |
String |
Non-discounted tag price |
| tag_cost_breakdown |
Object(Tag Cost Breakdown Object) |
Tag cost breakdown |
| tag_price |
String |
Final tag price |
| tag_security_deposit |
String |
Security deposit amount |
| vc |
Enum - See VehicleClass |
Vehicle class |
| vehicle_linking_id |
String (UUID) |
Vehicle linking ID |
Tag Cost Breakdown Object
| Parameter |
Data Type |
Description |
| gst |
String |
GST amount |
| tag_cost_base |
String |
Base tag cost (before GST) |
RC Document Object
| Parameter |
Data Type |
Description |
| downloadUri |
String |
Presigned download URL (nullable) |
| extension |
String |
File extension (e.g., "jpeg", "pdf") (nullable) |
| path |
String |
Document storage path |
| remarks |
String |
Remarks (nullable) |
| reupload_count |
Integer |
Number of times reuploaded |
| reupload_path |
String |
Reupload path (nullable) |
| status |
Enum - See DocumentStatus |
Document status |
| status_updated_at |
String |
Status update timestamp (nullable) |
| type |
Enum - See DocumentType |
Document type |
| upload_at |
String |
Upload timestamp (ISO 8601, nullable) |
Tag Details Object
| Parameter |
Data Type |
Description |
| tagId |
String |
Tag ID |
| barcode |
String |
Barcode |
| inventoryId |
String |
Inventory ID |
Vehicle Details Inner Object
| Parameter |
Data Type |
Description |
| chassisNumber |
String |
Chassis/VIN number |
| documents |
Array(Object) |
Array of submitted document types. See Document Type Object |
| engineNumber |
String |
Engine number |
| fuelType |
String |
Fuel type (e.g., "PETROL") |
| gvwWeight |
String |
Gross vehicle weight (nullable) |
| hasTagInHand |
Boolean |
Whether customer has physical tag |
| isCommercial |
Boolean |
Whether commercial vehicle |
| isVahanVerified |
Boolean |
Vahan verification status |
| nationalPermit |
Boolean |
National permit flag |
| nationalPermitExpiry |
String |
Permit expiry date (nullable) |
| state |
String |
State code |
| vehicleClass |
Enum - See VehicleClass |
Vehicle class |
| vehicleLinkingId |
String (UUID) |
Vehicle linking ID |
| vehicleNumber |
String |
Vehicle registration number |
| tagId |
String |
Tag ID for tag-in-hand flow (nullable) |
Document Type Object
| Parameter |
Data Type |
Description |
| extension |
String |
File extension |
| type |
String |
Document type ("RC_F", "RC_B") |
Transaction Details Object
| Parameter |
Data Type |
Description |
| amount |
String |
Transaction amount |
| orderId |
String |
Order ID from payment gateway (nullable) |
| transactionRefId |
String |
Transaction reference ID |
| paymentMode |
Enum - See PaymentMode |
Payment mode |
| transactionCompletionDate |
String |
Completion timestamp (nullable) |
| transactionId |
String |
Transaction ID (nullable) |
| transactionInitiationDate |
String |
Initiation timestamp |
| transactionStatus |
Enum - See DbTransactionStatus |
Transaction status |
Refund Details Object
| Parameter |
Data Type |
Description |
| refund_id |
String (UUID) |
Internal refund ID |
| transaction_id |
String (UUID) |
Original payment transaction ID |
| gateway_refund_id |
String |
External refund ID from payment gateway (nullable) |
| amount |
String |
Refund amount |
| refund_type |
Enum - See RefundType |
Refund type |
| refund_mode |
Enum - See RefundMode |
Refund mode |
| status |
Enum - See DbTransactionStatus |
Refund status |
| created_at |
String |
ISO 8601 timestamp |
| updated_at |
String |
ISO 8601 timestamp |
| metadata |
Object(Refund Metadata Object) |
Additional refund details (nullable) |
| Parameter |
Data Type |
Description |
| vehicle_breakups |
Array(Vehicle Refund Breakup Object) |
Vehicle-wise breakup of the refund |
| gateway_response |
Object |
Raw response from the payment gateway (nullable) |
| error_info |
Object(Refund Error Details Object) |
Error information if the refund failed (nullable) |
| wallet_id |
String (UUID) |
Wallet ID if the refund was processed to the wallet (nullable) |
Vehicle Refund Breakup Object
| Parameter |
Data Type |
Description |
| vehicle_info_id |
String (UUID) |
Vehicle info ID |
| tag_cost |
String |
Tag cost |
| initial_wallet_load |
String |
Initial wallet load amount |
| security_deposit |
String |
Security deposit amount |
| vrn |
String |
Vehicle registration number (nullable) |
| vin |
String |
Vehicle identification number |
Refund Error Details Object
| Parameter |
Data Type |
Description |
| code |
String |
Error code (nullable) |
| message |
String |
Error message |
Error Codes:
| Error Code |
Description |
UNAUTHORIZED |
Session expired, please login again |
APPLICATION_NOT_FOUND |
No application found for this customer |
INTERNAL_SERVER_ERROR |
Internal server error |
Auth
Generate Token
Generates an access token for server-to-server authentication.
Endpoint: POST /api/v1/fastag/dashboard/s2s/auth/token
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/s2s/auth/token' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"grant_type": "client_credentials",
"client_id": "550e8400e29b41d4a716446655440000",
"client_secret": "czNjcjN0X3BAc3N3MHJkXzE2Y2hhcnNtaW4="
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"access_token": "base64url_encoded_random_32_bytes",
"token_type": "Bearer",
"expires_in": 86400
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
| grant_type |
String |
Must be client_credentials |
| client_id |
String |
Client identifier (32 hex characters, UUID without hyphens) |
| client_secret |
String |
Client secret (base64-encoded, decodes to 2-255 bytes) |
Response Parameters:
| Parameter |
Data Type |
Description |
| access_token |
String |
Base64url-encoded random 32-byte token |
| token_type |
String |
Always Bearer |
| expires_in |
Integer |
Token expiry time in seconds (86400 = 24 hours) |
Error Responses:
| Error Code |
Description |
BAD_REQUEST |
Only client_credentials grant type is supported / Validation error |
UNAUTHORIZED |
Invalid client_id or client_secret / Token is invalid, expired, or revoked |
INTERNAL_SERVER_ERROR |
An internal error occurred |
Revoke Token
Revokes an active access token.
Endpoint: POST /api/v1/fastag/dashboard/s2s/auth/revoke
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/s2s/auth/revoke' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"token": "base64url_encoded_token",
"client_id": "550e8400e29b41d4a716446655440000",
"client_secret": "czNjcjN0X3BAc3N3MHJkXzE2Y2hhcnNtaW4=",
"token_type_hint": "access_token"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Token revoked successfully"
}
Request Parameters:
| Parameter |
Data Type |
Description |
| token |
String |
The token to be revoked |
| client_id |
String |
Client identifier (32 hex characters, UUID without hyphens) |
| client_secret |
String |
Client secret (base64-encoded, decodes to 2-255 bytes) |
| token_type_hint |
String |
Optional hint per RFC 7009: "access_token" or "refresh_token" |
Note: Returns 200 even for invalid tokens (RFC 7009 §2.2) to prevent token enumeration.
Error Responses:
| Error Code |
Description |
BAD_REQUEST |
Validation error |
UNAUTHORIZED |
Invalid client_id or client_secret |
INTERNAL_SERVER_ERROR |
An internal error occurred |
S2S Application Transaction
Record Application Transaction
Records a payment transaction for a Fastag application via server-to-server integration. The S2S caller has already collected payment (for PG/CC/SBA/CAA modes) or requests a synchronous wallet debit (for WALLET mode).
Endpoint: POST /api/v1/fastag/dashboard/s2s/customer/applications/transactions
Sample Request — WALLET Payment:
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/s2s/customer/applications/transactions' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <s2s_access_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"transaction_id": "KOTAK_TXN_001",
"amount": 300.00,
"instrument_type": "WALLET",
"application_type": "NEW_TAG"
}'
Sample Request — PG Payment (Terminal Status):
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/s2s/customer/applications/transactions' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <s2s_access_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"transaction_id": "KOTAK_PG_001",
"amount": 300.00,
"instrument_type": "PG",
"status": "SUCCESS",
"application_type": "NEW_TAG",
"transaction_initiated_at": "2024-01-15T10:30:00Z",
"transaction_completed_at": "2024-01-15T10:31:00Z",
"pg_order_id": "pg_2d197468-3d18-4b28-b412-063d56def39c",
"pg_payment_id": "pay_09c275d8a87c4beb"
}'
Sample Request — PG Payment (Initiated Status):
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/s2s/customer/applications/transactions' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <s2s_access_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"transaction_id": "KOTAK_PG_002",
"amount": 300.00,
"instrument_type": "PG",
"status": "INITIATED",
"application_type": "NEW_TAG",
"transaction_initiated_at": "2024-01-15T10:30:00Z",
"pg_order_id": "pg_2d197468-3d18-4b28-b412-063d56def39c"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"application_status": "SUBMITTED",
"application_ref_id": "FA8BD95CEC9D85467ABEDD8A0C3CDC0FAB",
"transaction_id": "a3ea86e4-0946-49d4-bcac-f6fe858f42fd",
"transaction_status": "SUCCESS"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
UUID |
The Fastag application UUID this transaction is for |
Yes |
| transaction_id |
String (1–100 chars, alphanumeric, hyphens, underscores) |
S2S caller's unique transaction ID. Used as idempotency key |
Yes |
| amount |
Decimal |
Transaction amount. Must match the application's total price exactly |
Yes |
| instrument_type |
Enum — See ApplicationPaymentMode |
Payment instrument type. Determines routing |
Yes |
| status |
Enum — See S2sTransactionStatus |
Transaction status. Required for PG/CC/SBA/CAA. Ignored for WALLET |
Conditional |
| application_type |
Enum — See S2sApplicationType |
Type of application. V1 only supports NEW_TAG |
Yes |
| transaction_initiated_at |
String |
When the payment was initiated (ISO 8601 / RFC 3339). Required for PG/CC/SBA/CAA |
Conditional |
| transaction_completed_at |
String |
When the payment completed (ISO 8601 / RFC 3339). Optional for all modes |
No |
| pg_order_id |
String |
Payment Gateway order ID. Required when instrument_type is PG |
Conditional |
| pg_payment_id |
String |
Payment Gateway payment ID (Razorpay). Required for PG when status is SUCCESS or FAILED |
Conditional |
Response Parameters:
| Parameter |
Data Type |
Description |
| application_status |
Enum — See FastagApplicationStatus |
The application status after processing the transaction |
| application_ref_id |
String |
Customer-facing reference ID for the application |
| transaction_id |
UUID |
Our internal database transaction ID (not the caller's transaction_id) |
| transaction_status |
Enum — See DbTransactionStatus |
The resulting transaction status in our system |
Error Codes:
| Error Code |
Description |
AMOUNT_MISMATCH |
Amount does not match the application's total price |
BAD_REQUEST |
Application not found / Application is not in a state that allows payment / CRN mismatch / Invalid wallet ID / Wallet not found / Wallet not authorized / Wallet not applicable / Pricing details not found / Validation error / Active transaction exists |
INVALID_STATUS_TRANSITION |
The existing transaction cannot transition to the requested status |
WALLET_INELIGIBLE |
Wallet failed pre-flight eligibility check (balance, limits, or status) |
INTERNAL_SERVER_ERROR |
Database error or unhandled internal error |
Onboarding APIs
Create Application
Creates a new Fastag application for the customer.
Endpoint: POST /api/v1/fastag/dashboard/customer/applications/create
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/create' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"crn_hash": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"mobile_number": "9876543210"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"application_id": "APP_123456",
"application_ref_id": "APP_REF_789"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| crn_hash |
String |
SHA256 hash of the Customer Reference Number (CRN) |
Yes |
| mobile_number |
String |
Customer Mobile Number |
Yes |
Response Parameters:
| Parameter |
Data Type |
Description |
| application_id |
String |
Unique identifier for the created application |
| application_ref_id |
String |
Application reference ID |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Invalid crn passed in request / Mobile number is required for this request / Validation error |
WALLET_CLOSED |
Wallet is closed |
WALLET_CREDIT_FREEZE |
Wallet credit freeze active |
WALLET_DEBIT_FREEZE |
Wallet debit freeze active |
WALLET_FREEZE |
Wallet is frozen |
WALLET_INACTIVE |
Wallet is inactive |
INTERNAL_SERVER_ERROR |
Internal error |
Submit Fastag Application
Submits the Fastag application for processing.
Endpoint: POST /api/v1/fastag/dashboard/customer/applications/fastag/submit
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/fastag/submit' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"opted_master_wallet": true,
"channel": "MB811_APP"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"message": "FASTag application submitted successfully",
"applicationId": "550e8400-e29b-41d4-a716-446655440000"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
String (UUID) |
Application ID to submit |
Yes |
| opted_master_wallet |
Boolean |
Whether master wallet is opted |
No |
| channel |
String - See ApplicationChannel |
Application channel |
Yes |
Response Parameters:
| Parameter |
Data Type |
Description |
| message |
String |
Response message |
| applicationId |
String |
Submitted application ID |
Error Codes:
| Error Code |
Description |
UNAUTHORIZED |
Not authorized to perform this action on this application |
BAD_REQUEST |
Application not found, application already submitted, no vehicles to submit, or validation error |
WALLET_CLOSED |
Wallet is closed |
WALLET_CREDIT_FREEZE |
Wallet is credit-frozen |
WALLET_DEBIT_FREEZE |
Wallet is debit-frozen |
WALLET_FREEZE |
Wallet is completely frozen |
WALLET_INACTIVE |
Wallet is inactive |
WALLET_NOT_FOUND |
Wallet not found |
INTERNAL_SERVER_ERROR |
Internal error |
Link Tag (Tag in Hand)
Links a physical tag to a vehicle after receiving it.
Endpoint: POST /api/v1/fastag/dashboard/customer/applications/fastag/tag/link
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/fastag/tag/link' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"vehicle_info_id": "550e8400-e29b-41d4-a716-446655440001",
"tag_identifier": {
"tag_id": "1234567890ABCDEF12345678"
}
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Tag linking has been initiated.",
"payload": {}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
String (UUID) |
Application ID |
Yes |
| vehicle_info_id |
String (UUID) |
Vehicle info ID to link tag to |
Yes |
| tag_identifier |
Object |
Tag identification (Enum: TagId or Barcode) |
Yes |
tag_identifier (Enum - one of the following):
| Variant |
Parameters |
Data Type |
Description |
| Barcode |
serial_number |
Number |
Serial number from barcode |
|
issuer_key_index |
Number |
Issuer key index |
|
issuer_iin |
Number |
Issuer IIN |
| TagId |
tag_id |
String |
Direct tag ID (24 or 32 hex characters) |
Error Codes:
| Error Code |
Description |
UNAUTHORIZED |
CRN not found for customer |
INVALID_VEHICLE_STATUS |
Invalid vehicle info status for tag linking |
VEHICLE_INFO_MISMATCH |
Vehicle info does not belong to the specified application |
TAG_NOT_AVAILABLE |
The provided fastag is invalid or not available. Please provide a different fastag. |
NOT_FOUND |
Application not found |
BAD_REQUEST |
Validation error |
INTERNAL_SERVER_ERROR |
Database / Internal error |
List Customer Applications
Lists all Fastag applications for the customer.
Endpoint: POST /api/v1/fastag/dashboard/customer/applications/list
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/list' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"page": 1,
"page_size": 10
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"applications": [
{
"applicationId": "550e8400-e29b-41d4-a716-446655440000",
"applicationRefId": "FA38B1D7883BA240B08B62C9E0F81A6224",
"vehicleLinkingId": "660e8400-e29b-41d4-a716-446655440000",
"applicationStatus": "SUBMITTED",
"kycStatus": "FKYC",
"optedMasterWallet": false,
"vrn": "KA09AB1234",
"vin": "KA09AB1234ERLF2S0",
"vehicleStatus": "SUBMITTED",
"vehicleClass": "VC4",
"state": "MH",
"nationalPermit": false,
"nationalPermitExpiry": "2027-12-31",
"isVahanVerified": true,
"isCommercial": false,
"gvwWeight": "12500",
"fuelType": "petrol",
"engineNumber": "ENG123456789"
}
],
"total_pages": 1,
"total_items": 1
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| page |
Number |
Page number |
No |
| page_size |
Number |
Items per page |
No |
Response Parameters:
| Parameter |
Data Type |
Description |
| applications |
Array(Customer Application Details Object) |
List of customer applications |
| total_pages |
Number |
Total number of pages |
| total_items |
Number |
Total number of items |
Customer Application Details Object
| Parameter |
Data Type |
Description |
| applicationId |
String (UUID) |
Unique application identifier |
| applicationRefId |
String |
Application reference ID |
| vehicleLinkingId |
String (UUID) |
Vehicle linking ID |
| applicationStatus |
String - See FastagApplicationStatus |
Application status |
| kycStatus |
Enum - See ApplicationKycStatus |
KYC verification status |
| optedMasterWallet |
Boolean |
Whether master wallet is opted |
| vrn |
String |
Vehicle registration number (optional) |
| vin |
String |
Vehicle identification number |
| vehicleStatus |
String - See FastagAppInfoStatus |
Vehicle info status |
| vehicleClass |
String - See VehicleClass |
Vehicle class |
| state |
String |
State code |
| nationalPermit |
Boolean |
Whether national permit is available |
| nationalPermitExpiry |
String |
National permit expiry date (optional) |
| isVahanVerified |
Boolean |
Whether Vahan verification is done |
| isCommercial |
Boolean |
Whether vehicle is commercial |
| gvwWeight |
String |
Gross vehicle weight (optional) |
| fuelType |
String |
Fuel type |
| engineNumber |
String |
Engine number |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Crn not found for customer |
BAD_REQUEST |
Validation error |
INTERNAL_SERVER_ERROR |
Internal server error |
Create Application Transaction
Creates a transaction for an application.
Endpoint: POST /api/v1/fastag/dashboard/customer/applications/transactions
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/transactions' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "APP_123456",
"instrument_type": "WALLET",
"instrument_id": "wallet-uuid-here"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Transaction created successfully",
"payload": {
"ref_id": "TRACE_ABC123",
"transaction_id": "Txn_id",
"order_id": "Order_id",
"payment_mode": "WALLET"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
UUID |
Application ID |
Yes |
| instrument_type |
String |
Payment instrument type. |
Yes |
| instrument_id |
String |
Instrument identifier. |
No |
Response Parameters:
| Parameter |
Data Type |
Description |
| ref_id |
String |
Reference ID |
| transaction_id |
String |
Settled gateway transaction ID |
| order_id |
String |
order ID |
| payment_mode |
String (Enum: PaymentMode) |
Payment mode used |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Application not found / Application is not in a state that allows payment / Invalid wallet ID / Wallet not found / Wallet not authorized / Wallet not applicable / Unsupported instrument type / Instrument ID missing / Validation error |
ACTIVE_TRANSACTION_EXISTS |
A transaction is already in progress for this application, please wait and try again later |
WALLET_INELIGIBLE |
Wallet is not eligible for payment |
INTERNAL_SERVER_ERROR |
Pricing details not found / Order ID not found / Internal server error |
Application Transaction Status
Gets the status of an application transaction.
Endpoint: POST /api/v1/fastag/dashboard/customer/applications/transactions/status
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/transactions/status' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"ref_id": "TRACE_ABC123",
"transaction_id": "a3ea86e4094649d4bcacf6fe858f42fd"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"status": "Pending"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
UUID |
Application ID |
Yes |
| ref_id |
String |
Reference ID returned on create |
No |
| transaction_id |
String |
Transaction ID |
No |
Response Parameters:
| Parameter |
Data Type |
Description |
| status |
String |
Transaction status |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Transaction not found / Application not found / Active transaction already exists / Validation error |
UNAUTHORIZED |
You are not authorized to perform this action on this application |
INTERNAL_SERVER_ERROR |
Database error / Payment client error / Transaction status missing / Access tokens not found / Internal server error |
Validate Tag
Pre-validates a tag before creating vehicle record. Used to validate tag is available and valid before DB record creation.
Endpoint: POST /api/v1/fastag/dashboard/customer/applications/fastag/tag/validate
Sample Request - Using TagId:
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/fastag/tag/validate' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"tag_identifier": {
"tag_id": "1234567890ABCDEF12345678"
},
"vehicle_class": "CAR",
"vehicle_linking_id": "87f5881c-3655-4d4f-ae0f-223acb763d29"
}'
Sample Request - Using Barcode:
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/fastag/tag/validate' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"tag_identifier": {
"serial_number": 12345678,
"issuer_key_index": 1,
"issuer_iin": 608006
},
"vehicle_class": "CAR",
"vehicle_linking_id": "87f5881c-3655-4d4f-ae0f-223acb763d29"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Tag validated successfully",
"payload": {
"is_valid": true,
"tag_id": "1234567890ABCDEF12345678"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
String |
Application UUID |
Yes |
| tag_identifier |
Object |
Tag identification (Enum: TagId or Barcode) |
Yes |
| vehicle_class |
String - See VehicleClass |
Vehicle class |
Yes |
| vehicle_linking_id |
String |
Vehicle linking ID (UUID) |
No |
tag_identifier (Enum - one of the following):
| Variant |
Parameters |
Data Type |
Description |
| Barcode |
serial_number |
Number |
Serial number from barcode |
|
issuer_key_index |
Number |
Issuer key index |
|
issuer_iin |
Number |
Issuer IIN |
| TagId |
tag_id |
String |
Direct tag ID (24 or 32 hex characters) |
Response Parameters:
| Parameter |
Data Type |
Description |
| is_valid |
Boolean |
Whether the tag is valid |
| tag_id |
String |
The validated tag ID |
Error Codes:
| Error Code |
Description |
TAG_NOT_AVAILABLE |
The provided fastag is invalid or not available. Please provide a different fastag. |
INVALID_VEHICLE_STATUS |
Invalid vehicle info status |
VEHICLE_INFO_MISMATCH |
Vehicle info does not belong to the specified application |
NOT_FOUND |
Application not found |
UNAUTHORIZED |
CRN not found for customer |
BAD_REQUEST |
Validation error |
INTERNAL_SERVER_ERROR |
Database / Internal error |
Update Application Details
Updates the delivery address for a pending Fastag application.
Endpoint: POST /api/v1/fastag/dashboard/customer/applications/fastag/update
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/fastag/update' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"delivery_address": {
"address_1": "123 Main Street",
"address_2": "Apartment 4B",
"address_3": "Near Station",
"city": "Mumbai",
"state": "Maharashtra",
"pincode": "400001"
}
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Application details updated successfully",
"payload": {}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
String (UUID) |
Application ID |
Yes |
| delivery_address |
Object(Delivery Details Object) |
Delivery address |
Yes |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Application not found / Application is not in a modifiable state / Validation error |
INTERNAL_SERVER_ERROR |
Database / Internal error |
Delete Vehicle
Deletes a vehicle from a pending Fastag application.
Endpoint: POST /api/v1/fastag/dashboard/customer/vehicle/delete
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/vehicle/delete' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"vehicle_linking_id": "550e8400-e29b-41d4-a716-446655440001"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Vehicle removed successfully",
"payload": {}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
String (UUID) |
Application ID |
Yes |
| vehicle_linking_id |
String (UUID) |
Vehicle linking ID to delete |
Yes |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Application not found / Vehicle record not found / Can only be deleted when in PENDING status / Validation error |
INTERNAL_SERVER_ERROR |
Database error |
Get Application Invoice
Retrieves the invoice for a specific application.
Endpoint: GET /api/v1/fastag/dashboard/customer/applications/{application_id}/invoice
curl -L -X GET '{{host}}/api/v1/fastag/dashboard/customer/applications/550e8400-e29b-41d4-a716-446655440000/invoice' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"applicationDetails": {
"applicationId": "550e8400-e29b-41d4-a716-446655440000",
"applicationRefId": "APP_123456",
"fullName": "John Doe",
"email": "john@example.com",
"mobileNumber": "9876543210",
"deliveryAddress": {
"address_1": "123 Main Street",
"address_2": "Apt 4B",
"address_3": "Near Station",
"city": "Mumbai",
"state": "MH",
"pincode": "400001"
},
"crn": "100196918",
"applicationStatus": "SUBMITTED"
},
"vehicleDetails": [
{
"applicationId": "550e8400-e29b-41d4-a716-446655440000",
"vrn": "KA09AB1234",
"vin": "KA09AB1234ERLF2S0",
"status": "Submitted",
"rcDocuments": [
{
"type": "RC_F",
"path": "909461524/app-id/vehicle-id/RC_F",
"reupload_path": "reupload/doc_path",
"extension": "jpg",
"status": "Pending",
"remarks": "Document verified",
"status_updated_at": "2026-04-29T15:31:13.450566Z",
"upload_at": "2024-01-15T10:30:00Z",
"reupload_count": 0
}
],
"vehicleDetails": {
"gvwWeight": "12500",
"vehicleLinkingId": "550e8400-e29b-41d4-a716-446655440001",
"vehicleNumber": "KA09AB1234",
"engineNumber": "ENG123456789",
"chassisNumber": "KA09AB1234ERLF2S0",
"state": "MH",
"fuelType": "petrol",
"nationalPermit": false,
"vehicleClass": "VC4",
"isVahanVerified": true,
"nationalPermitExpiry": "2027-12-31",
"isCommercial": false,
"documents": [
{
"extension": "jpg",
"type": "RC_F"
}
],
"hasTagInHand": false,
"tagId": "1234567890ABCDEF12345678"
},
"tagDetails": {
"tagId": "1234567890ABCDEF12345678",
"barcode": "1234567890",
"inventoryId": "TID123456"
},
"vc": "VC4",
"tag_price": 100.00,
"non_discounted_tag_price": 100.00,
"tag_security_deposit": 200.00,
"initial_wallet_load": 300.00,
"vehicle_linking_id": "550e8400-e29b-41d4-a716-446655440001",
"tag_cost_breakdown": {
"tag_cost_base": 84.75,
"gst": 15.25
}
}
],
"transactionDetails": [
{
"transactionId": "PGN0687bfbea759",
"transactionRefId": "FZ2YX24MLOMWLTMZZK",
"orderId": "pg_2d197468-3d18-4b28-b412-063d56def39c",
"amount": "600.00",
"paymentMode": "PG",
"transactionInitiationDate": "2024-01-15T18:08:18Z",
"transactionCompletionDate": "2024-01-15T18:08:21Z",
"transactionStatus": "SUCCESS"
}
],
"totalPrice": 600.00,
"totalDeliveryCharge": 0
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| applicationId |
String (UUID) |
Application ID (path parameter) |
Yes |
Response Parameters:
Vehicle Invoice Details Object
| Parameter |
Data Type |
Description |
| applicationId |
String (UUID) |
Application ID |
| vrn |
String |
Vehicle registration number (optional) |
| vin |
String |
Vehicle identification number |
| status |
String - See FastagAppInfoStatus |
Vehicle info status |
| rcDocuments |
Array(RC Documents Object) |
RC documents |
| vehicleDetails |
Object(Vehicle Details Inner Object) |
Vehicle details |
| tagDetails |
Object(Tag Details Object) |
Tag details (optional) |
| vc |
String |
Vehicle class |
| tag_price |
Decimal |
Tag price (discounted) |
| non_discounted_tag_price |
Decimal |
Non-discounted tag price |
| tag_security_deposit |
Decimal |
Tag security deposit |
| initial_wallet_load |
Decimal |
Initial wallet load amount |
| vehicle_linking_id |
String (UUID) |
Vehicle linking ID |
| tag_cost_breakdown |
Object(Tag Cost Breakdown Object) |
Tag cost breakdown |
Transaction Details Object
| Parameter |
Data Type |
Description |
| transactionId |
String |
Transaction ID (optional) |
| transactionRefId |
String |
Transaction reference ID |
| orderId |
String |
Order ID (optional) |
| amount |
String |
Transaction amount |
| paymentMode |
String |
Payment mode |
| transactionInitiationDate |
String |
Transaction initiation date |
| transactionCompletionDate |
String |
Transaction completion date (optional) |
| transactionStatus |
String |
Transaction status |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Invalid application ID format |
UNAUTHORIZED |
Not authorized to view this application |
FETCHING_APPLICATION_FAILED |
Failed to fetch application details |
Get Vahan Details
Fetches vehicle details from Vahan (transport department database).
Endpoint: POST /api/v1/fastag/dashboard/customer/vehicle/vahan-details
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/vehicle/vahan-details' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"vrn": "MH01AB1234",
"vin": "KA09AB1234ERLF2S0",
"engineNumber": "ENG123456"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Vahan details retrieved successfully",
"payload": {
"vrn": "MH01AB1234",
"vin": "MA1ABC123XYZ456789",
"engine_number": "ENG123456",
"region_state": "MH",
"fuel_type": "PETROL",
"is_national_permit": false,
"model": "Swift",
"chassis_number": "MA1ABC123XYZ456789",
"national_permit_end_date": "2027-12-31",
"gvw": "7500",
"registered_vehicle": "LMV",
"vehicle_descriptor": "Maruti Swift VXI",
"color": "WHITE",
"maker_descr": "MARUTI SUZUKI INDIA LTD"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| vrn |
String |
Vehicle Registration Number |
No |
| vin |
String |
Vehicle Identification Number |
No |
| engineNumber |
String |
Engine Number |
Yes |
Response Parameters:
| Parameter |
Data Type |
Description |
| vrn |
String |
Vehicle Registration Number |
| vin |
String |
Vehicle Identification Number |
| engine_number |
String |
Engine Number |
| region_state |
String |
Region/State code |
| fuel_type |
String |
Fuel type |
| is_national_permit |
Boolean |
National permit status |
| model |
String |
Vehicle model |
| chassis_number |
String |
Chassis number |
| national_permit_end_date |
String |
End date of the national permit |
| gvw |
String |
Gross Vehicle Weight in kilograms |
| registered_vehicle |
String |
Registered vehicle |
| vehicle_descriptor |
String |
Vehicle descriptor |
| color |
String |
Vehicle color |
| maker_descr |
String |
Manufacturer description |
Error Codes:
| Error Code |
Description |
VALIDATION_ERROR |
Incorrect vehicle details entered |
VEHICLE_NOT_FOUND |
Vehicle not found in Vahan database (allows manual entry; returned as failure in HTTP 200 response) |
NETC_ERROR |
NETC service timeout (HTTP 200) or client error (HTTP 500) |
VAHAN_TIMEOUT |
Vahan service timeout (returned as failure in HTTP 200 response) |
NO_RESPONSE |
No response from NETC service (allows manual entry; returned as failure in HTTP 200 response) |
REGISTRATION_NOT_ALLOWED |
Vehicle registration not allowed |
BAD_REQUEST |
Validation error (either VRN or VIN required) |
INTERNAL_ERROR |
Internal error |
Get Tag Pricing Info
Fetches the current tag pricing information for an application.
Endpoint: POST /api/v1/fastag/dashboard/customer/tag-price/fetch
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/tag-price/fetch' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"channelName": "DEFAULT",
"applicationId": "550e8400-e29b-41d4-a716-446655440000"
}'
Request Parameters:
| Parameter |
Data Type |
Description |
| channelName |
String - See FastagChannel |
Channel name |
| applicationId |
String |
Application ID (UUID) |
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"channel_name": "DEFAULT",
"vehicles": [
{
"vc": "VC4",
"tag_price": 100.00,
"non_discounted_tag_price": 120.00,
"tag_security_deposit": 200.00,
"initial_wallet_load": 100.00,
"vehicle_linking_id": "550e8400-e29b-41d4-a716-446655440000",
"tag_cost_breakdown": {
"tag_cost_base": 100.00,
"gst": 18.00
}
}
],
"total_initial_wallet_load": 100.00,
"total_tag_cost": 100.00,
"total_non_discounted_tag_price": 120.00,
"total_security_deposit": 200.00,
"total_price": 300.00,
"total_delivery_charge": 50.00,
"total_tag_cost_breakdown": {
"tag_cost_base": 100.00,
"gst": 18.00
}
}
}
Response Parameters:
| Parameter |
Data Type |
Description |
| channel_name |
String |
Channel name |
| vehicles |
Array(Vehicle Pricing Response Object) |
List of vehicle pricing details |
| total_initial_wallet_load |
Decimal |
Total initial wallet load amount |
| total_tag_cost |
Decimal |
Total tag cost |
| total_non_discounted_tag_price |
Decimal |
Total non-discounted tag price |
| total_security_deposit |
Decimal |
Total security deposit |
| total_price |
Decimal |
Total price (tag cost + security deposit + delivery charge) |
| total_delivery_charge |
Decimal |
Total delivery charge |
| total_tag_cost_breakdown |
Object(Tag Cost Breakdown Object) |
Total tag cost breakdown |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Validation error |
01 |
Failed to fetch tag pricing info |
Add Vehicle
Adds a vehicle to an existing Fastag application.
Endpoint: POST /api/v1/fastag/dashboard/customer/applications/fastag/vehicle/add
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/fastag/vehicle/add' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"vehicle_linking_id": "87f5881c-3655-4d4f-ae0f-223acb763d29",
"vrn": "MH01AB1234",
"engine_number": "ENG123456789",
"vin": "CHASSIS123456",
"state": "Maharashtra",
"fuel_type": "PETROL",
"national_permit": false,
"vehicle_class": "VC4",
"is_vahan_verified": false,
"is_commercial": false,
"gvw_weight": "12500",
"national_permit_expiry": "2027-12-31",
"tag_id": "1234567890ABCDEF12345678",
"rc_documents": [
{
"extension": "pdf",
"doc_type": "RC_F",
"redis_key": "doc-upload-abc123"
}
]
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"vehicle_linking_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
String (UUID) |
Application UUID |
Yes |
| vehicle_linking_id |
String (UUID) |
Vehicle linking ID (for updating existing vehicle) |
No |
| vrn |
String |
Vehicle Registration Number (VRN) |
Yes |
| engine_number |
String |
Engine number |
Yes |
| vin |
String |
Vehicle Identification Number (VIN/Chassis) |
Yes |
| state |
String |
State of registration |
Yes |
| fuel_type |
String |
Fuel type |
Yes |
| national_permit |
Boolean |
Whether vehicle has national permit |
Yes |
| vehicle_class |
String - See VehicleClass |
Vehicle class details |
Yes |
| is_vahan_verified |
Boolean |
Whether vehicle is Vahan verified |
Yes |
| national_permit_expiry |
String |
National permit expiry date |
No |
| is_commercial |
Boolean |
Whether vehicle is commercial |
Yes |
| gvw_weight |
String |
Gross vehicle weight (for commercial vehicles) |
No |
| tag_id |
String |
Tag ID for tag-in-hand flow |
No |
| rc_documents |
Array(Uploaded Document Info Object) |
RC document details. Should be madatory for the onboarding flow |
No |
Response Parameters:
| Parameter |
Data Type |
Description |
| vehicle_linking_id |
String (UUID) |
Unique identifier for the vehicle linking |
Error Codes:
| Error Code |
Description |
VAHAN_DETAILS_EXPIRED |
Vahan details have expired or are missing |
DOCUMENT_ERROR |
Document processing failed |
RC_DOCUMENTS_REQUIRED |
RC documents are required |
TAG_NOT_AVAILABLE |
The provided fastag is invalid or not available. Please provide a different fastag. |
VEHICLE_ALREADY_REGISTERED |
Vehicle with the given VRN or VIN is already registered |
BAD_REQUEST |
Application not found / Application already submitted / Vehicle record not found / Duplicate vehicle in application / Max vehicles limit reached / Vehicle identifiers cannot be modified / Vahan details mismatch / Application mode mismatch / Validation error |
INTERNAL_SERVER_ERROR |
Database / Internal error |
Uploaded Document Info Object
| Parameter |
Data Type |
Description |
| extension |
String |
File extension |
| doc_type |
String - See DocumentType |
Document type |
| redis_key |
String |
Redis key for the uploaded document |
Proof of Fitment
Vehicle Fitment
Fitment details of the tag and the associated vehicle.
Endpoint: POST /api/v1/fastag/dashboard/customer/vehicle/fitment
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/vehicle/fitment' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"vehicle_id": "550e8400-e29b-41d4-a716-446655440000"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Success",
"payload": {
"vrn": "MH01AB1234",
"chassis_no": "CHASSIS123456",
"engine_no": "ENGINE123456",
"tag_id": "TAG123456",
"tid": "TID123456",
"barcode_no": "BARCODE123456",
"fitment_challan_number": "FC/2024/001",
"fitment_date": "2024-01-15",
"fitment_time": "10:30:45",
"bank_issuer_name": "HDFC Bank"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| vehicle_id |
String (UUID) |
Vehicle ID |
Yes |
Response Parameters:
| Parameter |
Data Type |
Description |
| vrn |
String |
Vehicle Registration Number (optional) |
| chassis_no |
String |
Vehicle chassis number (VIN) |
| engine_no |
String |
Vehicle engine number |
| tag_id |
String |
FASTag ID |
| tid |
String |
Terminal Identifier (TID) |
| barcode_no |
String |
Barcode number |
| fitment_challan_number |
String |
Fitment challan number |
| fitment_date |
String |
Fitment date (YYYY-MM-DD) |
| fitment_time |
String |
Fitment time (HH:MM:SS) |
| bank_issuer_name |
String |
Bank issuer name |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Invalid vehicle_id format / The provided vehicle ID isn't available / This vehicle KYV isn't complete, please complete KYV to proceed |
UNAUTHORIZED |
Session invalid / You're not authorized to request for this vehicle |
INTERNAL_SERVER_ERROR |
Failed to get vehicle fitment details |
Add Money (Work in Progress)
Eligibility API
Checks whether the customer is eligible to add money to the wallets.
Endpoint: POST /api/v1/fastag/dashboard/customer/payments/recharge/eligibility
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/payments/recharge/eligibility' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"amount": 100.00
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Success",
"payload": {
"current_balance": "1500.00",
"wallet_status": "ACTIVE",
"rejection_reason": "Wallet balance insufficient",
"is_eligible": true
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| amount |
Decimal |
Intended recharge amount |
Yes |
Response Parameters:
| Parameter |
Data Type |
Description |
| current_balance |
String |
Current balance amount in the wallet |
| wallet_status |
String |
Current status of the wallet. See WalletStatus |
| rejection_reason |
String |
Reason for rejection if wallet is rejected; null otherwise |
| is_eligible |
Boolean |
Whether the customer is eligible for recharge |
Error Codes:
| Error Code |
Description |
UNAUTHORIZED |
Your session isn't valid, please try logging again |
CUSTOMER_NOT_FOUND |
Customer not found |
CUSTOMER_INACTIVE |
Customer is inactive |
WALLET_NOT_FOUND |
Wallet not found |
NO_WALLET_CONFIGURED |
No wallet configured for customer |
WALLET_CLOSED / WALLET_INACTIVE / WALLET_CREDIT_FREEZE / WALLET_DEBIT_FREEZE / WALLET_FREEZE |
Wallet closed / inactive / credit-frozen / debit-frozen / completely frozen |
DATABASE_ERROR |
Failed to lookup customer |
INTERNAL_ERROR |
Internal server error |
Credit Transaction API
Updates the status of a pending transaction (credit/recharge) based on the payment gateway response.
Endpoint: POST /api/v1/fastag/dashboard/kotak/transaction/credit
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/kotak/transaction/credit' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"crn": "100196918",
"transaction_id": "TXN123456789",
"amount": 100.00,
"status": "SUCCESS",
"transaction_initiated_at": "2025-04-28T10:30:00Z",
"transaction_completed_at": "2025-04-28T10:31:00Z",
"order_id": "ORD123456789",
"instrument_type": "PG",
"instrument_id": "ID_1234567890",
"credit_source": "RECHARGE",
"instrument_display_value": "XXXX1234"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Success",
"payload": {
"message": "Transaction updated successfully"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| crn |
String |
Customer's CRN |
Yes |
| transaction_id |
String |
The gateway transaction ID to update |
Yes |
| amount |
Decimal |
Transaction amount — must be positive with at most 2 decimal places |
Yes |
| status |
String |
New status. See TransactionCreditStatus |
Yes |
| transaction_initiated_at |
String |
When the transaction was initiated (ISO 8601 / RFC 3339) |
Yes |
| transaction_completed_at |
String |
When the transaction completed (ISO 8601 / RFC 3339) |
No |
| order_id |
String |
Order ID from the payment gateway |
Yes |
| instrument_type |
String |
Instrument type. See PaymentInstrumentTypeV2 |
Yes |
| instrument_id |
String |
Instrument ID (e.g. UPI VPA) |
Yes |
| credit_source |
String |
Credit Source. See CreditSource |
Yes |
| instrument_display_value |
String |
Masked display value of the payment instrument (e.g. "XXXX1234") |
No |
Response Parameters:
| Parameter |
Data Type |
Description |
| message |
String |
Confirmation message for the transaction update |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Invalid request parameters / Validation error |
WALLET_NOT_FOUND / WALLET_CLOSED / WALLET_INACTIVE / WALLET_CREDIT_FREEZE / WALLET_DEBIT_FREEZE / WALLET_FREEZE |
Wallet not found / closed / inactive / credit-frozen / debit-frozen / completely frozen |
UNAUTHORIZED |
Transaction does not belong to this customer |
WALLET_LIMIT_EXCEEDED |
Wallet limit exceeded. Available limit is returned in the error message. This transaction is set to FAILURE status |
CONFLICT |
Transaction already in terminal state |
INTERNAL_ERROR |
An internal error occurred. Please try again later. |
Vehicle Update APIs
Initiate Vehicle Update
Initiates a request to update vehicle information.
Endpoint: POST /api/v1/fastag/dashboard/customer/vehicle-update/initiate
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/vehicle-update/initiate' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"vehicle_id": "550e8400-e29b-41d4-a716-446655440000",
"vrn": "MH01AB1234",
"vin": "KA09AB1234ERLF2S0",
"engine_number": "ENGINE123456"
}'
Sample Request - With raw S3 path:
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/vehicle-update/initiate' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"vehicle_id": "550e8400-e29b-41d4-a716-446655440000",
"vrn": "MH01AB1234",
"vin": "KA09AB1234ERLF2S0",
"engine_number": "ENGINE123456",
"upload_uri_type": "PATH"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"application_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"existing_vehicle_details": {
"vehicle_id": "550e8400-e29b-41d4-a716-446655440000",
"vrn": "MH01AB1234",
"vin": "CHASSIS123456",
"engine_number": "ENGINE123456",
"region_state": "MH",
"fuel_type": "PETROL",
"vehicle_class": "VC4",
"model": "Camry",
"is_commercial_vehicle": false
},
"vahan_details": {
"vrn": "MH01AB1234",
"vin": "CHASSIS123456",
"engine_number": "ENGINE123456",
"region_state": "MH",
"fuel_type": "PETROL",
"is_national_permit": false,
"model": "Camry",
"chassis_number": "CHASSIS123456",
"national_permit_end_date": "2027-12-31",
"gvw": "1500",
"registered_vehicle": "MH01AB1234",
"vehicle_descriptor": "Sedan"
},
"documents": [
{
"upload_uri": "https://s3-presigned-url-rc-front",
"type": "RC_F"
},
{
"upload_uri": "https://s3-presigned-url-rc-back",
"type": "RC_B"
}
]
}
}
Response with raw S3 path:
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"application_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"existing_vehicle_details": {
"vehicle_id": "550e8400-e29b-41d4-a716-446655440000",
"vrn": "MH01AB1234",
"vin": "CHASSIS123456",
"engine_number": "ENGINE123456",
"region_state": "MH",
"fuel_type": "PETROL",
"vehicle_class": "VC4",
"model": "Camry",
"is_commercial_vehicle": false
},
"vahan_details": {
"vrn": "MH01AB1234",
"vin": "CHASSIS123456",
"engine_number": "ENGINE123456",
"region_state": "MH",
"fuel_type": "PETROL",
"is_national_permit": false,
"model": "Camry",
"chassis_number": "CHASSIS123456",
"national_permit_end_date": "2027-12-31",
"gvw": "1500",
"registered_vehicle": "MH01AB1234",
"vehicle_descriptor": "Sedan"
},
"documents": [
{
"upload_uri": "s3://bucket/vehicle-update/rc_front_abc123",
"type": "RC_F"
},
{
"upload_uri": "s3://bucket/vehicle-update/rc_back_def456",
"type": "RC_B"
}
]
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| vehicle_id |
String (UUID) |
Vehicle ID |
Yes |
| vrn |
String |
Vehicle Registration Number |
No |
| vin |
String |
Vehicle Identification Number |
No |
| engine_number |
String |
Engine number |
Yes |
| upload_uri_type |
String |
Upload URI type: URL (presigned S3 URL, default) or PATH (raw S3 path) |
No |
Response Parameters:
Existing Vehicle Details Object
| Field |
Data Type |
Description |
| vehicle_id |
String |
Vehicle ID |
| vrn |
String |
Current VRN (optional) |
| vin |
String |
Current VIN |
| engine_number |
String |
Current engine number |
| region_state |
String |
State of registration (optional) |
| fuel_type |
String |
Fuel type (optional) |
| vehicle_class |
String |
Vehicle class. See VehicleClass |
| model |
String |
Vehicle model (optional) |
| is_commercial_vehicle |
Boolean |
Whether vehicle is commercial |
Vahan Details Object
| Field |
Data Type |
Description |
| vrn |
String |
VRN from Vahan |
| vin |
String |
VIN from Vahan |
| engine_number |
String |
Engine number from Vahan |
| region_state |
String |
State of registration from Vahan |
| fuel_type |
String |
Fuel type from Vahan |
| is_national_permit |
Boolean |
Has national permit |
| model |
String |
Vehicle model from Vahan |
| chassis_number |
String |
Chassis number from Vahan |
| national_permit_end_date |
String |
National permit end date |
| gvw |
String |
Gross vehicle weight in kg |
| registered_vehicle |
String |
Registered vehicle details |
| vehicle_descriptor |
String |
Vehicle descriptor |
Vehicle Update Document Upload Info Object
| Field |
Data Type |
Description |
| upload_uri |
String |
Presigned S3 upload URL (when upload_uri_type is URL) or raw S3 path (when upload_uri_type is PATH) |
| type |
Enum |
Document type (See DocumentType) |
Error Codes:
| Error Code |
Description |
VEHICLE_NOT_FOUND |
Vehicle not found for the given ID |
APPLICATION_NOT_FOUND |
Vehicle update application not found |
ALREADY_SUBMITTED |
A vehicle update request is already submitted for this vehicle |
ALREADY_EXISTS |
VIN or VRN already exists |
ALREADY_VERIFIED_BY_VAHAN |
Field already verified from Vahan API |
VALIDATION_ERROR |
Vehicle validation failed (e.g., FASTag is closed, no linked FASTag) |
PAYABLE_DIFF_MISMATCH |
Security diff does not match server-calculated difference |
NETC_API_ERROR |
NETC API request failed |
TAG_PRICE_CONFIG_NOT_FOUND |
Tag price configuration not found for vehicle class |
WALLET_INELIGIBLE |
PPI wallet not eligible for security deposit debit |
UNAUTHORIZED |
Session invalid or customer CRN missing |
UNAUTHORIZED |
Customer does not own this vehicle |
WALLET_CREDIT_FREEZE |
Credit freeze - operation blocked |
WALLET_DEBIT_FREEZE |
Debit freeze - operation blocked |
WALLET_FREEZE |
Wallet frozen - operation blocked |
WALLET_CLOSED |
Wallet closed - operation not allowed |
WALLET_INACTIVE |
Wallet inactive - operation not allowed |
WALLET_NOT_FOUND |
Wallet not found |
DATABASE_ERROR |
Failed to fetch vehicle from database |
INTERNAL_SERVER_ERROR |
Internal server error |
Calculate Vehicle Class Cost
Calculates the security deposit difference when changing a vehicle's class.
Endpoint: POST /api/v1/fastag/dashboard/customer/vehicle-update/price
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/vehicle-update/price' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"vehicle_class": "VC5",
"channel_name": "DEFAULT",
"vehicle_id": "550e8400-e29b-41d4-a716-446655440000"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"security_diff": 100.00,
"wallet_flow": "Debit",
"old_security": 200.00,
"new_security": 300.00
}}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| vehicle_class |
String |
Target vehicle class. See VehicleClass |
Yes |
| channel_name |
String |
Channel name. See FastagChannel |
Yes |
| vehicle_id |
String (UUID) |
Vehicle ID |
Yes |
Response Parameters:
| Parameter |
Data Type |
Description |
| security_diff |
Decimal |
Payable difference between new and old security deposit. null when equal |
| wallet_flow |
String |
Debit when customer must pay, Credit when refund. null when equal. See TxnType |
| old_security |
Decimal |
Current security deposit amount |
| new_security |
Decimal |
Security deposit amount for the target vehicle class |
Error Codes:
| Error Code |
Description |
VEHICLE_NOT_FOUND |
Vehicle not found for the given ID |
APPLICATION_NOT_FOUND |
Vehicle update application not found |
ALREADY_SUBMITTED |
A vehicle update request is already submitted for this vehicle |
ALREADY_EXISTS |
VIN or VRN already exists |
ALREADY_VERIFIED_BY_VAHAN |
Field already verified from Vahan API |
VALIDATION_ERROR |
Validation error |
PAYABLE_DIFF_MISMATCH |
Security diff does not match server-calculated difference |
NETC_API_ERROR |
NETC API request failed |
TAG_PRICE_CONFIG_NOT_FOUND |
Tag price configuration not found for the specified vehicle class |
WALLET_INELIGIBLE |
PPI wallet not eligible for security deposit debit |
WALLET_CREDIT_FREEZE |
Credit freeze - operation blocked |
WALLET_DEBIT_FREEZE |
Debit freeze - operation blocked |
WALLET_FREEZE |
Wallet frozen - operation blocked |
WALLET_CLOSED |
Wallet closed - operation not allowed |
WALLET_INACTIVE |
Wallet inactive - operation not allowed |
WALLET_NOT_FOUND |
Wallet not found |
INTERNAL_SERVER_ERROR |
Internal server error |
Submit Vehicle Update
Submits updated vehicle information.
Endpoint: POST /api/v1/fastag/dashboard/customer/vehicle-update/submit
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/vehicle-update/submit' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"vrn": "KA09AB1234",
"vin": "KA09AB1234ERLF2S0",
"engine_number": "ENG123456789",
"vehicle_class": "VC5",
"fuel_type": "PETROL",
"is_commercial": false,
"has_national_permit": false,
"national_permit_expiry_date": "2027-12-31",
"channel_name": "DEFAULT",
"security_diff": 100.00,
"documents": [
{
"type": "RcF",
"extension": "pdf"
},
{
"type": "RcB",
"extension": "pdf"
}
]
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "Submitted",
"message": "Vehicle Update Application Submit Successfully"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
String (UUID) |
Application ID |
Yes |
| vrn |
String |
Vehicle Registration Number |
No |
| vin |
String |
Vehicle Identification Number |
No |
| engine_number |
String |
Engine number |
No |
| vehicle_class |
String |
Vehicle class. See VehicleClass |
No |
| fuel_type |
String |
Fuel type |
No |
| is_commercial |
Boolean |
Whether vehicle is commercial |
No |
| has_national_permit |
Boolean |
Has national permit |
No |
| national_permit_expiry_date |
String |
National permit expiry date |
No |
| channel_name |
String |
Channel name. See FastagChannel |
Yes |
| security_diff |
Decimal |
Expected payable difference from Calculate Vehicle Class Cost API |
No |
| documents |
Array(Submitted RC Document Details) |
List of RC documents |
Yes |
Submitted RC Document Details
| Parameter |
Data Type |
Description |
Required |
| type |
String |
Document type. See DocumentType |
Yes |
| extension |
String |
File extension (e.g., pdf, jpg) |
Yes |
Response Parameters:
| Parameter |
Data Type |
Description |
| id |
String (UUID) |
Application ID |
| status |
Enum |
Application status. See VehicleUpdateRequestStatus |
| message |
String |
Success message |
Error Codes:
| Error Code |
Description |
APPLICATION_NOT_FOUND |
Vehicle update application not found |
VEHICLE_NOT_FOUND |
Vehicle not found for the given ID |
ALREADY_SUBMITTED |
A vehicle update request is already submitted for this vehicle |
VALIDATION_ERROR |
Validation error |
ALREADY_VERIFIED_BY_VAHAN |
Field already verified from Vahan API |
ALREADY_EXISTS |
VIN or VRN already registered with another active vehicle |
PAYABLE_DIFF_MISMATCH |
Security diff does not match server-calculated difference |
NETC_API_ERROR |
NETC API request failed |
TAG_PRICE_CONFIG_NOT_FOUND |
Tag price configuration not found for the specified vehicle class |
WALLET_INELIGIBLE |
PPI wallet not eligible for security deposit debit |
UNAUTHORIZED |
Session invalid or customer CRN missing |
UNAUTHORIZED |
Customer does not own this vehicle |
WALLET_CREDIT_FREEZE |
Credit freeze - operation blocked |
WALLET_DEBIT_FREEZE |
Debit freeze - operation blocked |
WALLET_FREEZE |
Wallet frozen - operation blocked |
WALLET_CLOSED |
Wallet closed - operation not allowed |
WALLET_INACTIVE |
Wallet inactive - operation not allowed |
WALLET_NOT_FOUND |
Wallet not found |
INTERNAL_SERVER_ERROR |
Internal server error |
List Vehicle Updates
Lists all vehicle update requests for the customer.
Endpoint: POST /api/v1/fastag/dashboard/customer/vehicle-update/list
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/vehicle-update/list' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"start_time": "2024-01-01T00:00:00Z",
"end_time": "2024-12-31T23:59:59Z",
"page_no": 1,
"page_size": 10,
"status": ["PENDING", "SUBMITTED"],
"application_id": "550e8400-e29b-41d4-a716-446655440000"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"data": [
{
"application_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"application_ref_id": "VUABC1234",
"status": "Submitted",
"customer_seq_id": "SEQ_001",
"customer_mobile": "9876543210",
"customer_crn": "100196918",
"original_vrn": "MH01AB1234",
"original_vin": "OLD_CHASSIS123",
"original_engine_number": "OLD_ENGINE123",
"new_vin": "NEW_CHASSIS456",
"new_vrn": "MH02CD5678",
"created_at": "2024-01-15 10:30:00"
}
],
"total_count": 1
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| start_time |
String |
Start time in RFC3339 format. Must be before end_time and the date range cannot exceed 45 days. |
Yes |
| end_time |
String |
End time in RFC3339 format. Must be after start_time and the date range cannot exceed 45 days. |
Yes |
| page_no |
Number |
Page number (starts from 1) |
Yes |
| page_size |
Number |
Items per page |
Yes |
| status |
Array(Enum) |
Filter by status. See VehicleUpdateRequestStatus |
No |
| application_id |
String (UUID) |
Filter by specific application ID |
No |
Response Parameters:
Vehicle Update Summary Item Object
| Field |
Data Type |
Description |
| application_id |
String (UUID) |
Application ID |
| application_ref_id |
String |
Application reference ID |
| status |
Enum |
Status. See VehicleUpdateRequestStatus |
| customer_seq_id |
String |
Customer sequence ID |
| customer_mobile |
String |
Customer mobile number |
| customer_crn |
String |
Customer CRN |
| original_vrn |
String |
Original VRN (optional) |
| original_vin |
String |
Original VIN |
| original_engine_number |
String |
Original engine number |
| new_vin |
String |
New VIN (optional) |
| new_vrn |
String |
New VRN (optional) |
| created_at |
String |
Created timestamp |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Invalid start_time or end_time format / validation error |
UNAUTHORIZED |
Session invalid |
VEHICLE_NOT_FOUND |
Vehicle not found for the given ID |
APPLICATION_NOT_FOUND |
Vehicle update application not found |
ALREADY_SUBMITTED |
A vehicle update request is already submitted for this vehicle |
ALREADY_EXISTS |
VIN or VRN already exists |
ALREADY_VERIFIED_BY_VAHAN |
Field already verified from Vahan API |
VALIDATION_ERROR |
Validation error |
PAYABLE_DIFF_MISMATCH |
Security diff does not match server-calculated difference |
NETC_API_ERROR |
NETC API request failed |
TAG_PRICE_CONFIG_NOT_FOUND |
Tag price configuration not found |
WALLET_INELIGIBLE |
PPI wallet not eligible for security deposit debit |
INTERNAL_SERVER_ERROR |
Failed to list vehicle updates |
Get Vehicle Update Details
Gets detailed information of a specific vehicle update request.
Endpoint: GET /api/v1/fastag/dashboard/customer/vehicle-update/details/{application_id}
curl -L -X GET '{{host}}/api/v1/fastag/dashboard/customer/vehicle-update/details/a1b2c3d4-e5f6-7890-abcd-ef1234567890' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"application_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"application_ref_id": "VUABC1234",
"status": "Submitted",
"customer_seq_id": "SEQ_001",
"customer_crn": "100196918",
"customer_mobile_number": "9876543210",
"customer_first_name": "John",
"customer_middle_name": "Kumar",
"customer_last_name": "Doe",
"customer_email": "john.doe@example.com",
"customer_kyc_status": "FKYC",
"original_vrn": "MH01AB1234",
"original_vin": "OLD_CHASSIS123",
"original_engine_number": "OLD_ENGINE123",
"new_vehicle_details": {
"vrn": "MH02CD5678",
"vin": "NEW_CHASSIS456",
"engine_number": "NEW_ENGINE456",
"vehicle_class": "VC5",
"fuel_type": "DIESEL",
"is_commercial": true,
"has_national_permit": false,
"national_permit_expiry_date": "2027-12-31",
"security_deposit": 300.00
},
"vahan_details": {
"vrn": "MH02CD5678",
"vin": "NEW_CHASSIS456",
"engine_number": "NEW_ENGINE456",
"region_state": "MH",
"fuel_type": "DIESEL",
"is_national_permit": false,
"model": "Camry",
"chassis_number": "NEW_CHASSIS456",
"national_permit_end_date": "2027-12-31",
"gvw": "2000",
"registered_vehicle": "MH01AB1234",
"vehicle_descriptor": "Sedan"
},
"rc_documents": [
{
"download_uri": "https://s3-presigned-download-url-front",
"type": "RC_F",
"extension": "pdf"
},
{
"download_uri": "https://s3-presigned-download-url-back",
"type": "RC_B",
"extension": "pdf"
}
],
"old_vehicle_details": {
"vrn": "MH01AB1234",
"vin": "OLD_CHASSIS123",
"engine_number": "OLD_ENGINE123",
"vehicle_class": "VC4",
"fuel_type": "PETROL",
"is_commercial": false,
"has_national_permit": false,
"national_permit_expiry_date": "2027-12-31",
"old_vc_security_deposit": 200.00
},
"created_at": "2024-01-15 10:30:00"
}
}
Path Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
String (UUID) |
Application ID |
Yes |
Response Parameters:
| Parameter |
Data Type |
Description |
| application_id |
String (UUID) |
Application ID |
| application_ref_id |
String |
Application reference ID |
| status |
Enum |
Status. See VehicleUpdateRequestStatus |
| customer_seq_id |
String |
Customer sequence ID (optional) |
| customer_crn |
String |
Customer CRN |
| customer_mobile_number |
String |
Customer mobile number |
| customer_first_name |
String |
Customer first name |
| customer_middle_name |
String |
Customer middle name (optional) |
| customer_last_name |
String |
Customer last name |
| customer_email |
String |
Customer email address (optional) |
| customer_kyc_status |
Enum |
Customer KYC status. See KycStatus |
| original_vrn |
String |
Original VRN (optional) |
| original_vin |
String |
Original VIN |
| original_engine_number |
String |
Original engine number |
| new_vehicle_details |
Object(New Vehicle Details Object) |
New vehicle details |
| vahan_details |
Object(Vahan Details Object) |
Vahan API response |
| rc_documents |
Array(Vehicle Update Document Download Info Object) |
RC documents with download URLs (optional) |
| old_vehicle_details |
Object(Old Vehicle Info Object) |
Old vehicle details |
| created_at |
String |
Created timestamp |
New Vehicle Details Object
| Field |
Data Type |
Description |
| vrn |
String |
New VRN (optional) |
| vin |
String |
New VIN (optional) |
| engine_number |
String |
New engine number (optional) |
| vehicle_class |
Enum |
Vehicle class. See VehicleClass (optional) |
| fuel_type |
String |
Fuel type (optional) |
| is_commercial |
Boolean |
Whether vehicle is commercial (optional) |
| has_national_permit |
Boolean |
Has national permit (optional) |
| national_permit_expiry_date |
String |
National permit expiry date (optional) |
| security_deposit |
Decimal |
Security deposit for the new vehicle class (optional) |
Old Vehicle Info Object
| Field |
Data Type |
Description |
| vrn |
String |
Old VRN (optional) |
| vin |
String |
Old VIN |
| engine_number |
String |
Old engine number |
| vehicle_class |
Enum |
Vehicle class. See VehicleClass |
| fuel_type |
String |
Fuel type (optional) |
| is_commercial |
Boolean |
Whether vehicle is commercial |
| has_national_permit |
Boolean |
Has national permit |
| national_permit_expiry_date |
String |
National permit expiry date (optional) |
| old_vc_security_deposit |
Decimal |
Security deposit amount for the old vehicle class (optional) |
Vehicle Update Document Download Info Object
| Field |
Data Type |
Description |
| download_uri |
String |
Presigned S3 download URL |
| type |
Enum |
Document type (See DocumentType) |
| extension |
String |
File extension (optional) |
Error Codes:
| Error Code |
Description |
APPLICATION_NOT_FOUND |
Vehicle update application not found |
UNAUTHORIZED |
Session invalid |
UNAUTHORIZED |
Customer does not own this vehicle |
VEHICLE_NOT_FOUND |
Vehicle not found for the given ID |
ALREADY_SUBMITTED |
A vehicle update request is already submitted for this vehicle |
ALREADY_EXISTS |
VIN or VRN already exists |
ALREADY_VERIFIED_BY_VAHAN |
Field already verified from Vahan API |
VALIDATION_ERROR |
Validation error |
PAYABLE_DIFF_MISMATCH |
Security diff does not match server-calculated difference |
NETC_API_ERROR |
NETC API request failed |
TAG_PRICE_CONFIG_NOT_FOUND |
Tag price configuration not found |
WALLET_INELIGIBLE |
PPI wallet not eligible for security deposit debit |
INTERNAL_SERVER_ERROR |
Failed to get vehicle update details |
Transaction APIs
Transaction Statement
Generates a comprehensive transaction statement for the customer.
Endpoint: POST /api/v1/fastag/dashboard/customer/transaction/statement
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/transaction/statement' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"vrn": "MH12AB1234",
"start_time": "2024-04-01T00:00:00Z",
"end_time": "2024-04-30T23:59:59Z",
"format": "RAW"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"download_uri": null,
"statement": {
"customer_statement_details": {
"customer_details": {
"customer_id": "CUST123456",
"crn": "100196918",
"mobile_number": "9876543210",
"customer_name": "John Doe",
"kyc_status": "FKYC",
"email_address": "john.doe@example.com",
"delivery_address": "123 Main Street, Mumbai",
"total_active_tags": 2
},
"statement_date_time": "2025-04-28T18:00:00Z",
"statement_period": "2025-01-01 to 2025-04-28",
"total_vehicle": 2,
"wallet_opening_balance": 1500.00,
"wallet_closing_balance": 1300.00,
"master_opening_balance": 5000.00,
"master_closing_balance": 4800.00,
"master_account_number": "1234567890",
"gstn_no": "27AABCU9603R1ZM",
"security_deposit": 200.00
},
"vehicle_summary": [
{
"vehicle_number": "MH12AB1234",
"serial_no": "1",
"barcode": "BAR123456",
"tag_id": "TAG123456789",
"vehicle_class": "VC4",
"commercial_flag": "YES",
"trip_count": 45,
"txn_amount": 4500.00,
"group_name": "Fleet A"
}
],
"master_account_details": [
{
"transaction_date_and_time": "2025-04-28T10:30:00Z",
"processing_date_and_time": "2025-04-28T10:35:00Z",
"unique_transaction_id": "TXN123456789",
"transaction_type": "DR",
"transaction_description": "Toll deduction at Mumbai Plaza",
"account_number": "1234567890",
"debit_amt": 200.00,
"credit_amt": 0.00,
"opening_balance": 5000.00,
"closing_balance": 4800.00
}
],
"wallet_transaction_details": [
{
"transaction_date_and_time": "2025-04-28T10:30:00Z",
"processing_date_and_time": "2025-04-28T10:35:00Z",
"unique_transaction_id": "TXN123456789",
"transaction_type": "DR",
"transaction_description": "Toll deduction at Mumbai Plaza",
"debit_amt": 200.00,
"credit_amt": 0.00,
"opening_balance": 1500.00,
"closing_balance": 1300.00,
"plaza_code": "MUM001",
"plaza_name": "Mumbai Plaza",
"lane_id": "L1",
"transaction_date": "2025-04-28",
"trip_number": "TRIP123",
"vrn_or_vin": "MH12AB1234",
"tag_id": "TAG123456789",
"tag_serial_number": "TSN123456",
"group_name": "Fleet A"
}
],
"payment_to_kotak_bank": [
{
"transaction_date_and_time": "2025-04-28T10:30:00Z",
"unique_transaction_id": "TXN123456789",
"transaction_description": "Toll payment",
"hsn_code": "996311",
"vehicle_number": "MH12AB1234",
"tag_id": "TAG123456789",
"serial_no": "1",
"transaction_amount": 200.00,
"sgst": 9.00,
"igst": 0.00,
"cgst": 9.00,
"grand_total": 218.00
}
]
}
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| vrn |
String |
Vehicle Registration Number to filter |
No |
| start_time |
String |
Start time in RFC3339 format |
Yes |
| end_time |
String |
End time in RFC3339 format |
Yes |
| format |
Enum |
Statement format. See CustomerStatementFormat. Defaults to XLSX |
No |
Response Parameters:
| Parameter |
Data Type |
Description |
| download_uri |
String |
Presigned S3 download URL (present when format is XLSX, null for RAW) |
| statement |
Object(Customer Statement Response Object) |
Statement data (present when format is RAW, null for XLSX) |
Customer Statement Response Object
Customer Statement Details Object
| Parameter |
Data Type |
Description |
| customer_details |
Object(Report Customer Details Object) |
Customer identification and contact details |
| statement_date_time |
String |
Timestamp when statement was generated |
| statement_period |
String |
Date range of the statement |
| total_vehicle |
Number |
Total number of vehicles |
| wallet_opening_balance |
Decimal |
PPI wallet opening balance |
| wallet_closing_balance |
Decimal |
PPI wallet closing balance |
| master_opening_balance |
Decimal |
Master wallet opening balance |
| master_closing_balance |
Decimal |
Master wallet closing balance |
| master_account_number |
String |
Master account number |
| gstn_no |
String |
GSTIN number of Kotak Bank |
| security_deposit |
Decimal |
Total security deposit |
Report Customer Details Object
| Parameter |
Data Type |
Description |
| customer_id |
String |
Unique customer identifier |
| crn |
String |
Customer Reference Number |
| mobile_number |
String |
Customer's mobile number |
| customer_name |
String |
Full name of the customer |
| kyc_status |
Enum |
KYC verification status. See KycStatus |
| email_address |
String |
Customer's email address |
| delivery_address |
String |
Customer's delivery address |
| total_active_tags |
Number |
Number of active FASTag tags |
Vehicle Summary Object
| Parameter |
Data Type |
Description |
| vehicle_number |
String |
Vehicle registration number |
| serial_no |
String |
Serial number |
| barcode |
String |
FASTag barcode |
| tag_id |
String |
FASTag ID |
| vehicle_class |
String |
Vehicle classification |
| commercial_flag |
String |
Commercial vehicle indicator |
| trip_count |
Number |
Total number of trips |
| txn_amount |
Decimal |
Total transaction amount |
| group_name |
String |
Vehicle group name |
Master Account Details Object
| Parameter |
Data Type |
Description |
| transaction_date_and_time |
String |
Transaction timestamp |
| processing_date_and_time |
String |
Processing timestamp |
| unique_transaction_id |
String |
Unique transaction identifier |
| transaction_type |
String |
Type. See DbTransactionType |
| transaction_description |
String |
Transaction description |
| account_number |
String |
Account number |
| debit_amt |
Decimal |
Debit amount |
| credit_amt |
Decimal |
Credit amount |
| opening_balance |
Decimal |
Opening balance |
| closing_balance |
Decimal |
Closing balance |
Wallet Transaction Details Object
| Parameter |
Data Type |
Description |
| transaction_date_and_time |
String |
Transaction timestamp |
| processing_date_and_time |
String |
Processing timestamp |
| unique_transaction_id |
String |
Unique transaction identifier |
| transaction_type |
String |
Type. See DbTransactionType |
| transaction_description |
String |
Transaction description |
| debit_amt |
Decimal |
Debit amount |
| credit_amt |
Decimal |
Credit amount |
| opening_balance |
Decimal |
Opening balance |
| closing_balance |
Decimal |
Closing balance |
| plaza_code |
String |
Toll plaza code |
| plaza_name |
String |
Toll plaza name |
| lane_id |
String |
Lane identifier |
| transaction_date |
String |
Transaction date |
| trip_number |
String |
Trip identifier |
| vrn_or_vin |
String |
Vehicle registration or VIN |
| tag_id |
String |
FASTag ID |
| tag_serial_number |
String |
FASTag serial number |
| group_name |
String |
Transaction group name |
Payment To Kotak Bank Object
| Parameter |
Data Type |
Description |
| transaction_date_and_time |
String |
Transaction timestamp |
| unique_transaction_id |
String |
Unique transaction identifier |
| transaction_description |
String |
Transaction description |
| hsn_code |
String |
HSN code for GST |
| vehicle_number |
String |
Vehicle registration number |
| tag_id |
String |
FASTag ID |
| serial_no |
String |
Serial number |
| transaction_amount |
Decimal |
Base transaction amount |
| sgst |
Decimal |
State GST |
| igst |
Decimal |
Integrated GST |
| cgst |
Decimal |
Central GST |
| grand_total |
Decimal |
Total amount including tax |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Customer not registered / Customer ID not found in session |
BAD_REQUEST |
Validation error |
INTERNAL_SERVER_ERROR |
Failed to generate statement |
Application Transactions List
Lists transactions for a specific FASTag application.
Endpoint: POST /api/v1/fastag/dashboard/customer/applications/transactions/list
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/applications/transactions/list' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"application_id": "550e8400-e29b-41d4-a716-446655440000"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"transactions": [
{
"txn_status": "SUCCESS",
"txn_id": "a3ea86e4094649d4bcacf6fe858f42fd",
"transactions_ref_id": "REF_789",
"txn_mode": "PG",
"txn_timestamp": "2024-01-15T10:30:00Z",
"order_id": "pg_09c275d8-a87c-4beb-a38c-5c89f18bbf4d",
"txn_amount": 600.00
}
]
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| application_id |
String (UUID) |
Application ID |
Yes |
Response Parameters:
Application Transaction Object
| Parameter |
Data Type |
Description |
| txn_status |
String - See DbTransactionStatus |
Transaction status |
| txn_id |
String |
Transaction ID |
| transactions_ref_id |
String |
Transaction reference ID |
| txn_mode |
String |
Transaction mode (e.g., PG, WALLET) |
| txn_timestamp |
String |
Transaction timestamp |
| order_id |
String |
Order ID (optional) |
| txn_amount |
Decimal |
Transaction amount |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Application not found / validation error / Invalid application ID format |
UNAUTHORIZED |
Not authorized to perform this action on this application |
BAD_REQUEST |
Request failed (internal error) |
Auto-Recharge APIs
Get Auto-Recharge Config
Gets the customer's auto-recharge configuration.
Endpoint: GET /api/v1/fastag/dashboard/customer/auto-recharge/config
curl -L -X GET '{{host}}/api/v1/fastag/dashboard/customer/auto-recharge/config' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
Sample Response - Auto-Recharge Enabled:
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"is_enabled": true,
"instrument_type": "SBA",
"instrument_id": "ACC1234567890",
"instrument_display_value": "XXXX-7890",
"recharge_amount": "500",
"threshold_amount": "200",
"min_recharge": "100",
"max_recharge_casa": "10000",
"max_recharge_cc": "25000",
"min_threshold": "100"
}
}
Sample Response - Auto-Recharge Not Configured:
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"is_enabled": false,
"recharge_amount": "100",
"threshold_amount": "100",
"min_recharge": "100",
"max_recharge_casa": "10000",
"max_recharge_cc": "25000",
"min_threshold": "100"
}
}
Response Parameters:
| Parameter |
Data Type |
Description |
| is_enabled |
Boolean |
Whether auto-recharge is currently enabled |
| instrument_type |
String |
Instrument type (CC, SBA, CAA, or PG). See PaymentInstrumentTypeV2 - only if configured |
| instrument_id |
String |
Instrument ID (account number or card number) - only if configured |
| instrument_display_value |
String |
Instrument display value (e.g., "XXXX-1234") - only if configured |
| recharge_amount |
String |
Current recharge amount if configured; suggested minimum amount otherwise |
| threshold_amount |
String |
Current threshold amount if configured; suggested minimum threshold otherwise |
| min_recharge |
String |
Minimum recharge amount (hard limit based on customer context) |
| max_recharge_casa |
String |
Maximum recharge amount for CASA/OD/Prepaid (SBA, CAA, PG) - hard limit |
| max_recharge_cc |
String |
Maximum recharge amount for Credit Card (CC) - hard limit |
| min_threshold |
String |
Minimum threshold amount (hard limit based on customer context) |
Error Codes:
| Error Code |
Description |
UNAUTHORIZED |
Your session isn't valid, please try logging again |
CUSTOMER_NOT_FOUND |
Customer not found |
WALLET_NOT_FOUND / WALLET_CLOSED / WALLET_INACTIVE / WALLET_CREDIT_FREEZE / WALLET_DEBIT_FREEZE / WALLET_FREEZE |
Wallet not found / closed / inactive / credit-frozen / debit-frozen / completely frozen |
DATABASE_ERROR |
Failed to fetch customer details |
INTERNAL_ERROR |
Failed to get auto-recharge settings |
Submit Auto-Recharge
Enables/modifies/disables auto-recharge directly without OTP validation (K811 flow).
Endpoint: POST /api/v1/fastag/dashboard/customer/auto-recharge/submit
Sample Request - Enable/Modify:
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/auto-recharge/submit' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"autoRechargeConfigs": {
"operation": "enable",
"instrument_id": "ACC1234567890",
"recharge_amount": "5000",
"threshold_amount": "2000"
}
}'
Sample Request - Disable:
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/auto-recharge/submit' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"autoRechargeConfigs": {
"operation": "disable"
}
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"success": true,
"message": "Auto-recharge enabled successfully",
"operation": "enable",
"auto_recharge_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| autoRechargeConfigs |
Object |
Auto-recharge configuration |
Yes |
autoRechargeConfigs Object:
| Parameter |
Data Type |
Description |
Required |
| operation |
String |
Operation type: enable, modify, or disable. See AutoRechargeOperation |
Yes |
| instrument_id |
String |
Instrument ID (account number or card number) |
Yes (for enable/modify) |
| recharge_amount |
String |
Recharge amount to be debited |
Yes (for enable/modify) |
| threshold_amount |
String |
Threshold amount that triggers auto-recharge |
Yes (for enable/modify) |
*Note : For recharge_amount and threshold_amount, string must not contain decimal places.
Response Parameters:
| Parameter |
Data Type |
Description |
| success |
Boolean |
Whether the operation was successful |
| message |
String |
Response message |
| operation |
String |
The operation that was performed. See AutoRechargeOperation - only present on success |
| auto_recharge_id |
String |
Auto-recharge ID (if successfully created/updated) |
Error Codes:
| Error Code |
Description |
UNAUTHORIZED |
Your session isn't valid, please try logging again |
CUSTOMER_NOT_FOUND |
Customer not found |
VALIDATION_ERROR |
Invalid request parameters (e.g., missing required fields, PG instrument not supported, amounts out of valid range) |
DAILY_LIMIT_EXCEEDED |
Auto-recharge can only be set or edited once per day |
NO_CONFIG_FOUND |
No auto-recharge config found for the OTP reference |
OTP_REFERENCE_MISMATCH |
OTP reference ID mismatch |
OTP_ALREADY_ACTIVE |
An OTP is already active - please wait for it to expire |
AUTO_RECHARGE_ENABLE_FAILED |
Failed to enable auto-recharge |
AUTO_RECHARGE_MODIFY_FAILED |
Failed to modify auto-recharge |
AUTO_RECHARGE_DISABLE_FAILED |
Failed to disable auto-recharge |
DATABASE_ERROR |
Database error |
WALLET_NOT_FOUND / WALLET_CLOSED / WALLET_INACTIVE / WALLET_CREDIT_FREEZE / WALLET_DEBIT_FREEZE / WALLET_FREEZE |
Wallet not found / closed / inactive / credit-frozen / debit-frozen / completely frozen |
INTERNAL_SERVER_ERROR |
Internal server error |
Complaint APIs
Complaint Configuration
Gets the complaint configuration settings.
Endpoint: GET /api/v1/fastag/dashboard/customer/complaints/configuration
curl -L -X GET '{{host}}/api/v1/fastag/dashboard/customer/complaints/configuration' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"complaints": [
{
"display_name": "Tag Not Working",
"complaint_configuration_id": "550e8400-e29b-41d4-a716-446655440000",
"is_txn_mandatory": true,
"is_full_partial_allowed": false,
"txn_filter": {
"sources": ["NETC"],
"transaction_types": ["DR"],
"cooling_period": 7
},
"types": [
{
"display_name": "Tag Not Read",
"complaint_configuration_id": "660e8400-e29b-41d4-a716-446655440001",
"documents_required": [
{
"file_name": "receipt_image",
"display_name": "Receipt Image",
"is_mandatory": true
}
],
"is_full_partial_allowed": true,
"is_txn_mandatory": true,
"txn_filter": {
"sources": ["NETC"],
"transaction_types": ["DR"],
"cooling_period": 3
},
"reason_code": "TAG_NOT_READ"
}
]
}
]
}
}
Response Parameters:
| Parameter |
Data Type |
Description |
| complaints |
Array(Complaint Type Object) |
List of complaint types with nested subtypes. |
Complaint Type Object
| Parameter |
Data Type |
Description |
| display_name |
String |
Display name of the complaint type |
| complaint_configuration_id |
UUID |
Unique identifier for the complaint configuration |
| is_txn_mandatory |
Boolean |
Whether transaction is mandatory for this complaint type (optional) |
| is_full_partial_allowed |
Boolean |
Whether full/partial refund is allowed (optional) |
| txn_filter |
Object(Txn Filter Object) |
Transaction filter criteria (optional) |
| types |
Array(Complaint Subtype Object) |
List of complaint subtypes. |
Complaint Subtype Object
| Parameter |
Data Type |
Description |
| display_name |
String |
Display name of the complaint subtype |
| complaint_configuration_id |
UUID |
Unique identifier for the complaint configuration |
| documents_required |
Array(Complaint Configuration Document Object) |
List of required documents (optional) |
| is_full_partial_allowed |
Boolean |
Whether full/partial refund is allowed (optional) |
| is_txn_mandatory |
Boolean |
Whether transaction is mandatory for this subtype (optional) |
| txn_filter |
Object(Txn Filter Object) |
Transaction filter criteria (optional) |
| reason_code |
String |
Reason code for the complaint (optional) |
Complaint Configuration Document Object
| Parameter |
Data Type |
Description |
| file_name |
String |
File name of the required document |
| display_name |
String |
Display name of the document |
| is_mandatory |
Boolean |
Whether the document is mandatory |
Txn Filter Object
| Parameter |
Data Type |
Description |
| sources |
Array |
List of transaction sources |
| transaction_types |
Array |
List of transaction types (nullable) |
| cooling_period |
Number |
Cooling period in days before a complaint can be raised (nullable) |
Error Codes:
| Error Code |
Description |
INTERNAL_SERVER_ERROR |
Failed to fetch complaint configurations |
Raise Complaint
Raises a new complaint.
Endpoint: POST /api/v1/fastag/dashboard/customer/complaints/raise
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/complaints/raise' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"complaint_configuration_id": "550e8400-e29b-41d4-a716-446655440000",
"description": "Transaction not reflected",
"transaction_id": "660e8400-e29b-41d4-a716-446655440001",
"email": "user@example.com",
"amount": "100.00"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"complaint_id": "550e8400-e29b-41d4-a716-446655440000",
"complaint_ref_id": "COMP_123456",
"status": "Pending",
"documents": [
{
"file_name": "receipt.jpg",
"display_name": "Receipt",
"upload_uri": "https://s3-bucket.s3.amazonaws.com/temp/complaint/2024/01/15/receipt.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...&X-Amz-Signature=..."
}
]
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| complaint_configuration_id |
String |
Complaint configuration ID from configuration endpoint |
Yes |
| description |
String |
Complaint description |
Yes |
| transaction_id |
String |
Transaction ID (optional) |
No |
| email |
String |
Email address (optional) |
No |
| amount |
String |
Dispute amount (optional) |
No |
| upload_uri_type |
Enum |
Upload URI type. See RequestedPathType. Defaults to "URL" |
No |
Response Parameters:
| Parameter |
Data Type |
Description |
| complaint_id |
UUID |
Created complaint ID |
| complaint_ref_id |
String |
Complaint reference ID |
| status |
String |
Complaint status. See ComplaintStatus |
| documents |
Array(Complaint Document Upload Object) |
List of documents to upload (nullable) |
Complaint Document Upload Object
| Parameter |
Data Type |
Description |
| file_name |
String |
File name of the document |
| display_name |
String |
Display name of the document |
| upload_uri |
String |
Upload URI — presigned S3 PUT URL when upload_uri_type is URL (default), or raw S3 path when upload_uri_type is PATH |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Customer ID not found in session, or invalid dispute amount / validation error |
TRANSACTION_NOT_ELIGIBLE |
Transaction is not eligible for complaint |
CONFLICT |
Complaint already raised for this transaction |
NOT_FOUND |
Transaction not found, complaint configuration not found, or customer not found |
INTERNAL_SERVER_ERROR |
Failed to raise complaint |
Submit Complaint
Submits a complaint for processing after uploading required documents.
Endpoint: POST /api/v1/fastag/dashboard/customer/complaints/submit
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/complaints/submit' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"complaint_id": "550e8400-e29b-41d4-a716-446655440000",
"documents_uploaded": [
{
"file_name": "receipt.jpg",
"extension": "jpg"
}
]
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"complaint_id": "550e8400-e29b-41d4-a716-446655440000",
"complaint_ref_id": "COMP_123456",
"status": "Submitted"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| complaint_id |
UUID |
Complaint ID to submit |
Yes |
| documents_uploaded |
Array(Uploaded Document Object) |
List of uploaded documents. |
No |
Response Parameters:
| Parameter |
Data Type |
Description |
| complaint_id |
UUID |
Submitted complaint ID |
| complaint_ref_id |
String |
Complaint reference ID |
| status |
String |
Complaint status. See ComplaintStatus |
Uploaded Document Object
| Parameter |
Data Type |
Description |
| extension |
String |
File extension (e.g., jpg, pdf) |
| file_name |
String |
File name of the uploaded document |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Customer not registered , complaint not in pending status / documents not provided / invalid document |
MANDATORY_DOCUMENT_MISSING |
Required document is missing |
NOT_FOUND |
Complaint not found for the given ID |
FORBIDDEN |
You are not authorized to submit this complaint |
INTERNAL_SERVER_ERROR |
Failed to process request |
List Complaints
Lists all complaints for the customer.
Endpoint: POST /api/v1/fastag/dashboard/customer/complaints/list
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/complaints/list' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"start_date": "2024-01-01T00:00:00Z",
"end_date": "2024-02-01T00:00:00Z",
"status": ["Pending"],
"dispute_ref": "C-ABC123",
"gateway_txn_id": "GTW_123456",
"vehicle_number": "ABC123",
"page_no": 1,
"page_size": 10
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"complaints": [],
"total_count": 0,
"page_no": 1,
"page_size": 10
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| start_date |
String |
Start date in RFC3339 format |
Yes |
| end_date |
String |
End date in RFC3339 format |
Yes |
| status |
Array(String) |
Filter by complaint status. See ComplaintStatus |
No |
| dispute_ref |
String |
Filter by dispute reference ID |
No |
| gateway_txn_id |
String |
Filter by gateway transaction ID |
No |
| vehicle_number |
String |
Filter by vehicle registration number |
No |
| page_no |
Number |
Page number (must be >= 1) |
Yes |
| page_size |
Number |
Items per page |
Yes |
Note for status parameter: If you do not wish to filter by complaint status, omit the status field entirely from the request. If the field is included, it must contain at least one valid status (i.e., it cannot be an empty array).
Response Parameters:
| Parameter |
Data Type |
Description |
| complaints |
Array(Complaint List Item Object) |
List of complaints |
| total_count |
Number |
Total number of complaint records |
| page_no |
Number |
Current page number |
| page_size |
Number |
Items per page |
Complaint List Item Object
| Parameter |
Data Type |
Description |
| complaint_id |
UUID |
Complaint ID |
| complaint_ref_id |
String |
Complaint reference ID |
| customer_ref_id |
String |
Customer reference ID (optional) |
| customer_first_name |
String |
Customer first name |
| customer_middle_name |
String |
Customer middle name (optional) |
| customer_last_name |
String |
Customer last name (optional) |
| customer_mobile |
String |
Customer mobile number (optional) |
| customer_email |
String |
Customer email (optional) |
| complaint_type |
Object(Complaint Type Info Object) |
Complaint type info (optional) |
| complaint_subtype |
Object(Complaint Subtype Info Object) |
Complaint subtype info (optional) |
| status |
String |
Complaint status. See ComplaintStatus |
| description |
String |
Complaint description |
| transaction_id |
UUID |
Associated transaction ID (optional) |
| gateway_txn_id |
String |
Gateway transaction ID (optional) |
| transaction_time |
String |
Transaction timestamp (nullable) |
| vehicle_number |
String |
Vehicle registration number (optional) |
| maker |
String |
Who raised the complaint |
| raised_at |
String |
Complaint raised timestamp (optional) |
| resolution_type |
String |
Resolution type. See ComplaintResolutionType (optional) |
Complaint Type Info Object
| Parameter |
Data Type |
Description |
| complaint_configuration_id |
UUID |
Complaint type configuration ID |
| display_name |
String |
Display name of the complaint type |
Complaint Subtype Info Object
| Parameter |
Data Type |
Description |
| complaint_configuration_id |
UUID |
Complaint subtype configuration ID |
| display_name |
String |
Display name of the complaint subtype |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Customer not registered or validation error |
INTERNAL_SERVER_ERROR |
Failed to list complaints |
Complaint Details
Gets details of a specific complaint.
Endpoint: POST /api/v1/fastag/dashboard/customer/complaints/details
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/complaints/details' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"complaint_id": "550e8400-e29b-41d4-a716-446655440000"
}'
# Response: 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"complaint_id": "550e8400-e29b-41d4-a716-446655440000",
"complaint_ref_id": "COMP_123456",
"complaint_type_id": "660e8400-e29b-41d4-a716-446655440001",
"complaint_type_display_name": "Transaction Issue",
"complaint_subtype_id": "770e8400-e29b-41d4-a716-446655440002",
"complaint_subtype_display_name": "Amount Deducted Twice",
"status": "Pending",
"description": "Transaction not reflected",
"vehicle_info": {
"vin": "VIN123456789",
"vrn": "ABC123",
"vehicle_class": "Class 4",
"fuel_type": "Diesel",
"is_commercial": "Commercial",
"national_permit": true,
"national_permit_expiry": "2025-12-31",
"tag_issued_date": "2024-01-01"
},
"transaction_info": {
"transaction_id": "880e8400-e29b-41d4-a716-446655440003",
"gateway_transaction_id": "GTW_123456",
"transaction_time": "2024-01-15T10:30:00Z",
"transaction_processing_time": "2024-01-15T10:30:05Z",
"orig_txn_amount": "500.00",
"disputed_amount": "500.00",
"status": "SUCCESS",
"txn_type": "DR",
"txn_subtype": "TOLL"
},
"documents": [
{
"file_name": "receipt.jpg",
"display_name": "Receipt",
"extension": "jpg",
"document_uri": "https://s3-bucket.amazonaws.com/docs/receipt.jpg",
"uploaded_at": "2024-01-15T10:30:00Z"
}
],
"review_remarks": "Complaint reviewed and resolved",
"raised_at": "2024-01-15T10:30:00Z",
"email": "john@example.com",
"reason_code": "RC001",
"dispute_amount_type": "FULL",
"reviewed_at": "2024-01-16T09:00:00Z"
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| complaint_id |
UUID |
Complaint ID |
Yes |
Response Parameters:
| Parameter |
Data Type |
Description |
| complaint_id |
UUID |
Complaint ID |
| complaint_ref_id |
String |
Complaint reference ID |
| customer_info |
Object(Customer Info Object) |
Customer information (optional) |
| complaint_type_id |
UUID |
Complaint type configuration ID |
| complaint_type_display_name |
String |
Complaint type display name |
| complaint_subtype_id |
UUID |
Complaint subtype configuration ID |
| complaint_subtype_display_name |
String |
Complaint subtype display name |
| status |
String |
Complaint status. See ComplaintStatus |
| description |
String |
Complaint description |
| vehicle_info |
Object(Vehicle Info Object) |
Vehicle information (optional) |
| maker |
String |
Maker details (SELF or OPS) (optional) |
| transaction_info |
Object(Transaction Info Object) |
Transaction information (optional) |
| documents |
Array(Complaint Document Info Object) |
List of documents |
| review_remarks |
String |
Review remarks (nullable) |
| raised_at |
String |
Complaint raised timestamp (nullable) |
| email |
String |
Customer email (optional) |
| reason_code |
String |
Reason code (optional) |
| dispute_amount_type |
String |
Dispute amount type. See DisputeAmountType (optional) |
| reviewed_at |
String |
Review timestamp (nullable) |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Customer not registered |
NOT_FOUND |
Complaint not found for the given ID |
FORBIDDEN |
You are not authorized to view this complaint |
INTERNAL_SERVER_ERROR |
Failed to process request |
Customer Info Object
| Parameter |
Data Type |
Description |
| first_name |
String |
Customer first name |
| middle_name |
String |
Customer middle name (nullable) |
| last_name |
String |
Customer last name (nullable) |
| mobile_number |
String |
Mobile number |
| email |
String |
Email address |
| customer_ref_id |
String |
Customer reference ID |
| customer_seq_id |
String |
Customer sequence ID |
Vehicle Info Object
| Parameter |
Data Type |
Description |
| vin |
String |
Vehicle Identification Number |
| vrn |
String |
Vehicle registration number (nullable) |
| vehicle_class |
Enum |
Vehicle class. See VehicleClass |
| fuel_type |
String |
Fuel type (nullable) |
| is_commercial |
String |
Whether vehicle is commercial ("Commercial" or "Private") |
| national_permit |
Boolean |
National permit status (nullable) |
| national_permit_expiry |
String |
National permit expiry date (nullable) |
| tag_issued_date |
String |
Tag issued date (nullable) |
Transaction Info Object
| Parameter |
Data Type |
Description |
| transaction_id |
UUID |
Transaction ID |
| gateway_transaction_id |
String |
Gateway transaction ID |
| transaction_time |
String |
Transaction timestamp (nullable) |
| transaction_processing_time |
String |
Transaction processing time (nullable) |
| orig_txn_amount |
String |
Original transaction amount |
| disputed_amount |
String |
Disputed amount (nullable) |
| status |
Enum |
Transaction status. See DbTransactionStatus (nullable) |
| txn_type |
String |
Transaction type (nullable) |
| txn_subtype |
String |
Transaction subtype (nullable) |
Complaint Document Info Object
| Parameter |
Data Type |
Description |
| file_name |
String |
File name |
| display_name |
String |
Display name |
| extension |
String |
File extension (optional) |
| document_uri |
String |
Document URL |
| uploaded_at |
String |
Upload timestamp (optional) |
Document APIs
Get Upload URLs
Generates presigned S3 upload URLs for document uploads.
Endpoint: POST /api/v1/fastag/dashboard/customer/documents/upload
Sample Request - URL type:
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/documents/upload' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"number_of_paths": 2,
"purpose": "NEW_FASTAG",
"upload_uri_type": "URL"
}'
Sample Request - PATH type:
curl -L -X POST '{{host}}/api/v1/fastag/dashboard/customer/documents/upload' \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-H 'x-client-source: 811' \
-H 'x-customer-crn: 100196918' \
-H 'Authorization: Bearer <session_token>' \
--data-raw '{
"number_of_paths": 2,
"purpose": "NEW_FASTAG",
"upload_uri_type": "PATH"
}'
# Response (upload_uri_type: URL) - 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"upload_uris": {
"a1b2c3d4-e5f6-7890-abcd-ef1234567890": "https://s3-bucket.s3.amazonaws.com/temp/2026/6/1/.../1?X-Amz-Signature=...",
"b2c3d4e5-f6a7-8901-bcde-f12345678901": "https://s3-bucket.s3.amazonaws.com/temp/2026/6/1/.../2?X-Amz-Signature=..."
},
"expiry_seconds": 3600
}
}
# Response (upload_uri_type: PATH) - 200 OK
{
"status": "SUCCESS",
"response_code": "00",
"response_message": "Request Success",
"payload": {
"upload_uris": {
"a1b2c3d4-e5f6-7890-abcd-ef1234567890": "s3://bucket-name/temp/2026/6/1/.../1",
"b2c3d4e5-f6a7-8901-bcde-f12345678901": "s3://bucket-name/temp/2026/6/1/.../2"
},
"expiry_seconds": 3600
}
}
Request Parameters:
| Parameter |
Data Type |
Description |
Required |
| number_of_paths |
Number |
Number of upload URLs to generate (1-5) |
Yes |
| purpose |
String - See DocumentUploadPurpose |
Purpose of the document upload |
Yes |
| upload_uri_type |
String - See RequestedPathType |
Whether to return presigned URLs or raw S3 paths. Defaults to URL. |
No |
Response Parameters:
| Parameter |
Data Type |
Description |
| upload_uris |
Object |
Map of UUID keys to presigned S3 PUT URLs (or S3 paths if upload_uri_type is PATH) |
| expiry_seconds |
Number |
URL expiry time in seconds |
Error Codes:
| Error Code |
Description |
BAD_REQUEST |
Invalid number of paths requested, must be in between 1-5 |
INTERNAL_SERVER_ERROR |
Failed to generate presigned URL / Internal server error |
Enums
ApplicationPaymentMode
| Value |
Description |
WALLET |
Synchronous wallet debit |
PG |
Payment Gateway |
CC |
Credit Card |
SBA |
Savings Bank Account |
CAA |
Current Account |
S2sTransactionStatus
| Value |
Description |
INITIATED |
Payment initiated |
PENDING |
Payment pending |
SUCCESS |
Payment successful |
FAILED |
Payment failed |
S2sApplicationType
| Value |
Description |
NEW_TAG |
New tag application |
| Value |
Description |
RAW |
Raw JSON format |
XLSX |
XLSX download format |
ApplicationKycStatus
| Value |
Description |
MIN_KYC |
Minimum KYC |
FULL_KYC |
Full KYC |
KycStatus
| Value |
Description |
LKYC |
Limited KYC |
FKYC |
Full KYC |
PaymentMode
| Value |
Description |
CC |
Credit Card (default) |
SBA |
Savings Bank Account |
CAA |
Current Account |
PG |
Payment Gateway |
BBPS |
Bharat Bill Payment System |
UPI |
UPI Payment |
WALLET |
Wallet Payment |
Vehicle Pricing Response Object
| Parameter |
Data Type |
Description |
| vc |
String |
Vehicle class |
| tag_price |
Decimal |
Tag price (discounted) |
| non_discounted_tag_price |
Decimal |
Non-discounted tag price |
| tag_security_deposit |
Decimal |
Tag security deposit |
| initial_wallet_load |
Decimal |
Initial wallet load amount |
| vehicle_linking_id |
UUID |
Vehicle linking ID |
| tag_cost_breakdown |
Object(Tag Cost Breakdown Object) |
Tag cost breakdown |
FastagTransactionSource
| Value |
Description |
| NETC |
NETC toll/parking transactions |
| FASTAG_AUTO_TOPUP |
Automatic wallet top-up |
| FASTAG_WALLET_RECHARGE |
Manual wallet recharge |
| REGISTRATION |
Tag registration transactions |
| UNREGISTERED_TAG_TXN |
Transactions for unregistered tags |
| FASTAG_APPLICATION_REJECTION |
Application rejection refunds |
| WALLET_AUTO_RECHARGE |
Auto-recharge transactions |
| APPLICATION_FEE |
Application fee deductions |
| FASTAG_CLOSURE_REFUND |
Tag closure refunds |
| BBPS |
BBPS payment transactions |
| UPI |
UPI payment transactions |
| TAG_REPLACEMENT_FEE |
Tag replacement fees |
| TAG_REPLACEMENT_REJECTION_REFUND |
Tag replacement rejection refunds |
CreditSource
| Value |
Description |
| RECHARGE |
Credit Source for recording a Recharge to customer's wallet |
DbTransactionType
| Value |
Description |
| CR |
Credit transaction |
| DR |
Debit transaction |
| NON_FIN |
Non-financial transaction |
DbTransactionStatus
| Value |
Description |
| PENDING |
Transaction pending |
| SUCCESS |
Transaction successful |
| FAILURE |
Transaction failed |
| SCHEDULED |
Transaction is scheduled for future processing (auto-recharge) |
| SKIPPED |
Transaction is skipped due to auto-recharge conditions |
| Value |
Description |
| ACTIVE |
Tag is active and usable |
| CLOSED |
Tag has been closed |
ExceptionSource
| Value |
Description |
| BANK |
Exception added by bank |
| CUSTOMER |
Exception requested by customer |
| SWITCH |
Exception from NPCI switch |
| WALLET |
Exception from wallet system |
| TAG_CLOSURE |
Exception due to tag closure |
| WALLET_FREEZE |
Exception due to wallet freeze |
ExceptionCodeStatus
| Value |
Description |
| ACTIVE |
Exception is currently active |
| INACTIVE |
Exception has been removed |
VehicleClass
| Value |
Description |
| VC1 |
Car/Jeep/Van |
| VC2 |
Light Commercial Vehicle (LCV) |
| VC3 |
Bus (2 axle) |
| VC4 |
Bus (3 axle) |
| VC5 |
Truck (2 axle) |
| VC7 |
Truck (4 axle) |
| VC8 |
Truck (5 axle) |
| VC9 |
Truck (6 axle) |
| VC10 |
Earth Moving Equipment |
| VC11 |
Heavy Construction Equipment |
| VC12 |
Tractor |
| VC13 |
Trailer (3 axle) |
| VC14 |
Trailer (4 axle) |
| VC15 |
Trailer (5 axle) |
| VC16 |
Trailer (6 axle) |
| VC17 |
Trailer (7 axle) |
| VC18 |
Trailer (8 axle) |
| VC19 |
Trailer (9 axle) |
| VC20 |
Multi-axle vehicle |
WalletStatus
| Value |
Description |
| ACTIVE |
Wallet is active |
| INACTIVE |
Wallet is inactive |
| CLOSED |
Wallet has been closed |
| CREDIT_FREEZE |
Wallet is frozen for credit |
| DEBIT_FREEZE |
Wallet is frozen for debit |
| FREEZE |
Wallet is completely frozen |
WalletType
| Value |
Description |
| MASTER |
Master wallet |
| PPI |
Prepaid Instrument wallet |
| FASTAG_SECURITY |
Fastag security deposit wallet |
ApplicationChannel
| Value |
Description |
| WEB_PORTAL |
Web portal channel |
| BANK_PORTAL |
Bank portal channel |
| CUSTOMER_PORTAL |
Customer portal channel |
| MB811_APP |
Mobile app 811 channel |
FastagChannel
| Value |
Description |
| DEFAULT |
Default channel |
| Other |
Custom channel name (string value) |
FastagApplicationStatus
| Value |
Description |
| PENDING |
Application is pending |
| PAYMENT_PENDING |
Payment is pending |
| PAYMENT_INITIATED |
Payment has been initiated |
| PAYMENT_FAILED |
Payment has failed |
| SUBMITTED |
Application has been submitted |
| CLOSED |
Application has been closed |
FastagAppInfoStatus
| Value |
Description |
| SUBMITTED |
Vehicle info submitted |
| APPROVED |
Vehicle info approved |
| REJECTED |
Vehicle info rejected |
| REGISTERED |
Vehicle registered with NETC |
| PENDING |
Vehicle info pending |
| HOLD |
Vehicle info on hold |
| LINKING_FAILED |
Vehicle linking failed |
| LINKING_PENDING |
Vehicle linking pending |
| LINKING_COMPLETED |
Vehicle linking completed |
| DELETED |
Vehicle info deleted |
DocumentStatus
| Value |
Description |
| PENDING |
Document pending verification |
| APPROVED |
Document approved |
| REJECTED |
Document rejected |
DocumentType
| Value |
Description |
| KYV_FR |
KYV Front document |
| KYV_S |
KYV Side document |
| KYV_TG |
KYV Tag document |
| VHC |
Vehicle document |
| MA |
Manufacturer document |
| RC_F |
RC Front document |
| RC_B |
RC Back document |
| CHQ |
Cheque document |
| WALLET_CLOSURE_IMMEDIATE_PROOF |
Wallet closure immediate proof document |
| MISC |
Miscellaneous document |
OrderBy
| Value |
Description |
| asc |
Ascending order |
| desc |
Descending order |
KyvApplicationStatus
| Value |
Description |
| PENDING |
KYV application pending |
| SUBMITTED |
KYV application submitted |
| APPROVED |
KYV application approved |
| REJECTED |
KYV application rejected |
| HOLD |
KYV application on hold |
ClosureStatus
| Value |
Description |
| SUBMITTED |
Closure request submitted |
| APPROVED |
Closure request approved |
| REJECTED |
Closure request rejected |
| PENDING |
Closure request pending |
FastagClosureInitiatedBy
| Value |
Description |
| CUSTOMER |
Initiated by customer |
| NETC |
Initiated by NETC |
| BANK |
Initiated by bank |
FastagWalletType
| Value |
Description |
| MASTER |
Master wallet for a customer |
| PPI |
Prepaid Payment Instrument wallet for Fastag transactions |
| FASTAG_SECURITY |
Wallet for holding security deposit for a Fastag |
FastagClosureEligibilityFailureReason
Tagged enum (discriminated by type field). Possible types:
| Type |
Additional Fields |
Description |
| TagNotFound |
— |
Tag not found in database |
| TagNotFoundInNetc |
— |
Tag not found in NETC response |
| TagInException |
exception_codes: Array(Closure Exception Code Detail Object) |
Tag has exception codes preventing closure |
| TagAlreadyClosed |
— |
Tag is already in CLOSED status |
| ClosureAlreadyRaised |
closure_status: See ClosureStatus, closure_id: String |
Closure request already exists |
| NetcError |
message: String |
Error occurred while fetching data from NETC |
SubmitFastagClosureError
| Value |
Description |
| DBError |
Database error |
| EligibilityError |
Eligibility check failed |
| FastagNotFound |
Fastag not found |
| VehicleNotFound |
Vehicle not found |
| RequestAlreadyRaised |
Closure request already raised |
| RequestLimitExceeded |
Breached max closure request limit |
| SubmissionPending |
Submission is in pending state |
| NetcCallFailure |
NETC call failed |
| SubmissionError |
Submission error |
| RequestNotFound |
Request not found |
| CustomerNotFound |
Customer not found |
ReplacementStatus
| Value |
Description |
| PENDING |
Replacement application pending |
| SUBMIT |
Replacement submitted |
| APPROVE |
Replacement approved |
| REJECT |
Replacement rejected |
ReplacementInitiatedBy
| Value |
Description |
| CUSTOMER |
Replacement initiated by customer |
| BANK |
Replacement initiated by bank |
| OPS |
Replacement initiated by operations |
ReplacementReason
| Value |
Description |
| DAMAGED |
Tag is damaged |
| LOST |
Tag is lost |
| THEFT |
Tag is stolen |
| DEFECTIVE |
Tag is defective |
| TAG_NOT_WORKING |
Tag is not working |
| CLASS_CHANGE |
Vehicle class changed |
| OTHERS |
Other reasons |
ReplacementStage
| Value |
Description |
| LOW_BALANCE_EXC_INITIATED |
Low balance exception initiated |
| UNDER_REVIEW |
Replacement under review |
| TAG_REPLACEMENT_REJECTED |
Tag replacement rejected |
| TAG_CLOSE_INITIATED |
Tag close initiated |
| TAG_REG_INITIATED |
Tag registration initiated |
| TAG_REGISTERED |
Tag registered |
RefundStatus
| Value |
Description |
| INITIATED |
Refund initiated |
| SUCCESS |
Refund successful |
| FAILURE |
Refund failed |
PaymentInstrumentTypeV2
| Value |
Description |
| CC |
Credit Card |
| SBA |
Savings Bank Account |
| CAA |
Current Account |
| PG |
Payment Gateway |
TransactionCreditStatus
| Value |
Description |
| Pending |
Transaction is pending |
| Success |
Transaction completed successfully |
| Failed |
Transaction failed |
WalletRechargeStatus
| Value |
Description |
| INITIATED |
Recharge initiated |
| SUCCESS |
Recharge successful |
| FAILED |
Recharge failed |
AutoRechargeOperation
| Value |
Description |
| enable |
Enable a new auto-recharge |
| modify |
Modify an existing auto-recharge |
| disable |
Disable an existing auto-recharge |
ComplaintStatus
| Value |
Description |
| Pending |
Complaint is pending |
| Submitted |
Complaint submitted |
| Approved |
Complaint approved |
| Rejected |
Complaint rejected |
DisputeAmountType
| Value |
Description |
| FULL |
Full dispute amount |
| PARTIAL |
Partial dispute amount |
ComplaintResolutionType
| Value |
Description |
| ODR |
Online Dispute Resolution |
| QDR |
Quick Dispute Resolution |
DocumentUploadPurpose
| Value |
Description |
| NEW_FASTAG |
New FASTag application documents |
| REPLACEMENT |
Tag replacement documents |
| KYV |
Know Your Vehicle documents |
| COMPLAINT |
Complaint-related documents |
| WALLET_CLOSURE |
Wallet closure documents |
| OTHER |
Other documents |
| INVENTORY |
Inventory documents |
RequestedPathType
| Value |
Description |
| URL |
Return presigned S3 URL (default) |
| PATH |
Return raw S3 object key/path |
ConfigType
| Value |
Description |
| MasterConfig |
Master configuration type |
VehicleUpdateRequestStatus
| Value |
Description |
| PENDING |
Vehicle update request is pending |
| SUBMITTED |
Vehicle update request is submitted |
| APPROVED |
Vehicle update request is approved |
| REJECTED |
Vehicle update request is rejected |
TxnType
| Value |
Description |
| DEBIT |
Customer must pay the security deposit difference (new security > old security) |
| CREDIT |
Customer will receive a refund of the security deposit difference (old security > new security) |
RefundType
| Value |
Description |
| FULL |
Full refund |
| PARTIAL |
Partial refund |
RefundMode
| Value |
Description |
| GATEWAY |
Refund via payment gateway |
| WALLET |
Refund to wallet |
Changelog
June 12, 2026
- Added a note to the
status parameter for the Transaction List API, specifying that it cannot be an empty array if provided.
- Added a note to the
status parameter for the List Complaints API, specifying that it cannot be an empty array if provided.
- Changed
current_balance data type from Decimal to String in the Eligibility API response.
- Updated the example
instrument_type and instrument_id in the Credit Transaction API request payload.
- Standardized
credit_source to "RECHARGE" in the Credit Transaction API example and CreditSource enum documentation.
June 11, 2026
- Added S2S Application Transaction API (
POST /api/v1/fastag/dashboard/s2s/customer/applications/transactions) — server-to-server payment recording for Fastag applications
- Added
ApplicationPaymentMode enum (5 values: WALLET, PG, CC, SBA, CAA)
- Added
S2sTransactionStatus enum (4 values: INITIATED, PENDING, SUCCESS, FAILED)
- Added
S2sApplicationType enum (1 value: NEW_TAG)
- Remove trailing decimals from amount values for Auto rechanrge fow
- Changed params to be snake_case for Auto rechanrge fow
- Updated data types from
Decimal to String for financial amounts in Get Latest Fastag Applications API response
June 4, 2026
June 3, 2026
- Fixed Add Vehicle request parameters:
national_permit — corrected from optional to required
is_vahan_verified — corrected from optional to required
is_commercial — corrected from optional to required
vehicle_class — corrected type from Object to String
June 2, 2026
Sample JSON / Curl Fixes
- Fixed
tagDetails fields in Get Latest Application and Get Application Invoice sample JSONs — changed serialNumber/tid to barcode/inventoryId (matches TagDetails struct)
- Fixed Get Application Invoice sample JSON
response_message — changed "Invoice retrieved successfully" to "Request Success" (matches ApiResponse::success())
- Removed
downloadUri from Get Application Invoice RC Document sample JSON (code always sets download_uri: None with skip_serializing_if)
- Fixed Transaction List curl — changed
sources: ["TOLL"] to ["NETC"] ("TOLL" is not a valid FastagTransactionSource); changed transaction_types: ["DEBIT"] to ["DR"] ("DEBIT" is not a valid DbTransactionType)
- Fixed Transaction List sample JSON
response_message — changed "Success" to "Request Success" (matches ApiResponse::success())
- Fixed S2S Auth Token curl — changed
client_id to valid 32 hex char value; changed client_secret to valid base64 value
- Fixed S2S Auth Revoke curl — changed
client_id to valid 32 hex char value; changed client_secret to valid base64 value; added token_type_hint field
- Fixed Customer Summary curl — added missing
Authorization: Bearer <session_token> header
- Fixed Customer Summary sample JSON
response_message — changed "Customer summary retrieved successfully" to "Request Success"
- Fixed Customer Summary sample JSON
fastag_status — changed "Active" to "ACTIVE" (matches SCREAMING_SNAKE_CASE serialization)
- Fixed Customer Summary sample JSON
kyv_status — changed "Completed" to "APPROVED" ("Completed" is not a valid KyvApplicationStatus)
- Fixed Customer Summary sample JSON
vehicle_class — changed "LMV" to "VC4" ("LMV" is not a valid VehicleClass)
- Removed
--data-raw '{}' from Get Latest Application curl (GET request has no body)
Validation Constraint Documentation
- Added 45-day max date range constraint to Vehicle Update List
start_time/end_time descriptions (matches validate_list_vehicle_update_summary in code)
Nullability Corrections
June 1, 2026
New APIs
- Added Get Upload URLs API (
POST /api/v1/fastag/dashboard/customer/documents/upload) — generates presigned S3 upload URLs for documents; supports URL (presigned URL) and PATH (raw S3 path) response types via upload_uri_type parameter
- Added
DocumentUploadPurpose enum (7 values: NEW_FASTAG, REPLACEMENT, KYV, COMPLAINT, WALLET_CLOSURE, OTHER, INVENTORY)
- Added
RequestedPathType enum (2 values: URL, PATH)
Field Name Corrections
- Renamed
downloadUrl → downloadUri in Get Latest Application RC Document Object (matches codebase download_uri field with rename_all = "camelCase")
- Renamed
downloadUrl → downloadUri in Get Application Invoice RC Document Object (same reason)
- Renamed
upload_url → upload_uri in Initiate Vehicle Update Document Upload Object (matches codebase upload_uri snake_case field)
- Renamed
download_url → download_uri in Get Vehicle Update Details RC Document Download Object (matches codebase download_uri snake_case field)
- Renamed
download_url → download_uri in Transaction Statement response (matches codebase download_uri snake_case field)
- Renamed
upload_url → upload_uri in Raise Complaint Complaint Document Upload Object (matches codebase upload_uri snake_case field)
- Fixed
engine_number → engineNumber in Get Vahan Details request curl and table (matches rename_all = "camelCase" on request struct)
- Fixed
totalPages → total_pages and totalItems → total_items in List Customer Applications response JSON (matches code — CustomerApplicationListResponse has no rename_all, so snake_case)
- Fixed S2S Auth Token response — added
ApiResponse wrapper (code returns ApiResponse::success(response), doc was showing raw response)
- Fixed S2S Auth Revoke response — added
ApiResponse wrapper; removed standalone message field from response table (code returns ApiResponse::<()>::success_with_message(...), message is in response_message of wrapper)
Missing Fields Added
Sample JSON Improvements
- Replaced all
null values in sample JSONs with realistic sample data across the entire doc (only error response payload: null retained)
- Expanded empty objects/arrays to full samples:
delivery_address in Customer Summary, wallet_details and fastag_details arrays, vehicleDetails and rcDocuments in Invoice, applications array in List Applications, demographicAddress in Invoice
- Fixed Invoice pricing structure — removed nested
"pricing" wrapper in vehicleDetails, flattened pricing fields to same level (matches #[serde(flatten)] in code)
- Updated Invoice Vehicle Invoice Details table — replaced single
pricing row with individual flattened pricing fields
- Added
tagDetails sample object in Latest Application and Invoice responses
- Added
txn_filter sample objects in Complaint Configuration (was null)
- Added
vehicle_list, sources, transaction_types sample values in Transaction List curl (was null)
May 28, 2026
- Removed HTTP Status column from all error code tables across the doc
- Fixed Generate Token descriptions:
client_id (32 hex characters, not alphanumeric), client_secret (base64-encoded, not minimum 32 characters), access_token (base64url-encoded 32-byte token)
- Fixed Revoke Token descriptions:
client_id and client_secret (same as Generate Token)
- Fixed Submit Auto-Recharge description (K811 flow, no OTP), added
remainingValidationCount response field
- Fixed Transaction Statement "See See" typo
- Fixed Vehicle Fitment request param from
vrn to vehicle_id (UUID)
- Fixed Submit Vehicle Update
channel_name and documents marked as required, added Submitted RC Document Details sub-object
- Fixed Get Invoice Details error code from
INTERNAL_SERVER_ERROR to FETCHING_APPLICATION_FAILED
- Fixed Get Vahan Details error HTTP status (many errors return HTTP 200 with failure payload, not error status)
- Fixed Calculate Vehicle Class Cost
wallet_flow values from DEBIT/CREDIT to Debit/Credit (PascalCase per TxnType enum serialization)
- Added
INTERNAL_ERROR (500) to Credit Transaction error codes (removed duplicate)
- Added various missing error codes across Onboarding APIs (
UNAUTHORIZED 401, ACTIVE_TRANSACTION_EXISTS 409, WALLET_INELIGIBLE 400, FETCHING_APPLICATION_FAILED 500, etc.)
- Added wallet status error codes (
WALLET_NOT_FOUND, WALLET_CLOSED, WALLET_INACTIVE, WALLET_CREDIT_FREEZE, WALLET_DEBIT_FREEZE, WALLET_FREEZE) to relevant APIs
May 27, 2026
- Added Customer Status API (
GET /api/v1/fastag/dashboard/customer/status) — returns is_registered flag indicating whether the customer is registered with the Fastag system; only possible error is UNAUTHORIZED (no active session or invalid token); removed incorrect INTERNAL_SERVER_ERROR (handler always returns 200)
May 20, 2026
- Removed "Work in Progress" status from Auto-Recharge APIs
- Fixed Get Auto-Recharge Config response example (null fields when not configured,
recharge_amount/threshold_amount return suggested values when not configured)
- Fixed Initiate Auto-Recharge
operation field to optional (defaults to enable), added disable request example, added error codes (VALIDATION_ERROR, DAILY_LIMIT_EXCEEDED, INSTRUMENT_NOT_FOUND, OTP_ALREADY_ACTIVE, OTP_GENERATION_ERROR, DATABASE_ERROR, CUSTOMER_NOT_FOUND), replaced generic CONFLICT/BAD_REQUEST with specific codes
- Updated Submit Auto-Recharge for K811 flow (no OTP, uses
autoRechargeConfigs object with operation, instrumentId, rechargeAmount, thresholdAmount), added disable request example, removed OTP-specific request/response fields, added error codes (VALIDATION_ERROR, DAILY_LIMIT_EXCEEDED, AUTO_RECHARGE_ENABLE_FAILED, AUTO_RECHARGE_MODIFY_FAILED, AUTO_RECHARGE_DISABLE_FAILED, DATABASE_ERROR, CUSTOMER_NOT_FOUND), replaced generic CONFLICT/BAD_REQUEST with specific codes
- Fixed Get Latest Application missing
downloadUrl field in RC Document Object, added demographicAddress to example response, fixed UNAUTHORIZED error description
- Updated Complaint Configuration fixed
documents_required example (strings→objects), txn_filter type (Array→Object), marked optional/nullable fields correctly based on serialization, added cooling_period to Txn Filter Object, upload_path→upload_url
- Updated Raise Complaint added
TRANSACTION_NOT_ELIGIBLE error code, marked documents as nullable
- Updated Submit Complaint
documents_uploaded marked optional, added MANDATORY_DOCUMENT_MISSING error code
- Updated List Complaints added missing request params
dispute_ref, gateway_txn_id, vehicle_number, documented ComplaintListItem object marking optional fields as (optional) and nullable fields as (nullable) based on skip_serializing_if serialization properties
- Updated Complaint Details fixed
customer_info and maker (both omitted for K811 due to skip_serializing_if, removed null from example), fixed customer_name→first_name/middle_name/last_name in Customer Info Object, fixed is_commercial value format, marked optional fields as (optional) and nullable fields as (nullable) in response tables (including Vehicle Info Object and Transaction Info Object)
May 19, 2026
- Updated Onboarding APIs (removed "Work in Progress" status)
- Fixed Create Application error codes to reflect only client-facing responses
- Fixed Submit Fastag Application request fields (
application_id, opted_master_wallet, channel only) and error codes (added wallet status errors)
- Fixed Add Vehicle endpoint path and field names (
vrn, vin, engine_number, etc.)
- Fixed Link Tag error codes to actual client-facing values (
INVALID_VEHICLE_STATUS, VEHICLE_INFO_MISMATCH, TAG_NOT_AVAILABLE)
- Fixed Validate Tag barcode request format (flat
serial_number/issuer_key_index/issuer_iin, not nested), added vehicle_linking_id field, fixed error codes
- Added missing onboarding APIs: Update Application Details, Delete Vehicle
- Moved Application Transactions List to Transaction APIs section
- Fixed Create Application Transaction error codes (added
ACTIVE_TRANSACTION_EXISTS, WALLET_INELIGIBLE; removed internal-only errors)
- Restored missing sections: Get Application Invoice, Get Vahan Details, Get Tag Pricing Info
- Fixed Vahan Details request to flat structure (no
vehicle wrapper)
- Updated Delivery Details Object field names to match source (
address_1, address_2, address_3)
- Added
demographicAddress to Application Details Object
May 15, 2026
May 4, 2026