API v1

API documentation

One call returns a vehicle's tax value from the Spanish BOE tables and the transfer tax payable in any of the 17 common-regime communities, with the applicable order cited in the response itself.

Base: https://valorvenal.dr-techsolutions.com/api/v1 · All responses are UTF-8 JSON.

Authentication

Send your key in the Authorization header (or in X-Api-Key if that suits you better). Keys start with vv_live_ and are shown only once when issued.

Authorization: Bearer vv_live_xxxxxxxxxxxxxxxxxxxxxxxx

First call

curl "https://valorvenal.dr-techsolutions.com/api/v1/valuate\
?brand=SEAT&model=IBIZA%201.0%20Eco%20TSI%20S%26S%20FR%20DSG\
&first_registration_date=2016-06-15&ccaa=andalucia" \
  -H "Authorization: Bearer vv_live_..."
{
  "fiscalValue": {
    "basis": "exact_model",
    "baseFirstYearEur": 15400,
    "depreciation": { "completedYears": 10, "pct": 17,
                      "bracket": "Mas de 10 años hasta 11 años",
                      "method": "exact_dates" },
    "valueEur": 2618
  },
  "itp": {
    "ccaaName": "Andalucía", "method": "rate", "rate": 0.04,
    "taxableBaseEur": 2618, "itpEur": 104.72, "ruleId": "default"
  },
  "boe": { "order": "HAC/1501/2025", "reference": "BOE-A-2025-26357" }
}

GET /valuate

Tax value and ITP in a single call. Also accepts POST with a JSON body using the same field names.

ParameterTypeDescription
brandstring, requiredMake, e.g. VOLKSWAGEN
modelstring, requiredModel. Send the exact Annex I string to value that line; send just «GOLF» and you get the model average
first_registration_datedateRecommended. Date of first registration (YYYY-MM-DD or DD/MM/YYYY). With it, year is optional
transfer_datedateDate of the taxable event. Defaults to today
yearintYear of registration (1980–2027). Required if you do not send the date
fuelstringgasolina · diesel · electrico · hibrido · phev · glp (synonyms accepted)
versionstringTrim (GTI, AMG…): adds a trim-matching pass
ccaastringCommunity slug (madrid, catalunya…) or all for all 17
price_eurnumberAgreed price: if it exceeds the table value, it becomes the taxable base

Autocomplete catalogue: 174 makes and the model prefixes for each.

GET /itp/rates?ccaa=

The ITP rate and fixed-amount table per community, with the legislation and verification date for every rule. With no parameter it returns all 17.

GET /usage

Current-month consumption for the calling key.

The response

  • fiscalValue — the value the tax authority applies. basis says what it was computed on: exact_model, version or model. depreciation returns the Annex IV bracket, the percentage, and whether it came from real dates or was estimated.
  • itp — method (rate or fixed amount), taxable base, amount due and the regional legislation cited.
  • summary — min/average/max across the matching variants, already depreciated.
  • comparables — up to 20 variants with their values.
  • actualYear and yearsDriftFromRequested — if no rows exist for the requested year, the nearest available one is used.
  • warnings and warningCodes — non-blocking notices, e.g. that depreciation is a calendar-year estimate.
  • boe — the order and value year applied: traceability in every response.

Calculation accuracy

The tax authority counts years of use from date to date, from first registration to the taxable event, not by calendar year. The same car transferred in March or in September of the same year can fall into different Annex IV brackets. That makes first_registration_date the parameter that changes the result most.

Our results are verified to the cent against the official simulator of the Andalusian tax agency. The chartered territories (Navarre and the Basque Country) are not supported: they apply their own tables, so we return an explicit 422 rather than a wrong number.

Errors

{ "error": { "code": "quota_exceeded", "message": "...", "docs": "..." } }
HTTPcodeWhen
400invalid_paramsMissing or invalid parameters
401unauthorizedMissing or invalid key
402quota_exceededMonthly plan quota exhausted
404not_foundUnknown make (on /models)
422region_not_supportedChartered territory: uses its own tables
429rate_limitedMore than 5 sustained requests per second

Limits and attribution

5 sustained requests per second per key. The monthly quota depends on your plan. The free plan requires a visible «Datos: ValorVenal» link next to the results; paid plans require no attribution.

See plans and pricing →