
Security News
vlt 1.5.0 Adds Agent Skills Management
vlt 1.5.0 links skills from JavaScript dependencies to coding agents, with lockfile versioning and Socket data to filter out known malicious packages.
@ambolt/vies
Advanced tools
EU VIES VAT number check: offline syntax validation, retry on VIES member-state errors, request queue, consultation number. Zero dependencies, typed.
Check EU VAT numbers against the official VIES REST API. Zero dependencies, Node 18+, ESM, typed.
npm install @ambolt/vies
import { checkVat, checkVats } from '@ambolt/vies';
console.log(await checkVat('DK10150817'));
// { valid: true, countryCode: 'DK', vatNumber: '10150817', checkedAt: '...', source: 'EU VIES' }
const proof = await checkVat('DE811128135', { requester: 'DK10150817' }); // adds consultationNumber
const many = await checkVats(['DK10150817', 'FR40303265045'], { concurrency: 2 });
valid: false with reason: 'invalid_syntax' and makes no request.GR is sent as EL (Greece), XI is Northern Ireland (goods).MS_UNAVAILABLE, MS_MAX_CONCURRENT_REQ, TIMEOUT, SERVICE_UNAVAILABLE, GLOBAL_MAX_CONCURRENT_REQ, and on HTTP 429/5xx and network errors (default 4 retries).checkVats runs a queue with a concurrency limit (default 2, to stay polite to VIES) and keeps input order. One failed number does not reject the batch.requester (your own EU VAT number) it uses the POST endpoint and returns VIES' consultation number, which you can keep as proof of the check.name and address are not returned unless { includeDetails: true }. For sole traders they are personal data. Nothing is stored or logged by this package.Result shape: { valid, countryCode, vatNumber, consultationNumber?, checkedAt, source: 'EU VIES', name?, address?, reason? }. A batch item that failed is { input, valid: null, error: { code, message, retryable }, checkedAt, source }.
Options: countryCode, requester, includeDetails, retries, baseDelayMs, maxDelayMs, timeoutMs (15000), signal, concurrency (batch).
checkVat rejects with ViesError (code, retryable, attempts, status) only when the check could not be completed.
| code | meaning | retried |
|---|---|---|
| MS_UNAVAILABLE | member state's service is down | yes |
| MS_MAX_CONCURRENT_REQ | member state is at its request limit | yes |
| GLOBAL_MAX_CONCURRENT_REQ | VIES is at its request limit | yes |
| SERVICE_UNAVAILABLE | VIES unavailable | yes |
| TIMEOUT | VIES or the member state timed out | yes |
| NETWORK | your connection failed | yes |
| INVALID_REQUESTER | requester is not a valid VAT number | no |
| IP_BLOCKED, VAT_BLOCKED, HTTP_4xx, BAD_RESPONSE, others | VIES refused or answered unexpectedly | no |
When retries run out, the last error is thrown (attempts shows how many requests were made). For a hard failure in a batch, check result.valid === null.
Facts as checked on 2026-10-05, from the npm and PyPI registries and GitHub:
validate-vat was last published on 2022-08-22 and its GitHub repository no longer resolved.jsvat is marked deprecated on npm as unmaintained.pyvat (Python) had its last release on 2024-01-25 and open issues about MS_UNAVAILABLE and MS_MAX_CONCURRENT_REQ errors.This package targets the current VIES REST API, retries exactly those errors, and is released with tests that mock HTTP only.
ViesError.Not legal or tax advice. VIES is a service of the European Commission; not affiliated. MIT. Contact: hello@ambolt.dev. https://ambolt.dev
FAQs
EU VIES VAT number check: offline syntax validation, retry on VIES member-state errors, request queue, consultation number. Zero dependencies, typed.
The npm package @ambolt/vies receives a total of 34 weekly downloads. As such, @ambolt/vies popularity was classified as not popular.
We found that @ambolt/vies demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
vlt 1.5.0 links skills from JavaScript dependencies to coding agents, with lockfile versioning and Socket data to filter out known malicious packages.

Security News
Rust 1.100 will add opt-in dependency cooldowns to Cargo, giving security scanners and maintainers time to catch malicious crate releases.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.