VIES VAT number validation in Microsoft Dynamics

Which Dynamics you run decides the answer. Business Central (and NAV before it) ships its own VIES check: turn it on and use it. Dynamics GP has no VIES check in Microsoft’s documentation, and Finance and Operations (the former AX) validates the format and check digits of registration IDs without asking VIES. For those, and for what Business Central does not do (a dated answer to fall back on when a member state is down), a VIES check is one HTTPS call from the integration you already have.

What each version does today

Read on Microsoft Learn on 12 November 2026.

VersionVIES check built in?What to do
Business CentralYes: EU VAT Reg. No. Validation Service, log with Request IdentifierEnable it (Service Connections, Set Default Endpoint, Enabled; admin permission). Add a fallback for outages if invoices must not wait.
NAV 2016 and laterYes: VAT Reg. No. Validation URL in General Ledger Setup, VAT Registration LogAs Business Central.
Finance and Operations (AX)No VIES call documented; format and check digits onlyCall VIES from an integration (a batch job or a service called on customer creation).
Dynamics GPNothing documented by MicrosoftCall VIES from an integration or a third-party add-on.

Where an API call fits

Three cases: Finance and Operations and GP, which have no VIES check; Business Central when a member state is down at the moment you create the customer or post the invoice; and any version where you want the same check, logged the same way, across several systems (ERP, web shop, billing). The call below is plain .NET, so it fits an Azure Function, a GP eConnect integration or an F&O custom service alike.

C# (.NET 6+): a check any Dynamics integration can call
using System.Net.Http.Headers;
using System.Text.Json;

static readonly HttpClient Http = new() { BaseAddress = new Uri("https://veriport.io/api/v1/") };

public static async Task<JsonElement> ValidateVat(string vatNumber, string? requester = null)
{
    var url = $"vat/validate?number={Uri.EscapeDataString(vatNumber)}"
            + (requester is null ? "" : $"&requester={Uri.EscapeDataString(requester)}");
    using var req = new HttpRequestMessage(HttpMethod.Get, url);
    req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("VERIPORT_KEY"));
    using var res = await Http.SendAsync(req);
    var body = JsonDocument.Parse(await res.Content.ReadAsStringAsync()).RootElement.Clone();
    // 503 vies_unavailable with no cached answer: retry after body.retryAfter seconds; never treat it as "invalid".
    if (!res.IsSuccessStatusCode) throw new InvalidOperationException(body.GetProperty("code").GetString());
    return body; // valid, requestDate, source.kind, source.stale, consultationNumber
}

What to keep with the customer record

Business Central keeps its own log; elsewhere, keep at least these fields from the answer next to the customer, with the date you used them for an invoice.

FieldWhy
validThe VIES answer for the number on the day asked.
requestDate, source.checkedAtWhen VIES answered (live) or when the cached answer was obtained.
source.kind, source.stalelive or cache; stale: true when the member state was down and a dated earlier answer was served.
consultationNumberThe Commission’s reference for this check, when you sent requester (your own VAT number) on a paid tier.
name, addressWhat the member state publishes; Germany and a few others publish neither.

Questions

Should a Business Central user use this instead of the built-in service?
No, not instead: the built-in service is free and logs the check where your team already looks. Use the API where Business Central stops: an outage of one member state (the API serves a dated earlier answer marked stale, rather than nothing), or one check shared with systems outside Dynamics.
Does the Business Central service send encrypted requests?
Microsoft’s page says the service uses the http protocol and that data sent through it is not encrypted. The Veriport API is HTTPS only.
Is there a Dynamics app for Veriport?
No. The API is plain HTTPS and JSON with an OpenAPI document, so any integration layer that can make an HTTP request can call it.

100 calls a month, no card; consultation numbers and kept records from $9.

Get a free key

Sources