Qualmie
Documentation

Liveliness API

Resolve any phone number to a real-time verdict: live, reachable, line type, carrier and risk. One endpoint, one API key.

Preview.The API — keys, quotas, rate limits and usage — is live. Liveliness signals currently come from a mock provider while the telecom backend is finalized; the response shape won't change when it goes live.

New to phone data? Start with the guides or look up a term in the glossary.

Quickstart

  1. 1.Create a free account (500 lookups a month, no card).
  2. 2.In your dashboard, click Create key and copy it (shown once).
  3. 3.Send your first request:
request
curl https://qualmie.dev/v1/liveliness \
  -H "Authorization: Bearer sk_live_1a2b3c..." \
  -H "Content-Type: application/json" \
  -d '{ "phone_number": "+12125550100" }'

Authentication

Authenticate every request with your secret key in the Authorization header as a bearer token. Keep secret keys server-side — never ship them to a browser or mobile client. Rotate or revoke a key anytime from your dashboard.

header
Authorization: Bearer sk_live_1a2b3c...

Endpoint reference

POSThttps://qualmie.dev/v1/liveliness

Body parameters

  • phone_number string, required — the number to check, in E.164 or a local format we can normalize.

Response fields

FieldTypeDescription
phone_numberstringNormalized E.164, e.g. +12125550100.
validbooleanNumber is well-formed and assigned.
livebooleanActive on a carrier network right now.
reachablebooleanCan currently receive a call or SMS.
line_typeenummobile · landline · voip · toll_free · unknown.
carrierobjectCurrent carrier: name, type, country, mcc, mnc.
portedbooleanNumber has been ported to another carrier.
riskobjectlevel, score (0–100) and fraud flags.
checked_atstringISO-8601 timestamp of the lookup.
latency_msnumberServer-side resolution time.
200 OK
{
  "phone_number": "+12125550100",
  "valid": true,
  "live": true,
  "reachable": true,
  "line_type": "mobile",
  "carrier": {
    "name": "Verizon Wireless",
    "type": "mobile",
    "country": "US",
    "mcc": "310",
    "mnc": "004"
  },
  "ported": false,
  "risk": {
    "level": "low",
    "score": 8,
    "voip": false,
    "disposable": false,
    "recently_ported": false,
    "recently_disconnected": false
  },
  "checked_at": "2026-07-17T17:04:11Z",
  "latency_ms": 187
}

Response headers

Every response carries your current limits so you can throttle and plan ahead without a separate call.

HeaderMeaning
X-RateLimit-LimitRequests/second allowed on your plan.
X-RateLimit-RemainingRequests left in the current second.
X-Quota-LimitLookups included in your plan this month.
X-Quota-RemainingPlan lookups left this month.
X-Credits-RemainingPrepaid lookups left (used after the monthly quota).

Code examples

Plain HTTP — no SDK required.

node.js
const res = await fetch("https://qualmie.dev/v1/liveliness", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.QUALMIE_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ phone_number: "+12125550100" }),
});

const result = await res.json();
if (result.live && result.reachable) {
  // safe to send
}
python
import os, requests

res = requests.post(
    "https://qualmie.dev/v1/liveliness",
    headers={"Authorization": f"Bearer {os.environ['QUALMIE_API_KEY']}"},
    json={"phone_number": "+12125550100"},
)

result = res.json()
if result["live"] and result["reachable"]:
    ...  # safe to send

Errors

Errors return a JSON body with an error message and a conventional status code.

StatusMeaning
400Invalid or missing phone_number.
401Missing, invalid, or revoked API key.
402Monthly quota reached and no prepaid lookups left — upgrade or buy a pack.
429Rate limit exceeded. Back off (see Retry-After) and retry.
5xxTemporary error. Safe to retry with backoff.

Rate limits & quotas

Two limits apply: a per-second rate limit (abuse protection) and a monthly quota (your plan allowance). Past the monthly quota, prepaid lookup packs are consumed automatically; a 402 only comes back when both are exhausted.

PlanRate limitMonthly quota
Free5 / sec500 / month
Pro25 / sec50,000 / month
Scale100 / secCustom

Ready to build? Grab a key and make your first call.

Get your free API key