Prima APIpreventivo.prima.it ↗
Look up Italian vehicle details and insurance quote eligibility by licence plate and birth date. Returns brand, model, trim, match type, and cover options.
What is the Prima API?
The preventivo.prima.it API exposes one endpoint, lookup_vehicle_by_plate, that resolves an Italian licence plate and owner birth date into 8 vehicle fields — including brand, model, trim, and registration month — plus match outcome, available cover codes, and a Prima.it quote application ID. It mirrors the first step of Prima.it's 'Calcola il preventivo' flow for private car owners.
curl -X GET 'https://api.parse.bot/scraper/bbe05e4e-ef98-4180-ad54-731ece471e81/lookup_vehicle_by_plate?birth_date=1985-06-15&plate_number=EX123YZ' \ -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 preventivo-prima-it-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: Prima.it vehicle quote lookup — start a motor-insurance quote
from an Italian licence plate and inspect the resolved vehicle."""
from parse_apis.preventivo_prima_it_api import Prima, InvalidInput
client = Prima()
# Look up a vehicle by plate and owner birth date.
try:
quote = client.quotes.lookup(plate_number="FG456HK", birth_date="1985-06-15")
except InvalidInput:
print("plate or birth_date was rejected — check format")
raise
print(f"Match type: {quote.match_type}")
print(f"Application: {quote.application_id}")
# Vehicle is Optional — null when the plate cannot be resolved.
if quote.vehicle is not None:
v = quote.vehicle
print(f"{v.brand} {v.model} ({v.trim})")
print(f"Registered: {v.registration_month}, min driving age: {v.minimum_driving_age}")
print("exercised: quotes.lookup")
Performs the first step of Prima.it's 'Calcola il preventivo' flow for a private owner: it submits an Italian licence plate plus the owner's birth date and returns the site's owner-match outcome together with the vehicle it resolves for that plate (registration month, brand, model, trim and minimum driving age). match_type is one of owner_match (plate and birth date match the registered owner), owner_mismatch (plate known but birth date does not match the owner) or company_or_unknown_owner (plate registered to a company, or not recognised). vehicle_type, effective_datetime, available_covers and excluded_provinces are only populated on owner_match; they are null on the other outcomes. The owner_match branch could not be exercised during the build and is unverified. vehicle is null when the site cannot resolve the plate to a vehicle. Owner identity data returned by the site on a match is deliberately not exposed. Each call opens a fresh quote application on the site (application_id); the subsequent pricing steps, which require the owner's full personal data, are not part of this API. Costs about six site round trips per call.
| Param | Type | Description |
|---|---|---|
| birth_daterequired | string | Birth date of the vehicle owner, ISO date YYYY-MM-DD. |
| plate_numberrequired | string | Italian licence plate, letters and digits without spaces (one shape: AB123CD). Spaces and dashes are stripped and the value is upper-cased. |
{
"type": "object",
"fields": {
"vehicle": "object with registration_month (YYYY-MM), brand, brand_id, model, model_id, trim, trim_id, minimum_driving_age (integer); null when the plate is not resolved to a vehicle",
"birth_date": "birth date as submitted (YYYY-MM-DD)",
"match_type": "owner_match | owner_mismatch | company_or_unknown_owner",
"plate_number": "normalised plate as submitted to the site",
"vehicle_type": "site vehicle category (e.g. CAR); only on owner_match, otherwise null",
"application_id": "identifier of the quote application opened on the site",
"available_covers": "array of optional cover codes offered; only on owner_match, otherwise null",
"effective_datetime": "earliest cover start proposed by the site; only on owner_match, otherwise null",
"excluded_provinces": "array of province names the site excludes; only on owner_match, otherwise null"
},
"sample": {
"data": {
"vehicle": {
"trim": "Clio 1.2 75CV GPL 5 porte Wave (2014)",
"brand": "RENAULT",
"model": "Clio 4ª serie",
"trim_id": "097971201407",
"brand_id": "000062",
"model_id": "004144",
"registration_month": "2015-01",
"minimum_driving_age": 18
},
"birth_date": "1985-06-15",
"match_type": "owner_mismatch",
"plate_number": "EX123YZ",
"vehicle_type": null,
"application_id": "14846962-96de-4869-8a01-490d559c383e",
"available_covers": null,
"effective_datetime": null,
"excluded_provinces": null
},
"status": "success"
}
}About the Prima API
What the API returns
The single lookup_vehicle_by_plate endpoint accepts two required parameters: plate_number (an Italian plate in the format AB123CD, with spaces and dashes stripped automatically) and birth_date (ISO 8601, YYYY-MM-DD). It returns a vehicle object containing registration_month, brand, brand_id, model, model_id, trim, trim_id, and minimum_driving_age, along with a normalised copy of the submitted plate and birth date.
Owner match outcomes
The match_type field classifies every response into one of three states: owner_match (the birth date matches the registered owner), owner_mismatch, or company_or_unknown_owner. Several fields — vehicle_type, available_covers, effective_datetime, and excluded_provinces — are only populated on an owner_match result; they are null otherwise. The application_id field is returned on every response and can be used to reference the opened quote session on Prima.it.
Coverage and scope
The API covers privately-owned Italian-registered motor vehicles queryable through Prima.it's quote flow. Vehicle resolution (vehicle object) is attempted for every plate submitted; if the plate cannot be resolved, the vehicle field returns null. The excluded_provinces array, when present, lists province names Prima.it does not underwrite for that vehicle and owner combination.
The Prima API is a managed, monitored endpoint for preventivo.prima.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when preventivo.prima.it 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 preventivo.prima.it 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?+
- Validate Italian vehicle ownership before issuing a motor insurance offer by checking
match_type. - Populate a quote form automatically using
brand,model,trim, andregistration_monthfrom thevehicleobject. - Filter leads by
minimum_driving_ageto ensure applicants meet underwriting requirements. - Retrieve
available_coversto display optional cover codes to a user before they complete a Prima.it quote. - Use
application_idto deep-link a user into an existing Prima.it quote session. - Screen out plates registered to companies by detecting the
company_or_unknown_ownermatch type. - Identify geographically restricted risks by inspecting
excluded_provincesfor a given plate and owner.
| 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 Prima.it offer an official developer API?+
What does `match_type` actually distinguish?+
match_type returns one of three values. owner_match means the birth date you submitted corresponds to the registered owner on Prima.it's records for that plate, and all fields including available_covers and effective_datetime are populated. owner_mismatch means a vehicle was found but the birth date does not match the owner. company_or_unknown_owner means the plate is registered to a company or the ownership cannot be determined. For the last two, cover-specific fields are returned as null.Can the API retrieve full multi-step quote prices, not just the first step?+
Does the API work for plates belonging to motorcycles or commercial vehicles?+
vehicle_type field (e.g. CAR) is returned only on owner_match results, so you can inspect it to confirm the category resolved. Coverage for non-car vehicle types depends on what Prima.it's quote flow resolves for the submitted plate. You can fork this API on Parse and revise it to target Prima.it's specialist flows for motorcycles or other vehicle categories.What happens if a plate cannot be resolved?+
vehicle field in the response is returned as null. All other top-level fields — including plate_number, birth_date, and match_type — are still returned.