Discover/ACI API
live

ACI APIonline.aci.it ↗

Calculate Italian vehicle tax (bollo auto) by license plate or technical data. Access ACI's national archive via 3 endpoints returning tax amounts, vehicle details, and province lists.

Endpoint health
monitored
calculate_bollo_by_plate
calculate_bollo_from_vehicle_data
list_provinces
Checks pendingself-healing
Endpoints
3
Updated
2h ago

What is the ACI API?

The ACI Bollo Auto API exposes 3 endpoints that calculate the Italian vehicle ownership tax (bollo auto) using the ACI national vehicle-tax archive. The calculate_bollo_by_plate endpoint accepts an Italian license plate and owner region, returning itemised euro amounts — tax, penalty, interest, rounding, and total — alongside the vehicle's category, validity period, and the full set of technical data labels shown on the ACI result page.

This call costs2 credits / call— charged only on success
Try it
Italian license plate without spaces, 1-8 letters/digits (e.g. one shape: AA123BB). Upper-cased before use.
Region (or autonomous province) of residence of the vehicle owner, which determines the tax rules applied.
Kind of payment being calculated. RINNOVO is a renewal of a vehicle already in circulation; PAGAMENTO_ANTICIPATO is an early payment within the expiry month (the site refuses it in December).
Vehicle family the plate belongs to.
→ api.parse.bot/scraper/b40484c5-c64e-4fe5-9a27-566e030165d2/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/b40484c5-c64e-4fe5-9a27-566e030165d2/calculate_bollo_by_plate?plate=EX123AB&region=6' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 online-aci-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: ACI Bollo Auto Calculator — bounded, re-runnable."""
from parse_apis.online_aci_it_api import (
    AciBollo, Region, Fuel, PlateNotFound,
)

client = AciBollo()

# 1. Calculate bollo by plate from the national archive.
try:
    result = client.bollo_calculations.by_plate(
        plate="EX123AB", region=Region.LAZIO,
    )
    print(result.vehicle.plate, result.vehicle.category)
    print(f"Tax: {result.amounts.tax} {result.currency}, Total: {result.amounts.total} {result.currency}")
    print(f"Validity: {result.vehicle.validity_start} → {result.vehicle.validity_end}")
except PlateNotFound:
    print("Plate not found in the ACI archive")

# 2. List provinces for a region, then use one to calculate from vehicle data.
province = client.provinces.list(region=Region.LAZIO, limit=5).first()
if province is not None:
    print(f"Using province: {province.code} — {province.name}")

    manual = client.bollo_calculations.from_vehicle_data(
        plate="FA123BC",
        region=Region.LAZIO,
        province=province.code,
        fuel=Fuel.GASOLIO,
        kw=100,
        euro_class=6,
        registration_date="2016-03-15",
        previous_expiry_month=4,
        previous_expiry_year=2026,
    )
    print(f"Manual calc total: {manual.amounts.total} {manual.currency}")
    print(f"Source: {manual.source}")

print("exercised: bollo_calculations.by_plate / provinces.list / bollo_calculations.from_vehicle_data")
All endpoints · 3 totalmissing one? ·

Calculates the bollo due for a vehicle registered in the ACI national vehicle-tax archive, identified by its license plate and the owner's region of residence. Returns one object with the vehicle block (plate, vehicle/payment type, category, residence, validity period, previous expiry, payment deadline, registration date, ISO dates), a technical_data map of the archive's labelled technical values (labels are the site's Italian labels and vary by vehicle, e.g. 'KW', 'Dispositivo Ecologico'), and the amounts block in euro (tax, penalty, interest, rounding, total; penalties and interest are computed by the site as of the calling day). Each call is a single calculation that costs several seconds. A plate the archive does not know yields a stale_input (input_not_found) error carrying the site's message; a region/plate pair that the site answers with another error yields an upstream error. Verified with region LAZIO, vehicle_type AUTOVEICOLI and payment_type RINNOVO; other members are passed to the site as its own option codes but were not exercised (LOMBARDIA requires an owner tax code on the site and is not supported here).

Input
ParamTypeDescription
platerequiredstringItalian license plate without spaces, 1-8 letters/digits (e.g. one shape: AA123BB). Upper-cased before use.
regionrequiredstringRegion (or autonomous province) of residence of the vehicle owner, which determines the tax rules applied.
payment_typestringKind of payment being calculated. RINNOVO is a renewal of a vehicle already in circulation; PAGAMENTO_ANTICIPATO is an early payment within the expiry month (the site refuses it in December).
vehicle_typestringVehicle family the plate belongs to.
Response
{
  "type": "object",
  "fields": {
    "source": "'archive' — amounts computed from the national archive data",
    "amounts": "object of euro amounts as numbers: tax, tax_penalty, tax_interest, rounding, total",
    "vehicle": "object: plate, vehicle_type, payment_type, category, residence (region and province), validity_start, validity_end, previous_expiry (null when the archive shows none), payment_deadline, registration_date — dates as YYYY-MM-DD",
    "currency": "always EUR as shown by the site",
    "technical_data": "object mapping the site's Italian technical labels to string values as shown on the result page"
  },
  "sample": {
    "data": {
      "source": "archive",
      "amounts": {
        "tax": 144.84,
        "total": 150.21,
        "rounding": 0,
        "tax_penalty": 4.53,
        "tax_interest": 0.84
      },
      "vehicle": {
        "plate": "EX123AB",
        "category": "Autovetture",
        "residence": "LAZIO (RM)",
        "payment_type": "Rinnovo di pagamento",
        "validity_end": "2027-04-30",
        "vehicle_type": "Autoveicoli",
        "validity_start": "2026-05-01",
        "previous_expiry": null,
        "payment_deadline": "2026-06-01",
        "registration_date": "2014-08-29"
      },
      "currency": "EUR",
      "technical_data": {
        "KW": "51",
        "Uso": "Priv. trasp. persone",
        "Alimentazione": "Benzina",
        "Inibizione traino": "No",
        "HP (Potenza Fiscale)": "14",
        "Dispositivo Ecologico": "Euro 6"
      }
    },
    "status": "success"
  }
}

About the ACI API

What the API Returns

All calculation endpoints return an amounts object with five numeric euro fields: tax, tax_penalty, tax_interest, rounding, and total, plus currency fixed to EUR. The vehicle object includes plate, vehicle_type, payment_type, category, residence (region and province), validity_start, validity_end, and previous_expiry. A technical_data object carries the site's Italian-language labels mapped to their string values exactly as the ACI result page displays them.

Endpoints and Parameters

calculate_bollo_by_plate queries the ACI national archive. Required inputs are plate (1–8 alphanumeric characters, automatically upper-cased) and region (the owner's region of residence). Optional parameters payment_type and vehicle_type let you specify renewal (RINNOVO), anticipated payment, or the vehicle family. The response carries source: 'archive' to distinguish it from user-supplied calculations.

calculate_bollo_from_vehicle_data is for passenger cars (Autovetture, renewal mode) when no archive lookup is desired. Required inputs include kw (integer engine power), fuel, euro_class (0–6), registration_date (ISO date), region, and province (two-letter code). The plate parameter labels the result but is not looked up. This endpoint returns source: 'user_supplied_data'.

Province Reference

list_provinces resolves valid province codes for a given region. It returns an array of {code, name} pairs where code is the two-letter abbreviation expected by calculate_bollo_from_vehicle_data. Call this endpoint first if you are building a form that lets users select their province before submitting a technical-data calculation.

Reliability & maintenance

The ACI API is a managed, monitored endpoint for online.aci.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when online.aci.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 online.aci.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?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Embedding a bollo auto cost estimator in an Italian car dealer or fleet management app using calculate_bollo_by_plate
  • Pre-filling tax renewal reminders by retrieving validity_start and validity_end from archive lookups
  • Calculating expected bollo for a used vehicle before purchase, supplying kw, euro_class, and registration_date to calculate_bollo_from_vehicle_data
  • Building a regional tax comparison tool by running calculate_bollo_by_plate across different region values for the same plate
  • Populating province dropdowns in Italian address forms with list_provinces for accurate residence selection
  • Auditing fleet tax obligations by batch-querying plates against the ACI archive and summing the returned total fields
  • Surfacing penalty and interest breakdowns (tax_penalty, tax_interest) for late-payment scenario modelling
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 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.

Frequently asked questions
Does ACI provide an official public developer API for the bollo calculator?+
ACI does not publish a documented public developer API for the bollo auto calculator at online.aci.it. The Parse API exposes this functionality as structured JSON endpoints.
What does calculate_bollo_from_vehicle_data return differently from calculate_bollo_by_plate?+
Both endpoints return the same response shape — amounts, vehicle, technical_data, and currency fields — but calculate_bollo_from_vehicle_data sets source to 'user_supplied_data' and bases its calculation entirely on caller-supplied inputs (kw, fuel, euro_class, registration_date, province) rather than the ACI national archive. It is restricted to the Autovetture category with renewal payment type; calculate_bollo_by_plate covers whatever category and payment type the archive record holds.
Does calculate_bollo_by_plate work for motorcycles, commercial vehicles, or trailers?+
Yes. calculate_bollo_by_plate uses the archive record for the plate, so it returns the vehicle_type and category as stored in the national archive, which can include vehicle families beyond passenger cars. The optional vehicle_type parameter lets you specify the family explicitly. calculate_bollo_from_vehicle_data, by contrast, is limited to Autovetture (passenger cars).
Does the API expose bollo history or multi-year records for a plate?+
Not currently. The API returns the current bollo calculation for a plate, including validity_start, validity_end, and previous_expiry for the active period, but does not provide a historical series of past tax payments. You can fork the API on Parse and revise it to add a historical lookback endpoint if the underlying source exposes that data.
What happens if the plate is not found in the ACI archive?+
The ACI archive covers plates registered in Italy's national vehicle-tax system. If a plate has no matching record — for example because the vehicle is exempt, newly registered, or the plate format is unrecognised — the endpoint will return an error response rather than an amounts object. Use calculate_bollo_from_vehicle_data with explicit technical inputs as a fallback for vehicles whose archive entry may be absent or incomplete.
Page content last updated . Spec covers 3 endpoints from online.aci.it.
Related APIs in AutomotiveSee all →