Blog·Craft·

A VAT number can be valid without being registered

VAT format and checksum checks are separate from a registry lookup. The response keeps those answers in separate fields.

A VAT number can have the right prefix, length, and check digits without belonging to a registered business. If an API calls all of that "valid," it's hard to know what your form actually checked.

/vat gives the two checks separate results. The basic request checks the number's format and checksum. These are the relevant response fields:

GET /vat/DE136695976
{
  "vat": "DE136695976",
  "valid": true,
  "country": "DE"
}

This is a checksum-valid example number. That response makes no claim about a business being registered under it.

For an EU registry check, add ?deep=true. The VIES result appears in deep.registered, alongside the business name and address when the registry supplies them. Your code can distinguish "the number looks right" from "the registry recognizes it" without changing the meaning of valid.

The distinction matters when a check fails, too. Malformed numbers return a normal response with valid: false and don't use a registry lookup. If a registry request cannot complete, the API returns a service error and releases the lookup allowance. It doesn't turn an unavailable registry into registered: false.

A form can use the basic check while collecting the number, then request the registry result when it needs that confirmation. Registry checks use a separate included allowance and the plan's additional-usage rules. Checking the shape of a number doesn't require one.