Naar de inhoud
hans
Werk Expertise Diensten CV Portfolio Koppelingen Laravel packages Blog Aanmelden Contact opnemen

Een btw-nummer controleren

Tik een nummer in en je ziet wat het open eindpunt antwoordt: naam, adres en bron. Hetzelfde verzoek mag je zelf sturen, zonder sleutel.

Of probeer:

Punten en spaties mag je laten staan. Een Belgisch nummer mag ook zonder BE ervoor. Een bot-controle van Cloudflare kijkt mee, en die laat zich zelden zien.

Zelf verzoeken sturen

Het eindpunt is open: geen sleutel, geen token, geen registratie. Een GET volstaat, het antwoord is altijd JSON. De rem staat op vijf verzoeken per minuut per ip-adres. Daarboven krijg je een 429 met een Retry-After. Hoeveel je er nog over hebt staat in X-RateLimit-Remaining.

curl -s https://api.deboeck.dev/v1/btw/BE0720529757

Het nummer mag met of zonder punten en spaties. Een Belgisch ondernemingsnummer van negen of tien cijfers krijgt er vanzelf BE voor. Wat je terugkrijgt blijft een dag in cache, dus hetzelfde nummer twee keer opzoeken kost de bron niets.

Het antwoord

Bestaat het nummer, dan ziet het er zo uit:

{"valid": true,"vat_number": "BE0720529757","name": "De Boeck, Hans","address": {"street": "Ros Beiaardstraat","number": "14","zip_code": "9200","city": "Dendermonde","country": "Belgi\u00eb","country_code": "BE"},"source": "vies"}

Bestaat het niet, dan blijft de status 200: de vraag was geldig, het antwoord is enkel negatief.

{"valid": false,"vat_number": "BE0000000097","error": "Invalid VAT number"}

De velden

VeldWat het is
validtrue of false. Staat altijd in het antwoord, ook bij een fout.
vat_numberHet nummer zoals het opgezocht is: hoofdletters, landcode ervoor, zonder punten of spaties.
nameDe naam waarop het nummer staat.
address.streetDe straat, zonder huisnummer.
address.numberHet huisnummer, apart. Niet elke bron levert dat, dan blijft het leeg.
address.zip_codeDe postcode.
address.cityDe gemeente.
address.countryHet land voluit, in het Nederlands. Leeg voor landen buiten de lijst.
address.country_codeDe landcode van twee letters.
sourceWelke bron antwoordde: vies, cbw (controleerbtwnummer.eu) of btwo (btw-opzoeken.be).
errorStaat er enkel bij valid: false, en zegt waarom.

De statussen

StatusWanneer
200Er is een antwoord. Lees valid om te weten of het nummer bestaat.
422Wat je stuurde heeft de vorm van geen enkel btw-nummer. Er is niets opgezocht.
429Meer dan vijf verzoeken in een minuut vanaf hetzelfde ip. Retry-After zegt hoe lang je moet wachten.

In een Laravel-project

use Illuminate\Support\Facades\Http;$antwoord = Http::acceptJson()->timeout(10)->get('https://api.deboeck.dev/v1/btw/BE0720529757')->json();if ($antwoord['valid'] ?? false) {echo $antwoord['name'];echo $antwoord['address']['city'];}

In de browser

Het eindpunt stuurt de nodige cors-koppen mee, dus een fetch vanaf je eigen site werkt. Hou er rekening mee dat de vijf per minuut dan per bezoeker tellen, niet per site.

const antwoord = await fetch('https://api.deboeck.dev/v1/btw/BE0720529757').then((r) => r.json());if (antwoord.valid) {console.log(antwoord.name, antwoord.address.city);}

Waar het op steunt

De opzoeking vraagt het eerst aan VIES, de databank van de Europese Commissie. Antwoordt die niet, dan gaan controleerbtwnummer.eu en btw-opzoeken.be de vraag na. Welke bron het werd, staat in source.

Er hangt geen sla aan dit eindpunt: het draait mee op deze site en ligt eruit wanneer VIES eruit ligt. Zit het in een stroom die niet mag haperen, installeer dan het pakket en laat de opzoeking bij jou draaien:

composer require hansdeboeck/laravel-vat-validator

Dezelfde code, dezelfde bronnen, jouw server. Het staat bij de andere Laravel packages.

Meer dan naam en adres

Dit eindpunt zegt of een nummer bestaat en op welke naam het staat, en daar stopt het. Gaat het over een Belgische onderneming en wil je de rest van de fiche … bestuurders, vestigingen, jaarrekeningen, akten en subsidies … dan staat die op btwzoeken.be, een eigen site op de openbare registers. Zoeken en een fiche lezen kan er zonder aanmelding en zonder betaalmuur, en er hangt een json-api aan voor wie die gegevens in zijn eigen toepassing wil.

Meer dan vijf per minuut

Er bestaat een ruimere versie met een sleutel, en een variant op RapidAPI. Laat weten wat je nodig hebt, dan zetten we dat op: [email protected].

Even controleren

Cloudflare gaat kort na of je geen robot bent. Dat duurt een paar tellen.