# Nero Labs Phone Number Validator

> Nero Labs Phone Number Validator is a paid API for AI agents from x402-agent-tools.nerolabs.workers.dev, paid per call via x402, $0.002/call, status unknown (last checked 2026-10-22).

Validates up to 100 phone numbers from any country, returning E.164 format, national format, country, line type (mobile, landline, VoIP, toll-free), and validity status using Google's libphonenumber.

## Facts

- Endpoint: POST https://x402-agent-tools.nerolabs.workers.dev/phone-check?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-22
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/nero-labs-phone-number-validator-7c1552ac
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_t2bBoTKhfcvSIW1d_5rZU

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 nero-labs-phone-number-validator-7c1552ac -d '<json body>'
```

Example prompt: Can you validate these phone numbers for me — +44 20 7946 0123, 07825 123456, and (212) 555-0123 — and tell me which ones are valid, what country they're from, and whether they're mobile or landline? Assume UK for any numbers without a country code.

## When to prefer this

Use this endpoint when you need bulk phone number validation, normalization to E.164, or line-type classification (mobile vs landline vs VoIP) without actually calling the number. Ideal for CRM data cleanup, SMS campaign pre-screening, sign-up form validation, or any workflow needing structured phone metadata at low cost ($0.002/number). Prefer this over live-lookup services when format validation and numbering-plan checks are sufficient and you don't need to verify the line is currently active.

## Known failure modes

- Numbers without a country code and no defaultRegion set may be parsed incorrectly or flagged invalid
- Batch exceeds 100 numbers — only up to 100 are supported per call
- Ambiguous number formats with no region context returned as unknown type
- VoIP numbers flagged as risky by default (can disable with flagVoip: false)
- Numbers that exist in the numbering plan but are unallocated may still return phoneValid: true since no live line check is performed
- Missing or wrong phoneField when using rows mode causes field detection fallback which may misidentify the phone column

## How this service works

Pay-per-call tools for AI agents, 31 in all: read web pages and RSS feeds, OCR, PDF text, transcription; email, phone and domain checks; UK, Irish and Polish company lookups and UK risk reports; website contacts, tech stack and SEO audits; PageSpeed; AI review, job post and row enrichment; data cleaning, joins, dedupe and diffs; US and EU compliance rules. No account or API key: pay each call in USDC on Base over x402.

## Output

Returns an array of row objects — one per input number — each enriched with: phoneValid (boolean), phoneStatus (valid/invalid/risky/duplicate), phoneE164 (e.g. +441174960012), phoneNational, phoneInternational, phoneCountry (ISO code), phoneCountryCallingCode, phoneType (mobile/fixed_line/voip/toll_free/etc.), isMobile, phoneReason, and phoneAllReasons. Also returns a summary object with counts by status, type, country, and reason, plus input metadata.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "keep": {
   "enum": [
    "all",
    "valid",
    "valid_and_risky",
    "problems",
    "mobile"
   ],
   "type": "string",
   "description": "Which rows to return. all (default), valid, valid_and_risky, problems, or mobile (confirmed mobiles only, for SMS). The summary still counts every number."
  },
  "rows": {
   "type": "array",
   "items": {
    "type": "object"
   },
   "description": "JSON objects that each hold a phone number in one field. Every original field comes back untouched with the verdict fields added. Use this OR phones."
  },
  "phones": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "A plain list of phone numbers in any format, for example [\"+44 20 7946 0123\", \"07825 123456\", \"(212) 555-0123\"]. Bare numbers such as 2079460123 are also accepted. Use this OR rows."
  },
  "flagVoip": {
   "type": "boolean",
   "description": "Default true: VoIP numbers come back risky."
  },
  "phoneField": {
   "type": "string",
   "description": "Rows only. The field holding the number, for example \"phone\" or \"contact_number\". Leave out to detect it automatically."
  },
  "defaultRegion": {
   "type": "string",
   "description": "Two-letter ISO country code assumed for numbers written without a country code, for example GB, US, AU, DE. Numbers starting with + are unaffected."
  },
  "markDuplicates": {
   "type": "boolean",
   "description": "Default true: later repeats of the same E.164 number in this call come back duplicate."
  },
  "flagNonPersonal": {
   "type": "boolean",
   "description": "Default true: toll free, shared cost, UAN, pager and voicemail numbers come back risky."
  },
  "flagPremiumRate": {
   "type": "boolean",
   "description": "Default true: premium-rate numbers come back risky rather than valid."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "rows": [
   {
    "phone": "0117 496 0012",
    "isMobile": false,
    "phoneE164": "+441174960012",
    "phoneType": "fixed_line",
    "phoneValid": true,
    "lineChecked": false,
    "phoneReason": "ok",
    "phoneStatus": "valid",
    "phoneCountry": "GB",
    "phoneNational": "0117 496 0012",
    "phoneExtension": null,
    "phoneAllReasons": [
     "ok"
    ],
    "phoneInternational": "+44 117 496 0012",
    "phoneCountryCallingCode": "+44"
   },
   {
    "phone": "+1 (415) 555-0132",
    "isMobile": null,
    "phoneE164": "+14155550132",
    "phoneType": "fixed_line_or_mobile",
    "phoneValid": true,
    "lineChecked": false,
    "phoneReason": "ok",
    "phoneStatus": "valid",
    "phoneCountry": "US",
    "phoneNational": "(415) 555-0132",
    "phoneExtension": null,
    "phoneAllReasons": [
     "ok"
    ],
    "phoneInternational": "+1 415 555 0132",
    "phoneCountryCallingCode": "+1"
   },
   {
    "phone": "12345",
    "isMobile": null,
    "phoneE164": "+4412345",
    "phoneType": "unknown",
    "phoneValid": false,
    "lineChecked": false,
    "phoneReason": "too_short",
    "phoneStatus": "invalid",
    "phoneCountry": "GB",
    "phoneNational": "12345",
    "phoneExtension": null,
    "phoneAllReasons": [
     "too_short"
    ],
    "phoneInternational": "+44 12345",
    "phoneCountryCallingCode": "+44"
   }
  ],
  "summary": {
   "keep": "all",
   "counts": {
    "risky": 0,
    "valid": 2,
    "invalid": 1,
    "duplicate": 0
   },
   "warnings": [],
   "inputMode": "phones",
   "phoneField": "phone",
   "typeCounts": {
    "fixed_line": 1,
    "fixed_line_or_mobile": 1
   },
   "mobileCount": 0,
   "checkedCount": 3,
   "reasonCounts": {
    "ok": 2,
    "too_short": 1
   },
   "countryCounts": {
    "GB": 1,
    "US": 1
   },
   "defaultRegion": "GB",
   "notInThisServer": "Region, allocated carrier and timezone lookups, Apify dataset / CSV / Excel / Google Sheet input, CSV and Excel export and webhooks are in t...",
   "inputRecordCount": 3,
   "liveLineCheckNote": "These checks confirm that a number is correctly formed and exists in its country numbering plan, and report its country and line type. They ...",
   "outputRecordCount": 3,
   "phoneFieldDetected": false,
   "liveLineCheckPerformed": false,
   "undeterminedMobileCount": 1
  },
  "_example_note": "Real output, trimmed: long lists cut to their first items and long text shortened."
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/nero-labs-phone-number-validator-7c1552ac/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402-agent-tools.nerolabs.workers.dev](https://www.zero.xyz/host/x402-agent-tools.nerolabs.workers.dev/llms.txt)
