akwitoEU VAT proof

GET /v1/format/{number}

GET /v1/format/{number}?country=FR

What akwito knows about a number without calling anyone: its normalised form, whether it matches its country's format, and whether its check digits are right. No quota, no stored check, no proof — only the key's rate limit. Test keys may use it. It is exactly the local check that POST /v1/checks applies before consulting VIES: a number reported invalid here would there become an invalid check without any upstream call.

json
{
  "input": "fr 40 303 265 045",
  "vat_number": "FR40303265045",
  "country": "FR",
  "number": "40303265045",
  "format": "valid",
  "checksum": "valid",
  "warnings": []
}
KeyMeaning
inputthe path segment as received (URL-decoded)
vat_number, country, numberthe normalised number with and without its prefix; vat_number and number are absent when the format is invalid
formatvalid when the number matches its country's pattern, invalid otherwise
checksumvalid or invalid when the check digits were computed, not_checked otherwise
warningsNO_COUNTRY (no prefix and no country), UNKNOWN_COUNTRY, FORMAT_INVALID, CHECKSUM_INVALID; [] when the number is fine

country is read like on POST /v1/checks: only when the number has no prefix. The response is always 200; a wrong number is an answer, not a client error.

Check digits are computed for eight countries whose algorithm is public and unambiguous: France (key on the SIREN), Germany (ISO 7064 MOD 11,10), Spain (NIF, NIE and CIF letters), Italy (Luhn), Belgium (mod 97), the Netherlands (both the historical mod 11 and the 2020 mod 97 scheme), Portugal (mod 11) and Austria. Every other form — the other member states, French keys with a letter, Spanish numbers starting with K, L or M — is not_checked: a doubt goes to VIES, never to a refusal. A valid checksum says the number *can* exist, not that it is registered: only VIES says that.