L<highlight>API SMS</highlight> per gli sviluppatori che devono davvero rilasciare.
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 minuti da npm install al primo invio
Invia un SMS dal linguaggio che già utilizzi.
SDK per ogni runtime principale. Il primo invio va a un destinatario di test autorizzato (+15005550006) così puoi integrare un check CI prima di acquistare un numero.
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
Copertura in oltre 150 Paesi
Un'unica API, un unico rapporto di fatturazione — nessun contratto per singola regione da rincorrere.
- 02
240 connessioni dirette con gli operatori
Nessun aggregatore intermediario che erode i margini o perde le ricevute tra noi e l'operatore mobile.
- 03
Routing di livello operatore
Riselezione delle rotte in tempo reale quando un percorso verso l'operatore si degrada; il failover avviene prima che te ne accorga.
- 04
SMS bidirezionali in ingresso
I messaggi in ingresso arrivano come webhook firmati HMAC sul numero che hai attivato.
- 05
Numeri di ogni tipo
Numeri lunghi, numeri brevi, numeri verdi e Sender ID alfanumerici — tutti attivabili tramite un unico endpoint.
- 06
A2P 10DLC nel dashboard
Registrazione di brand e campagne gestita nella console; lo stato è interrogabile via API.
- 07
Lookup MNP prima dell'invio
Verifichiamo l'operatore attuale del destinatario a ogni invio, così la rotta è sempre corretta.
- 08
Conformità STOP / HELP
Le keyword di opt-out vengono rispettate automaticamente per ogni destinatario; la lista di soppressione è interrogabile.
- 09
Ricevute di consegna come webhook
Ogni transizione di stato genera un evento firmato — da sms.queued fino a sms.delivered o sms.failed.
- 10
Segmenti e sicurezza Unicode
L'SDK conta i segmenti prima dell'invio e avvisa in caso di cambi di codifica che dividerebbero il messaggio.
Why we build SMS
SMS è il canale caotico. Abbiamo costruito l'API che lo rende noioso.
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..."Ogni cambio di stato è un webhook.
Payload firmati HMAC, protetti da replay, idempotenti. Lo stesso formato su ogni canale Bird — impara uno, li conosci tutti.
{
"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
}
}Pianificazione dei retry: 5s, 30s, 5m, 30m, 2h, 6h, 12h. Dead-letter dopo l'ultimo tentativo; ogni evento in dead-letter è riproducibile dal dashboard o via API.
sms.queuedAccettato dall'API e accodato per il passaggio all'operatore.sms.sentInoltrato all'SMSC dell'operatore di destinazione.sms.deliveredRicevuta di consegna ricevuta dall'operatore (DLR).sms.failedErrore permanente — rifiuto dell'operatore, numero non valido, corrispondenza nella lista di soppressione.sms.receivedMessaggio in ingresso su uno dei tuoi numeri attivi.sms.opted_outIl destinatario ha inviato la keyword STOP; i futuri invii a questo numero verranno soppressi.
Se hai integrato SMS, hai integrato WhatsApp.
Stesso modello di autenticazione, stesso contratto di idempotenza, stesso formato di errore, stessa struttura webhook. La differenza sta in cosa fa ciascuno — non in come lo chiami.
SMS.
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your code is ${code}.`,
});Un verbo. Testo semplice. To/from numerico. La struttura che ogni sviluppatore ha già nelle dita.
WhatsApp.
await bird.whatsapp.send({
from: "+15551234567",
to: "+15005550006",
template: { name: "otp", variables: { code } },
});Stesso verbo. Payload diverso — con template, con opt-in, nel canale che due miliardi di persone aprono ogni giorno.
Dipende dal Paese. Da meno di un centesimo a pochi centesimi per segmento.
Prezzo a consumo. Le tariffe SMS dipendono dal Paese di destinazione e dalla rotta — la griglia completa è nella pagina dei prezzi. Gli sconti per volume si applicano automaticamente a livello di account. Nessun costo per utente, nessuna funzionalità bloccata dietro impegni annuali.