Global phone number validation API

Validate every phone number before you send the SMS.

Format, line type and country detection for every calling code on earth — in under 100ms. Catch VoIP, premium-rate and impossible numbers before they burn your OTP budget. 100 free checks to start.

No credit card. No sales call. Live key in under a minute.

<100ms
Median response time
240+
Country numbering plans
100
Free checks on signup
POST /api/public/v1/verify
curl -X POST https://fishymails.com/api/public/v1/verify \
  -H "Authorization: Bearer fm_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"kind":"phone","value":"+31 6 12345678"}'

{
  "kind": "phone",
  "status": "valid",
  "score": 95,
  "checks": {
    "country": "NL",
    "type": "MOBILE",
    "e164": "+31612345678",
    "formatted_international": "+31 6 12345678",
    "is_valid": true
  },
  "latency_ms": 41
}

Try it free, no signup

Paste a phone number on the homepage and see the full result — format, country and line type.

Check a number free

Protecting OTP flows and CRM data for teams like:

The three things bad data is costing you right now

Undeliverable numbers silently fail

Wrong length, missing country code, a typo'd digit — the SMS never lands, the user never onboards, and nobody finds out until support gets the ticket.

Full numbering-plan validation catches malformed numbers at the form, while the user is still on the page.

SMS pumping drains your OTP budget

Fraud rings push signups through premium-rate and VoIP ranges and take a cut of every message you send. Bills spike overnight.

Line-type detection flags VoIP, premium-rate and shared-cost numbers as risky before a single message is sent.

Dirty CRM data kills your sales team

Reps dial dead numbers, dashboards count contacts that can never be reached, and routing rules fire on the wrong country.

Normalised E.164 output plus country and line type gives every record one clean, dial-ready format.

Stop bad data before it costs you money

Start with 100 free checks to start. No credit card required.

Start free now — 100 free checks

Live in three steps

  1. 1

    Get your API key

    Sign up free, copy your key from the dashboard. No credit card, no sales call.

  2. 2

    Send a request

    POST kind: 'phone' with the raw number. Add an optional country hint for local formats.

  3. 3

    Get results instantly

    E.164 format, country, line type, validity and a 0-100 score come back in one JSON body.

request / response
// Mix phones with emails and IPs in one bulk call
await fetch("https://fishymails.com/api/public/v1/verify/bulk", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.FISHYMAILS_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    items: [
      { kind: "phone", value: "0612345678", country: "NL" },
      { kind: "phone", value: "+1 900 555 0199" },
      { kind: "email", value: "jane@acme.io" },
    ],
  }),
});

{
  "count": 3,
  "results": [
    { "value": "0612345678",     "status": "valid", "score": 95 },
    { "value": "+1 900 555 0199","status": "risky", "score": 40 },
    { "value": "jane@acme.io",   "status": "valid", "score": 95 }
  ]
}

Try the API in under 5 minutes

Create your free account, copy your key and send your first request.

Start free now — 100 free checks

Built for production, priced for prototypes

Every country, every format

Full international numbering-plan coverage with optional country hints for local-format input.

Line type detection

Mobile, fixed line, VoIP, toll-free, premium rate and shared cost — returned explicitly on every check.

Under 100ms

Validation runs in-process with no third-party hop, fast enough to sit inline on a signup form.

E.164 normalisation

Every valid number comes back in canonical E.164 plus a human-readable international format.

Mixed bulk batches

Send phones, emails and IPs together, up to 100 items per call, processed in parallel.

Predictable pricing

One credit per number. 100 free to start, then $29 for 1,000. Cancel any time.

Built for production, free to try

Every feature is available on the free plan. Upgrade only when you grow.

Start free now — 100 free checks

Where teams put this to work

The same endpoint, four very different jobs — and the outcome each one moves.

SMS & OTP delivery

Validate before you spend a message credit, so one-time codes only go to numbers that can actually receive them.

  • Fewer undelivered OTPs
  • Lower SMS spend
  • Higher activation rate
  • Cleaner delivery reports

Signup fraud prevention

Flag VoIP and premium-rate numbers at registration, where throwaway numbers are used to farm free trials.

  • Block disposable VoIP
  • Stop trial abuse
  • Fewer chargebacks
  • Trustworthy user counts

Sales & call centre data

Normalise every number to E.164 and drop the unreachable ones before they enter the dialler queue.

  • More connects per hour
  • No wasted dials
  • Consistent CRM formatting
  • Accurate country routing

Checkout & delivery contact

Confirm the courier can actually reach the customer before the parcel leaves the warehouse.

  • Fewer failed deliveries
  • Fewer support tickets
  • Better contact rate
  • Lower return costs

See what clean data does for your funnel

Create a free account and run your first checks in the next two minutes.

Start free now — 100 free checks

Industries that rely on it

Marketplaces

Verified buyers and sellers at onboarding.

Fintech

Reachability checks alongside KYC.

Logistics

Contactable numbers before dispatch.

SaaS platforms

OTP that lands on the first attempt.

Technical specifications

Median response
<100ms
Checks performed
Format, country, E.164, line type, risk score
Line types
Mobile, fixed, VoIP, toll-free, premium
Bulk batch size
Up to 100 mixed items per call
Auth
Bearer API key
Coverage
Global numbering plans

Pricing

Simple credits. No surprises.

Pick a plan. Monthly or annual (2 months free). 1 credit = 1 verification. 100 free checks to start, no credit card required.

Annual subscription

Growth

10,000 credits refilled every month · cancel anytime · billed yearly

$99/mo
$82.50/mo
$990 billed yearly · save $198 (2 months free)
Free10,000 credits / moEnterprise
Start Growth planPrices in USD · applicable taxes calculated at checkoutRefundable within 7 days of payment · after 7 days the purchase is final. Refund terms

Top-Up · 250 credits

One-time purchase · no subscription · credits never expire

Questions developers actually ask

Cut your SMS waste starting with the next signup.

Set up in 5 minutes. Your first 100 checks are free.