Numbers

Borrow a sender. Then bring your own.

Set up in:
Cursor

Every WhatsApp message leaves from a business number. Bird operates managed senders you can use on your first day with nothing to provision, and connects a number of your own through Meta's embedded signup when you are ready to send as your own brand.

send-notification.ts
202 · 480ms
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY!,
});

const msg = await bird.whatsapp.send({
  to: "+15551234567",
  template: {
    slug: "bird_delivery_update",
    components: [{ type: "body", parameters: [
      { type: "text", name: "ref",  text: "#4821" },
      { type: "text", name: "date", text: "Wednesday" },
    ] }],
  },
});

console.log(msg.id, msg.status);
// → "wam_01krdgeqcxet5s7t44vh8rt9mg", "accepted"
Reminder: you have an appointment on 3 Sep at 14:30. We look forward to seeing you.9:42 AM
Reschedule
Your order #4821 is out for delivery, arriving Wednesday. Thanks for shopping with us.9:43 AM
Your subscription renews on 3 Sep for €12.00. No action is needed.9:44 AM
View plan

Two tiers of sender, one send call.

Numbers are what the Bird WhatsApp API sends from. A number we operate on your behalf carries Bird's managed templates and picks itself from the template's category. A number your workspace connected is yours: it is what free-form content, inbound messages, and templates you authored all require.

The sender is either chosen for you, or named by you.

A Bird-managed template selects its number from its category: authentication sends from a dedicated number, utility and marketing share a notification number. Everything else names a from, and it has to be a number your workspace owns.

Bird-managed

managed
// A Bird-managed template picks its own sender from its category, so
// there is no `from` to choose and nothing to provision first.
await bird.whatsapp.send({
  to:       "+15551234567",
  template: { slug: "bird_delivery_update", components },
});

Shared across workspaces and stocked with managed templates only. Setting a from here is refused, because the category already decided it.

Your own

your-own
// Your own number: name it on every send that is not a Bird-managed
// template. A template you authored has to sit on that number's WABA.
await bird.whatsapp.send({
  to:       "+15551234567",
  from:     "+13124495648",
  template: { slug: "order_update", language: "en", components },
});

Your brand on the sender, your templates, free-form replies, and inbound. Omitting from on a send that needs it is refused rather than guessed at.

What a connected number reports.

Once your number is live, WhatsApp keeps grading it. Bird re-reads that state roughly hourly, so what you see is a reading with a timestamp rather than a live value.

  1. 01

    A quality rating

    Green, yellow, or red, from recipient feedback. Sustained red can restrict the number. This is separate from a template language's own quality score.

  2. 02

    A messaging limit, shared

    How many unique users you can message outside a service window in a rolling 24 hours. WhatsApp calculates it for the whole business portfolio, so every number in it shares one limit and any single number can consume all of it.

  3. 03

    A throughput level

    Standard is 80 messages per second. WhatsApp upgrades an eligible number to 1,000 per second on its own, without an application.

  4. 04

    A data localization region

    The country your message content is stored at rest in. It can differ from the region you asked for when WhatsApp requires a particular country for that number.

  5. 05

    A reason, when a connection fails

    A number still retrying carries its last refusal, so there is something to act on while the retry runs, and it clears once the number connects.

A number, as the API reads it.

Scope says which tier the number belongs to, and meta_synced_at is when its state was last read from WhatsApp. A number Bird operates on your behalf carries no rating, limit, throughput, or sync time at all: those belong to a business account you own.

GET /v1/whatsapp/numbers
wan_
{
  "id":           "wan_01krdgeqcxet5s7t44vh8rt9mg",
  "phone_number": "+13124495648",
  "name":         "Goldcrest Support",
  "scope":        "workspace",
  "status":       "connected",
  "quality_rating":   "green",
  "messaging_limit":  "tier_10k",
  "throughput_level": "standard",
  "meta_synced_at":   "2026-05-19T15:00:04.911Z"
}

Connecting one is a dashboard step.

Your own number is connected through Meta's embedded signup, either by bringing a number that is not already active on the WhatsApp consumer or Business app, or by picking one your workspace already holds at Bird. Numbers are managed in the dashboard rather than provisioned over the public API, and the same step is what makes inbound yours.

Go deeper in the docs.

Read phone number setup for both connection paths and what to do when one fails, and the customer service window for why a number of your own is what free-form content needs.

Number questions, answered.

Managed senders, bringing your own, and how a sender is chosen.

我需要提供自己的 WhatsApp 号码吗?
不需要。Bird 提供托管发送号码。验证模板从专用号码发送,实用和营销模板共享一个通知号码。仪表板的号码页面列出了您工作区可用的号码。
可以使用自己的号码吗?
是的,连接自有号码正是解锁以您自己品牌身份发送的关键:包括您自己的模板、在已打开的客服窗口内发送自由格式内容,以及接收入站消息。Bird 托管号码在多个工作区间共享,且仅支持托管模板,因此请将其视为零配置的首次发送途径,而非最终状态。
Bird 如何选择发送号码?
对于托管模板,由其类别决定:身份验证使用专用发送号码,而实用和营销共用一个通知号码。其他所有情况在 from 字段中指定自己的发送号码,该号码必须是您工作区拥有的号码,并且您创建的模板必须与该号码属于同一个 WhatsApp Business Account。

Send today, on your own number tomorrow.

Numbers are one capability of the Bird WhatsApp API: templates, sending, inbound, and analytics ship with them, on infrastructure we have run for a decade.

从一个渠道开始。
准备好后,再添加其他渠道。

测试 API 密钥即刻可用。添加支付方式并验证发送者身份后,即可解锁生产环境。

正在使用 Claude Code、Cursor 或 Codex?复制一条设置提示,您的智能代理即可自动安装 Bird CLI 和相关技能。选择您的工具:

Cursor