# 402utils EORI Number Validator

> 402utils EORI Number Validator is a paid API for AI agents from 402utils.com, paid per call via x402, $0.002/call, status unknown (last checked 2026-10-10).

Validates an EU EORI number against the European Commission's official EOS service, returning registration status and optionally the operator's registered name and address.

## Facts

- Endpoint: GET https://402utils.com/v1/eori-check?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-10
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/402utils-eori-number-validator-b9ce6dc9
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_ngNUq7mMrojDAsUwXJGs8

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability 402utils-eori-number-validator-b9ce6dc9
```

Example prompt: Can you check whether EORI number NL822502975 is valid and registered with the EU customs system, and get back the operator's name if it's available?

## When to prefer this

Use this endpoint when you need to verify the authenticity and registration status of an EU EORI number for customs, import/export compliance, supplier onboarding, or audit purposes. Prefer it over manual VIES-only checks when the entity may be a customs operator rather than just a VAT-registered business. Use alongside the 402utils VAT check for comprehensive EU compliance validation. Choose the attest=1 option when you need a cryptographically signed audit trail of the check result.

## Known failure modes

- Invalid EORI format detected locally: returns valid=false with reason='invalid_format' before hitting the network
- EU EOS service unavailable: returns HTTP 503, no charge applied
- EORI not found in registry: returns valid=false, exists=false
- Operator has not consented to data publication: name and address fields are absent from a valid/existing response
- Malformed or missing 'eori' query parameter: likely returns 400 or validation error

## How this service works

Validate an EU EORI number (the customs operator id for any EU import/export) against the Commission's official EOS service. Format is checked locally first, so junk never hits the network. Valid numbers return the registered name/address when the operator consented. Never a false 'invalid': if the service is down you get a 503, not charged. Complements vat-check in the EU compliance toolkit. ?attest=1 → Ed25519-signed.

## Output

Returns a JSON object with the EORI string, a boolean 'valid' flag, a boolean 'exists' flag, ISO 3166 country code, checkedAt timestamp, and source='EU-EOS'. If the operator consented to publication, also includes the registered business name and address. If format is invalid locally, returns valid=false with reason='invalid_format'. If the EU EOS service is unreachable, returns HTTP 503 (not charged). Optionally includes an Ed25519-signed attestation object with signature, key ID, timestamp, and SHA-256 of the result payload when attest=1 is set.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "eori"
     ],
     "properties": {
      "eori": {
       "type": "string",
       "description": "EORI number, e.g. NL822502975 or DE1234567890123."
      },
      "attest": {
       "type": "string",
       "description": "Set to 1 for an Ed25519-signed attestation of the result (audit trail)."
      }
     },
     "description": "Query param `eori` (country prefix + up to 15 alphanumerics)."
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "eori",
      "valid",
      "exists",
      "checkedAt",
      "source"
     ],
     "properties": {
      "eori": {
       "type": "string"
      },
      "name": {
       "type": "string",
       "description": "Registered name (only if the operator consented to publication)."
      },
      "valid": {
       "type": "boolean"
      },
      "exists": {
       "type": "boolean",
       "description": "True iff the EORI is registered and active (equals valid)."
      },
      "reason": {
       "type": "string",
       "description": "Present when valid=false due to local format: 'invalid_format'."
      },
      "source": {
       "type": "string",
       "const": "EU-EOS"
      },
      "address": {
       "type": "string",
       "description": "Registered address (only if consented)."
      },
      "country": {
       "type": "string",
       "description": "ISO 3166 alpha-2 from the EORI prefix."
      },
      "checkedAt": {
       "type": "string",
       "format": "date-time"
      },
      "attestation": {
       "type": "object",
       "properties": {
        "alg": {
         "type": "string",
         "const": "Ed25519"
        },
        "sig": {
         "type": "string",
         "description": "base64url Ed25519 signature over the canonical JSON of payload."
        },
        "payload": {
         "type": "object",
         "properties": {
          "ts": {
           "
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/402utils-eori-number-validator-b9ce6dc9/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from 402utils.com](https://www.zero.xyz/host/402utils.com/llms.txt)
