OOtoto API Docs
API Reference

Car Details

A car detail is the vehicle record Ototo calculates against — catalog price, fuel type, emissions, and the technical data Belgian tax rules depend on. Store one per vehicle and reference it by ID from Calculate or Tax Matrix, or pass the same shape inline to Calculate without storing it first.

Retrieve a car detail

GET /CarDetails/{carDetailId}
GET https://api.ototo.be/v1/CarDetails/{carDetailId}?subscription-key=YOUR_KEY
StatusMeaning
200The car detail object, in JSON
401Subscription key missing, invalid, or inactive — see Authentication
404No car detail exists for that ID
500Something went wrong on the server. Retry later; contact Ototo if it persists.

Create a car detail

POST /CarDetails
POST https://api.ototo.be/v1/CarDetails?subscription-key=YOUR_KEY
Content-Type: application/json

Body: a car detail object (see below). Any id or ownerId you send is ignored — both are assigned by Ototo.

StatusMeaning
201Created. A Location header points at the new resource.
400The car detail object was invalid — the response describes why (missing or invalid data)
401Subscription key missing, invalid, or inactive — see Authentication
500Something went wrong on the server. Retry later; contact Ototo if it persists.

Update (or create) a car detail

PUT /CarDetails/{carDetailId}
PUT https://api.ototo.be/v1/CarDetails/{carDetailId}?subscription-key=YOUR_KEY
Content-Type: application/json

Body: a car detail object (see below). This call is idempotent — it upserts the record at carDetailId. As with create, any id or ownerId in the body is ignored.

StatusMeaning
200Updated an existing car detail. A Location header points at the resource.
201No car detail existed at that ID, so one was created. A Location header points at the new resource.
400The car detail object was invalid — the response describes why
401Subscription key missing, invalid, or inactive — see Authentication
500Something went wrong on the server. Retry later; contact Ototo if it persists.

The car detail object

FieldTypeRequiredDescription
idguidignored on writeUnique identifier. Assigned by Ototo, except that PUT uses the ID in the URL.
ownerIdguidignored on writeOwning account, assigned by Ototo
namestringoptional, recommendedDisplay name shown to end users
internalNamestringoptionalAn internal identifier of your own choosing
catalogPricedecimalrequiredCatalog price*
firstRegistrationdateoptionalDate of first registration (yyyy-MM-dd). Required in practice for cars first registered after 2021-01-01, since wltp becomes mandatory from that date.
fuelenumrequiredSee FuelType below
euroStandardenumrequiredSee EuroStandard below
kilowattdecimalrequiredEngine power, in kW
wltpintconditionally requiredWLTP CO₂ emissions. Mandatory for vehicles with firstRegistration on or after 2021-01-01.
nedC2intrequiredNEDC2 CO₂ emissions
capacityintconditionally requiredEngine capacity in cc. Required when fuel is Diesel, Petrol, LPG, NaturalGas, HydrogenPetrol, HybridPetrol, HybridDiesel, PluginHybridDiesel, or PluginHybridPetrol.
weightintoptional, recommendedVehicle weight. Used to determine "valse hybrides" (false hybrids) and Wallonia road tax.
batteryCapacitydecimalconditionally requiredHybrid battery capacity. Required when fuel is PluginHybridDiesel or PluginHybridPetrol; used to determine "valse hybrides".
nedC2NonHybridintrecommended for plug-in hybridsNEDC2 emissions of the comparable non-hybrid version. Needed for "valse hybride" calculations when fuel is PluginHybridDiesel or PluginHybridPetrol.
wltpNonHybridintrecommended for plug-in hybridsWLTP emissions of the comparable non-hybrid version. Same purpose as nedC2NonHybrid.
isActivebooloptional, defaults to trueLeave as true. Reserved for future functionality.

* Ototo stores prices excluding VAT. If your subscription is configured to send prices including VAT, tell your Ototo contact — the API will divide by 1.21 before storing. Provide as much of the non-mandatory data as you can: fields that aren't required for today's calculations may be needed by calculators added later.

FuelType

NameValue
Diesel10
Petrol20
LPG25
NaturalGas30
PluginHybridDiesel40
PluginHybridPetrol50
HybridPetrol60
HybridDiesel70
Electric80
HydrogenPetrol90
Hydrogen100

EuroStandard

NameValue
NA0
Euro010
Euro120
Euro230
Euro340
Euro3Filter45
Euro450
Euro4Filter55
Euro560
Euro670
Euro780

Enum fields accept either their numeric value or their name as a JSON string, e.g. "fuel": 80 or "fuel": "Electric".

Example

Request — create a car detail
POST https://api.ototo.be/v1/CarDetails?subscription-key=YOUR_KEY
Content-Type: application/json

{
  "name": "Tesla Model 3",
  "internalName": "TESLA-M3-2026",
  "catalogPrice": 45000.00,
  "firstRegistration": "2026-01-15",
  "fuel": "Electric",
  "euroStandard": "NA",
  "kilowatt": 150.00,
  "wltp": 0,
  "nedC2": 0,
  "weight": 1750
}
Response — 201 Created
Location: https://api.ototo.be/v1/CarDetails/12345678-1234-1234-1234-123456789abc
Response — 200 OK (GET)
{
  "id": "12345678-1234-1234-1234-123456789abc",
  "ownerId": "d9dfcaea-561b-46db-8bd4-7edb2d77566d",
  "name": "Tesla Model 3",
  "internalName": "TESLA-M3-2026",
  "catalogPrice": 45000.00,
  "firstRegistration": "2026-01-15T00:00:00",
  "fuel": "Electric",
  "euroStandard": "NA",
  "kilowatt": 150.00,
  "wltp": 0,
  "nedC2": 0,
  "capacity": null,
  "weight": 1750,
  "batteryCapacity": null,
  "nedC2NonHybrid": null,
  "wltpNonHybrid": null,
  "isActive": true
}

See also

  • Calculate — run a calculation for this vehicle by carDetailId, or skip storing it and pass the same object inline
  • Tax Matrix — full tax overview for a stored vehicle
  • Public Link and QR Code — share a stored vehicle with end users