MobileValidate API documentation

Developer docs for the MobileValidate API: check phone numbers and e-mail addresses in real time or in bulk jobs, with test mode, webhooks and SDKs.

Last updated

View as MarkdownKey factsfacts.json
A terminal sends an API request and a JSON response returns true, false and null values.A terminal sends an API request and a JSON response returns true, false and null values.
One REST call. Every answer is true, false or null (unknown).

The MobileValidate API checks phone numbers and e-mail addresses against a catalog of services. These include messaging-app registration, carrier and line type, spam reputation, and account and mailbox checks. One request can run several checks. Each check returns registered: true, false or null (unknown), or a short list of data attributes. You're not charged for inconclusive results.

How is the API organised?

It has three ways in, plus account endpoints:

SurfaceEndpointUse it for
Real-time lookupsPOST /v1/lookup, GET /v1/lookups/{id}1–100 numbers and/or e-mails; the request waits up to 30 s for answers
Bulk jobsPOST /v1/jobs/estimate, POST /v1/jobs, GET /v1/jobs/{id}, …/results, …/downloadUp to 50,000 identifiers per job, including services offered in bulk only
Webhooks/v1/webhook_endpointsSigned notifications when lookups and jobs finish
AccountGET /v1/account, /v1/limits, /v1/usage, /v1/servicesBalance, limits, usage and the service catalog for your key

The base URL is https://api.mobilevalidate.com/v1. Requests and responses are JSON (UTF-8), timestamps are RFC 3339 in UTC, and money is a decimal string such as {"amount": "0.0012", "currency": "USD"}. Phone numbers and e-mail addresses go only in POST bodies, never in URLs or headers.

What does every answer contain?

Every identifier gets one result per requested service. The results sit in a checks map keyed by service code, such as checks["telegram.registered"]. Each result has the same fields:

FieldMeaning
statuscompleted, pending, unknown, unsupported_country or failed
registeredtrue / false for a conclusive answer, null otherwise
attributesService-specific data (e.g. line_type, carrier, risk_level), or null
confidence, confidence_scorehigh / medium / low and a 0–1 score for conclusive answers
checked_at, cached, age_secondsWhen the answer was obtained and whether it came from your account's cache
billedWhether this check was charged
reasonWhy an answer is not conclusive (e.g. UPSTREAM_TIMEOUT, UNSUPPORTED_COUNTRY)

false is only ever a conclusive negative. Anything uncertain is null, and uncertain results are free.

Where should I start?

  1. Follow the quickstart. It uses the public sandbox key, takes about 30 seconds and costs nothing.
  2. Read authentication to understand the three key types and IP allowlists.
  3. Use the test mode numbers and addresses to build every branch of your integration (registered, not registered, unknown, pending, errors).
  4. Choose real-time lookups or bulk jobs, and add webhooks if you don't want to poll.
  5. Handle errors and read the rate limits and anti-abuse rules before going live.

The services reference lists every check code, and the API reference every endpoint. The SDK, CLI and MCP server wrap the same API.

What does the API never return?

The checks answer whether an account or mailbox exists, or give network and reputation facts about a number. They never return names, photos, profile data, report texts or location. Roaming is shown only as a country. Checking numbers one after another in sequence, or checking lists of made-up addresses, is refused. Everyone whose number or e-mail address is checked can object through the opt-out form.

Frequently asked questions

Do I need an account to try the API?

No. Every example in these docs uses the public sandbox key, which answers the documented test numbers and e-mail addresses for free. For your own data you need a personal test key, and live keys come with an approved access request. Test keys are free, never billed and never reach a real network.

Which base URL do I use?

All endpoints live under https://api.mobilevalidate.com/v1. Send JSON over HTTPS with your key in the Authorization header.

Is there a machine-readable specification?

Yes. The OpenAPI 3.1 file is published at /openapi.yaml (the API also serves it at /v1/openapi.yaml), and /docs/api-reference renders it as an interactive reference.