API Reference
Calculate
Calculates taxation and other financial details for a vehicle against one driver profile. Accepts either an inline vehicle or a reference to a car detail already stored via Car Details.
POST /Calculate
Requires calculation access
This endpoint needs calculation access enabled on your subscription, in addition to a valid key. See Authentication.
Request
POST https://api.ototo.be/v1/Calculate?subscription-key=YOUR_KEY
Content-Type: application/json
Body
| Field | Type | Required | Description |
carDetailId | guid | see note | Reference to a car detail already stored via Car Details |
carDetail | object | see note | Inline vehicle object — same shape as the Car Details object |
userProfile | object | required | Profile of the person the calculation is for |
options | object | required | Registration date, discounts, and other calculation options |
version | string | optional | Client version tag, currently "1"; stored for auditing only |
Either carDetailId or carDetail must be provided. If both are given, carDetail takes precedence.
userProfile
| Field | Type | Required | Description |
postalCode | int | required | Belgian postal code (1000–9992) |
status | enum | required | Entity type of the taxpayer — see ProfileStatus below |
registrationOn | enum | required | Who the vehicle is registered to — see RegistrationOn below |
regionRegistration | enum | required | Belgian region used for regional taxes — see Region below |
viewOptions | int | optional | Bitmask of which calculators to run — see ViewOptions below |
hasFuelCard | bool | optional | Whether a fuel card is included |
language | string | optional | Result language: nl, fr, or en |
options
| Field | Type | Required | Description |
registrationDate | date | required | Intended registration date (yyyy-MM-dd) |
orderDate | date | optional | Order/acquisition date (yyyy-MM-dd), used for the fiscal deduction regime. Falls back to registrationDate if omitted. |
totalDiscount | decimal | optional | Total dealer discount, incl. VAT |
ownMonthlyCost | decimal | optional | Employee's own monthly contribution |
Enum values
Enum fields accept either their numeric value or their name as a JSON string — "status": 30 and "status": "SelfEmployed" are both valid. Examples on this page use names for readability.
ProfileStatus
| Name | Value | Meaning (NL) |
Private | 10 | Particulier |
SoleProprietor | 20 | Eenmanszaak |
SelfEmployed | 30 | Bedrijf |
RegistrationOn
| Name | Value | Meaning (NL) |
PrivateRegistration | 10 | Op naam particulier |
CompanyRegistration | 20 | Op naam bedrijf |
LeasingCompanyRegistration | 30 | Op naam leasingmaatschappij |
Region
| Name | Value | Meaning (NL) |
Flanders | 0 | Vlaanderen |
Wallonia | 1 | Wallonië |
Brussels | 2 | Brussel |
ViewOptions (bitmask)
| Flag | Value | Calculator |
RoadTax | 1 | BIV / TMC (registration tax) |
YearlyTax | 2 | Verkeersbelasting (yearly road tax) |
BenefitInKind | 4 | Voordeel alle aard (VAA) |
FiscalDeduction | 8 | Fiscale aftrekbaarheid |
RejectedExpenses | 16 | Verworpen uitgaven |
CO2Contribution | 32 | CO₂-bijdrage |
Combine flags with a bitwise OR — e.g. 63 runs every calculator; 37 (1 + 4 + 32) runs RoadTax, BenefitInKind, and CO2Contribution.
Response
200 OK
| Field | Type | Description |
calculationId | guid | ID of the saved calculation request |
lines | array | One entry per calculator that ran — see below |
Each entry in lines
| Field | Type | Description |
name | string | Display name of the calculation, localised |
description | string | Additional description, localised (may be null) |
viewOption | enum | Which calculator produced this line — see ViewOptions above |
value | string | Formatted display value, e.g. "662.64€" |
rawValue | decimal | Numeric value for programmatic use |
year | int | Fiscal year the value applies to |
url | string | Link to source legislation, when available (otherwise null) |
hasUrl | bool | Whether url is set |
A calculation typically returns one line per requested calculator for the current fiscal year, and a second for the following year where the tax recurs annually (yearly road tax, benefit in kind, etc.). One-off taxes like RoadTax appear once.
Error responses
| Status | Condition |
400 | The request body couldn't be parsed, userProfile or options is missing, postalCode is out of range, or the vehicle data is invalid |
401 | Subscription key is missing or invalid, the subscription is inactive, or calculation access isn't enabled — see Authentication |
404 | carDetailId was provided but no matching car detail exists |
Example
Request — using a stored car detail
POST https://api.ototo.be/v1/Calculate?subscription-key=YOUR_KEY
Content-Type: application/json
{
"carDetailId": "12345678-1234-1234-1234-123456789abc",
"userProfile": {
"postalCode": 2000,
"status": "SelfEmployed",
"registrationOn": "LeasingCompanyRegistration",
"regionRegistration": "Flanders",
"viewOptions": 63
},
"options": {
"registrationDate": "2026-06-01",
"totalDiscount": 2420.00
}
}
Request — using an inline vehicle
POST https://api.ototo.be/v1/Calculate?subscription-key=YOUR_KEY
Content-Type: application/json
{
"version": "1",
"carDetail": {
"firstRegistration": "2019-01-01",
"catalogPrice": 135000.00,
"fuel": "Electric",
"euroStandard": "NA",
"kilowatt": 286.00,
"wltp": 64,
"nedC2": 58
},
"userProfile": {
"postalCode": 3440,
"status": "SelfEmployed",
"registrationOn": "CompanyRegistration",
"regionRegistration": "Flanders",
"viewOptions": 63,
"language": "nl",
"hasFuelCard": false
},
"options": {
"registrationDate": "2026-06-01"
}
}
Response — 200 OK (abridged)
{
"calculationId": "0c6022a3-5a2e-49fd-f68a-08d8e3c2315a",
"lines": [
{
"name": "Voordeel alle aard",
"description": "Per jaar (gebaseerd op NEDC2)",
"viewOption": 4,
"value": "17249.76€",
"rawValue": 17249.76,
"year": 2026,
"url": null,
"hasUrl": false
},
{
"name": "Verkeersbelasting",
"description": null,
"viewOption": 2,
"value": "55.24€",
"rawValue": 55.24,
"year": 2026,
"url": null,
"hasUrl": false
}
]
}
See also
- Tax Matrix — RoadTax & YearlyTax across every profile and region for a vehicle, in a single call
- Car Details — create the vehicle you reference by
carDetailId
- Webhooks — get notified when calculation rules change so you know what to recalculate