Numbers

The right sender for every message.

Long codes, short codes, toll-free numbers, and alphanumeric sender IDs — provisioned, registered, and routed through one endpoint. The sender you send from decides throughput, cost, and which compliance regime applies.

send-otp.ts
200 · 0.4s
import { BirdClient } from "@messagebird/sdk";

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

const code = generateOtp();

const { data, error } = await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: `Your Bird verification code is ${code}. Reply STOP to opt out.`,
}).safe();

if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."

Today at 2:14 PM

Hey Ada — your Bird sign-in code is 482917. It'll expire in 10 minutes. Don't share it with anyone.
482917
Delivered

Four sender types, one API.

Numbers are the foundation of the Bird SMS API. Search availability, buy a number, and route inbound to a webhook with the same client you already send with. Which type you pick depends on volume, geography, and how much registration you can take on.

Which sender should I use?

Throughput, reach, and registration effort differ by sender type. Most US application traffic starts on a 10DLC long code; high-volume one-to-many programs move to a short code.

Sender typeBest forRegistration
Long code (10DLC)Two-way conversations, OTP, alerts at moderate volumeA2P 10DLC brand + campaign
Short codeHigh-volume one-to-many marketing and alertsCarrier-vetted, lead time in weeks
Toll-freeUS/Canada traffic without 10DLC, higher throughput than a long codeToll-free verification
Alphanumeric sender IDOne-way branded alerts where the country allows itPre-registration in many countries

Search, buy, and route in a few calls.

Find a number by country and capability, buy it, and point its inbound traffic at a webhook — all from the same SDK you send with. The number is live as soon as any required registration clears.

provision.ts
201 · purchased
const { data: available } = await bird.numbers.search({
  country: "US",
  type:    "long-code",
  capabilities: ["sms"],
}).safe();

const { data: number } = await bird.numbers.buy({
  number:  available[0].number,
  webhook: "https://example.com/webhooks/bird",
}).safe();

console.log(number.id); // → "num_8KQ2..."

Registration, handled where it's required.

Most US application traffic needs A2P 10DLC brand and campaign registration; toll-free needs verification; many countries require sender-ID pre-registration. Bird runs each of these from the dashboard, and the compliance surface tracks status from the API.

SMS numbers FAQ

Which number type should I start with?+
For US application traffic, a 10DLC long code covers most two-way and OTP use cases. High-volume one-to-many programs move to a short code; toll-free is an option for US/Canada without 10DLC.
How long does it take to get a number live?+
A long code or toll-free number is available immediately and starts sending once its registration or verification clears. Short codes are carrier-vetted and typically take weeks.
Can one number both send and receive?+
Yes. Long codes, short codes, and toll-free numbers are two-way: point a number's inbound traffic at a webhook and replies arrive as signed events. Alphanumeric sender IDs are one-way only.
Do I need to register before I can send?+
It depends on the sender type and country. US application traffic needs A2P 10DLC, toll-free needs verification, and many countries require sender-ID pre-registration — all handled from the dashboard.

Provision the right number, route it in minutes.

Numbers are one capability of the Bird SMS API: sending, two-way inbound, compliance, routing, and analytics ship with it.

Start with one channel.
Add the others when you're ready.

A test API key is yours immediately. Production unlocks when you add a payment method and verify a sender.

Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours:

Cursor