SMS is being upgraded

SMS API dla programistów, którzy naprawdę muszą dostarczać.

150+ countries, 240 direct-to-carrier connections, one auth model. About 40% of the world's commercial SMS volume transits the Bird network — we've been at this a decade. 95% of messages delivered in under 2.5 seconds.

send-otp.ts
200 · 0.4s
import { BirdClient } from "@bird/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..."

5 minut od npm install do pierwszego wysłania

Wyślij SMS w języku, którego już używasz.

SDK w każdym popularnym środowisku uruchomieniowym. Pierwsza wiadomość trafia do autoryzowanego odbiorcy testowego (+15005550006), więc możesz dodać test CI, zanim zamówisz numer.

1
2
3
4
5
6
7
8
9
import { BirdClient } from "@bird/sdk";

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

const { data, error } = await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: "Hello from Node.",
}).safe();

Ten things we file, configure, and route so you don't.

Routing, compliance, and inbound primitives, named and audit-able.

  1. 01

    Zasięg w ponad 150 krajach

    Jedno zunifikowane API, jedna relacja rozliczeniowa — żadnych umów per region do ścigania.

  2. 02

    240 bezpośrednich połączeń z operatorami

    Żaden pośrednik-agregator nie zjada marży ani nie gubi potwierdzeń między nami a operatorem.

  3. 03

    Routing klasy operatorskiej

    Przełączanie trasy w czasie rzeczywistym, gdy ścieżka operatora się pogarsza; failover następuje, zanim zdążysz zauważyć.

  4. 04

    Dwukierunkowe SMS przychodzące

    Wiadomości przychodzące docierają jako webhooki podpisane HMAC na numerze, który zamówiłeś.

  5. 05

    Numery każdego rodzaju

    Numery długie, krótkie, bezpłatne i alfanumeryczne identyfikatory nadawcy — zamawiane przez jeden endpoint.

  6. 06

    A2P 10DLC w panelu

    Rejestracja marki i kampanii obsługiwana w konsoli; status można odpytać przez API.

  7. 07

    Sprawdzenie MNP przed wysyłką

    Przy każdym wysłaniu ustalamy aktualnego operatora odbiorcy, aby trasa była zawsze prawidłowa.

  8. 08

    Zgodność ze STOP / HELP

    Słowa kluczowe rezygnacji honorowane automatycznie per odbiorca; lista wykluczeń dostępna do odpytania.

  9. 09

    Potwierdzenia dostarczenia jako webhooki

    Każda zmiana stanu generuje podpisane zdarzenie — od sms.queued przez sms.delivered lub sms.failed.

  10. 10

    Bezpieczeństwo segmentów i Unicode

    SDK liczy segmenty przed wysyłką i ostrzega o zmianach kodowania, które mogłyby podzielić wiadomość.

Dlaczego tworzymy SMS

SMS to trudny kanał. Zbudowaliśmy API, które sprawia, że staje się nudny.

Every country has different rules, every carrier has different routes, every region has different sender-ID conventions. We've been running SMS for ten years, so that knowledge lives behind one endpoint, one auth model, one webhook contract. Whatever changes upstream, the call you wrote against bird.sms.send doesn't.

send-otp.ts
200 · 0.4s
import { BirdClient } from "@bird/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..."

Każda zmiana stanu to webhook.

Payloady podpisane HMAC, chronione przed powtórzeniem, idempotentne. Ta sama koperta na każdym kanale Bird — naucz się jednego, znasz je wszystkie.

POST /webhooks/bird
signed
{
  "type": "sms.delivered",
  "id":   "evt_7jR42x...",
  "created_at": "2026-05-19T15:42:01.221Z",
  "data": {
    "sms_id":     "sms_4kT01Lq2m",
    "from":       "Bird",
    "to":         "+15005550006",
    "mcc_mnc":    "310-260",
    "country":    "US",
    "segments":   1,
    "latency_ms": 1284
  }
}

Harmonogram ponownych prób: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Po ostatniej próbie trafia do dead-letter; każde zdarzenie dead-letter można ponownie odtworzyć z panelu lub API.

  • sms.queuedPrzyjęta przez API i dodana do kolejki przekazania operatorowi.
  • sms.sentPrzesłana do SMSC operatora docelowego.
  • sms.deliveredOtrzymano potwierdzenie dostarczenia od operatora (DLR).
  • sms.failedTrwała awaria — odrzucenie przez operatora, nieprawidłowy numer, trafienie na listę wykluczeń.
  • sms.receivedWiadomość przychodząca na jeden z Twoich zamówionych numerów.
  • sms.opted_outOdbiorca wysłał słowo kluczowe STOP; przyszłe wysyłki na ten numer będą blokowane.

Jeśli zintegrowałeś SMS, zintegrowałeś WhatsApp.

Ten sam model autoryzacji, ten sam kontrakt idempotentności, ta sama koperta błędów, ten sam kształt webhooka. Różnica polega na tym, co każdy z nich robi — nie na tym, jak go wywołujesz.

SMS.

sms
await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: `Your code is ${code}.`,
});

Jeden czasownik. Zwykły tekst. Numeryczne to/from. Kształt, który każdy programista ma już w pamięci mięśniowej.

WhatsApp.

whatsapp
await bird.whatsapp.send({
  from: "+15551234567",
  to:   "+15005550006",
  template: { name: "otp", variables: { code } },
});

Ten sam czasownik. Inny payload — szablonowy, z wyrażoną zgodą, w kanale, który dwa miliardy ludzi otwiera codziennie.

Zależne od kraju. Od ułamka centa do kilku centów za segment.

Rozliczane według użycia. Stawki SMS zależą od kraju docelowego i trasy — pełna siatka cenowa jest na stronie z cenami. Zniżki ilościowe naliczane automatycznie na poziomie konta. Bez opłat za stanowisko, bez funkcji zablokowanych za rocznym zobowiązaniem.

Zacznij od jednego kanału.
Dodaj kolejne, gdy będziesz gotowy.

Testowy klucz API otrzymasz od razu. Dostęp produkcyjny odblokujesz po dodaniu metody płatności i weryfikacji nadawcy.

RozpocznijPrzeczytaj dokumentacjęlub

Using Claude Code, Cursor, or Codex? Point it at our hosted MCP server: curated Bird tools, a browser sign-in, and no API key. Or install the bird-ai plugin.

Cursor