API

v1 ENDPOINT IN AANBOUWENDPOINT UNDER CONSTRUCTION terminal Test in browserTry in browser
Programmatic AccessProgrammatic Access

Van HS-code naar complete import-check in één call. From HS code to complete import check in one call.

Uw systeem heeft de CN-code al. Post die samen met het land van oorsprong naar de Tensig Import API en krijg in één JSON-response de invoerrechten, anti-dumping, preferenties, verplichte bescheiden (Vak 44), aanvullende eenheid en CBAM-status terug. Your system already has the CN code. Post it together with the country of origin to the Tensig Import API and receive the duties, anti-dumping, preferences, required documents (Box 44), supplementary unit and CBAM status in a single JSON response.

dns

Base URL

https://import.tensig.nl/api/v1

Alle requests via HTTPS. Auth via X-API-Key: imp-<token>. Response is altijd JSON. Key-beheer via cbamadmin.tensig.nl/import-keys/. All requests over HTTPS. Auth via X-API-Key: imp-<token>. Response is always JSON. Key management at cbamadmin.tensig.nl/import-keys/.

EndpointsEndpoints

POST

/api/v1/import-check

Het hoofd-endpoint. Retourneert alle heffingen, verplichtingen en documentcodes voor een CN8/TARIC10-code gecombineerd met een land van oorsprong. Eén call = compleet dossier voor de aangifte. The main endpoint. Returns all duties, obligations and document codes for a CN8/TARIC10 code combined with a country of origin. One call = complete dossier for the declaration.

Request bodyRequest body

VeldField Type ToelichtingDescription
hs_code* string CN8 of TARIC10. Punten en spaties worden gestript (6110.11.30 = 61101130). CN8 or TARIC10. Dots and spaces are stripped (6110.11.30 = 61101130).
origin* string ISO-3166-1 alpha-2 landcode. Bv. CN, US, JP. ISO-3166-1 alpha-2 country code. E.g. CN, US, JP.
language string nl (default) of en. Bepaalt de taal van labels in de response. nl (default) or en. Determines the language of labels in the response.
include_future boolean Toon ook maatregelen met een startdatum in de toekomst. Default false. Also show measures with a start date in the future. Default false.

* verplichtrequired

# Wollen trui uit China — CN 61101130
curl -X POST https://import.tensig.nl/api/v1/import-check \
  -H "X-API-Key: imp-a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \
  -H "X-Client-Ref: klant-referentie-optioneel" \
  -H "Content-Type: application/json" \
  -d '{
    "hs_code": "61101130",
    "origin": "CN",
    "language": "en"
  }'
const res = await fetch('https://import.tensig.nl/api/v1/import-check', {
  method: 'POST',
  headers: {
    'X-API-Key':      apiKey,        // imp-...
    'X-Client-Ref':   clientRef,     // optioneel
    'Content-Type':   'application/json'
  },
  body: JSON.stringify({
    hs_code: '61101130',
    origin:  'CN',
    language: 'en'
  })
});
const data = await res.json();
console.log(data.duty.rate_pct, data.anti_dumping);
import requests

r = requests.post(
    "https://import.tensig.nl/api/v1/import-check",
    headers={
        "X-API-Key":    api_key,       # imp-...
        "X-Client-Ref": client_ref,    # optioneel
    },
    json={
        "hs_code": "61101130",
        "origin":  "CN",
        "language": "en",
    },
    timeout=10,
)
data = r.json()
print(data["duty"]["rate_pct"], data["anti_dumping"])

check_circle Response 200 · SUCCESSResponse 200 · SUCCESS

{
  "status": "SUCCESS",
  "query": {
    "hs_code": "61101130",
    "origin": "CN",
    "language": "en",
    "requested_at": "2026-09-04T10:15:22Z"
  },
  "classification": {
    "cn8": "61101130",
    "taric10": "6110113000",
    "cn8_label": "Of wool or fine animal hair, for men or boys",
    "country_name": "China",
    "country_found": true,
    "supplementary_unit": { "code": "NAR", "label": "Number of items" }
  },
  "duty": {
    "rate_pct": 12.0,
    "duty_type": "pct",
    "raw": "12.00 %",
    "label": "Third-country duty",
    "legal_base": "R0193/26",
    "origin_scope": "ERGA OMNES",
    "preference_code": "100",
    "is_erga_omnes": true,
    "is_conditional": false
  },
  "preferences": [
    {
      "scheme": "GSP+",
      "rate_pct": 0.0,
      "legal_base": "R0978/12",
      "preference_code": "300",
      "applies_to_origin": false,
      "reason_not_applicable": "CN is not a GSP+ beneficiary"
    }
  ],
  "anti_dumping": [
    {
      "rate_pct": 66.4,
      "legal_base": "R0876/25",
      "manufacturers": [
        { "additional_code": "A999", "name": "All other companies", "rate_pct": 66.4 },
        { "additional_code": "A123", "name": "Foshan Yicheng Textile Co.", "rate_pct": 22.1, "requires_d008": true }
      ],
      "is_conditional": true
    }
  ],
  "countervailing": [],
  "documents_box_44": [
    {
      "measure_type_code": 142,
      "condition": "B",
      "condition_label": "Presentation of a certificate of origin Form A",
      "is_prohibition": false,
      "legal_base": "R0978/12",
      "options": [
        { "certificate": "N865", "label": "Certificate of origin Form A", "action_code": 27, "action_label": "Present the specified document" },
        { "certificate": null,   "label": "Not applicable",               "action_code": 6,  "action_label": "No document" }
      ]
    },
    {
      "measure_type_code": 710,
      "condition": "A",
      "condition_label": "Import control - CITES",
      "is_prohibition": true,
      "legal_base": "R0338/97",
      "options": [
        { "certificate": "C400", "label": "CITES import permit", "action_code": 27, "action_label": "Present the specified document" }
      ]
    }
  ],
  "cbam": { "applicable": false, "sector": null, "gases": [] },
  "warnings": []
}

Belangrijkste response-veldenKey response fields

VeldField ToelichtingDescription
duty.rate_pct Van toepassing zijnd invoerrecht in %. Bij specifieke tarieven (EUR/kg) is dit null — check duty_type. Applicable import duty in %. For specific tariffs (EUR/kg) this is null — check duty_type.
duty.preference_code UCC-preferentiecode voor SAD Vak 36: 100 = Erga Omnes, 300 = bilaterale preferentie. UCC preference code for SAD Box 36: 100 = Erga Omnes, 300 = bilateral preference.
preferences[] Alle preferentie-schema's die voor deze CN bestaan. applies_to_origin zegt of het gekozen land ervan gebruik kan maken. All preference schemes that exist for this CN. applies_to_origin tells whether the chosen origin can use it.
anti_dumping[].manufacturers Lijst met fabrikant-specifieke tarieven. requires_d008 betekent: alleen geldig met D-008 factuurdeclaratie. List of manufacturer-specific rates. requires_d008 means: only valid with a D-008 invoice declaration.
documents_box_44[] Groepen bescheidencodes voor Vak 44. Per groep 1 optie kiezen bij aangifte. is_prohibition=true betekent: verbod/restrictie, niet weglaten. Groups of document codes for Box 44. Choose 1 option per group at declaration. is_prohibition=true means: prohibition/restriction, do not skip.
cbam.applicable CBAM van toepassing? Zo ja: sector en gases gevuld. CBAM applicable? If so: sector and gases populated.
warnings[] Niet-blokkerende opmerkingen (bv. "origin unknown, fell back to ERGA OMNES"). Respons blijft 200. Non-blocking notes (e.g. "origin unknown, fell back to ERGA OMNES"). Response stays 200.
GET

/api/v1/country/{origin}

Helper — bevestigt of een ISO-code in TARIC bestaat en tot welke landengroepen (GSP, EBA, EEA, EU-JP...) hij hoort. Helper — confirms whether an ISO code exists in TARIC and which country groups (GSP, EBA, EEA, EU-JP...) it belongs to.

curl -H "X-API-Key: imp-..." \
  https://import.tensig.nl/api/v1/country/CN
{
  "status": "SUCCESS",
  "code": "CN",
  "name": "China",
  "groups": ["1011", "2020"],
  "eu_member": false
}
GET

/api/v1/health

Onauthenticated. Voor monitoring/uptime-checks. Unauthenticated. For monitoring/uptime checks.

{ "status": "ok", "version": "v4.8" }

Rate-limitingRate limiting

Standaard 60 requests/minuut en 10.000 requests/dag per key. Configureerbaar per klant. Overschrijding → HTTP 429 met Retry-After. Default 60 requests/minute and 10,000 requests/day per key. Configurable per client. Exceeded → HTTP 429 with Retry-After.

# Response-headers op elke call
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1725444322

FoutcodesError codes

HTTP status WanneerWhen
200SUCCESSOK. Kan warnings bevatten.OK. May contain warnings.
400BAD_REQUESTHS-code niet 8/10 cijfers, of origin geen 2-letter code.HS code not 8/10 digits, or origin not a 2-letter code.
401UNAUTHORIZEDOntbrekende of ongeldige API-key.Missing or invalid API key.
404NOT_FOUNDHS-code bestaat niet in TARIC.HS code does not exist in TARIC.
429RATE_LIMITEDTe veel requests. Zie Retry-After.Too many requests. See Retry-After.
500ERRORInterne fout. message bevat details.Internal error. message contains details.
{
  "status": "BAD_REQUEST",
  "message": "hs_code must be 8 or 10 digits after normalisation",
  "request_id": "req_a1b2c3"
}

VersioneringVersioning

Breaking changesBreaking changes

Nieuwe major (/api/v2/). Oude versie draait minimaal 6 maanden parallel; Sunset-header 3 maanden vóór einde. New major (/api/v2/). Old version runs at least 6 months in parallel; Sunset header 3 months before end-of-life.

Additive changesAdditive changes

Nieuwe optionele velden of parameters komen zonder versiebump; changelog in CHANGELOG_API.md. New optional fields or parameters ship without a version bump; changelog in CHANGELOG_API.md.

terminal

Klaar om te testen?Ready to test?

Open de tester, plak je API-key en klik een voorbeeld. Response zie je meteen — geen curl, geen Postman nodig. Open the tester, paste your API key, and click an example. You see the response immediately — no curl or Postman needed.

Naar de testerOpen tester arrow_forward