List supported IDs
The /id-types endpoint describes which kinds of entity IDs our engine understands, how those IDs are validated, and which registries participate in their verification.
Coverage is not limited to a static list of countries or formats. Instead, the system exposes a structured catalogue of ID types that reflects the current state of supported registries, validation strategies, and geographic reach.
This catalogue is intended to be consumed programmatically and used to drive routing, validation, and trust decisions in downstream systems.
If you are using an official SDK, the same coverage data is available through the SDK tooling. See Domain graph for cached and offline access to the coverage view.
Requesting the catalogue
The endpoint accepts GET or POST requests.
Parameters may be provided via path segments, query parameters, or JSON body fields.
### JSON body (recommended):POST https://api.verifyvat.com/v1/id-typesContent-Type: application/json{ "country": "{country-filter}", "id": "{id-filter}", "region": "{region-filter}", "validation": "{validation-filter}"}
### or with path segments:POST https://api.verifyvat.com/v1/id-types/:countryContent-Type: application/json{ ### only validation is supported in this case: "validation": "{validation-filter}"}
### or with query parameters:GET https://api.verifyvat.com/v1/id-types?country={country-filter}&validation={validation-filter}®ion={region-filter}If no filters are provided, the full global catalogue is returned.
Filtering the results
The catalogue supports multiple filters, all of which can be used individually or combined.
| Parameter | What it filters | Notes |
|---|---|---|
id | ID type | Returns only the matching type(s), if supported. |
region | Geographic region | e.g. EU, EMEA, LATAM |
country | Jurisdiction | ISO 3166-1 alpha-2 (e.g. NO, IT, TW, ...). |
validation | Validation strategy | registry, syntactic, or simple |
All filters accept a single string, a comma-separated list, or an array of strings:
### a single string:POST { "region": "EMEA" }
### a comma-separated listGET "?country=NO,IT"
### an array of stringsPOST { "validation": ["registry", "syntactic"] }Understanding the response
The response uses the common envelope described in Response envelope. Inside data, the types[] array contains the list of supported ID types matching the filters, or the full list if no filters were applied.
Each entry describes one ID type that the engine can process. This is what you pass into Verify an ID as the type field.
Type object
| Field | Type | Description |
|---|---|---|
id | string | Canonical ID type used when calling the verification endpoint. |
acronym | string | Local short label. |
name | string | Human-friendly name. |
format | string[] | Display formats for UX and masking. |
country | string | ISO 3166-1 alpha-2 country code, or WW for global IDs. |
region | string | Geographic region grouping ( EU, EMEA, LATAM, etc.). |
sources | object[] | Registries that can contribute evidence for this ID type. |
validation | string | registry, syntactic, or simple depending on available validation |
Source object
| Field | Type | Description |
|---|---|---|
sources[*].id | string | Internal registry identifier. |
sources[*].coverage | string | full or partial depending on whether the source covers the ID type completely. |
Coverage directly affects how to interpret verification outcomes. See Cross-registry checks for how evidence is combined, and Verify an ID for how coverage, origin, and issues[] influence decision-making.
Developer patterns
Dynamic onboarding forms
Instead of maintaining per-country rules, request the list scoped by country. You can use the result to render country-appropriate pickers, apply formatting masks using format, and route directly to Verify an ID using the returned id type.
Programmatic routing for verification
If your system receives { id, country }, a predictable flow is:
- Call the endpoint scoped by the country to retrieve which ID types are relevant.
- Compare the user input against
formathints to narrow down candidates. - Verify using the chosen type.
A similar approach can be achieved via Infer the ID type, which applies the same coverage data but with built-in heuristics to infer the most likely type.
Coverage-aware trust strategies
Use sources[].coverage to set expectations about negative outcomes:
- With full coverage,
outcome: "unconfirmed"from verification is typically definitive. - With partial coverage,
outcome: "unconfirmed"can be a false negative, and your workflow should treat it as degraded evidence rather than proof of non-existence.
Building internal validators and schemas
Many teams snapshot the catalogue to generate internal schemas, validators, and UX constraints, then refresh it periodically to track coverage evolution. See Domain graph if you want a cached and offline-friendly view through the SDK.