Most VAT lookups hide the difference between 'the register says it is valid' and 'the number looks right'. This API keeps them apart, returns a normalised answer for every supported country, and does not bill you when the register could not respond.
POST /v1/verify/vat with a country and a number. EU member states are checked through VIES, the United Kingdom through HMRC and Norway through the Brønnøysund register. The response always has the same fields (valid, check_type, name, address, source, retrieved_at), whichever register answered.
For Switzerland, Australia, South Africa, Kenya, the UAE and Saudi Arabia there is no free live service, so the API checks the number's shape and check digit and returns check_type format_only with valid set to null. A format-only pass cannot be mistaken for a registration check in your code.
A number that cannot be valid is rejected with 400 before any register is asked or any charge made. If a register is down you get 502 register_unavailable and no charge. Only a completed answer, valid or not valid, is billed.
US$1.00 per live check and US$0.10 per format-only check, converted to your balance currency at a daily rate. Test keys return realistic sample answers without contacting any register, so you can build the whole flow before you pay.
curl -X POST https://api.identifyorg.com/v1/verify/vat \
-H "X-IdentifyOrg-Key: io_test_xxxx" \
-H "Content-Type: application/json" \
-d '{ "country": "DE", "vat_number": "DE811128135" }'The EU member states (through VIES), the United Kingdom (through HMRC) and Norway. Six more countries get a labelled format check.
We keep a record that a check happened, its outcome and its cost, as with every API call. We do not build a database of the businesses you look up.
Yes. Test keys are free and return sample answers in the real response shape.