Sign inGet Started

Get a WhatsApp Business Account

GET
/v1/whatsapp/business-accounts/{business_account_ref}
const account = await bird.whatsapp.businessAccounts.get("waa_01krdgeqcxet5s7t44vh8rt9mg");
console.log(account.account_review_status, account.business_verification_status);
Reactie200
{
  "id": "waa_01krdgeqcxet5s7t44vh8rt9mg",
  "waba": "102290129340398",
  "name": "Acme Inc",
  "status": "active",
  "account_review_status": "approved",
  "business_verification_status": "verified",
  "marketing_messages_onboarding_status": "onboarded",
  "portfolio": {
    "meta_id": "178563218361309",
    "name": "Acme Holdings",
    "marketing_messages_onboarding_status": "not_started"
  },
  "ban": {
    "state": "disabled",
    "occurred_at": "2026-04-10T09:12:00Z",
    "appeal_url": "https://business.facebook.com/business-support-home/178563218361309/102290129340398"
  },
  "next": [
    {
      "kind": "external",
      "url": "https://bird.com/docs/knowledge-base/whatsapp/account-restrictions-and-appeals",
      "description": "WhatsApp disabled this account, and neither Bird nor this API can lift it. Request a review at `ban.appeal_url`, or in Meta's Business Support Home for the owning portfolio when it is absent; the linked guide walks through it."
    },
    {
      "kind": "operation",
      "operation": "getWhatsAppBusinessAccount",
      "params": {
        "business_account_ref": "waa_01krdgeqcxet5s7t44vh8rt9mg"
      },
      "description": "Read the account again after Meta responds, to see whether it still carries `ban`."
    }
  ],
  "meta_health_status": {
    "can_send_message": "blocked",
    "entities": [
      {
        "entity_type": "waba",
        "meta_id": "1028574859896003",
        "can_send_message": "blocked",
        "errors": [
          {
            "error_code": 141006,
            "error_description": "There is an error with the payment method. This will block business initiated conversations.",
            "possible_solution": "There was an error with your payment method. Please add a new payment method to the account."
          }
        ]
      },
      {
        "entity_type": "business",
        "meta_id": "4392746181043198",
        "can_send_message": "limited",
        "errors": [
          {
            "error_code": 141010,
            "error_description": "The Business has not passed business verification.",
            "possible_solution": "Visit business settings and start or resolve the business verification request."
          }
        ]
      },
      {
        "entity_type": "app",
        "meta_id": "497937228432800",
        "can_send_message": "available"
      }
    ]
  }
}

Returns one WhatsApp Business Account your workspace has connected, addressed by either the id the account list reports (waa_ prefix) or the waba value WhatsApp reports for it. Both forms resolve to the same account.

Only accounts whose setup finished can be read: an account is readable once WhatsApp has reported its name and at least one of its phone numbers has finished connecting. An account the list hides is 404 here too, in either form.

The account carries the state WhatsApp last reported for it: its own status, how far WhatsApp's review of it has got, whether Meta has verified the business behind it, and the Meta business portfolio that owns it.

An account WhatsApp has banned carries ban, with an appeal_url to Meta Business Support once Bird knows the account's portfolio. ban is what WhatsApp announced on its own notification, not part of the reading meta_synced_at dates, because WhatsApp reports a ban's state and timing nowhere else. It is absent on an account in good standing and on one whose ban Bird was never told about, so meta_health_status is what says whether an account can send.

Parameters

business_account_refstring

WhatsApp Business Account ID (waa_ prefix) or the WhatsApp Business Account ID Meta reports in waba. A value that parses as a valid ID resolves by ID; any other value resolves as Meta's ID.

Response Payload

id
string
verplicht

Unique identifier for the WhatsApp Business Account.

waba
string
verplicht

Meta's own identifier for this WhatsApp Business Account. This is the value to send when creating a template on the account.

name
string
verplicht

The account's name, as WhatsApp reports it.

status
string
verplicht

WhatsApp's own state for this account as of meta_synced_at. The status is active until WhatsApp reports otherwise. WhatsApp already considers an account usable if Bird could connect a number under it. The absence of a reading is therefore not evidence of another state.

Possible values (may grow over time): active

account_review_status
string

How far WhatsApp's review of this account had got as of meta_synced_at. Absent until WhatsApp has reported it.

Possible values (may grow over time): approved, deferred, pending, rejected

business_verification_status
string

Whether Meta had verified the business behind this account as of meta_synced_at. Absent until Meta has reported it.

Possible values (may grow over time): expired, failed, ineligible, not_verified, pending, pending_need_more_info, pending_submission, rejected, revoked, verified

marketing_messages_onboarding_status
string

Whether this account can use WhatsApp's Marketing Messages API, as of meta_synced_at. Absent until WhatsApp has reported it. Distinct from the owning portfolio's marketing_messages_onboarding_status (portfolio.marketing_messages_onboarding_status), which Meta gives the same field name but a different vocabulary: this one is the account's own eligibility, that one is the portfolio's Terms-of-Service progress.

Possible values (may grow over time): eligible, onboarded

portfolio
object

The Meta business portfolio that owns this account. Absent until Meta has reported it. The portfolio is where a messaging limit is set, so every account it owns shares one.

Onderliggende attributen tonen
ban
object

WhatsApp's ban on this account, absent unless Bird was told of one. status is what the account said when Bird last read it; this is what WhatsApp announced, which arrives only on the webhook that announces it and is never re-read.

Onderliggende attributen tonen
next
array of object

What to do next about this account's ban. Each entry names one action and says why it is worth taking. An empty list means Bird holds no ban record for this account. A ban Bird was never told of still shows as banned on the account's numbers, whose own next carries the appeal, and as Meta error 141014 on the waba entity in meta_health_status. Neither list says whether the account can send; meta_health_status does.

While ban is present this links the account restrictions and appeals guide, which names ban.appeal_url, because neither Bird nor this API can lift a ban.

Onderliggende attributen tonen
next.kind
string
verplicht

What you do about this step.

  • operation: call the operation named in operation, then read again.
  • external: act somewhere this API does not reach, then read again.
  • wait: nothing is asked of you, so read again later.
  • terminal: nothing you do resolves this, so stop retrying.

Tolerate a value you do not recognize: show the description and offer no action.

Possible values (may grow over time): operation, external, wait, terminal

next.description
string
verplicht

A short, human-readable label for the step, suitable for display.

next.operation
string

The operationId to call. Present only when kind is operation. The operation's own schema says how to call it; this says only which one, and what to address it with.

next.params
object

The parameters that address the operation, by name: {"sender_id": "…"} for an operation on /v1/sms/senders/{sender_id}/requirements. A parameter the operation takes in its query string is given the same way, so an operation addressed as ?subject_id= carries {"subject_id": "…"}. Every parameter the call needs is here, whether its value came from the thing you were acting on or is fixed for this step, so you can make the call from this object alone. Present only when kind is operation and the operation names a subject. A request body, when the operation takes one, is described by the operation's own schema and never appears here.

next.url
string

A URL to open. Present only when kind is external, and only when the step has one. An external step whose description says to go and do something with no URL to open is normal.

meta_health_status
object

Meta's own messaging health for this account as of meta_synced_at. Absent until Bird has read it, and absent again when the stored reading did not parse at all. An entity whose verdict falls outside this vocabulary is dropped on its own and the rest of the report still ships, so entities can be shorter than Meta's. A blocked verdict on the waba entity is why template sends fail with Meta's #200 even though the number reads active: for example error_code 141006 names a payment method Meta rejected on the account.

Onderliggende attributen tonen
meta_synced_at
string

When Bird last read this account's state from WhatsApp. status, account_review_status, business_verification_status, marketing_messages_onboarding_status, portfolio and meta_health_status are all that reading rather than live values; Bird re-reads roughly hourly. Absent for an account Bird has never read back.

created_at
string
verplicht

When this account was connected.

updated_at
string
verplicht

When this account was last changed.

Ga verder met de documentatie, handleidingen en voorbeelden voor dit onderwerp.