
Product
Socket Threat Intel Now Shows Which Malware Campaigns Were Blocked or Detected
Socket Threat Intel now shows which malware campaigns were blocked or detected in your organization, with links to scans and Firewall events.
@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 9 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.

Product
Socket Threat Intel now shows which malware campaigns were blocked or detected in your organization, with links to scans and Firewall events.

Security News
Fixes for eMudhra and Brotli are out. Getting them everywhere they’re needed means tracking down bundled libraries, runtimes, and certificate stores.

Threat Research
/Security News
Socket uncovered secret-stealing workflows that ran in LiteLLM’s GitHub repository 11 days before the supply chain attack on PyPI and Docker.