Vehicle RC Text and PDF AI Agent / LLM
VerificationEverything an AI coding assistant needs to write a working Vehicle RC Text and PDF integration without opening another page: endpoint, authentication, parameters, a real request, both response shapes and the platform rules it cannot infer from a single example. Copy the brief below and paste it into Claude, Cursor, GitHub Copilot, ChatGPT or any other agent.
Machine-readable spec — Markdown
# Vehicle RC Text and PDF API — Way2API®
- **Endpoint:** `POST https://app.way2api.com/api/v1/rc/text-pdf`
- **Auth:** `Authorization: Bearer YOUR_API_KEY` (or `X-API-Key: YOUR_API_KEY`)
- **Content-Type:** `application/json`
- **Category:** Verification
- **Availability:** Available in India
- **Docs:** https://app.way2api.com/documentation/vehicle-rc-text-pdf
## What it does
Vehicle RC Text and PDF API — The Registration Certificate (RC) for a vehicle returned both ways in a single call: the full RC record as JSON, and a pdf_url pointing at a ready-to-print smart-card / A4 PDF of the same certificate. Send a vehicle registration number and receive the owner and address, chassis and engine numbers, make, model, body type, colour, fuel and emission norms, seating and weight specifications, cubic capacity, registering RTO, fitness and road-tax validity, hypothecation and financer, insurance and PUCC validity, permit details, and blacklist / NOC status — plus the document link. Dates come back as ISO YYYY-MM-DD and rc_status is published from a stable value set, so both the shape and the values of this response are guaranteed not to move. pdf_url is an empty string in the rare case where a document could not be produced; the record itself is unaffected, so check it before following the link. Generated documents stay downloadable for a limited time — fetch and store the file promptly rather than holding the link. Use this endpoint when you need to both read the RC data and hand someone a printable certificate; the Vehicle RC Verification and Vehicle RC PDF endpoints sell those halves separately. Built for vehicle onboarding, fleet and dealership records, insurance and loan files, and RTO-facing paperwork.
## Request body (application/json)
| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `rc_number` | string | yes | Vehicle registration number, e.g. DL3CAB1234 or MH12AB1234. Case-insensitive, no spaces or hyphens. |
| `chassis_number` | string | no | Optional chassis number for additional verification. 5 to 25 characters. |
| `engine_number` | string | no | Optional engine number for additional verification. 3 to 25 characters. |
## Example request
```bash
curl -X POST https://app.way2api.com/api/v1/rc/text-pdf \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"rc_number":"DL3CAB1234"}'
```
## Success response — 200
```json
{
"status": "SUCCESS",
"status_code": 200,
"charged": true,
"success": true,
"message": "",
"message_code": "OK",
"order_id": "W2A1739512345abcdef01",
"data": {
"order_id": "W2A1739512345abcdef01",
"result": {
"rc_number": "OD05AB1234",
"registration_date": "2024-03-20",
"rc_status": "ACTIVE",
"less_info": false,
"latest_by": "2026-08-11",
"owner_name": "SNEHA MOHANTY",
"father_name": "",
"owner_number": "1",
"masked_name": false,
"mobile_number": "",
"present_address": "Jagatsinghapur, 754119",
"permanent_address": "Jagatsinghapur, 754119",
"vehicle_category": "2WN",
"vehicle_category_description": "M-Cycle/Scooter(2WN)",
"vehicle_chasi_number": "ME1AB1234C5678901",
"vehicle_engine_number": "G3AB1C234567",
"maker_description": "INDIA YAMAHA MOTOR PVT LTD",
"maker_model": "YAMAHA FZS VERSION 4.0",
"variant": null,
"body_type": "SOLO WITH PILLION",
"fuel_type": "PETROL(E20)",
"color": "DEEP PURPLISH BLUE",
"norms_type": "BHARAT STAGE VI",
"manufacturing_date": "1/2024",
"manufacturing_date_formatted": "2024-01",
"cubic_capacity": "149.00",
"no_cylinders": "1",
"seat_capacity": "2",
"sleeper_capacity": "0",
"standing_capacity": "0",
"wheelbase": "1330",
"unladen_weight": "135",
"vehicle_gross_weight": "285",
"registered_at": "CUTTACK RTO, Odisha",
"rto_code": "",
"fit_up_to": "2039-03-19",
"tax_upto": "2039-03-19",
"tax_paid_upto": "2039-03-19",
"financed": true,
"financer": "EXAMPLE CAPITAL LTD",
"insurance_company": "Example General Insurance Co. Ltd.",
"insurance_policy_number": "3410/12345678/000/00",
"insurance_upto": "2029-03-18",
"pucc_number": "OR12345678901234",
"pucc_upto": "2026-11-02",
"permit_number": "",
"permit_type": "",
"permit_issue_date": null,
"permit_valid_from": null,
"permit_valid_upto": null,
"national_permit_number": "",
"national_permit_upto": null,
"national_permit_issued_by": null,
"non_use_status": null,
"non_use_from": null,
"non_use_to": null,
"blacklist_status": "",
"noc_details": "",
"challan_details": null,
"response_metadata": {
"masked_chassis": false,
"masked_engine": false,
"masked_owner_name": false
},
"pdf_url": "https://docs.example-renderer.com/upload/rc2_1786426531_70e7ff519ee00a12.pdf"
}
}
}
```
## Error response — 422
```json
{
"status": "SUCCESS",
"status_code": 422,
"charged": true,
"success": false,
"message": "No vehicle record was found for the registration number provided.",
"message_code": "VERIFICATION_FAILED",
"order_id": "W2A1739512345abcdef01",
"data": {
"order_id": "W2A1739512345abcdef01",
"error_code": "no_record"
}
}
```
## Integration rules
- Every response is JSON carrying `status`, `status_code`, `charged`, `success`, `message`, `message_code` and (once a call reaches the provider) `order_id`. The verification payload is under `data.result`.
- `charged` (boolean) is the authority on billing. Do NOT infer it from the HTTP status: `422` is returned both for input we rejected (not charged) and for a lookup the provider ran and billed us for that returned a negative result (charged).
- `message_code` is a fixed vocabulary — branch on it instead of parsing `message`. Values: `OK`, `ACCEPTED`, `PROVIDER_NO_RESPONSE`, `VERIFICATION_FAILED`, `NO_RECORD_FOUND`, `INVALID_INPUT`, `REQUEST_FAILED`, `MISSING_API_KEY`, `INVALID_API_KEY`, `INSUFFICIENT_BALANCE`, `NO_API_ACCESS`, `NOT_FOUND`, `RATE_LIMITED`, `INTERNAL_ERROR`, `PROVIDER_UNAVAILABLE`.
- `success` reports the verification outcome; `status` reports the ORDER lifecycle (`SUCCESS`/`PENDING`/`FAILED`). They differ on a charged negative result: the order completed and was billed while the verification did not pass.
- A failed verification is still a successful HTTP call — the outcome lives in the response body, so do not treat `200` as "verified".
- Status codes: `200` result returned, `202` pending or provider did not respond (both charged — quote the `order_id`), `401` missing/invalid key, `402` insufficient balance, `403` no access to this service, `422` see `charged`, `429` rate limited (honour the `Retry-After` header), `503` temporarily unavailable.
- Rate limits are per API key, per service, on a 1-minute sliding window.
- Load the API key from an environment variable or secret store. Never hard-code it, never commit it, and never ship it in client-side code — calls must be made from your backend.
Prompts to pair it with
- Write a production-ready Vehicle RC Text and PDF integration in PHP using this spec, with error handling and retries.
- Given this spec, generate typed request/response models and a client class.
- Review my existing Vehicle RC Text and PDF integration against this spec and list what I handle incorrectly.
⚠ Before you paste generated code
Never let an assistant hard-code your API key — load it from an environment variable or a
secret store, and call this endpoint from your backend only. A failed verification is still a
successful HTTP call, so check the success field in the body
rather than treating 200 as verified.