Lookup

Bird Lookup is the phone-number intelligence API for developers. One call returns line type, carrier, country, ported-from carrier, and a fraud signal score — all from the same data the routing layer uses to deliver your SMS.

Concept

A phone number isn't a primitive. It's a routing assertion: which carrier owns it today, what line type it sits on, whether it's been ported, whether it shows up in known fraud rings. bird.lookup.get(phone) resolves all of that in one call before you spend money on a send.

Quickstart

import { BirdClient } from "@bird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.lookup.get({ phone: "+14155550172" });
if (error) throw error;

console.log(data.line_type); // "mobile"
console.log(data.carrier?.name); // "T-Mobile USA"
console.log(data.fraud_score); // 12  (0 = safest, 100 = riskiest)

The shorthand form takes a bare string:

await bird.lookup.get("+14155550172");

Response shape

{
  "id": "lkp_01HZQK7E9K3M4P5R6S7T8V9W0X",
  "object": "lookup",
  "phone": "+14155550172",
  "country": "US",
  "line_type": "mobile",
  "carrier": { "name": "T-Mobile USA", "mcc": "310", "mnc": "260" },
  "ported_from": { "carrier": "AT&T Mobility", "ported_at": "2022-04-18" },
  "fraud_score": 12,
  "created_at": "2026-05-20T15:32:11Z"
}

line_type is one of: mobile, landline, voip, toll_free, unknown. ported_from is null for numbers that never ported. fraud_score is a 0–100 risk score — lower is safer; we treat anything over 70 as worth a second factor.

Common pattern — validate before SMS send

Lookup pays for itself the first time it blocks a route_unavailable SMS retry loop. Run it once per recipient at signup, cache the result for 30 days:

const { data: lookup } = await bird.lookup.get(phone);
if (!lookup || lookup.line_type === "landline") {
  return { ok: false, reason: "landline_cannot_receive_sms" };
}
if (lookup.fraud_score && lookup.fraud_score > 80) {
  return { ok: false, reason: "high_risk_recipient" };
}

await bird.sms.send({ to: phone, text: `Your code is ${code}.` });

Pricing

From $0.005 per lookup, all-in. Carrier data, ported-from history, and fraud signals are in the base price — there's no upcharge for the fraud field. See pricing for the full grid.

Webhooks

Lookup is synchronous — the response returns inside the same HTTP call — but for bulk lookup jobs (over 1,000 numbers in one batch) we emit a lookup.completed event when the job finishes:

{
  "type": "lookup.completed",
  "data": { "id": "lkp_…", "phone": "+1…", "line_type": "mobile" },
  "created_at": "2026-05-20T15:32:11Z"
}

What's not here yet

Bulk batch lookup is in private beta — talk to us if you have a list of more than 100K numbers. Email lookup (MX validation + role-account detection) lands in Q3 alongside Email Lookup as its own resource.

Inizia con un canale.
Aggiungi gli altri quando sei pronto.

Una chiave API di test è subito tua. La produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

Usi Claude Code, Cursor o Codex? Puntali al nostro server MCP — 141 strumenti, uno per endpoint API, con chiavi agent a scope limitato.