contract 2026-09-03
Endpoints

Import calculator

Estimate the landed cost of importing a vehicle. These are estimates, not a binding quote.

GET

/api/calculator/countries

List supported origin and destination countries with EU membership and VAT rates.

Requires the calculator scope.

Example requests

Request
GET https://api.thecarapi.com/api/calculator/countries
curl -H "X-API-Key: $API_KEY" "https://api.thecarapi.com/api/calculator/countries"

Example response

json
{
  "success": true,
  "countries": [
    {
      "code": "DE",
      "name": "Germany",
      "eu": true,
      "vat": 0.19
    },
    {
      "code": "KR",
      "name": "South Korea",
      "eu": false,
      "vat": 0
    }
  ]
}

What you get back

codestring

Country code. The United Kingdom is UK here, not GB — this list is the calculator’s own country vocabulary and is separate from the vehicle-origin codes on /api/countries, where the same country is canonicalised to GB. If you feed a vehicle’s country_code straight into the calculator, map GB to UK on the way.

euboolean

True for all 27 EU member states; false for the rest.

vatnumber

VAT as a fraction (0.19 = 19%), unlike /api/calculator/calculate which returns rates as percentages.

POST

/api/calculator/calculate

Estimate duty, VAT, fees, and the landed total for one lot price.

Requires the calculator scope.

Parameters

pricenumber · JSON bodyrequired

Lot price before import fees. Must be between 0 and 10,000,000. Do not pass public_price_eur or you can count import costs twice.

Example 15000·Where the value comes from The source lot price, not a precomputed landed total.

originstring · JSON body

Origin country code. Default KR.

Example KR·Where the value comes from /api/calculator/countries -> countries[].code

destinationstring · JSON body

Destination country code. Default BG.

Example BG·Where the value comes from /api/calculator/countries -> countries[].code

car_typestring · JSON body

Default standard.

Example standard·Where the value comes from Choose standard or classic.

currencystring · JSON body

Response label only; no foreign-exchange conversion is performed. Source profiles use EUR constants, so supply an EUR-normalized price and use EUR.

Example EUR·Where the value comes from Currency label used by your application.

site_namestring · JSON body

Source whose fee model to price against: encar, openlane, auto1, schadeautos, copart or ecarstrade. Omitted, it defaults to encar when origin is KR and otherwise falls back to a generic model that is not what any of our own listings are priced with. kbchachacha and japan have no dedicated profile and take the generic path too when explicitly supplied. JP is not currently in the calculator country catalogue, so origin=JP is rejected. Do not substitute another country to obtain a Japanese import quote. Send it whenever you know it.

Example ecarstrade·Where the value comes from /api/sites -> sites[].name

db_tax / db_deliverynumber · JSON body

For a recognized source profile, db_tax is ignored and the fee is computed from the profile; a nonzero db_delivery overrides shipping (zero uses the profile default). The generic path accepts both overrides. Values must already use the same EUR basis as price.

Example 450·Where the value comes from Precomputed values from your own records.

is_marginboolean · JSON body

eCarsTrade only: whether the car sells under the VAT margin scheme, which changes whether VAT is added. Default false. The vehicle own value is published as the is_margin field on the detail endpoints.

Example false·Where the value comes from /api/auction/{site}/{id} -> auction.is_margin

Example requests

Request
POST https://api.thecarapi.com/api/calculator/calculate
{
  "price": 15000,
  "origin": "KR",
  "destination": "BG",
  "site_name": "encar"
}
POST https://api.thecarapi.com/api/calculator/calculate
{
  "price": 9800,
  "origin": "BE",
  "destination": "BG",
  "site_name": "ecarstrade"
}

Example response

json
{
  "success": true,
  "currency": "EUR",
  "breakdown": {
    "lot_price": 15000,
    "auction_fee": 0,
    "trucking": 0,
    "shipping": 1800,
    "our_fee": 700,
    "subtotal_customs_value": 16800,
    "duty_rate": 10,
    "duty_amount": 1680,
    "vat_rate": 20,
    "vat_amount": 3696,
    "customs_agency": 1425,
    "custom_clearance_total": 6801,
    "estimated_total": 24301
  }
}

What you get back

lot_pricenumber

The price you sent, echoed.

auction_feenumber

The auction house’s own buyer fee for that source and lot price.

truckingnumber

Inland haulage, on the generic model only; 0 under a source profile, where it is folded into shipping.

shippingnumber

Transport to the destination. Your db_delivery overrides it when supplied.

our_feenumber

Our service fee. Charged outside the duty/VAT base.

subtotal_customs_valuenumber

lot_price + auction_fee + trucking + shipping — the value duty is assessed on.

duty_rate / duty_amountnumber

Rate as a percentage (10.0), and the amount. 0 for a car already in free circulation in the EU.

vat_rate / vat_amountnumber

Percentage and amount. VAT is charged on subtotal_customs_value + duty_amount, not on the lot price alone.

customs_agencynumber

Fixed post-import costs outside the duty/VAT base (port clearance, agency work).

custom_clearance_totalnumber

duty_amount + vat_amount + customs_agency.

estimated_totalnumber

subtotal_customs_value + custom_clearance_total + our_fee. The landed figure.