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.
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.
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.
- 01
Jangkauan 150+ negara
Satu API terpadu, satu hubungan penagihan — tidak perlu mengejar kontrak per wilayah.
- 02
240 koneksi langsung ke operator
Tidak ada agregator perantara yang mengambil margin atau menghilangkan tanda terima antara kami dan MNO.
- 03
Routing kelas operator
Pemilihan ulang rute secara real-time saat jalur operator menurun; failover terjadi sebelum Anda menyadarinya.
- 04
SMS dua arah inbound
Pesan masuk tiba sebagai webhook bertanda tangan HMAC pada nomor yang Anda sediakan.
- 05
Nomor dalam berbagai bentuk
Long code, short code, toll-free, dan alphanumeric sender ID — disediakan melalui satu endpoint.
- 06
A2P 10DLC dalam dashboard
Registrasi brand dan kampanye ditangani di konsol; status dapat di-query dari API.
- 07
MNP lookup sebelum pengiriman
Kami menyelesaikan operator penerima saat ini di setiap pengiriman sehingga rute selalu tepat.
- 08
Kepatuhan STOP / HELP
Kata kunci opt-out dipatuhi secara otomatis per penerima; daftar supresi dapat di-query.
- 09
Delivery receipt sebagai webhook
Setiap transisi status memicu event bertanda tangan — sms.queued hingga sms.delivered atau sms.failed.
- 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.
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.
{
"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.
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.
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.