Deliver order alerts, reminders, and notifications over SMS.
Reach customers on their phones with shipping updates, booking reminders, and account alerts from a registered phone number or brand sender. Bird returns the character encoding and segment count on acceptance, prevents duplicate texts when your app retries a timed-out request, and streams carrier delivery updates to your webhook.
Ihre Bestellung #4821 ist abholbereit.
Nachricht
Details
Die Zustellung ist eine Empfangsbestätigung des Netzbetreibers. Sie belegt nicht, dass jemand die Nachricht gelesen hat.
Ihre Bestellung #4821 ist abholbereit.
Nachricht
Details
Die Zustellung ist eine Empfangsbestätigung des Netzbetreibers. Sie belegt nicht, dass jemand die Nachricht gelesen hat.
Ihre Bestellung #4821 ist abholbereit.
Nachricht
Details
Die Zustellung ist eine Empfangsbestätigung des Netzbetreibers. Sie belegt nicht, dass jemand die Nachricht gelesen hat.
Send your first text in minutes.
Test safely before you message real customers.
With the Bird SMS API, a single call sends an order confirmation, delivery update, or appointment alert from your backend. Before messaging live customers, route test sends to the US sandbox number +15005550006 from an active US sender so you can verify your integration and webhook handling without delivering a text to a real handset.
// Install the SDK
// npm install @messagebird/sdk
const msg = await bird.sms.send({
from: "+15557654321",
to: "+14155550100",
text: "Your verification code is 123456.",
category: "authentication",
});
console.log(msg.id, msg.status);Need to verify a user at sign-in or checkout? Instead of generating and storing one-time passcodes yourself, use Bird Verify to issue, expire, and check verification codes automatically.
Keep SMS delivery predictable in production.
Avoid surprise segment charges, duplicate texts on network retries, and silent carrier failures.
- 01
See segment counts right in the response.
Each accepted send returns the resolved character encoding and segment count, and you can run draft copy through the segment calculator before shipping a new template.
- 02
Handle GSM-7 and Unicode without guesswork.
Standard GSM-7 messages fit 160 characters in a single segment, and texts with emoji or non-Latin scripts switch automatically to 70-unit Unicode. Longer messages split cleanly and reassemble as one text on the customer's phone.
- 03
Send up to 100 personalized texts in one call.
Dispatch a queue of appointment reminders or shift alerts in a single batch request. Bird validates the batch upfront so malformed inputs fail fast, then tracks carrier delivery independently for each recipient.
- 04
Retry timed-out requests without double-texting.
Attach an idempotency key when your worker sends a message. If a network timeout triggers a retry with the same key and payload, Bird replays the original response instead of queueing a duplicate text.
- 05
Know when the carrier delivers or rejects a text.
Receive signed webhooks as a message moves from accepted to sent, delivered, or failed, so your app can update order status or fall back to another channel when a number is unreachable.
Migrate from Twilio in a few lines of code.
Map your existing sender numbers, recipient fields, and webhook handlers to Bird without rearchitecting your notification service. Sync your opt-out list and verify delivery with the sandbox number before moving live traffic.
import twilio from "twilio";
const client = twilio(accountSid, authToken);
await client.messages.create({
from: "+14155550172",
to: "+15005550006",
body: "Your code is 123456.",
});import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
await bird.sms.send({
from: "+14155550172",
to: "+15005550006",
text: "Your code is 123456.",
category: "authentication",
});Catch multi-segment surprises before they inflate your bill.
A single smart quote, emoji, or accented character in a customer's name can switch a message from 160-character GSM-7 encoding to 70-unit Unicode, splitting one text into multiple billable segments. Bird returns the character count, encoding, and segment total in the send response so your team can spot costly templates early.
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+31612345678",
text: "Your code is 123456.",
category: "authentication",
}).safe();
if (error) throw error;
console.log(data.segments);
// → { characters: 20, count: 1, encoding: "GSM_7BIT" }
Dispatch up to 100 personalized reminders in a single request.
When a scheduled job sends tomorrow's appointment reminders or delivery window updates, batch up to 100 messages in one API call instead of looping through individual requests. Each recipient gets their own personalized text and independent delivery status, and upfront validation catches malformed inputs before the batch is queued.
const { data: batch, error } = await bird.sms
.sendBatch(
users.map((u) => ({
from: "Bird",
to: u.phone,
text: `Hi ${u.name}, your appointment is tomorrow at ${u.time}.`,
})),
)
.safe();
if (error) throw error;
console.log(`queued ${batch.data.length} messages`);Track carrier delivery and handle failed texts in real time.
Because carrier handoff happens asynchronously after your send call succeeds, Bird posts signed webhook events as the message progresses. Update your database when a text reaches the handset, or trigger an email fallback and flag invalid numbers when delivery fails.
import { bird } from "@/lib/bird";
export async function POST(req: Request) {
const event = bird.webhooks.unwrap(
await req.text(),
Object.fromEntries(req.headers),
);
switch (event.type) {
case "sms.delivered":
await markDelivered(event.data.sms_id);
break;
case "sms.failed":
await flag(event.data.to, event.data.error?.description);
break;
}
return new Response(null, { status: 204 });
}Each failed event includes the specific failure reason so you can distinguish temporary handset issues from invalid numbers. Opt-out replies like STOP automatically suppress future marketing sends, while ordinary delivery failures leave the recipient's opt-in status intact.
sms.acceptedBird accepted your request and queued the message for carrier routing.sms.sentBird handed the message off to the destination mobile carrier.sms.deliveredThe destination carrier confirmed delivery to the recipient's handset.sms.failedThe text could not be delivered, including the error reason so your app can alert support or try another channel.
Go deeper in the developer guides.
Verify signed webhooks, protect your send workers from duplicate texts with idempotency keys, and use the error reference to handle invalid numbers or disabled destinations automatically.
Fragen, bevor Sie loslegen
Wähle ich den Absender?
Wie vermeiden Wiederholungsversuche eine doppelte Nachricht?
Bedeutet „akzeptiert
Ist ein Batch dasselbe wie ein Broadcast?
Die übrige SMS-Plattform
Provision sender numbers, receive customer replies, and monitor carrier delivery from the same workspace.
Skalieren, ohne
die Kontrolle zu verlieren.
Organisieren Sie Teams in Workspaces, steuern Sie den API-Zugriff und verfolgen Sie Änderungen über Audit-Logs.
Organisation
Harbor
Zugriff bleibt in seinem Workspace.
Produktion/API-Schlüssel
Zustellagent
AktivAlex Lee
Admin
Heute · UTC
Audit-Protokoll
Organisation
Harbor
Zugriff bleibt in seinem Workspace.
Produktion/API-Schlüssel
Zustellagent
AktivAlex Lee
Admin
Heute · UTC
Audit-Protokoll
Organisation
Harbor
Zugriff bleibt in seinem Workspace.
Produktion/API-Schlüssel
Zustellagent
AktivAlex Lee
Admin
Heute · UTC
Audit-Protokoll