# Zoek Belastingkenmerk — volledige documentatie > Gratis tool en API die een Nederlands Belastingdienst **betalingskenmerk** (16 cijfers) omzet naar het onderliggende **aanslagnummer** — en andersom. De omzetting volgt de officiële specificatie "Betalingskenmerk bepaling v1.5" en is geverifieerd tegen de uitgewerkte voorbeelden in die specificatie. Website: https://zoek-belastingkenmerk.nl/ Licentie code: MIT. Onafhankelijke tool, geen officiële dienst van de Belastingdienst. Aan de uitkomst kunnen geen rechten worden ontleend. ## Wat is een betalingskenmerk? Het betalingskenmerk is de unieke betalingsreferentie die de Belastingdienst aan elke aanslag koppelt. Het bestaat altijd uit **16 cijfers** en zorgt ervoor dat een betaling automatisch bij de juiste aanslag terechtkomt. Op een bankafschrift of betaling staat vaak alleen dit kenmerk — niet het oorspronkelijke aanslagnummer. Deze tool zet het kenmerk terug om naar het aanslagnummer en de bijbehorende gegevens: het BSN of RSIN, de belastingsoort, het jaar en het tijdvak. Een **aanslagnummer** bestaat uit 9 cijfers + 1 letter + 7 cijfers, bijvoorbeeld `036000012L0123110`. De letter (het "middel") geeft de belastingsoort aan. ## Hoe is een betalingskenmerk opgebouwd? De Belastingdienst leidt het betalingskenmerk rechtstreeks af uit het aanslagnummer. De 16 posities: - **Positie 1** — het controlegetal, berekend met modulus-11 (de elfproef) over de 15 cijfers op posities 2–16. - **Positie 2–9** — (een deel van) het BSN of RSIN van de belastingplichtige. - **Positie 10–11** — de middelcode: welke belasting het betreft. - **Positie 12–16** — jaar, tijdvak en volgnummer. Omdat het controlegetal met de elfproef wordt berekend, is direct te zien of een ingetypt betalingskenmerk klopt. ### Berekening van het controlegetal (positie 1) De 15 cijfers op positie 2–16 worden van rechts naar links gewogen met de wegingsfactoren `[2, 4, 8, 5, 10, 9, 7, 3, 6, 1]` (cyclisch herhaald). Vervolgens: `controle = 11 - (gewogen som mod 11)`. Een uitkomst van 10 wordt 1; een uitkomst van 11 (rest 0) wordt 0. ### Elfproef van een BSN/RSIN Een geldig 9-cijferig BSN/RSIN voldoet aan: `som van (cijfer × gewicht)` met gewichten `[9, 8, 7, 6, 5, 4, 3, 2, -1]` is deelbaar door 11. ## Welke belastingsoorten worden herkend? De middelcode (positie 10–11) bepaalt het type. Volledige tabel van ondersteunde middelletters en omschrijvingen: | Middel | Belastingsoort | Soort aanslag | Omschrijving (NL) | Description (EN) | | --- | --- | --- | --- | --- | | A | Loonbelasting | Naheffingsaanslag | Naheffingsaanslag loonbelasting | Payroll tax — additional assessment | | L | Loonbelasting | Aangifte | Aangifte loonbelasting | Payroll tax return | | B | Omzetbelasting | Aangifte | Aangifte omzetbelasting | VAT return | | F | Omzetbelasting | Naheffingsaanslag | Naheffingsaanslag omzetbelasting | VAT — additional assessment | | V | Vennootschapsbelasting | Aanslag | Vennootschapsbelasting | Corporate income tax | | H | Inkomstenbelasting | Aanslag | Inkomstenbelasting | Income tax | | N | Inkomstenbelasting | Aanslag | Inkomstenbelasting (gemoedsbezwaarde) | Income tax (conscientious objector) | | P | Inkomstenbelasting | Conserverende aanslag | Conserverende aanslag inkomstenbelasting | Income tax — preserving assessment | | W | Zorgverzekeringswet | Aanslag | Inkomensafhankelijke bijdrage Zvw | Healthcare insurance contribution (Zvw) | | M | Motorrijtuigenbelasting | Aangifte | Motorrijtuigenbelasting | Motor vehicle tax | | Y | Motorrijtuigenbelasting | Naheffingsaanslag | Naheffingsaanslag motorrijtuigenbelasting | Motor vehicle tax — additional assessment | | Z (1) | Landinrichtingsrente | Aanslag | Landinrichtingsrente | Land development levy | | Z (2) | Verontreinigingsheffing | Aanslag | Verontreinigingsheffing rijkswateren | Water pollution levy | | Z (7) | Eurovignet | Aangifte | Aangifte eurovignet | Eurovignette return | | Z (8) | Eurovignet | Naheffingsaanslag | Naheffingsaanslag eurovignet | Eurovignette — additional assessment | | T (1) | Toeslag | Terugvordering | Kinderopvangtoeslag | Childcare allowance | | T (2) | Toeslag | Terugvordering | Huurtoeslag | Rent allowance | | T (3) | Toeslag | Terugvordering | Zorgtoeslag | Healthcare allowance | | T (4) | Toeslag | Terugvordering | Kindgebonden budget | Child budget | | T (5) | Toeslag | Verzuimboete | Verzuimboete toeslagen | Allowances — default penalty | | T (6) | Toeslag | Vergrijpboete | Vergrijpboete toeslagen | Allowances — offence penalty | | C | Milieuheffingen | Aanslag | Milieuheffingen | Environmental levies | Middelcodes per positie 10–11 (samengevat): `0x`/`6x` loonbelasting, `1x`/`5x` omzetbelasting, `70`/`73` inkomstenbelasting, `71` conserverende aanslag IB, `74`/`80–84`/`92–96` vennootschapsbelasting, `75` Zvw, `23–28` toeslagen, `76`/`78`/`87`/`88` motorrijtuigenbelasting/MOA, `85`/`86`/`97` eurovignet/landinrichtingsrente/verontreinigingsheffing. **Let op:** sommige aanslagen (bepaalde milieuheffingen en conserverende aanslagen) krijgen een willekeurig betalingskenmerk dat niet met een formule terug te rekenen is. Het controlegetal is dan wél altijd te valideren. ## Privacy De volledige omzetting gebeurt lokaal in de browser met dezelfde code die de API aandrijft (`core.mjs`). De geschiedenis wordt alleen lokaal opgeslagen. De server logt nooit het betalingskenmerk, aanslagnummer of BSN/RSIN — alleen geanonimiseerde gebeurtenissen (type, pad, belastingsoort-letter, uitkomst, HTTP-status, grof landniveau). Geen cookies, geen tracking. ## Gratis API Basis-URL: `https://zoek-belastingkenmerk.nl`. Geen API-sleutel, CORS aan (`access-control-allow-origin: *`), alleen `GET`, antwoorden in JSON en hard gecachet aan de edge (`cache-control: public, max-age=86400`). De parameter `lang=nl|en` bepaalt de taal van de omschrijvingen (standaard `nl`). De OpenAPI 3.1 specificatie staat op `https://zoek-belastingkenmerk.nl/openapi.json`. ### Endpoints ``` # Machine-leesbaar overzicht GET https://zoek-belastingkenmerk.nl/api/v1 # Betalingskenmerk decoderen GET https://zoek-belastingkenmerk.nl/api/v1/decode?kenmerk=2036000016301110&lang=nl # Aanslagnummer omzetten naar betalingskenmerk GET https://zoek-belastingkenmerk.nl/api/v1/encode?aanslag=036000012L0123110 # Automatisch detecteren (beide richtingen) GET https://zoek-belastingkenmerk.nl/api/v1/convert?q=2036000016301110&lang=nl # Alleen het controlegetal valideren GET https://zoek-belastingkenmerk.nl/api/v1/validate?kenmerk=2036000016301110 ``` ### Voorbeeldantwoord van /decode ```json { "ok": true, "betalingskenmerk": "2036 0000 1630 1110", "controleOk": true, "middel": "L", "middelOmschrijving": "Aangifte loonbelasting", "soort": "Loonbelasting", "kind": "Aangifte", "categorie": "Af te dragen loonheffing", "aanslagnummer": null, "bsn": "036000012", "jaartalDigit": "3", "jaartal": 2023, "tijdvakCode": "11", "tijdvak": "November", "middelherkenning": null, "omschrijving": "Aangifte loonbelasting · November 2023" } ``` ### Foutafhandeling Bij een ongeldige invoer geeft de API `ok: false` met een `error`-tekst en een HTTP-status `400` (ontbrekende parameter) of `422` (onverwerkbare invoer). Een onbekend endpoint geeft `404`. De velden `direction` (`kenmerk->aanslag` of `aanslag->kenmerk`) geven bij `/convert` aan welke richting is gedetecteerd. ## Veelgestelde vragen **Worden mijn gegevens verstuurd of opgeslagen?** Nee. De omzetting gebeurt lokaal in de browser; er wordt niets verstuurd of opgeslagen. **Is dit een officiële dienst van de Belastingdienst?** Nee, het is een onafhankelijke gratis hulptool die de openbare specificatie volgt. Controleer bij twijfel altijd via Mijn Belastingdienst. **Waarom kan ik mijn betalingskenmerk niet omzetten?** Sommige aanslagen krijgen een willekeurig kenmerk dat niet met een formule te herleiden is; het controlegetal is wel te valideren. **Wat is het verschil tussen een BSN en een RSIN?** Een BSN hoort bij een natuurlijk persoon, een RSIN bij een organisatie (bijv. een bv voor de vennootschapsbelasting). Beide bestaan uit 9 cijfers en voldoen aan de elfproef.