SMS is being upgraded

SMS API untuk developer yang benar-benar perlu mengirim.

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 menit dari npm install ke pengiriman pertama

Kirim SMS dari bahasa pemrograman yang sudah Anda gunakan.

SDK di setiap runtime utama. Pengiriman pertama dikirim ke penerima uji coba yang telah ditentukan (+15005550006) sehingga Anda bisa menjalankan CI check sebelum menyediakan nomor.

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

    Jangkauan 150+ negara

    Satu API terpadu, satu hubungan penagihan — tidak perlu mengejar kontrak per wilayah.

  2. 02

    240 koneksi langsung ke operator

    Tidak ada agregator perantara yang mengambil margin atau menghilangkan tanda terima antara kami dan MNO.

  3. 03

    Routing kelas operator

    Pemilihan ulang rute secara real-time saat jalur operator menurun; failover terjadi sebelum Anda menyadarinya.

  4. 04

    SMS dua arah inbound

    Pesan masuk tiba sebagai webhook bertanda tangan HMAC pada nomor yang Anda sediakan.

  5. 05

    Nomor dalam berbagai bentuk

    Long code, short code, toll-free, dan alphanumeric sender ID — disediakan melalui satu endpoint.

  6. 06

    A2P 10DLC dalam dashboard

    Registrasi brand dan kampanye ditangani di konsol; status dapat di-query dari API.

  7. 07

    MNP lookup sebelum pengiriman

    Kami menyelesaikan operator penerima saat ini di setiap pengiriman sehingga rute selalu tepat.

  8. 08

    Kepatuhan STOP / HELP

    Kata kunci opt-out dipatuhi secara otomatis per penerima; daftar supresi dapat di-query.

  9. 09

    Delivery receipt sebagai webhook

    Setiap transisi status memicu event bertanda tangan — sms.queued hingga sms.delivered atau sms.failed.

  10. 10

    Keamanan segmen dan Unicode

    SDK menghitung segmen sebelum pengiriman dan memperingatkan perubahan encoding yang akan memecah pesan.

Why we build SMS

SMS adalah kanal yang rumit. Kami membangun API yang membuatnya membosankan.

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

Setiap perubahan status adalah webhook.

Payload bertanda tangan HMAC, dilindungi dari replay, idempoten. Envelope yang sama di setiap kanal Bird — pelajari satu, Anda sudah mempelajari semuanya.

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

Jadwal retry: 5d, 30d, 5m, 30m, 2j, 6j, 12j. Dead-letter setelah percobaan terakhir; setiap event dead-letter dapat di-replay dari dashboard atau API.

  • sms.queuedDiterima oleh API dan diantrekan untuk penyerahan ke operator.
  • sms.sentDikirim ke SMSC operator tujuan.
  • sms.deliveredDelivery receipt diterima dari operator (DLR).
  • sms.failedKegagalan permanen — penolakan operator, nomor tidak valid, terkena supresi.
  • sms.receivedPesan masuk di salah satu nomor yang Anda sediakan.
  • sms.opted_outPenerima mengirim kata kunci STOP; pengiriman selanjutnya ke nomor ini akan disupresi.

Jika Anda sudah mengintegrasikan SMS, Anda sudah mengintegrasikan WhatsApp.

Model autentikasi sama, kontrak idempotency sama, envelope error sama, bentuk webhook sama. Perbedaannya ada di apa yang masing-masing lakukan — bukan cara Anda memanggilnya.

SMS.

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

Satu verb. Teks biasa. To/from numerik. Bentuk yang sudah menjadi kebiasaan setiap developer.

WhatsApp.

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

Verb yang sama. Payload berbeda — templated, opted-in, di kanal yang dibuka dua miliar orang setiap hari.

Tergantung negara. Dari di bawah satu sen hingga beberapa sen per segmen.

Harga berdasarkan penggunaan. Tarif SMS tergantung negara tujuan dan rute — grid lengkap ada di halaman harga. Diskon volume berlaku otomatis di level akun. Tidak ada biaya per seat, tidak ada fitur tier yang dikunci di balik komitmen tahunan.

Mulai dengan satu channel.
Tambahkan yang lain saat Anda siap.

API key uji coba langsung tersedia untuk Anda. Akses produksi terbuka setelah Anda menambahkan metode pembayaran dan memverifikasi pengirim.

Mulai sekarangBaca dokumentasiatau

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

Cursor