SMS is being upgraded

Die SMS API für Entwickler, die wirklich ausliefern müssen.

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 Minuten von npm install bis zum ersten Versand

Senden Sie eine SMS in der Sprache, die Sie bereits nutzen.

SDKs für jede gängige Runtime. Der erste Versand geht an einen freigegebenen Testempfänger (+15005550006), damit Sie einen CI-Check ausliefern können, bevor Sie eine Nummer provisionieren.

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

    Über 150 Länder abgedeckt

    Eine einheitliche API, eine Abrechnungsbeziehung — keine länderspezifischen Verträge, denen Sie hinterherlaufen müssen.

  2. 02

    240 Direktverbindungen zu Carriern

    Kein zwischengeschalteter Aggregator, der Marge abschöpft oder Zustellbestätigungen zwischen uns und dem Netzbetreiber verschluckt.

  3. 03

    Routing in Carrier-Qualität

    Echtzeit-Routenumschaltung bei Carrier-Pfad-Verschlechterung; Failover passiert, bevor Sie es bemerken.

  4. 04

    Bidirektionale SMS (Inbound)

    Eingehende Nachrichten kommen als HMAC-signierte Webhooks auf der von Ihnen provisionierten Nummer an.

  5. 05

    Nummern in jeder Form

    Long Codes, Short Codes, gebührenfreie Nummern und alphanumerische Absenderkennungen — provisioniert über einen einzigen Endpunkt.

  6. 06

    A2P 10DLC im Dashboard

    Marken- und Kampagnenregistrierung direkt in der Konsole; der Status ist über die API abfragbar.

  7. 07

    MNP-Abfrage vor dem Versand

    Wir ermitteln bei jedem Versand den aktuellen Carrier des Empfängers, damit die Route immer stimmt.

  8. 08

    STOP-/HELP-Compliance

    Opt-out-Keywords werden automatisch pro Empfänger berücksichtigt; die Sperrliste ist abfragbar.

  9. 09

    Zustellbestätigungen als Webhooks

    Jeder Statuswechsel löst ein signiertes Event aus — von sms.queued über sms.delivered bis sms.failed.

  10. 10

    Segment- und Unicode-Sicherheit

    Das SDK zählt Segmente vor dem Versand und warnt bei Encoding-Wechseln, die eine Nachricht aufteilen würden.

Why we build SMS

SMS ist der chaotische Kanal. Wir haben die API gebaut, die ihn langweilig macht.

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..."

Jede Statusänderung ist ein Webhook.

HMAC-signierte Payloads, Replay-geschützt, idempotent. Dasselbe Envelope-Format auf jedem Bird-Kanal — lernen Sie eines, kennen Sie alle.

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
  }
}

Retry-Zeitplan: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-Letter nach dem letzten Versuch; jedes Dead-Letter-Event ist über das Dashboard oder die API wiederholbar.

  • sms.queuedVon der API akzeptiert und für die Carrier-Übergabe in die Warteschlange gestellt.
  • sms.sentAn das SMSC des Ziel-Carriers übermittelt.
  • sms.deliveredZustellbestätigung vom Carrier erhalten (DLR).
  • sms.failedPermanenter Fehler — Carrier-Ablehnung, ungültige Nummer, Sperrlisten-Treffer.
  • sms.receivedEingehende Nachricht auf einer Ihrer provisionierten Nummern.
  • sms.opted_outEmpfänger hat ein STOP-Keyword gesendet; zukünftige Nachrichten an diese Nummer werden unterdrückt.

Wenn Sie SMS integriert haben, haben Sie auch WhatsApp integriert.

Gleiches Auth-Modell, gleicher Idempotenz-Vertrag, gleiches Fehler-Envelope, gleiche Webhook-Struktur. Der Unterschied liegt in dem, was jeder Kanal tut — nicht darin, wie Sie ihn aufrufen.

SMS.

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

Ein Verb. Klartext. Numerische Absender-/Empfängeradresse. Die Struktur, für die jeder Entwickler bereits Muskelgedächtnis hat.

WhatsApp.

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

Gleiches Verb. Anderer Payload — templatebasiert, Opt-in-basiert, im Kanal, den zwei Milliarden Menschen täglich öffnen.

Länderabhängig. Von unter einem Cent bis zu wenigen Cents pro Segment.

Nutzungsbasierte Abrechnung. SMS-Preise hängen vom Zielland und der Route ab — die vollständige Übersicht finden Sie auf der Preisseite. Mengenrabatte werden automatisch auf Kontoebene angewendet. Keine Lizenzgebühr pro Nutzer, keine Funktionen hinter Jahresverträgen gesperrt.

Starten Sie mit einem Kanal.
Fügen Sie die anderen hinzu, wenn Sie bereit sind.

Ein Test-API-Key steht Ihnen sofort zur Verfügung. Der Produktivzugang wird freigeschaltet, sobald Sie eine Zahlungsmethode hinzufügen und einen Absender verifizieren.

Jetzt startenDokumentation lesenoder

Using Claude Code, Cursor, or Codex? Point it at our MCP server — tools for every channel we expose, with scoped agent keys.

Cursor