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

Skonfigurowane w:
Cursor

190+ 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-notification.ts
202 · 0.4s
import { BirdClient } from "@messagebird/sdk";

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

const { data, error } = await bird.sms.send({
  from:     "Bird",
  to:       "+31612345678",
  text:     "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
  category: "transactional",
}).safe();

if (error) throw error;
console.log(data.id);
// → "sms_01m11jw130e7svjzv70kgqr38w"
Hi Ada, reminder of your appointment tomorrow at 14:30 with Dr. Kowalski.
Your order #4821 has shipped. Track it: bird.ly/t/4821x
Your subscription renews on 3 Sep for €12/mo. Manage it here: bird.ly/account

5 minut od npm install do pierwszej wysyłki

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

SDK w każdym popularnym środowisku uruchomieniowym. Wyślij do zatwierdzonego odbiorcy testowego +15005550006, a Bird zasymuluje cały cykl życia aż do dostarczenia — test CI nigdy nie dotknie operatora. To numer amerykański, więc do wysyłki potrzebujesz własnego numeru US jako nadawcy.

1
2
3
4
5
6
7
const msg = await bird.sms.send({
  from: "+15557654321",
  to: "+14155550100",
  text: "Your verification code is 123456.",
  category: "authentication",
});
console.log(msg.id, msg.status);

Dziesięć rzeczy, które rejestrujemy, konfigurujemy i trasujemy, żebyś nie musiał.

Trasowanie, zgodność regulacyjna i elementy obsługi ruchu przychodzącego — nazwane i możliwe do audytu.

  1. 01

    190+ country coverage

    Jedno zunifikowane API, jedna relacja rozliczeniowa. Żadnych umów per region do śledzenia.

  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 — przydzielane 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.accepted przez sms.delivered do 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ść.

SMS to jeden kanał w większym zestawie narzędzi. Weryfikuj użytkowników jednorazowymi kodami dostępu przez Verifications, sprawdzaj typ linii i operatora numeru przed wysyłką dzięki Lookup lub docieraj do tego samego urządzenia za pomocą rich cards przez RCS.

Porównujesz Bird z dotychczasowym dostawcą? Bird vs Twilio dla SMS zestawia oba wywołania wysyłki, obydwie powierzchnie 10DLC oraz to, co każde z rozwiązań oferuje agentowi kodującemu.

Dlaczego tworzymy SMS

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

Każdy kraj ma inne przepisy, każdy operator ma inne trasy, każdy region ma inne konwencje identyfikatora nadawcy. Prowadzimy SMS od dziesięciu lat, więc cała ta wiedza kryje się za jednym endpointem, jednym modelem uwierzytelniania i jednym kontraktem webhook. Cokolwiek zmieni się po stronie operatora, wywołanie bird.sms.send, które napisałeś, pozostaje bez zmian.

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

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

const { data, error } = await bird.sms.send({
  from:     "Bird",
  to:       "+31612345678",
  text:     "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
  category: "transactional",
}).safe();

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

Każda zmiana stanu to webhook.

Ładunki podpisane HMAC, zabezpieczone przed powtórzeniem, idempotentne. Ta sama struktura na każdym kanale Bird: naucz się jednego, znasz je wszystkie.

POST /webhooks/bird
signed
{
  "type": "sms.delivered",
  "timestamp": "2026-05-19T15:42:01.221Z",
  "data": {
    "sms_id":       "sms_4kT01Lq2m",
    "workspace_id": "ws_8KQ2",
    "to":           "+15005550006",
    "from":         "+12025550188",
    "tags":         [{ "name": "campaign", "value": "otp" }],
    "metadata":     { "user_id": "usr_12345" },
    "carrier":      "Verizon",
    "mcc_mnc":      "311480",
    "cost": {
      "amount":             "0.0079",
      "currency_code":      "USD",
      "transaction_amount": "0.0079",
      "passthrough_amount": null
    }
  }
}

Harmonogram ponownych prób: 5s, 5m, 30m, 2h, 5h, a następnie 10h dwukrotnie. Po ostatniej próbie dostarczenie zostaje trwale oznaczone jako nieudane, a funkcja replay pozwala je odzyskać z poziomu dashboardu lub API.

  • sms.acceptedPrzyjęta przez API i dodana do kolejki przekazania operatorowi.
  • sms.sentPrzesłana do SMSC operatora docelowego.
  • sms.deliveredOtrzymano potwierdzenie dostarczenia od operatora (DLR).
  • sms.rejectedOdrzucona przed przekazaniem do operatora: nieprawidłowy odbiorca, suppression lub guard polityki treści.
  • sms.undeliveredOperator zgłosił tymczasowy błąd dostarczenia.
  • sms.failedBłąd terminalny: wiadomość nie zostanie dostarczona.

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

Ten sam model uwierzytelniania, ten sam kontrakt idempotencji, ta sama koperta błędu, ta sama struktura webhooka. Różnica polega na tym, co każdy z nich robi, a nie na tym, jak go wywołujesz.

SMS

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

otp.ts
await bird.sms.send({
  from:     "Bird",
  to:       "+31612345678",
  text:     `Your code is ${code}.`,
  category: "authentication",
});

WhatsApp

Ten sam endpoint. Inny payload: szablonowy, z zgodą odbiorcy, w kanale, który dwa miliardy ludzi otwiera codziennie.

otp.ts
await bird.whatsapp.send({
  to: "+15005550006",
  template: {
    slug: "bird_otp",
    language: "en",
    components: [
      { type: "body", parameters: [{ type: "text", text: code }] },
    ],
  },
});

Cennik

Od ułamka centa do kilku centów za segment

Wycena według użycia i kraju docelowego. Pełna siatka cen dla poszczególnych krajów znajduje się na stronie cennika, a rabaty ilościowe są automatycznie stosowane na poziomie konta. Bez opłaty za platformę, bez opłaty za stanowisko, bez funkcji poziomów zablokowanych za rocznymi zobowiązaniami.

Codziennie zaufany przez zespoły tworzące oprogramowanie światowej klasy

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.

Używasz Claude Code, Cursor lub Codex? Skopiuj prompt konfiguracyjny, a Twój agent zainstaluje za Ciebie Bird CLI i umiejętności. Wybierz swój:

Cursor