CarInfo APIcarinfo.app ↗
Look up any Indian vehicle registration number via the CarInfo API. Get owner name, make/model, RTO details, insurance expiry, and PUC status in structured JSON.
What is the CarInfo API?
The CarInfo API exposes 1 endpoint — get_vehicle_details — that returns 9 structured fields for any Indian vehicle registration (RC) number, including the masked owner name, make/model, registering RTO office details, insurance expiry date, and pollution-certificate status. It covers both two-wheelers and four-wheelers registered across Indian states and union territories.
curl -X GET 'https://api.parse.bot/scraper/ee7a3855-c293-4068-a7e7-30b2d941aa9d/get_vehicle_details?vehicle_number=MH01CL3390' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace carinfo-app-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: CarInfo SDK — look up an Indian vehicle registration."""
from parse_apis.carinfo_app_api import CarInfo, VehicleNotFound
client = CarInfo()
# Look up a vehicle by its registration number.
try:
vehicle = client.vehicles.get(vehicle_number="MH01CL3390")
except VehicleNotFound:
print("No record found for that registration number.")
raise SystemExit
print(f"{vehicle.vehicle_number} {vehicle.make_model}")
print(f"Two-wheeler: {vehicle.is_two_wheeler}")
# RTO office details (may be absent for some registrations).
if vehicle.rto is not None:
print(f"RTO: {vehicle.rto.code} — {vehicle.rto.state}")
print(f"Office: {vehicle.rto.registered_rto}")
# Insurance status.
if vehicle.insurance is not None:
print(f"Insurance expires: {vehicle.insurance.expiry_date} Expired: {vehicle.insurance.expired}")
# Pollution certificate flag.
print(f"PUC expired: {vehicle.pollution_certificate_expired}")
# Informational notices the site shows for this vehicle.
for notice in vehicle.notices:
print(f" ⚠ {notice.title} — {notice.subtitle}")
print("exercised: vehicles.get")
Returns the public registration summary for one Indian vehicle registration number: masked owner name, make/model, two-wheeler flag, the registering RTO (code, office address, state, phone, website), insurance expiry date with expired/expiring flags, pollution-certificate expiry flag, and the informational notices the site shows for the vehicle. One vehicle per call, two upstream round trips. Full ownership details, registration/fitness dates and chassis/engine data are shown by the site only to logged-in users and are not returned. A number the site has no record for returns a stale_input (input_not_found) error; a value that is not shaped like an Indian registration number returns stale_input (input_format_invalid) without contacting the site. Date values are returned as the site formats them, e.g. 26-Jul-2025.
| Param | Type | Description |
|---|---|---|
| vehicle_numberrequired | string | Indian vehicle registration number, e.g. MH01CL3390. Case-insensitive; spaces and hyphens are removed before lookup (DL 3C AB 1234 is accepted). |
{
"type": "object",
"fields": {
"rto": "object: code (e.g. MH-01), registered_rto (office address), state, phone, website; each null when absent",
"notices": "array of informational banners the site shows: title, subtitle (HTML stripped), action_types (list of site action codes such as CHALLAN_DETAILS)",
"insurance": "object: expiry_date (site date string like 26-Jul-2025, null if unknown), expired (boolean), expiring_soon (boolean)",
"make_model": "vehicle make and model string; null when absent",
"is_two_wheeler": "boolean, true for two-wheelers",
"vehicle_number": "normalized registration number (uppercase, no separators)",
"owner_name_masked": "owner name as the site shows it publicly, partially masked with asterisks; null when absent",
"vehicle_image_url": "URL of the site's vehicle image; null when absent",
"pollution_certificate_expired": "boolean, true when the site flags the PUC as expired"
},
"sample": {
"data": {
"rto": {
"code": "MH-01",
"phone": "+91-22-23532337 / 23534600",
"state": "Maharashtra",
"website": "https://transport.maharashtra.gov.in/1035/Home",
"registered_rto": "Old Bodyguard Lane, Tulsiwadi, Tardeo, Mumbai - 400034"
},
"notices": [
{
"title": "Insurance Expired! 🚨",
"subtitle": "Renew instantly to avoid heavy traffic fines",
"action_types": [
"BIKE_INSURANCE"
]
},
{
"title": "View Pending Challans on this Vehicle",
"subtitle": "Check & pay challans instantly",
"action_types": [
"CHALLAN_DETAILS"
]
}
],
"insurance": {
"expired": true,
"expiry_date": "26-Jul-2025",
"expiring_soon": false
},
"make_model": "CB UNICORN (BSIII)",
"is_two_wheeler": true,
"vehicle_number": "MH01CL3390",
"owner_name_masked": "S***R S******O J****V",
"vehicle_image_url": "https://files.carinfo.app/September22nd2025/tmposxhplhs.jpg",
"pollution_certificate_expired": true
},
"status": "success"
}
}About the CarInfo API
What the API Returns
The get_vehicle_details endpoint accepts a single vehicle_number parameter — an Indian RC number such as MH01CL3390. Case, spaces, and hyphens are normalized automatically. The response includes the vehicle's make and model string, a boolean is_two_wheeler flag, the owner_name_masked field (partially asterisked as the source shows it publicly), and a vehicle_image_url when the source has an associated image.
RTO and Compliance Fields
The rto object returns the RTO code (e.g. MH-01), the full office address, the state name, a phone number, and the RTO website URL — each field is null when the source does not have it on record. The insurance object carries an expiry_date in the site's date-string format (e.g. 26-Jul-2025), plus expired and expiring_soon booleans so you can flag vehicles needing attention without parsing dates yourself. A top-level pollution_certificate_expired boolean signals PUC status directly.
Notices Array
The response also includes a notices array of informational banners CarInfo surfaces for the vehicle — each notice has a title, a plain-text subtitle (HTML stripped), and an action_types list. These banners may carry reminders, alerts, or service prompts the source associates with the registration.
Coverage and Scope
Coverage maps to vehicles registered under India's Vahan system and surfaced on carinfo.app. Data freshness depends on what the source has on record for each RC number. Not every field is populated for every vehicle; fields return null when absent rather than erroring.
The CarInfo API is a managed, monitored endpoint for carinfo.app — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when carinfo.app changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official carinfo.app API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Fleet management dashboards that need to flag vehicles with expired or soon-to-expire insurance using the
insurance.expiredandexpiring_soonbooleans - Used-car marketplace verification tools that display masked owner name, make/model, and RTO state to buyers
- Logistics apps that validate whether a delivery vehicle's pollution certificate is current via
pollution_certificate_expired - Insurance renewal reminder services that batch-check RC numbers and alert customers when
expiry_dateis approaching - RTO office lookup tools that resolve a registration number to a physical office address, phone number, and website
- Two-wheeler vs. four-wheeler segmentation pipelines using the
is_two_wheelerboolean for category-specific processing
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does CarInfo have an official developer API?+
What does `get_vehicle_details` return for the owner's name?+
owner_name_masked — the name partially obscured with asterisks, exactly as the source displays it publicly. Full unmasked owner names are not available through this endpoint; the source does not expose them without user authentication.Does the API return vehicle challan (traffic fine) or fitness certificate data?+
What happens when a field like RTO phone or insurance expiry date is unavailable?+
null rather than an error. For example, rto.phone, rto.website, and insurance.expiry_date are each nullable. The expired and expiring_soon booleans in the insurance object will be false when no expiry date is known, so your code should check expiry_date for null before relying on those flags.Does this API cover vehicles registered in all Indian states?+
null for several fields. The API does not currently support bulk or batch lookups — each call resolves a single vehicle_number. You can fork it on Parse and revise to add batch-processing logic.