# Bird MCP MCP Server

> **Bird MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Bird MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/bird-mcp
> MewCP docs:   https://docs.mewcp.com
> Full catalog: https://mewcp.com/llms.txt

---

## About

Bird helps businesses orchestrate customer communications across WhatsApp, SMS, email, and other messaging channels. Manage contacts and audiences, send messages, build marketing campaigns, automate customer journeys, and track delivery and engagement performance across channels.

---

## Details

- Server ID: `bird-mcp`
- Version: 2bd31d994051592f8f4c8c826ec33bc48506c42d
- Tools: 614
- Authentication: OAuth, managed by MewCP
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — Bird MCP has to be in the toolset
first. In order:

1. Add Bird MCP to your toolset at https://mewcp.com/mcp/bird-mcp
2. Connect your Bird MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Copy your MewCP API key from the dashboard (Developer)
4. Configure your client with the snippet for it below

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (614)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `amb_attachment` _(read)_ — Downloads and decrypts one attachment from a message by its position, returning the file bytes. Use it to read a photo or file a customer sent; the message ID…
- `amb_attachments_download` _(read)_ — Downloads and decrypts an attachment by its `aat_` ID, returning the file bytes. Works for attachments a customer sent, attachments you sent and files you…
- `amb_attachments_get` _(read)_ — Returns an attachment's metadata by its `aat_` ID: the business account that holds it, its origin, the message it belongs to, its name, media type, size and…
- `amb_business_accounts_create` _(write)_ — Creates a draft business in your workspace. Supplying Apple's business UUID does not submit the record; upload evidence and create a submission when ready for…
- `amb_business_accounts_delete` _(destructive)_ — Stops new and queued sends while retaining the account, Apple UUID, approval, credentials and history. Repeated disconnects succeed without changing history.…
- `amb_business_accounts_events_list` _(read)_ — Returns account activity with event time, summary and source metadata, newest first by default.
- `amb_business_accounts_get` _(read)_ — Reads a business record in your workspace. Its apple_business_id supplies the from field for sends; creating a draft does not establish Apple approval.
- `amb_business_accounts_list` _(read)_ — Lists the Apple businesses registered in your workspace, with cursor pagination. Requires business-management read permission. Use the configured…
- `amb_business_accounts_reconnect` _(write)_ — Restores the local connection. The retained approval and suspension state still determines whether the account can send. Repeated reconnects return the current…
- `amb_business_accounts_settings_get` _(read)_ — Returns the channel settings for your workspace's Apple Messages for Business record: its entry points, default locale, and the brand name and logo shown on…
- `amb_business_accounts_settings_update` _(write)_ — Changes the channel settings for your workspace's Apple Messages for Business record. Fields you omit are left as they are, except `entry_points`: sending it…
- `amb_business_accounts_submissions_create` _(write)_ — Submits an account for review, making its name, Apple UUID and three uploaded evidence attachments available to Bird staff. This does not approve the account.
- `amb_business_accounts_submissions_list` _(read)_ — Lists the review attempts for a business in your workspace. Each attempt retains the business identity and evidence selected at submission.
- `amb_business_accounts_update` _(write)_ — Updates a business in your workspace, leaving omitted fields unchanged. Changing Apple's business UUID does not submit the record or change its approval state.
- `amb_conversations_get` _(read)_ — Reads a customer-initiated conversation in your workspace. Its recipient.opaque_user_id supplies the to field for replies; verify the business and open state…
- `amb_conversations_list` _(read)_ — Returns the conversations your business has with customers on Apple Messages for Business, newest first by last message. To page through older conversations,…
- `amb_conversations_list_messages` _(read)_ — Returns the messages in a conversation, newest first, both received and sent. To page through older messages, use `starting_after`. The sort order is fixed, so…
- `amb_conversations_typing` _(write)_ — Sends a typing signal through Apple for an existing conversation. Typing is best effort; typing_end still needs native device verification. It does not enqueue…
- `amb_conversations_update` _(write)_ — Updates assignment, labels, inbox status, queue and shared workspace read state, or settles a pending routing_change. Omitted fields stay unchanged; null…
- `amb_get` _(read)_ — Reads a message in your workspace, including its native content and processing state. Sent records Apple gateway acceptance; a send failure does not rule out…
- `amb_list` _(read)_ — Lists your workspace's incoming and outgoing Apple messages with cursor pagination. Filter by business or conversation to inspect one exchange; sent records…
- `amb_list_events` _(read)_ — Reads the processing events for a message in your workspace. Use the events to inspect rejections and gateway failures before deciding whether to submit…
- `amb_routing_rules_create` _(write)_ — Creates a routing rule for one of your Apple Messages for Business brands. Set `is_default` to make it the rule that catches a conversation matching nothing…
- `amb_routing_rules_delete` _(destructive)_ — Deletes a routing rule. A conversation already routed by it keeps its queue; only newly created or reopened conversations stop matching it. Deleting a…
- `amb_routing_rules_get` _(read)_ — Returns a single routing rule by ID, including its `business_account_id`, match condition (`match_kind`, `match_intent_id`, `match_group_id`), target `queue`,…
- `amb_routing_rules_list` _(read)_ — Returns the workspace's Apple Messages for Business routing rules, highest precedence first. Rules run when a conversation is created, when a closed…
- `amb_routing_rules_update` _(write)_ — Changes a routing rule's business, match, queue, precedence, or default status. The match changes as a unit: send `match_kind` with the intent and group ids it…
- `amb_send` _(write)_ — Queues a billable reply to an open customer conversation. Requires a configured business, regardless of onboarding status. Apple decides whether to accept the…
- `amb_stats_by_business` _(read)_ — Returns outbound counts and latency percentiles grouped by business, for the requested period. Rows are ranked by accepted volume descending and capped at the…
- `amb_stats_by_category` _(read)_ — Returns outbound counts and latency percentiles grouped by message category, for the requested period. Rows are ranked by accepted volume descending and capped…
- `amb_stats_by_error_code` _(read)_ — Returns outbound counts and latency percentiles grouped by failure reason, for the requested period. Rows are ranked by `send_failed + rejected` descending and…
- `amb_stats_by_group` _(read)_ — Returns outbound counts and latency percentiles grouped by entry-point group, for the requested period. Rows are ranked by accepted volume descending and…
- `amb_stats_by_intent` _(read)_ — Returns outbound counts and latency percentiles grouped by entry-point intent, for the requested period. Rows are ranked by accepted volume descending and…
- `amb_stats_by_message_kind` _(read)_ — Returns outbound counts and latency percentiles grouped by message content kind, for the requested period. Rows are ranked by accepted volume descending and…
- `amb_stats_by_tag` _(read)_ — Returns outbound counts and latency percentiles grouped by tag (`name` or `name:value`), for the requested period. Rows are ranked by accepted volume…
- `amb_stats_conversations_daily` _(read)_ — Returns one row of Apple Messages for Business conversation lifecycle counts (`started`, `reopened`, `closed`, `conversations`) per calendar day for the…
- `amb_stats_conversations_hourly` _(read)_ — Returns one row of Apple Messages for Business conversation lifecycle counts (`started`, `reopened`, `closed`, `conversations`) per hour, gap-filled so a…
- `amb_stats_conversations_summary` _(read)_ — Returns one aggregate row of Apple Messages for Business conversation lifecycle counts (`started`, `reopened`, `closed`, `conversations`) for the requested…
- `amb_stats_daily` _(read)_ — Returns one row of outbound Apple Messages for Business counts and processing-latency percentiles per calendar day for the workspace, gap-filled so a silent…
- `amb_stats_hourly` _(read)_ — Returns one row of outbound Apple Messages for Business counts and processing-latency percentiles per hour, gap-filled so a silent hour is a zero row rather…
- `amb_stats_inbound_by_business` _(read)_ — Returns inbound received counts grouped by business, for the requested period. Rows are ranked by received volume descending and capped at the requested…
- `amb_stats_inbound_by_intent` _(read)_ — Returns inbound received counts grouped by entry-point intent, for the requested period. Rows are ranked by received volume descending and capped at the…
- `amb_stats_inbound_daily` _(read)_ — Returns one row of inbound Apple Messages for Business counts per calendar day for the workspace, gap-filled so a silent day is a zero row rather than a…
- `amb_stats_inbound_hourly` _(read)_ — Returns one row of inbound Apple Messages for Business counts per hour, gap-filled so a silent hour is a zero row rather than a missing one. Every row is…
- `amb_stats_inbound_summary` _(read)_ — Returns one aggregate row of inbound Apple Messages for Business counts for the requested period. Inbound statistics are attributed to when the event occurred,…
- `amb_stats_summary` _(read)_ — Returns one aggregate row of outbound Apple Messages for Business counts and latency percentiles (`p50`, `p95`, and `p99`) for the requested period. Counts are…
- `amb_suppressions_create` _(write)_ — Manually opens a suppression episode for a address, blocking every outbound path to it: operator and automated replies, API sends, typing indicators, and…
- `amb_suppressions_delete` _(destructive)_ — Ends a manual suppression while retaining its history. Recipient opt-outs and automatic conversation facts cannot be ended through this endpoint.
- `amb_suppressions_get` _(read)_ — Returns the suppression episode for the given ID, including one that has already ended. An ended episode keeps its dates and reports when and how it ended.
- `amb_suppressions_list` _(read)_ — Returns a paginated list of the workspace's active Apple Messages for Business suppressions: customers who have opted out of one brand, or of the whole…
- `amb_templates_get` _(read)_ — Read one Apple Messages template's metadata, language states, draft revision, and draft and live version IDs. The response omits content and variables; read a…
- `amb_templates_list` _(read)_ — List workspace and built-in Apple Messages templates as a cursor page. Filter by scope, category, status, content kind, language, or a search across slug,…
- `amb_templates_versions_get` _(read)_ — Read one draft or published Apple Messages template version, including its variables and text in every language. Built-in templates expose their current…
- `amb_templates_versions_languages_get` _(read)_ — Read one language's full text, revision, content hash, and update time from a draft, published version, or built-in template's synthetic version.
- `amb_templates_versions_languages_list` _(read)_ — List a version's languages without their text. Each summary includes its revision, content hash, and last update time. Read a language item to retrieve its…
- `amb_templates_versions_list` _(read)_ — List a template's permanent draft and immutable published versions, newest first. Built-in templates expose their current catalogue content as one synthetic…
- `api_keys_create` _(write)_ — Create a workspace key and receive its token once, in this response; no later call reads it back. A key can never issue or revoke another key. Expiry is fixed…
- `api_keys_rotate` _(destructive)_ — Replace an existing key and receive the new token once, in this response; no later call reads it back. The replacement carries the source key's name and IP…
- `assets_delete` _(destructive)_ — Removes the library entry without revoking public access to the file. A separate staff security or abuse takedown can block the entry and URL. Repeating…
- `assets_folders_create` _(write)_ — Creates a root folder when parent_id is omitted, or nests it beneath an existing folder. Names must be unique within the parent, ignoring case. Folder…
- `assets_folders_delete` _(destructive)_ — Moves child folders and assets to the deleted folder's parent, preserving their URLs. A name conflict with a child folder refuses the deletion. Repeating…
- `assets_folders_get` _(read)_ — Returns the folder and its resolved path. Deleted folders are not returned. Assets in a folder can be found with the folder_id filter on `assets_list`.
- `assets_folders_list` _(read)_ — Returns a cursor page of folders with parent_id and resolved path. Ordering follows creation time, so a parent may arrive on a later page. Building the…
- `assets_folders_update` _(write)_ — Moves the folder and its descendants without changing asset URLs. Null parent_id moves it to the root. Moving into itself or a descendant is refused, as is a…
- `assets_get` _(read)_ — Returns metadata and the public URL. A removed library entry remains readable with deleted_at set because its URL still serves existing content.
- `assets_list` _(read)_ — Returns a cursor page, excluding deleted assets by default. Filters support kind, content type, name and folder. A folder filter excludes its subfolders;…
- `assets_references_list` _(read)_ — Returns saved draft and published usage visible to the caller. Email-template references also require email_management:read. Hidden resources do not affect…
- `assets_update` _(write)_ — Changes the name, alternative text or folder without changing bytes or the public URL. Omitted fields remain unchanged; null clears alt_text or moves folder_id…
- `audiences_add_contacts` _(write)_ — Add up to 1,000 existing contacts to a static audience by ID. Fails entirely if any contact ID does not exist. To add contacts you have not created yet, use…
- `audiences_create` _(write)_ — Create an audience in the workspace. New audiences start empty; add contacts with `audiences_add_contacts` or `contacts_batch`. Only static audiences can be…
- `audiences_delete` _(destructive)_ — Delete an audience and its memberships; contacts themselves are not deleted. Fails while a broadcast targeting the audience is scheduled, accepted, sending, or…
- `audiences_get` _(read)_ — Get a single audience by ID: name, description, and type. Members are listed separately with `audiences_list_contacts`.
- `audiences_list` _(read)_ — List the workspace's audiences as a cursor page, newest first. Filter by name substring with `q`.
- `audiences_list_contacts` _(read)_ — List the contacts in a static audience by ID, as a cursor page ordered by when each contact joined (most recent first). Each entry pairs the contact with its…
- `audiences_membership` _(read)_ — Exact current member count of one audience, including contacts without email and unsubscribed contacts, with the `data_as_of` evaluation instant. An empty…
- `audiences_membership_history` _(read)_ — Daily audience member counts for inclusive UTC dates `from`..`to`, default the last 31 dates ending today, at most 365, no future dates. Each point is the…
- `audiences_remove_contact` _(destructive)_ — Remove one contact's membership from an audience. The contact itself is not deleted and stays a member of any other audiences.
- `audiences_remove_contacts` _(destructive)_ — Remove up to 1,000 contacts from a static audience by ID. Fails entirely if any contact ID does not exist; contacts are not deleted.
- `audiences_update` _(write)_ — Update an audience's name or description. Omitted fields are unchanged; a `null` description clears it.
- `billing_plans_get` _(read)_ — Read a billing plan by ID, including its tier, entitlements, and resource quotas. A plan's base_price is null when it has no list price; Bird's published…
- `billing_plans_list` _(read)_ — List active billing plans with their tiers, entitlements, and resource quotas. Filter by product or request all products. A plan's base_price is null when it…
- `compliance_attachments_delete` _(destructive)_ — Delete an uploaded registration attachment. This works only while nothing cites it, which is the case worth acting on: a file uploaded by mistake can be…
- `compliance_attachments_get` _(read)_ — Download the bytes of one uploaded registration attachment, to check that an upload holds the document it should before a submission cites it. Find the id with…
- `compliance_attachments_list` _(read)_ — List the registration attachments this workspace has uploaded, newest first. Use it to find a document already uploaded and cite its id again rather than…
- `compliance_document_templates_get` _(read)_ — Download the immutable blank form named by a registration requirement's `template_url`. Draft forms and forms no published definition references are…
- `compliance_identities_get` _(read)_ — Read one party this workspace has stored: its name and the business details last filed for it. A registration that names the party prefills from these answers.…
- `compliance_identities_list` _(read)_ — List the businesses this workspace has stored as compliance parties, so a registration can name the one it is for. Returns one page, newest first; follow…
- `compliance_requirements` _(read)_ — What one country asks for before it will approve one registration, with where each item stands and why any was refused. `subject_id` names the registration: a…
- `compliance_submissions_create` _(write)_ — Files a country's registration answers, all of them in one call, and there is no draft to build up first. What to send is `compliance_requirements`'s `fields`,…
- `compliance_submissions_get` _(read)_ — Read back one compliance submission: every answer you filed and where each one stands. Answers are decided independently, so some can be accepted while others…
- `compliance_submissions_resupply` _(write)_ — Replaces rejected, expired, or missing answers on an existing submission. Read `compliance_requirements` for the fields and correction feedback. Accepted…
- `contact_properties_archive` _(destructive)_ — Archive a contact property to remove it, and restore it with `contact_properties_unarchive`. It disappears from pickers and cannot be used in new template…
- `contact_properties_create` _(write)_ — Define a custom contact property (key + value type) that becomes available in contact data and as a broadcast template variable. The key and type cannot change…
- `contact_properties_get` _(read)_ — Get a single contact property by ID: key, type, fallback value, and archived state.
- `contact_properties_list` _(read)_ — List the workspace's contact properties as a cursor page, newest first. Archived properties are included, marked by their archived flag.
- `contact_properties_unarchive` _(write)_ — Restore an archived contact property with its stored values. It appears in property pickers again and can be used in new template versions. Unarchiving a…
- `contact_properties_update` _(write)_ — Update a contact property's fallback value. Only the fallback value can change; the key and type are fixed at creation, so a different key or type needs a new…
- `contacts_batch` _(write)_ — Create or update up to 1,000 contacts in one request. Match each entry against every supplied identifier (`email`, `phone_number`, and `external_id`), or set…
- `contacts_create` _(write)_ — Create a contact identified by an email address, an E.164 phone number, or both. Fails with a conflict if the email, phone_number, or external_id is already…
- `contacts_delete` _(destructive)_ — Delete a contact and remove it from every audience it belongs to. Refused when an eSIM subscriber links to the contact. Suppression records for the address are…
- `contacts_get` _(read)_ — Get a single contact by ID. Look up an ID by exact email, phone_number, or external_id with `contacts_list`.
- `contacts_list` _(read)_ — List the workspace's contacts as a cursor page, newest first. Look one up by exact email, phone_number, or external_id, repeating phone_number to resolve up to…
- `contacts_update` _(write)_ — Update a contact's name, `external_id`, email, `phone_number`, or custom data. Only supplied fields change; custom data keys are merged, with `null` removing a…
- `docs_read` _(read)_ — Read documentation by its search-result `slug`. For API references, use `view=request` for endpoint, server, authentication and request fields, or…
- `docs_search` _(read)_ — Search the documentation by keyword and return ranked sections with deep links, page slugs, and matching snippets. Use `docs_read` with a result's `slug` to…
- `email_broadcasts_cancel` _(destructive)_ — Cancel a scheduled, accepted, or sending broadcast. This stops every delivery that has not gone out yet. Recipients already dispatched are not recalled.…
- `email_broadcasts_counts` _(read)_ — Preview how many contacts a broadcast can reach before sending. The `total` value includes every contact in the audience. The `addressable` value counts…
- `email_broadcasts_create` _(write)_ — Create a broadcast that sends one piece of template content to a stored audience. Leave `send` as `false` (the default) to save an editable draft. Update it…
- `email_broadcasts_delete` _(destructive)_ — Permanently delete a draft broadcast. Only a draft can be deleted. To stop a scheduled or sending broadcast, use `email_broadcasts_cancel` instead.
- `email_broadcasts_get` _(read)_ — Fetch one broadcast by its `broadcast_id`, with its audience reference and counters. For the full recipient list use `email_broadcasts_list_recipients`, and…
- `email_broadcasts_list` _(read)_ — List broadcasts in the workspace, newest first. Filter by lifecycle `status`, `audience_id`, or `tag`, search tag names/values with `q`, or narrow to a window…
- `email_broadcasts_list_clicked_links` _(read)_ — List the destination URLs a broadcast's recipients clicked, each with its exact click count, distinct-recipient count, and the link's own name (when the…
- `email_broadcasts_list_events` _(read)_ — List the per-recipient delivery timeline for a broadcast (sends, opens, clicks, bounces, and so on), oldest first, as a cursor page. Filter by `type`, for…
- `email_broadcasts_list_recipients` _(read)_ — List the recipients resolved for a broadcast with their per-recipient delivery state, paginated. It shows who a broadcast reached and how far each one got. The…
- `email_broadcasts_preview` _(read)_ — Render the template's published content using the saved broadcast, the changes supplied in this request and contact values the caller can read. Supplied fields…
- `email_broadcasts_send` _(write)_ — Send a draft or scheduled broadcast, either immediately or at `scheduled_at`. Calling this on a broadcast that already has a schedule reschedules it instead of…
- `email_broadcasts_send_quota` _(read)_ — Check how many recipients a broadcast could reach within your organization's daily and monthly email limits. `recipients` is the current sendable count.…
- `email_broadcasts_test` _(write)_ — Supply the same changes, contact and fingerprint as a new preview to send the exact rendered content to an authorized current organization member with…
- `email_broadcasts_update` _(write)_ — Update a draft or scheduled broadcast. Only the fields you supply change. The rest stay as they are. Once the broadcast is accepted for sending, editing…
- `email_broadcasts_validate` _(read)_ — Check the saved broadcast or the changes supplied in this request against the template's published content. This does not save changes, select a template…
- `email_cancel` _(destructive)_ — Cancel a scheduled email before it sends. Only works while the message's `status` is still `scheduled`. Once it starts sending, or was already canceled, the…
- `email_competitive_brands_search` _(read)_ — Find a competitor by brand name or sending domain without adding it. For existing competitors, `email_competitive_watchlist_get` already returns names, tracked…
- `email_competitive_volume_series` _(read)_ — Accepts up to 20 distinct watchlist entry IDs from `email_competitive_watchlist_get`. Omitting brand_ids requests the workspace's own line. Competitor lines…
- `email_competitive_watchlist_brands_campaigns_get` _(read)_ — Takes a watchlist_brand_id and a campaign_id from `email_competitive_watchlist_brands_campaigns_list`. campaign_id is text to preserve its digits. Returns the…
- `email_competitive_watchlist_brands_campaigns_list` _(read)_ — Takes a watchlist_brand_id from `email_competitive_watchlist_get`. Returns a cursor page, default 25 rows and maximum 100. Cursors retain the brand, range and…
- `email_competitive_watchlist_brands_create` _(write)_ — Add a brand using the panel brand_id returned by brand search. The response id identifies the new workspace watchlist entry for reads and removal. Each entry…
- `email_competitive_watchlist_brands_delete` _(destructive)_ — Remove the workspace watchlist entry using its cwb_ ID. This frees one place in the organization-wide allowance. Adding the brand again creates a new entry;…
- `email_competitive_watchlist_brands_get` _(read)_ — Read one watched brand using the `watchlist_brand_id` from `email_competitive_watchlist_get`; the panel `brand_id` returned by…
- `email_competitive_watchlist_brands_send_time` _(read)_ — Takes a watchlist_brand_id from `email_competitive_watchlist_get` and an optional IANA timezone. Covers the last 90 days, with no range parameter. Cells…
- `email_competitive_watchlist_get` _(read)_ — Compare volume, campaigns per week, placement, reading and audience overlap across the existing watchlist in one read; no setup or per-brand reads are needed…
- `email_competitive_watchlist_notable` _(read)_ — Returns up to 100 findings across watched brands for the requested range. A campaign can appear for multiple signals, each with its own evidence. truncated…
- `email_content` _(read)_ — Read the stored HTML and text bodies of a sent message. Content exists only if the message had content storage enabled, and only for 30 days after sending. A…
- `email_dedicated_ips_assign` _(write)_ — Move a dedicated IP into the IP pool given by ip_pool_id. An IP is always in exactly one pool, so this is a move. The last active IP cannot leave a pool used…
- `email_dedicated_ips_create` _(write)_ — Purchase one or more dedicated IPs into an IP pool. The first purchase creates a dedicated pool automatically; later purchases require `ip_pool_id`. This paid…
- `email_dedicated_ips_delete` _(destructive)_ — Cancel a dedicated IP subscription by id. The IP stays usable until the end of the billing period. The last active IP in a pool used as a current routing…
- `email_dedicated_ips_get` _(read)_ — Fetch one dedicated IP by ID with its current status, warmup progress, and pool assignment. This operation is read-only.
- `email_dedicated_ips_list` _(read)_ — List the dedicated IPs in the pools the workspace can send through as a cursor page, each with its status, warmup progress, and pool. Read-only view. Purchase…
- `email_domains_create` _(write)_ — Register a new sending domain and get the DNS records to publish. Flow: call this, publish the returned DNS records at your DNS provider, then call…
- `email_domains_delete` _(destructive)_ — Delete a sending domain by ID. Revokes its sender authorization: new sends from the domain are rejected afterward, while historical statistics and events for…
- `email_domains_get` _(read)_ — Fetch one sending domain: verification status and the DNS records with their individual verification states.
- `email_domains_list` _(read)_ — List the workspace's sending domains with their verification status, as a cursor page.
- `email_domains_update` _(write)_ — Update a sending domain's tracking and inbound configuration. Tracking: click_tracking and open_tracking apply immediately to new sends, and the tracking…
- `email_domains_verify` _(write)_ — Trigger a DNS verification check for a sending domain and return the refreshed domain with per-record results. Safe to repeat while waiting for DNS propagation.
- `email_get` _(read)_ — Fetch one email message by id — aggregate delivery status, per-recipient delivery states, and the event timeline (queued → processed → delivered, opens/clicks,…
- `email_health` _(read)_ — Deliverability verdict for one window: an overall `healthy`, `watching`, or `throttled` status, plus signals for delivery, opens, bounces, and complaints. Each…
- `email_inbound_addresses_create` _(write)_ — Create a new inbound address you can forward a real mailbox to. The response includes the address to forward that mailbox to.
- `email_inbound_addresses_delete` _(destructive)_ — Delete an inbound address. Mail forwarded to it afterward is no longer received.
- `email_inbound_addresses_get` _(read)_ — Fetch one inbound address by its ID: the address you forward mail to, plus its label. Use `email_inbound_addresses_list` to find IDs.
- `email_inbound_addresses_list` _(read)_ — List the workspace's inbound addresses as a cursor page.
- `email_inbound_addresses_update` _(write)_ — Update the label on an inbound address.
- `email_inbound_messages_attachment` _(read)_ — Download one attachment's raw bytes from a received email. The attachment ID comes from the manifest `email_inbound_messages_attachments` returns. The response…
- `email_inbound_messages_attachments` _(read)_ — List attachment metadata for a received email. Fetch each attachment's bytes with `email_inbound_messages_attachment`.
- `email_inbound_messages_body` _(read)_ — Fetch a received email's parsed, decoded body: `html` and `text`, each `null` when the message had no such part. For the original bytes use…
- `email_inbound_messages_get` _(read)_ — Fetch one received email's parsed metadata: addresses, subject, threading headers, receiving mailbox and conversation, authentication results, and the…
- `email_inbound_messages_list` _(read)_ — List received (inbound) emails as a cursor page, newest first. Filter by sender, inbound address, mailbox, or received time. Each message carries the mailbox…
- `email_inbound_messages_raw` _(read)_ — Download a received email's original RFC 5322 (MIME) bytes. The response is the undecoded message rather than the parsed fields the get and body operations…
- `email_inbox_insights_authentication` _(read)_ — Read SPF, DKIM and DMARC results for a verified domain owned by the workspace. Dates are inclusive UTC days, with at most 30 days between from and to. Pass…
- `email_inbox_insights_benchmarks_industry` _(read)_ — Read the industry placement benchmark for a verified owned domain. Its median is a percentage with default weighting, which can differ from the domain's…
- `email_inbox_insights_blocklists` _(read)_ — Check blocklist standing for the sending infrastructure of a verified domain owned by the workspace. This is a current lookup and accepts no date window.…
- `email_inbox_insights_complaints` _(read)_ — Read the Google Postmaster user-reported spam rate for a verified owned domain. This percentage differs from spam-folder placement and Bird feedback-loop…
- `email_inbox_insights_domain_monitoring_upsert` _(write)_ — Set up monitoring for the workspace's main verified sending domain. Takes no body. Existing monitoring returns already_on without changes. Otherwise, the sole…
- `email_inbox_insights_domains_list` _(read)_ — List verified sending domains owned by the workspace and their monitoring settings. Follow next_cursor with starting_after, keeping filters and ordering. A…
- `email_inbox_insights_domains_update` _(write)_ — Set monitored explicitly to true or false for a verified domain owned by the workspace. Enabling enrolls the domain with eDataSource and saves the workspace…
- `email_inbox_insights_placement` _(read)_ — Read placement for a verified domain owned by the workspace. Dates are inclusive UTC days, with at most 30 days between from and to. Rates are percentages, and…
- `email_inbox_insights_seed_tests_configuration_get` _(read)_ — Read available seed pools, regions and engagement profiles for an owned sending domain before `email_inbox_insights_seed_tests_create`. Use only available…
- `email_inbox_insights_seed_tests_create` _(write)_ — Register only when the intended send is ready. Read `email_inbox_insights_seed_tests_configuration_get` for supported options. CLI and MCP registration require…
- `email_inbox_insights_seed_tests_list` _(read)_ — Read seed-test history for an owned sending domain and the organization-wide allowance. Results are capped at 100; narrow the date window if tests.truncated is…
- `email_inbox_insights_spam_traps` _(read)_ — Read spam-trap totals, kinds, networks and sampled hits for a verified owned domain. Dates are inclusive UTC days, at most 30 days apart;…
- `email_ip_pools_create` _(write)_ — Create an IP pool that belongs to the organization. The pool is available immediately. Pass `workspace_id` to also assign it to that workspace without changing…
- `email_ip_pools_delete` _(destructive)_ — Delete an IP pool by ID. Only empty pools can be deleted, so move or cancel its dedicated IPs first. Replace default selections and remove workspace…
- `email_ip_pools_get` _(read)_ — Fetch one IP pool the workspace can send through, with its dedicated IPs. Use the reserved id `ipp_shared` for the shared pool. Read-only view.
- `email_ip_pools_list` _(read)_ — List the IP pools available to the workspace as a cursor page. Pools group dedicated IPs for sending; the result is shared across the organization. Read-only…
- `email_ip_pools_update` _(write)_ — Rename an IP pool or make it the organization default. Setting `is_default` to `true` moves the default to this pool; setting it to `false` on the current…
- `email_ip_pools_workspaces_assign` _(write)_ — Let a workspace send through an organization IP pool, or make an assigned pool its default with `is_default: true`. For a workspace with no assigned pools,…
- `email_ip_pools_workspaces_list` _(read)_ — List the workspaces an organization IP pool is assigned to, with whether it is each workspace's default. Workspaces with no assigned pools send through the…
- `email_ip_pools_workspaces_remove` _(destructive)_ — Stop a workspace from sending through an IP pool. Refused while the pool is the workspace's default or still used by its mailboxes, broadcasts or SMTP…
- `email_list` _(read)_ — List sent email messages, newest first, as a cursor page ({data, next_cursor, …}). Pass next_cursor back as starting_after to fetch the next page.
- `email_mailboxes_compose` _(write)_ — Send a new email from this mailbox's own address, starting a new conversation. Replies to it thread back automatically. To reply within an existing…
- `email_mailboxes_create` _(write)_ — Create a mailbox: a durable agent identity that owns an email address, groups mail into conversations, and remembers conversations for its retention tier.
- `email_mailboxes_delete` _(destructive)_ — Delete a mailbox. The address stops receiving immediately and is quarantined. The mailbox can be restored for 30 days, while normal message-retention expiry…
- `email_mailboxes_get` _(read)_ — Read one mailbox by ID or email address in this workspace. A mailbox deleted within its 30-day restore window is still returned, with `deleted_at` set. Once…
- `email_mailboxes_labels` _(read)_ — List the labels available in a mailbox: the built-in system labels (inbox, archive, spam, blocked, sent, trash, unread) plus every custom label in use.
- `email_mailboxes_list` _(read)_ — List the workspace's mailboxes as a cursor page, newest first. Search addresses and display names with q, or filter by exact address, state, or domain.
- `email_mailboxes_receive_rules_create` _(write)_ — Add an allow or block rule for a sender address or domain to a mailbox. Block always wins. Up to 200 rules per mailbox.
- `email_mailboxes_receive_rules_delete` _(destructive)_ — Remove a receive rule from a mailbox. Rules have no update operation, so a rule's allow or block action cannot be changed after it is created.
- `email_mailboxes_receive_rules_list` _(read)_ — List a mailbox's allow/block receive rules as a cursor page, oldest first. Filter by action.
- `email_mailboxes_restore` _(write)_ — Restore receiving and access to unexpired messages. Returns `404` if deletion was 30 or more days ago or permanent erasure has started, and `409` if the…
- `email_mailboxes_resume` _(write)_ — Resume a suspended mailbox so it can send and receive again and its conversations become visible. Fails if your plan does not have room for another active…
- `email_mailboxes_scheduled_messages_cancel` _(destructive)_ — Cancel before dispatch using the scheduled_message_id from compose or reply. The record stays visible; a send already claimed for dispatch cannot be recalled.
- `email_mailboxes_scheduled_messages_get` _(read)_ — Read the scheduled send and its dispatch, failure or cancellation state. The actual message enters the conversation only at dispatch.
- `email_mailboxes_scheduled_messages_list` _(read)_ — List scheduled sends separately from conversation messages, including completed and canceled records. Filter by conversation or status; use cursors to page.
- `email_mailboxes_stats` _(read)_ — Read a mailbox's sent and received email statistics over a window: a period summary plus a bucketed series. Rows are bucketed by event time rather than send…
- `email_mailboxes_update` _(write)_ — Update a mailbox's display name, reply-to, receive policy, retention tier, IP pool, or metadata. Lowering the retention tier requires `confirm=true` when it…
- `email_recipients` _(read)_ — List a message's per-recipient delivery state as a cursor page: each `to`/`cc`/`bcc` address with its role, current `status`, bounce or rejection detail, and…
- `email_send` _(write)_ — Send one email. Supply inline content (`subject` plus `html`/`text`), or send a stored `template` by its `id` or name with its `parameters`. The response is…
- `email_send_batch` _(write)_ — Send up to 100 emails in one call. All items are validated before any are queued, so one invalid item rejects the whole batch instead of a partial success. The…
- `email_stats_by_bounce_code` _(read)_ — Bounce counts grouped by the SMTP error code the receiving mail server returned. Each row also breaks the bounce down into its hard, soft, admin, block, and…
- `email_stats_by_broadcast` _(read)_ — Email delivery and engagement stats grouped by broadcast. Only broadcast sends appear. Aggregate statistics remain available after message activity details…
- `email_stats_by_category` _(read)_ — Email delivery and engagement stats grouped by category, meaning `transactional` compared with `marketing`. Rows are ranked by `sort`, `processed` by default.…
- `email_stats_by_client` _(read)_ — Opens and clicks grouped by mail client, operating system, or device type, whichever you choose with `group_by`. It only has engagement counts, no delivery…
- `email_stats_by_complaint_type` _(read)_ — Spam-complaint counts grouped by the feedback-loop complaint type, for example `abuse`, `fraud`, or `virus`. This complaint-only breakdown omits delivery and…
- `email_stats_by_location` _(read)_ — Opens and clicks grouped by country, region, or city, whichever you choose with `group_by`. It only has engagement counts, no delivery counts or rates. For…
- `email_stats_by_mailbox_provider` _(read)_ — Email delivery and engagement stats grouped by recipient mailbox provider, for example `gmail`, `microsoft`, or `yahoo`. It covers the delivery stage onward…
- `email_stats_by_mailbox_provider_region` _(read)_ — Email delivery and engagement stats grouped by a mailbox provider and provider region pair, for example `gmail` in `NA`. It covers the delivery stage onward…
- `email_stats_by_recipient_domain` _(read)_ — Email delivery and engagement stats grouped by exact recipient mailbox domain, for example `gmail.com`. Finer-grained than `email_stats_by_mailbox_provider`,…
- `email_stats_by_sending_domain` _(read)_ — Email delivery and engagement stats grouped by sending (`From`) domain, so you can compare deliverability across your workspace's verified domains. For per-IP…
- `email_stats_by_sending_ip` _(read)_ — Delivery and bounce stats grouped by sending IP, with deferral counts alongside them. `sort=bounces.block` surfaces reputation-damaged IPs first. Engagement,…
- `email_stats_by_tag` _(read)_ — Email delivery and engagement stats grouped by tag, one row per `name:value` pair set at send time. Rows are ranked by `sort`, `processed` by default. Set…
- `email_stats_by_template` _(read)_ — Email delivery and engagement stats grouped by the template used at send time, keyed by template id (`emt_…`); only templated sends appear. A single template's…
- `email_stats_daily` _(read)_ — Per-day email stats series (counts, rates, latency percentiles), gap-filled with zero rows, max 365 days. At most one filter of `category`, `sending_domain`,…
- `email_stats_hourly` _(read)_ — Per-hour email stats series, gap-filled with zero rows, max 720 hours (30 days). Takes the same single-dimension filters as `email_stats_daily`; for longer…
- `email_stats_inbound_daily` _(read)_ — Per-day received-email series, gap-filled with zero rows, max 365 days. Takes the same `tag` filter as `email_stats_inbound_summary`. For hour resolution use…
- `email_stats_inbound_hourly` _(read)_ — Per-hour received-email series, gap-filled with zero rows, max 720 hours (30 days). Takes the same `tag` filter as `email_stats_inbound_daily`; for longer…
- `email_stats_inbound_summary` _(read)_ — Aggregate received-email total for one period, as a single row. The `from` and `to` values are both `YYYY-MM-DD` days or both RFC 3339 instants (hour grain).…
- `email_stats_query` _(read)_ — Query email analytics for marketing and transactional delivery, bounces, opens, clicks, engagement rates, and latency percentiles: comparisons, combined…
- `email_stats_summary` _(read)_ — Aggregate email KPIs for one period: sends, delivered, bounces, complaints, opens, clicks, their rates, and latency percentiles. The `from` and `to` values are…
- `email_suppressions_add` _(write)_ — Add an email address to the workspace suppression list to stop delivery to it. The record is created with reason `manual`, which blocks every message category,…
- `email_suppressions_check` _(read)_ — Check whether one email address is suppressed before sending to it. Returns suppressed=true with the matching suppression records (id, reason) when it is.
- `email_suppressions_get` _(read)_ — Look up a suppression by its ID to see which address is blocked, why it was blocked, and which types of messages are blocked. If you have an email address, use…
- `email_suppressions_list` _(read)_ — List the workspace's email suppressions as a cursor page. A suppression blocks delivery to an address. The `email` parameter filters by prefix, so compare the…
- `email_suppressions_remove` _(destructive)_ — Remove one suppression record by ID. Check for other blocking records before resuming delivery. Removing a block without cause can harm sender reputation. An…
- `email_templates_broadcasts_list` _(read)_ — List the broadcasts that block deleting a template, newest first.
- `email_templates_create` _(write)_ — Create a template and its first editable draft, optionally with per-language content. The display name defaults to `slug`, and a used slug returns a conflict.…
- `email_templates_delete` _(destructive)_ — Delete a template and every version it holds, freeing its slug for reuse in the workspace. The deletion cannot be undone, and a later send naming the template…
- `email_templates_duplicate` _(write)_ — Copy a workspace or built-in `system` template into a new unpublished template. Its editable draft inherits the source's current content, category, authoring…
- `email_templates_get` _(read)_ — Read one template's metadata: the state of every language it has, the languages it can send today, the draft revision, and its draft and published version IDs.…
- `email_templates_list` _(read)_ — List email templates as a cursor page. The list covers both the workspace's own templates and our built-in `system` templates. Filter to one tier with `scope`,…
- `email_templates_parameters` _(read)_ — Get the parameters and variables used by the template's published content in one language. The result describes the template and holds no saved values.…
- `email_templates_preview` _(read)_ — Render a template with sample values and return the resulting subject, HTML, and plain-text bodies. Bird does not issue a recipient-specific unsubscribe URL in…
- `email_templates_update` _(write)_ — Change a template's metadata and draft settings without editing its content. Save content on the draft version. Pass the last-read draft `revision`; a…
- `email_templates_versions_delete` _(destructive)_ — Throw away the draft's unsaved changes, resetting its content to what is currently published.
- `email_templates_versions_get` _(read)_ — Read one version of a template: its lifecycle metadata (`status`, `version_number`, `published_at`), the content it froze in every language, and its…
- `email_templates_versions_languages_delete` _(destructive)_ — Remove one language from a template's draft. The current default cannot be removed on its own; update the template to point the default at a different language…
- `email_templates_versions_languages_get` _(read)_ — Read one language's subject and bodies from a template version. The response carries `compatibility`: what the stored HTML uses that mail clients remove,…
- `email_templates_versions_languages_list` _(read)_ — List the languages a template version holds, with each language's revision and fingerprint but not its content.
- `email_templates_versions_languages_set` _(write)_ — Save one language's full content on a template's draft, creating the language if the draft does not have it yet. The response carries `compatibility`: what the…
- `email_templates_versions_languages_update` _(write)_ — Change some fields of one language on a template's draft, leaving the rest as they are. The response carries `compatibility` for the language as saved, the…
- `email_templates_versions_list` _(read)_ — List every version of a template (the draft plus all published versions), newest first.
- `email_templates_versions_rollback` _(destructive)_ — Make an earlier published version live again and reset the draft to its content, so editing continues from it. The change is immediate, creates no new version,…
- `email_templates_versions_submit` _(write)_ — Freeze a complete draft as the new immutable live version. Every language needs a subject and body, and the default language must be present. Submission is all…
- `email_threads_delete` _(destructive)_ — Move a conversation and all its messages to trash (purged after 30 days), or delete permanently with `?permanent=true`.
- `email_threads_get` _(read)_ — Get one conversation: participants, counts, labels, read state. Fetch its messages with the thread messages endpoint.
- `email_threads_list` _(read)_ — List mailbox conversations as a cursor page, most recently active first. `label` selects the view: inbox (default), archive, spam, blocked, or a custom label.…
- `email_threads_messages_attachment` _(read)_ — Download one attachment's raw bytes from a conversation message (inbound or outbound). Available for the mailbox's retention tier after the message occurred.
- `email_threads_messages_attachments` _(read)_ — List the attachments on a conversation message. Bytes are downloadable for the mailbox's retention tier, and the metadata stays readable afterward on the…
- `email_threads_messages_body` _(read)_ — Get the original rendered HTML and plain-text body of a conversation message. Available for 30 days. After that, use the message's extracted_text.
- `email_threads_messages_forward` _(write)_ — Forward a conversation message, with its original body and attachments, to new recipients from the mailbox's own address. Add a plain-text note and optional…
- `email_threads_messages_get` _(read)_ — Get one conversation message with its extracted plain text, readable for the mailbox's full retention tier without MIME parsing.
- `email_threads_messages_list` _(read)_ — List the messages in a conversation newest first, both directions. Page older messages with `starting_after`, and pass `include=extracted_text` to inline each…
- `email_threads_messages_raw` _(read)_ — Get the original RFC 5322 (MIME) content of a received conversation message. Available for 30 days.
- `email_threads_messages_reply` _(write)_ — Reply to a specific conversation message from the mailbox's own address. To reply to a conversation, target its newest received message. Recipients, subject,…
- `email_threads_search` _(read)_ — Full-text search across every mailbox in the workspace, ranked by relevance. Matches a conversation's message subjects, body text, and sender and recipient…
- `email_threads_update` _(write)_ — Add or remove labels on a conversation, or link and unlink a contact. Adding `spam` files it as spam, `archive` clears it out of the inbox, and `inbox` brings…
- `email_tools_analyze_dmarc_report` _(read)_ — Analyze a DMARC aggregate report supplied as `report_xml`. Returns totals, per-source-IP SPF and DKIM alignment results, and actionable findings. The analysis…
- `email_tools_analyze_headers` _(read)_ — Analyze a raw email's headers for headline fields, SPF/DKIM/DMARC verdicts, and the relay path with per-hop delays. Content after the first blank line is…
- `email_tools_audit` _(read)_ — Resolve and validate a domain's live DMARC, SPF, DKIM, BIMI, and MX records, including alignment and SPF lookup-limit checks. Returns severity-tagged findings…
- `email_tools_split_dns_record` _(read)_ — Split a DNS TXT `value` into quoted chunks of at most 255 octets. Returns the raw chunks and a ready-to-publish, quoted, space-joined string without performing…
- `email_tools_validate_bimi` _(read)_ — Validate and parse a BIMI TXT `record`. Returns the logo and certificate URIs with errors and warnings, including non-HTTPS URIs or a missing certificate.…
- `email_tools_validate_dmarc` _(read)_ — Validate and parse a DMARC TXT `record`. Returns the resolved policy with errors and warnings, including a missing `p`, an invalid percentage, or no…
- `email_unsubscribe_page_get` _(read)_ — Fetch the workspace's hosted unsubscribe page settings: the sender name shown on the page (`null` shows the company name), the page colors, and a live example…
- `email_unsubscribe_page_update` _(write)_ — Update the workspace's hosted unsubscribe page. `name` changes the sender name recipients see (`null` shows the company name). The background, text, and accent…
- `esim_assignment_create` _(write)_ — Assigns an existing, allocated eSIM to a subscriber in the same workspace. Unavailable profile states return 409. Identification guidance does not gate…
- `esim_assignment_get` _(read)_ — Returns the assigned person. An unassigned eSIM or a resource outside this workspace returns 404.
- `esim_compatible_offers` _(read)_ — List the offers that can be ordered as a top-up for this specific eSIM right now. Use this before creating a top-up order: the general offer catalog is not the…
- `esim_credentials_deliver` _(write)_ — Send an eSIM's install credentials to the traveler by email or SMS, in English. Use after purchase or to resend installation details.
- `esim_credentials_get` _(read)_ — Read private installation credentials and device instructions. Requires esim_credentials permission. iOS links and manual details are supported; Android…
- `esim_deliveries_list` _(read)_ — List the install-credential deliveries sent for this eSIM, newest first, with each delivery's status and failure code. Use this to answer "did the traveler get…
- `esim_get` _(read)_ — Get one eSIM with its lifecycle status, installation state, current data packages and balances, service-period timestamps, and last network attachment.
- `esim_install_links_create` _(write)_ — Create a private hosted installation link for one eSIM. The recipient needs no Bird login. Links expire after seven days; earlier links remain valid until…
- `esim_install_links_delete` _(destructive)_ — Revoke a hosted install link so its url stops installing the eSIM. Use it when a link went to the wrong person. Already-revoked and expired links succeed.…
- `esim_list` _(read)_ — List the workspace's eSIMs, newest first, as a cursor page ({data, next_cursor, ...}). Filter by status, renewal, iccid, or tag, or search by iccid_prefix,…
- `esim_offers_checkout_options` _(read)_ — Returns published one-time terms and automatic renewal availability for a new eSIM, including tax-inclusive totals and current funding shortfalls. Automatic…
- `esim_offers_get` _(read)_ — Returns one eSIM offer with its pricing and embedded coverage zone.
- `esim_offers_list` _(read)_ — List the prepaid travel eSIM offers available to this workspace as a cursor page ({data, next_cursor, ...}). Filter by country (ISO 3166-1 alpha-2) to find…
- `esim_offers_recurrence` _(read)_ — Returns the published whole-package recurring price and calendar-month or fixed-day cadence. Enrollment additionally checks that the assigned eSIM mobile…
- `esim_offers_requirements` _(read)_ — Returns a complete JSON Schema for each country in the offer coverage zone. First name, last name, and email are always required, including where no country…
- `esim_orders_cancel` _(destructive)_ — Cancel an order waiting for funds. Inspect the returned status: an unfunded order fails with failure_code canceled; an initial recurring order whose payment…
- `esim_orders_create` _(write)_ — Purchase an eSIM data package. Without esim_id a new eSIM is provisioned with the package; with esim_id the package is added to that eSIM. The order locks the…
- `esim_orders_get` _(read)_ — Returns one order. Poll until `status` is `completed` or `failed`; a completed order names the eSIM and package it produced.
- `esim_orders_list` _(read)_ — Returns the workspace's orders as a cursor-paginated list, newest first. Filter by `status` to find in-flight or failed purchases, by `esim_id` for one eSIM's…
- `esim_packages_delete` _(destructive)_ — Remove a data package from an eSIM, freeing room under its package_limit. DESTRUCTIVE: any remaining balance is forfeited and removal itself never credits…
- `esim_packages_get` _(read)_ — Returns one data package with its balance, validity, speed class, and status.
- `esim_packages_list` _(read)_ — Returns the eSIM's data packages with per-zone balances, validity, and status, newest first and in full: an eSIM holds at most package_limit concurrent…
- `esim_recurring_subscriptions_cancel` _(destructive)_ — Stops future package renewal at the current paid boundary. A period already committed remains payable. The installed profile and separately purchased packages…
- `esim_recurring_subscriptions_create` _(write)_ — Purchase the first recurring period on an assigned eSIM. Reuse the required Idempotency-Key and identical request to recover enrollment. Check subscription and…
- `esim_recurring_subscriptions_get` _(read)_ — Returns the current paid period separately from package delivery and cancellation state.
- `esim_recurring_subscriptions_list` _(read)_ — Returns recurring services for assigned eSIMs in this workspace.
- `esim_recurring_subscriptions_periods` _(read)_ — Returns funded periods with their original charges, confirmed credits, and delivery orders. Unfunded renewals do not create a paid period.
- `esim_release` _(destructive)_ — Permanently release an eSIM. Irreversible: it can never be installed or used again, remaining package balances are forfeited, and release never credits…
- `esim_resume` _(write)_ — Resume a suspended eSIM so it can use data again. Confirmed by the esim.resumed event.
- `esim_settings_get` _(read)_ — Read whether the workspace automatically sends install links after new eSIM purchases. Automatic delivery is off by default; manual sending remains available.
- `esim_settings_update` _(write)_ — Change the workspace's eSIM settings and return the effective result. Enable `credential_delivery_enabled` to automatically email the linked contact an install…
- `esim_subscribers_create` _(write)_ — Create or return a subscriber for a workspace contact. Requires email_marketing read and esim write. Does not buy or assign an eSIM. The association blocks…
- `esim_subscribers_get` _(read)_ — Returns the contact reference for a subscriber in this workspace. Contact details remain available through Contacts with its separate permissions.
- `esim_subscribers_list` _(read)_ — Returns person references in this workspace, newest first. Filter by contact_id to find an existing subscriber.
- `esim_suspend` _(write)_ — Suspend an eSIM's data service (reversible; validity keeps running). Confirmed by the esim.suspended event. Use resume to restore service.
- `esim_update` _(write)_ — Updates the eSIM's display name, tags, or metadata. Lifecycle and connectivity are managed through the dedicated endpoints.
- `esim_waitlist_join` _(write)_ — Record this account's interest in Bird eSIM, which is not generally available yet. Bird's product team reads the list; nothing is sent to the caller in…
- `esim_zones_get` _(read)_ — Returns one coverage zone with its authoritative country list.
- `esim_zones_list` _(read)_ — List the coverage zones eSIM offers sell, as a cursor page ({data, next_cursor, ...}). Each zone carries its authoritative country list. Filter by country (ISO…
- `invitations_create` _(write)_ — Invite an address to this workspace. If it matches an organization member who is not in this workspace yet, they are added directly. The response returns a…
- `invitations_get` _(read)_ — Read one workspace invitation, including its current status and when it expires.
- `invitations_list` _(read)_ — List the workspace's invitations as a page. Only pending ones come back unless you pass a status filter.
- `invitations_revoke` _(destructive)_ — Cancel a pending workspace invitation. The link stops working immediately and the invitee can no longer use it to join.
- `lookup_email` _(write)_ — Create a deliverability lookup for one email address. Returns `result`, `delivery_confidence`, address `flags`, an assessment `reason`, and `did_you_mean` when…
- `lookup_email_batch` _(write)_ — Assess up to 1,000 email addresses in one request. Results preserve input order and duplicates; malformed addresses receive individual assessments. Each…
- `lookup_phone_number` _(write)_ — Create a lookup for a phone number's networks, porting state, country, and line type. Pass `type` to request separately billed `classification`, `porting`,…
- `members_create` _(write)_ — Add an existing organization member to this workspace by user id, with a workspace role. Organization membership is the precondition: a user who does not have…
- `members_delete` _(destructive)_ — Remove a user's role grant in this workspace. They remain a member of the organization.
- `members_list` _(read)_ — List users with explicit workspace grants and inherited organization-owner or organization-admin access, newest grant first.
- `members_update` _(write)_ — Change a user's workspace role. They must already be a member of this workspace.
- `numbers_available_get` _(read)_ — Re-checks one number from `numbers_available_list` against the carrier, so a stale search result is caught before it is ordered, and returns its setup and…
- `numbers_available_list` _(read)_ — Searches one country's numbers on sale, each with the setup and recurring price for your organization. Our own inventory answers first and pages; the last page…
- `numbers_cancel` _(destructive)_ — Stops a dedicated number renewing and keeps it allocated until the end of the period already paid for, when it is released. Cannot be undone; read…
- `numbers_get` _(read)_ — Reads one allocated number by the id `numbers_list` returns. Carries its status, its `pricing` for your organization (`null` for a shared number or, when the…
- `numbers_list` _(read)_ — Pages the numbers allocated to the workspace, dedicated and shared alike, each with its `pricing` for your organization: `null` for a shared number or, when…
- `numbers_orders_create` _(write)_ — Buys a number and starts its recurring charge. The available number’s `pricing` is the current price and sets the cadence: each charge bills `recurring_price`…
- `numbers_orders_get` _(read)_ — Reads one order's current state, and the number it produced once completed. This is the poll for an order that came back pending.
- `numbers_orders_list` _(read)_ — Pages the workspace's purchase attempts, newest first, filtered by status. An order outlives its attempt, so a failure stays readable with the reason it…
- `numbers_release` _(destructive)_ — Gives a dedicated number back now and stops its recurring charge, forfeiting the rest of the period already paid for. Irreversible: the number leaves the…
- `numbers_update` _(write)_ — Set the name or your own reference on an allocated number. Omit a field to preserve it, or send null to clear it. Applies to dedicated and shared numbers.
- `operation_confirmations_get` _(read)_ — Read one proposal, its review, and its result once it has run. Reading decides nothing and starts nothing, so it is how you collect the outcome of work you…
- `operation_confirmations_list` _(read)_ — List the proposals you made that are still waiting for a person to review them in this workspace, newest first, each with its `review_url`. Use it to find a…
- `organization_invitations_create` _(write)_ — Invite an address to the organization with an organization role, workspace roles, or both. At least one of the two must be supplied.
- `organization_invitations_get` _(read)_ — Read one organization invitation, including its current status and when it expires.
- `organization_invitations_list` _(read)_ — List the organization's invitations. Only pending ones come back unless you pass a status filter.
- `organization_invitations_revoke` _(destructive)_ — Cancel a pending organization invitation. The link stops working immediately and the invitee can no longer use it to join. Returns a conflict if the invitation…
- `organization_members_delete` _(destructive)_ — Remove a member's organization role and all workspace roles at once. Rejects removing yourself from the organization and removing the organization's last owner.
- `organization_members_get` _(read)_ — Read one organization member: their organization role and every workspace role they hold.
- `organization_members_list` _(read)_ — List everyone holding any grant in the organization, whether an organization role or only a workspace role.
- `organization_members_update` _(write)_ — Change a member's organization-level role, or pass `org_role: null` to remove it while keeping their workspace roles. Rejects changes to your own role,…
- `organization_workspaces_create` _(write)_ — Create a workspace in the caller's organization. Requires organization-level write access.
- `organization_workspaces_delete` _(destructive)_ — Delete a workspace. Access ends at once, with the workspace hidden and its API keys revoked, while its data and configuration are held for 7 days and can be…
- `organization_workspaces_get` _(read)_ — Read any workspace in the organization by ID, including one where the caller holds no workspace-level role.
- `organization_workspaces_list` _(read)_ — List the organization's workspaces as a page, newest first by default.
- `organization_workspaces_quotas_delete` _(destructive)_ — Remove a workspace's own limit for one resource or value quota, leaving only the shared organization limit. Succeeds when no workspace limit is set, and works…
- `organization_workspaces_quotas_list` _(read)_ — List the resource and value quotas for any workspace in the organization: the shared organization limit, the workspace's own limit and its expiry, current…
- `organization_workspaces_quotas_update` _(write)_ — Set or replace a workspace's own limit for one resource or value quota. The limit is a ceiling, not reserved capacity: the organization limit still applies,…
- `organization_workspaces_update` _(write)_ — Update mutable fields on any workspace in the organization, including one the caller holds no workspace-level access to.
- `platform_feedback` _(write)_ — Send the person's feedback about Bird to the Bird team as one message, from their signed-in account, and return a receipt id. Bird may reply to the account's…
- `platform_support_create` _(write)_ — Open a support ticket and return the created ticket. A ticket's reply arrives asynchronously, while `docs_search` and the [docs…
- `platform_support_get` _(read)_ — Read a support ticket and its full message history. Replies arrive asynchronously; re-read the ticket until a message with `sender_type: agent` appears that…
- `platform_support_list` _(read)_ — List the support tickets opened from this workspace's organization, newest first, with each ticket's status and title. Messages are not included; use…
- `platform_support_reply` _(write)_ — Reply to an existing support ticket by its ID. The response contains only the ticket ID; use `platform_support_get` for the updated message history.
- `platform_support_viewed` _(write)_ — Record that the authenticated user has seen this support thread. This suppresses a reply-notification email when the user has already read the latest support…
- `preferences_create` _(write)_ — Record a consent grant or an opt-out for a handle on one channel. An upsert by key: the same channel, handle, and sender scope update one record, and an…
- `preferences_delete` _(destructive)_ — Delete a recorded preference, returning its key to having no record at all. Refused on a statement the person made themselves: an unsubscribe or a stop keyword…
- `preferences_get` _(read)_ — Read one recorded preference by ID: the channel and handle it is about, whether it grants or revokes, how much traffic it covers, and where the statement came…
- `preferences_list` _(read)_ — List the workspace's stated messaging preferences (consent grants and opt-outs) as a cursor page. Filter by channel, and by handle within a channel, to look up…
- `pricing` _(read)_ — Read Bird's published pricing pages as Markdown. Without a product, list the pricing pages that bird.com publishes. With a product, return that page, including…
- `realtime_apps_create` _(write)_ — Provision a Realtime app and its first key. `region` is immutable once set and must be one of `realtime_regions_list`. The response is the only place the key's…
- `realtime_apps_delete` _(destructive)_ — Permanently delete a Realtime app. Every connected client is disconnected, all keys and configuration are removed, and clients holding one of its keys start…
- `realtime_apps_get` _(read)_ — Read one Realtime app's configuration and the connection details a client needs (`app_id`, `region`). Key material is never included, so a client that also…
- `realtime_apps_keys_create` _(write)_ — Add a key to an app and read its secret. Takes no body. This response is the only place the secret appears, so a caller that does not capture it has to create…
- `realtime_apps_keys_list` _(read)_ — List an app's keys, oldest first, without their secrets: a secret is readable only in the response that created it. Revoked keys are excluded unless…
- `realtime_apps_keys_revoke` _(destructive)_ — Revoke a key. It stops working immediately and every client still holding it fails, so revoke only after the replacement is rolled out. The record survives…
- `realtime_apps_list` _(read)_ — List the workspace's Realtime apps as a cursor page, filterable by a case-insensitive `name` substring. Each entry carries the connection details a client…
- `realtime_apps_update` _(write)_ — Rename a Realtime app or change its configuration flags. Omitted fields keep their current value. Region cannot be changed after creation, so moving an app to…
- `realtime_regions_list` _(read)_ — List the regions a Realtime app can be created in. Read this before creating an app: `region` is immutable, and the identifiers here are the only accepted…
- `request_logs_get` _(read)_ — Read one request log entry with the captured request and response bodies that list responses omit, sensitive fields redacted and oversized values truncated.…
- `request_logs_histogram` _(read)_ — Read five-minute request and error counts for a window, to plot above the request log. Empty buckets are omitted, the window defaults to the last 24 hours, and…
- `sms_10dlc_brands_create` _(write)_ — Register a 10DLC brand with the business identity details US carriers require. The brand starts pending while the registry reviews it; only once it is approved…
- `sms_10dlc_brands_delete` _(destructive)_ — Delete a 10DLC brand from the workspace. Irreversible; register a replacement with `sms_10dlc_brands_create` if needed. Fails if a campaign still references…
- `sms_10dlc_brands_get` _(read)_ — Get one 10DLC brand's business identity details and registration status.
- `sms_10dlc_brands_list` _(read)_ — List the workspace's 10DLC brands, optionally filtered by registration status. Use `sms_10dlc_brands_get` for one brand's full details.
- `sms_10dlc_brands_requirements` _(read)_ — Lists what the campaign registry wants before it will accept a brand, in the order to present it, with what you have already supplied and where each item…
- `sms_10dlc_brands_submissions_create` _(write)_ — Resubmit a rejected 10DLC brand with corrected details for registry review. The new details replace what the previous attempt submitted, and the brand returns…
- `sms_10dlc_brands_submissions_get` _(read)_ — Get one submission attempt of a 10DLC brand, including the details that were submitted.
- `sms_10dlc_brands_submissions_list` _(read)_ — List the submission attempts for a 10DLC brand, most recent first.
- `sms_10dlc_brands_update` _(write)_ — Update the editable details of an approved 10DLC brand: display name, website, vertical, contact name, email, phone numbers, address, and alternative business…
- `sms_10dlc_brands_vettings_create` _(write)_ — Order external vetting for a 10DLC brand: `standard` for any approved brand, or `auth_plus` for a `public_profit` brand with a `business_contact_email` set…
- `sms_10dlc_brands_vettings_list` _(read)_ — List every external vetting attempt ordered for a 10DLC brand, across all vetting classes, most recent first.
- `sms_10dlc_campaign_number_links_get` _(read)_ — Get a 10DLC campaign number link by its own ID, without needing its campaign ID first.
- `sms_10dlc_campaigns_create` _(write)_ — Register a 10DLC campaign under an approved brand. A brand registered as a publicly-traded company must hold active Auth+ vetting first. The campaign starts…
- `sms_10dlc_campaigns_delete` _(destructive)_ — Delete a 10DLC campaign from the workspace. Fails if a number is still linked to it; unassign every number first with `sms_10dlc_campaigns_numbers_unassign`.
- `sms_10dlc_campaigns_get` _(read)_ — Get one 10DLC campaign by ID.
- `sms_10dlc_campaigns_list` _(read)_ — List the 10DLC campaigns registered for the workspace, optionally filtered by brand.
- `sms_10dlc_campaigns_numbers_assign` _(write)_ — Assign the workspace's US long codes to a 10DLC campaign so they can send to US recipients once the carriers confirm each number. Either every number in the…
- `sms_10dlc_campaigns_numbers_get` _(read)_ — Get one number registered under a 10DLC campaign and where it stands with the carriers.
- `sms_10dlc_campaigns_numbers_list` _(read)_ — List the numbers registered under a 10DLC campaign and where each stands with the carriers.
- `sms_10dlc_campaigns_numbers_unassign` _(destructive)_ — Remove a number from a 10DLC campaign. The number stops sending to US recipients immediately and is free to assign to another campaign.
- `sms_10dlc_campaigns_requirements` _(read)_ — Lists what the campaign registry wants before it will accept a campaign, in the order to present it, with what you have already supplied and where each item…
- `sms_10dlc_campaigns_submissions_create` _(write)_ — Resubmit a rejected 10DLC campaign with corrected details for registry review. The new details replace what the previous attempt submitted, and the campaign…
- `sms_10dlc_campaigns_submissions_get` _(read)_ — Get one submission attempt of a 10DLC campaign, including the details that were submitted.
- `sms_10dlc_campaigns_submissions_list` _(read)_ — List the submission attempts for a 10DLC campaign, most recent first.
- `sms_destinations_list` _(read)_ — List every country the SMS service supports, each marked with whether your workspace has enabled it and whether it is currently deliverable. The two are…
- `sms_destinations_update` _(write)_ — Enable or disable destination countries for your workspace, and set or remove each country's daily spend limit. Only the countries you list change; any country…
- `sms_get` _(read)_ — Get one SMS message by ID: its current delivery status, segment breakdown, cost, and failure detail if it failed.
- `sms_keyword_rules_create` _(write)_ — Replace the default opt-out, opt-in, or help reply for one country, or add a `custom` keyword. A workspace rule takes precedence over the default for that…
- `sms_keyword_rules_delete` _(destructive)_ — Delete one of your own keyword rules, which restores Bird's default for that country and operation. Bird's own rules cannot be deleted.
- `sms_keyword_rules_get` _(read)_ — Read one default or workspace keyword rule. Its ID prefix identifies which kind: a workspace rule can be changed with `sms_keyword_rules_update`, a Bird…
- `sms_keyword_rules_list` _(read)_ — List the default and workspace keyword rules that apply to inbound messages, most specific first. Filter by `country`, `number`, `operation`, or `scope`. Pass…
- `sms_keyword_rules_update` _(write)_ — Change one of your own keyword rules: its reply, its extra keywords, or its self-managed attestation. Bird's default rules cannot be updated; create your own…
- `sms_list` _(read)_ — List SMS messages, newest first, as a cursor page (`data`, `next_cursor`). Pass `next_cursor` back as `starting_after` to fetch the next page. Filter by…
- `sms_list_events` _(read)_ — The lifecycle event timeline for one SMS, oldest first: what happened to it and when. Filter with `type` (for example `sms.delivered`) to keep one kind of…
- `sms_send` _(write)_ — Send one SMS to a single recipient. Supply either `text` (with `category` and `from`) or a stored `template` (by ID or slug, with its `parameters`). A…
- `sms_send_batch` _(write)_ — Send up to 100 independent SMS messages in one call. Each item is a full send (free-text or template) with its own ID, status, and cost; all items are…
- `sms_senders_create` _(write)_ — Claims an alphanumeric sender for this workspace. The organization's identity verification must be complete first, and only a person can complete it, through a…
- `sms_senders_get` _(read)_ — One sender and where it stands per country. Read it when you already hold the id and want that sender alone; `sms_senders_list` is how you find the id in the…
- `sms_senders_list` _(read)_ — Every sender your workspace can send from, dedicated numbers and alphanumeric strings alike, each carrying where it stands per country. Start here when you do…
- `sms_senders_registrations_create` _(write)_ — Registers a sender to send to one country. Where the country reviews registrations the record comes back pending and nothing is charged yet; it is billed if…
- `sms_senders_requirements` _(read)_ — One row per country this sender can reach, saying whether a registration is required, where the sender stands with it, and what to do next. Read this before…
- `sms_stats_by_carrier` _(read)_ — SMS delivery and latency stats grouped by the carrier that handled the message, ranked by the `sort` metric (default `accepted`) and capped by `limit` (default…
- `sms_stats_by_category` _(read)_ — SMS delivery and latency stats grouped by the category you sent under, ranked by the `sort` metric (default `accepted`) and capped by `limit` (default 50,…
- `sms_stats_by_country` _(read)_ — SMS delivery and latency stats grouped by destination country, ranked by the `sort` metric (default `accepted`) and capped by `limit` (default 50, maximum…
- `sms_stats_by_error_code` _(read)_ — SMS stats grouped by our normalized failure reason, which answers which reasons are driving your failures. The grouping key is the same value as the…
- `sms_stats_by_originator` _(read)_ — SMS delivery and latency stats grouped by originator, the sender address messages went out from, ranked by the `sort` metric (default `accepted`) and capped by…
- `sms_stats_by_status` _(read)_ — How many messages ended the period in each lifecycle status: accepted, sent, delivered, undelivered, failed, rejected, expired, ordered by count. The "where…
- `sms_stats_by_tag` _(read)_ — SMS delivery and latency stats grouped by tag (`name:value`), ranked by the `sort` metric (default `accepted`) and capped by `limit` (default 50, maximum 200).…
- `sms_stats_daily` _(read)_ — One row of SMS lifecycle counts per calendar day, for charts and trend lines. The window is at most 365 days; set `timezone` to get local calendar days instead…
- `sms_stats_hourly` _(read)_ — One row of SMS lifecycle counts per hour, for inspecting send rate and deliverability inside a single day. The window is at most 30 days (720 rows) and both…
- `sms_stats_inbound_by_country` _(read)_ — Messages your numbers received, grouped by the country of the receiving number.
- `sms_stats_inbound_by_number` _(read)_ — How many messages each of your numbers received, which is the view that shows whether a campaign's reply traffic is landing on the number you expect.
- `sms_stats_inbound_by_operator` _(read)_ — Messages your numbers received, grouped by the sender's mobile operator. Messages whose operator the carrier did not report are excluded, so these rows can sum…
- `sms_stats_inbound_daily` _(read)_ — Messages your numbers received, one row per calendar day. Set `timezone` to get local calendar days instead of UTC.
- `sms_stats_inbound_hourly` _(read)_ — Messages your numbers received, one row per hour, for inspecting inbound volume inside a single day.
- `sms_stats_inbound_summary` _(read)_ — Total messages your numbers received over a period. For a breakdown use `sms_stats_inbound_by_country`, `sms_stats_inbound_by_operator`, or…
- `sms_stats_summary` _(read)_ — Aggregate SMS KPIs for one period: accepted, sent, delivered, undelivered, failed, rejected and expired counts, the derived delivery and failure rates, and…
- `sms_suppressions_add` _(write)_ — Stop one of your senders from messaging one subscriber. Covers that sender only; your other senders keep reaching them.
- `sms_suppressions_get` _(read)_ — Read one SMS suppression: the sender and subscriber it covers, why messages are stopped, what it blocks, and whether it is still in force. To check whether you…
- `sms_suppressions_list` _(read)_ — List the workspace's SMS suppressions (sender-and-subscriber pairs blocked from delivery) as a cursor page.
- `sms_suppressions_remove` _(destructive)_ — End a manual SMS suppression, letting that sender message that subscriber again. Only reason `manual` can be ended this way: a subscriber's own stop keyword…
- `sms_templates_get` _(read)_ — Read one SMS template's metadata, language states, draft revision, and draft and live version IDs. The response omits content and variables; read a version to…
- `sms_templates_list` _(read)_ — List workspace and built-in SMS templates as a cursor page. Filter by scope, category, status, language, or a search across slug, name, and description. Read a…
- `sms_templates_versions_get` _(read)_ — Read one draft or published SMS template version, including its variables and text in every language. Built-in templates expose their current catalogue content…
- `sms_templates_versions_languages_get` _(read)_ — Read one language's full text, revision, content hash, and update time from a draft, published version, or built-in template's synthetic version.
- `sms_templates_versions_languages_list` _(read)_ — List a version's languages without their text. Each summary includes its revision, content hash, and last update time. Read a language item to retrieve its…
- `sms_templates_versions_list` _(read)_ — List a template's permanent draft and immutable published versions, newest first. Built-in templates expose their current catalogue content as one synthetic…
- `sms_tfn_verifications_cancel` _(destructive)_ — Cancels a draft verification and frees the toll-free number it held, so the number can be put on a new one. Only a draft can be canceled: once a verification…
- `sms_tfn_verifications_create` _(write)_ — Opens a draft verification against a toll-free sender this workspace owns. Only the sender is required; the dossier is filled in afterwards with…
- `sms_tfn_verifications_get` _(read)_ — Reads one verification: the state it is in, the sender it licenses, and what the carrier said about it. `denial_reasons` carries the carrier's own words when…
- `sms_tfn_verifications_list` _(read)_ — Lists the toll-free verifications this workspace holds, newest first. Filter by `status` to separate the drafts still being filled in from the ones a carrier…
- `sms_tfn_verifications_requirements` _(read)_ — Lists everything the carriers ask for before they will review a toll-free verification, in the order to present it, with what you have already supplied and…
- `sms_tfn_verifications_update` _(write)_ — Fills in the business and messaging details of a verification that is still editable: a draft, one the carrier sent back asking for more, or a rejected one…
- `trust_actions_requirements` _(read)_ — Lists the trust requirements one action depends on (`buy_number`, `register_sender_id`, `add_sender_id` or `register_verified_number`), each with whether the…
- `trust_gates_get` _(read)_ — One trust requirement by its slug, with the same fields the list carries. Read it to re-check a single requirement after starting its verification, rather than…
- `trust_gates_list` _(read)_ — Every trust requirement your organization must satisfy before it can acquire numbers or send, and where each one stands. Read it first when an acquisition or a…
- `trust_gates_verification_check` _(write)_ — Submits the one-time code a customer received, completing a code-verified requirement. Only when `trust_gates_verification_create` answered with `sent_to`; a…
- `trust_gates_verification_create` _(write)_ — Starts the verification for one requirement, and what comes back decides who finishes it. A provider-hosted requirement answers with `hosted_url`: give that…
- `verify_verifications_check` _(write)_ — Check a passcode a recipient submitted. Identify the verification by the same `to` recipient used to start it; no verification ID is needed. A wrong or expired…
- `verify_verifications_create` _(write)_ — Start a verification and send a one-time passcode to the email address, phone number, or both in `to`. Delivery uses one planned channel at a time and fails…
- `verify_verifications_next_channel` _(write)_ — Advance an in-progress verification to its next channel and send a fresh passcode. Identify it with the same `to` recipient used to create it; no verification…
- `voice_calls_create` _(write)_ — Proposes a real outbound call for browser confirmation. Requires voice_management:write and voice:write; normal calling charges apply. Set `sequence.id` to run…
- `voice_calls_get` _(read)_ — Get one call by ID, live or ended: its direction, start and end, whether a leg is still live, whether it produced a recording or transcript, and who took part.…
- `voice_calls_list` _(read)_ — List the workspace's calls, newest first by the initial leg's start. A call groups its initial leg and any legs added by forwarding or dialing, and parties…
- `voice_destinations_list` _(read)_ — Every country the Voice service supports, each marked with whether the workspace has enabled it, whether the platform supports calling it (status), and its…
- `voice_destinations_update` _(write)_ — Enable or disable the countries this workspace may place voice calls to. Only the countries you list change; any country you omit keeps its current setting.…
- `voice_legs_get` _(read)_ — Fetch one leg by ID, at any point in its lifecycle. A leg still ringing or connected carries no economics yet: `duration_ms`, `billable_ms`, `ended_at`, and…
- `voice_legs_list` _(read)_ — List the workspace's legs, newest first. Filter to `ringing`/`in_progress` for the legs in progress right now, to final statuses for completed records, or to…
- `voice_numbers_get` _(read)_ — Fetch one phone number the workspace can use for voice by id: where its calls go, whether it may be presented on an outbound call, and where it came from. Use…
- `voice_numbers_list` _(read)_ — List every phone number the workspace can use for voice, as a cursor page ordered by number. Each entry is one phone number, with where its calls go and…
- `voice_numbers_update` _(write)_ — Change what happens to calls arriving for one number, or the workspace's own label for it. Set the route to null to follow the workspace default inbound route…
- `voice_session_credentials_create` _(write)_ — Mint a short-lived SIP digest credential a calling client authenticates with. The password is returned once and cannot be retrieved again.
- `voice_settings_get` _(read)_ — Read the workspace's voice settings: the default inbound route that every Bird number without its own route follows, and the daily spend limit with today's…
- `voice_settings_update` _(write)_ — Change the workspace's default inbound route. Every Bird number whose own route is null follows it from the next call (verified caller IDs receive no calls):…
- `voice_stats_by_country` _(read)_ — Voice stats grouped by destination country, ranked by `sort` (default `total_legs`) and capped at `limit` (default 50, max 200); the response's `total` tells a…
- `voice_stats_by_hour_of_day` _(read)_ — Groups completed call legs by hour of day over up to 365 days. All 24 local hours are returned, numbered 0 through 23, including hours with no legs. Repeated…
- `voice_stats_by_number` _(read)_ — Groups completed call legs by own number over up to 365 days. The own number is the source on outbound legs and the destination on inbound legs. Friendly names…
- `voice_stats_by_number_country` _(read)_ — Groups completed call legs by own number country over up to 365 days. The country belongs to the own number: the source on outbound legs and the destination on…
- `voice_stats_by_response_code` _(read)_ — Leg counts grouped by final SIP response code, the "how are my calls ending" view. Successes are rows too (`200` is one), so the rows sum to the whole period…
- `voice_stats_by_trunk` _(read)_ — Voice stats grouped by SIP trunk, ranked by `sort` (default `total_legs`) and capped at `limit` (default 50, max 200); the response's `total` tells a capped…
- `voice_stats_by_weekday` _(read)_ — Groups completed call legs by weekday over up to 365 days. All seven weekdays are returned, numbered 1 for Monday through 7 for Sunday, including weekdays with…
- `voice_stats_daily` _(read)_ — Per-day voice stats series (total and answered legs, `asr`, `acd_ms`), gap-filled with zero rows so a chart never interpolates, max 365 days. Set `timezone` to…
- `voice_stats_hourly` _(read)_ — Per-hour voice stats series (total and answered legs, `asr`, `acd_ms`), gap-filled with zero rows, max 30 days (720 rows). A longer window returns 422, so use…
- `voice_stats_summary` _(read)_ — Get one aggregate row of call-quality and duration metrics. `total_duration_ms` covers every leg; `total_billable_ms` covers answered legs. Use matching day or…
- `voice_trunks_create` _(write)_ — Create a new SIP trunk for the workspace. Returns the Bird-assigned domain to configure in the customer's PBX or SIP client.
- `voice_trunks_delete` _(destructive)_ — Delete a SIP trunk by ID. Calls in progress are not affected; new calls cannot use the trunk. Its generated domain is not reused.
- `voice_trunks_gateways_create` _(write)_ — Add an address for inbound call delivery. Enable inbound calling on the trunk first; a trunk supports up to 20 gateways.
- `voice_trunks_gateways_delete` _(destructive)_ — Remove an inbound gateway. Removing the last gateway stops new inbound delivery through the trunk. Requires inbound calling enabled.
- `voice_trunks_gateways_get` _(read)_ — Read one inbound gateway and its SIP address, priority, and number formats. The gateway must belong to the specified trunk in this workspace.
- `voice_trunks_gateways_list` _(read)_ — Read the complete inbound gateway list for a trunk, ordered by priority. Available even when inbound calling is disabled.
- `voice_trunks_gateways_update` _(write)_ — Change an inbound gateway address, priority, or number formats. Omitted fields stay unchanged; an empty format restores E.164. Requires inbound calling enabled.
- `voice_trunks_get` _(read)_ — Fetch one SIP trunk by ID: its `domain`, `ip_acls`, and `allowed_api_key_ids`. Use `voice_trunks_list` to find the ID.
- `voice_trunks_list` _(read)_ — List the workspace's SIP trunks as a cursor page. Each carries the Bird-assigned `domain` the customer's equipment sends calls to. The `ip_acls` and…
- `voice_trunks_update` _(write)_ — Change a SIP trunk's directions, name, access control and Digest offer. A direction has to be enabled before its settings can be set, and one update can do…
- `voice_verified_numbers_create` _(write)_ — Register a phone number as an outbound caller ID for the workspace. This places a verification call to the number that reads out a code, so register only a…
- `voice_verified_numbers_delete` _(destructive)_ — Permanently delete a verified number by ID. After deletion the number can no longer be presented as the outbound caller ID and must be re-registered and…
- `voice_verified_numbers_get` _(read)_ — Fetch one verified number by ID, with its verification status. Use `voice_verified_numbers_list` to find the ID.
- `voice_verified_numbers_list` _(read)_ — List the workspace's verified numbers and their verification status, as a cursor page. Only a verified number may be presented on an outbound call, so an…
- `voice_verified_numbers_update` _(write)_ — Set or clear the label on a verified number; send `name` as null to clear it. The number and its verification state are unchanged, and the label never appears…
- `voice_verified_numbers_verify` _(write)_ — Complete the ownership verification challenge that `voice_verified_numbers_create` started. Recovery may place another verification call and requires…
- `webhooks_attempts` _(read)_ — List an endpoint's recent delivery attempts, newest first. Each entry is one HTTP request, so a retried event appears once per try. Pagination uses the…
- `webhooks_create` _(write)_ — Register an HTTPS endpoint to receive this workspace's events, subscribed to the event types in `events` and active immediately. The response is the only place…
- `webhooks_delete` _(destructive)_ — Permanently remove an endpoint and stop every delivery to it, including retries of earlier failures. Recreating it later mints a new ID and signing secret; to…
- `webhooks_get` _(read)_ — Read one endpoint's URL, subscribed event types, and current delivery status. The signing secret is never included, and can only be rotated rather than…
- `webhooks_list` _(read)_ — List the workspace's webhook endpoints (URL, subscribed events, status) as a cursor page.
- `webhooks_replay` _(write)_ — Queue redelivery of this endpoint's failed attempts in a window (default: the last 24 hours). An event is skipped only if one of its attempts inside the window…
- `webhooks_rotate_secret` _(destructive)_ — Mint a new signing secret and return it exactly once; it cannot be retrieved afterward. Both the old and new secrets sign every delivery for 24 hours, after…
- `webhooks_test` _(write)_ — Send a signed synthetic event and get the outcome synchronously: whether the endpoint accepted, the HTTP status it returned, and the round-trip latency. An…
- `webhooks_update` _(write)_ — Change an endpoint's URL, description, subscribed event types, or delivery status. Only the fields sent change: `events` replaces the whole subscription set,…
- `whatsapp_agents_allowlist_create` _(write)_ — Allow one more contact for the agent on this WhatsApp number to answer while its `ai_audience` is `allowlist`. Use it to try the agent on chosen people before…
- `whatsapp_agents_allowlist_delete` _(destructive)_ — Remove one allowlist entry from the agent on this WhatsApp number, at WhatsApp and here. The agent stops using it from the next conversation turn.
- `whatsapp_agents_allowlist_get` _(read)_ — Read one allowlist entry the agent on this WhatsApp number holds.
- `whatsapp_agents_allowlist_list` _(read)_ — List the allowlist entries the agent on this WhatsApp number holds, as a cursor page.
- `whatsapp_agents_business_info_get` _(read)_ — Read what the agent on one WhatsApp number knows about the business itself: what it does, how a contact buys, delivery, returns, payment and how to reach the…
- `whatsapp_agents_business_info_update` _(write)_ — Change what the agent knows about the business. Send only the fields to change; omitted fields are left alone, and a null field is cleared, except under…
- `whatsapp_agents_create` _(write)_ — Onboard an agent on one WhatsApp number. The agent starts turned off and answering nobody, so nothing a contact sees changes. A number WhatsApp has not found…
- `whatsapp_agents_delete` _(destructive)_ — Remove the agent from its number, so nothing answers contacts there automatically any more. Its questions, websites, files, skills and allowlist go with it, so…
- `whatsapp_agents_faqs_create` _(write)_ — Give the agent on this WhatsApp number one more question and answer to work from. It reaches WhatsApp before this returns and is used from the next…
- `whatsapp_agents_faqs_delete` _(destructive)_ — Remove one question and answer from the agent on this WhatsApp number, at WhatsApp and here. The agent stops using it from the next conversation turn.
- `whatsapp_agents_faqs_get` _(read)_ — Read one question and answer the agent on this WhatsApp number holds.
- `whatsapp_agents_faqs_list` _(read)_ — List the questions and answers the agent on this WhatsApp number holds, as a cursor page.
- `whatsapp_agents_faqs_update` _(write)_ — Change one question and answer the agent on this WhatsApp number holds. Omitted fields are left alone, and the change reaches WhatsApp before this returns.
- `whatsapp_agents_files_delete` _(destructive)_ — Remove one file from the agent on this WhatsApp number, at WhatsApp and here. The agent stops using it from the next conversation turn.
- `whatsapp_agents_files_download` _(read)_ — Download the bytes of a file the agent on this WhatsApp number holds. The file ID is the `id` on an entry from `whatsapp_agents_files_list`. Up to 5 MiB, the…
- `whatsapp_agents_files_get` _(read)_ — Read one file the agent on this WhatsApp number holds; its `url` downloads the bytes.
- `whatsapp_agents_files_list` _(read)_ — List the files the agent on this WhatsApp number holds, as a cursor page. Each entry's `url` downloads its bytes.
- `whatsapp_agents_get` _(read)_ — Read the agent on one WhatsApp number: whether WhatsApp has finished preparing it. Whether it is answering and who it may answer are in its settings; what it…
- `whatsapp_agents_list` _(read)_ — One row per WhatsApp number your workspace connected itself, saying whether WhatsApp allows an agent on it and, when one has been onboarded, whether it is…
- `whatsapp_agents_notifications_create` _(write)_ — Tell the agent on the `from` business number that something happened in your systems for one contact, such as a payment landing or an order shipping, so it can…
- `whatsapp_agents_notifications_get` _(read)_ — Read one notification sent to one of your agents, with what came of it.
- `whatsapp_agents_notifications_list` _(read)_ — List the notifications sent to the agents on your WhatsApp numbers, newest first, each with what came of it, as a cursor page. Filter by `from` for one…
- `whatsapp_agents_settings_get` _(read)_ — Read how the agent on one WhatsApp number behaves: whether it is answering and since when, who it may answer, how it hands over and follows up, and what it…
- `whatsapp_agents_settings_update` _(write)_ — Change how the agent behaves: turn it on or off, set who it may answer, how it hands over and follows up, and what it must never say. Omitted fields are left…
- `whatsapp_agents_skills_create` _(write)_ — Give the agent on this WhatsApp number a skill: when a situation applies, and what to do then. It reaches WhatsApp before this returns and is used from the…
- `whatsapp_agents_skills_delete` _(destructive)_ — Remove one skill from the agent on this WhatsApp number, at WhatsApp and here. The agent stops using it from the next conversation turn.
- `whatsapp_agents_skills_get` _(read)_ — Read one skill the agent on this WhatsApp number holds.
- `whatsapp_agents_skills_list` _(read)_ — List the skills the agent on this WhatsApp number holds, as a cursor page.
- `whatsapp_agents_skills_update` _(write)_ — Change one skill the agent on this WhatsApp number holds. Omitted fields are left alone, and the change reaches WhatsApp before this returns.
- `whatsapp_agents_test` _(write)_ — Put a message to the agent on this WhatsApp number and read its answer, without anything reaching a contact. It answers from its live configuration, which is…
- `whatsapp_agents_ui_skills_create` _(write)_ — Let the agent on this WhatsApp number answer with a rich message component in a situation you describe. `component_type` cannot be changed afterwards.
- `whatsapp_agents_ui_skills_delete` _(destructive)_ — Remove one rich-message skill from the agent on this WhatsApp number, at WhatsApp and here. The agent stops using it from the next conversation turn.
- `whatsapp_agents_ui_skills_get` _(read)_ — Read one rich-message skill the agent on this WhatsApp number holds.
- `whatsapp_agents_ui_skills_list` _(read)_ — List the rich-message skills the agent on this WhatsApp number holds, as a cursor page.
- `whatsapp_agents_ui_skills_update` _(write)_ — Change one rich-message skill the agent on this WhatsApp number holds. Omitted fields are left alone, and the change reaches WhatsApp before this returns.
- `whatsapp_agents_websites_create` _(write)_ — Give the agent on this WhatsApp number a website to learn from. WhatsApp reads it in the background, so check the entry's `crawl_status` with…
- `whatsapp_agents_websites_delete` _(destructive)_ — Remove one website from the agent on this WhatsApp number, at WhatsApp and here. The agent stops using it from the next conversation turn.
- `whatsapp_agents_websites_get` _(read)_ — Read one website the agent on this WhatsApp number holds.
- `whatsapp_agents_websites_list` _(read)_ — List the websites the agent on this WhatsApp number holds, as a cursor page.
- `whatsapp_agents_websites_update` _(write)_ — Point one website entry on the agent on this WhatsApp number at a new address. WhatsApp reads the new page in place of the old one, so check the entry's…
- `whatsapp_business_accounts_get` _(read)_ — Read one connected WhatsApp Business Account by its `id` (`waa_` prefix) or the ID WhatsApp reports in `waba`, with the state WhatsApp reports for the account.
- `whatsapp_business_accounts_list` _(read)_ — List the WhatsApp Business Accounts the workspace has connected, as a cursor page, with the state WhatsApp reports for each. The `waba` a returned account…
- `whatsapp_business_accounts_reach_estimate` _(read)_ — Ask Meta how many marketing deliveries, and at what cost, each candidate maximum price would have won in the given countries. Use a row's `bid_amount` as a…
- `whatsapp_conversations_counts` _(read)_ — Count the workspace's open WhatsApp conversations in three inbox buckets: assigned to the caller while your application holds them, unassigned while your…
- `whatsapp_conversations_get` _(read)_ — Read one WhatsApp conversation's current state: who answers it, when its 24-hour service window closes, its unread count, labels, and its most recent message.…
- `whatsapp_conversations_get_message` _(read)_ — Get one message in a conversation, the same message object `whatsapp_get` returns, read from the conversation's own store, so a message is readable here as…
- `whatsapp_conversations_list` _(read)_ — List the workspace's WhatsApp conversations, most recently active first, as a cursor page. Each one says who answers it right now (`meta_business_agent` for…
- `whatsapp_conversations_list_events` _(read)_ — The activity history of one conversation as a cursor page, newest first: each move of control between the Meta Business Agent and your application, each…
- `whatsapp_conversations_list_messages` _(read)_ — List one conversation's messages, newest first, as a cursor page. These are the same message objects `whatsapp_list` returns, already narrowed to this…
- `whatsapp_conversations_update` _(write)_ — Assign a WhatsApp conversation, change its inbox status, mark received messages read, or replace its labels. assigned_to takes a user ID, me, or a JSON null to…
- `whatsapp_get` _(read)_ — Get one WhatsApp message by id: current delivery status, sent/delivered/read timestamps, the one content it was built from (a template, or free-form text,…
- `whatsapp_groups_create` _(write)_ — Create a WhatsApp group administered by one of your business numbers. The number must hold Official Business Account status, which `whatsapp_numbers_list`…
- `whatsapp_groups_delete` _(destructive)_ — Delete a group. Every participant loses access, including your business, and the invite link stops working. Terminal and not reversible; the group stays…
- `whatsapp_groups_get` _(read)_ — Read one WhatsApp group: its subject, description, status, invite link, and who is in it. Poll it after creating a group to see status move from pending to…
- `whatsapp_groups_invite_link_rotate` _(destructive)_ — Issue a new invite link for the group and invalidate every link issued before. Anyone holding an old link can no longer join. The group's current link is on…
- `whatsapp_groups_join_requests_approve` _(write)_ — Approve up to 50 pending join requests in one call. WhatsApp decides each one on its own, so the response splits them into decided and failed; a failure on one…
- `whatsapp_groups_join_requests_list` _(read)_ — List the people waiting to be let into a group, oldest first, as a cursor page. Only a group created with join_approval_mode approval_required collects them.…
- `whatsapp_groups_join_requests_reject` _(destructive)_ — Reject up to 50 pending join requests in one call. WhatsApp decides each one on its own, so the response splits them into decided and failed; a failure on one…
- `whatsapp_groups_list` _(read)_ — List the WhatsApp groups your workspace created, newest first, as a cursor page. Each carries its subject, status, invite link and participant count. Filter by…
- `whatsapp_groups_participants_remove` _(destructive)_ — Remove one person from a group, named by their business-scoped user ID or their phone number. IRREVERSIBLE: WhatsApp blocks a removed person from rejoining by…
- `whatsapp_groups_pins_create` _(write)_ — Pin one of the group's messages at the top of its chat for 1 to 30 days. A group holds 3 pinned messages; pinning a fourth unpins the oldest. The group's…
- `whatsapp_groups_pins_delete` _(destructive)_ — Unpin one of the group's messages before its pin expires. Repeating the call is safe: a message this group carries that is not pinned changes nothing and still…
- `whatsapp_groups_update` _(write)_ — Change a group's subject, description or picture. Fields you omit are left alone. WhatsApp applies each field separately, so one can be refused while the…
- `whatsapp_keyword_rules_create` _(write)_ — Replace the reply Bird sends for opt-out or opt-in, or add keywords of your own. Your rule takes precedence over Bird's at the same grain and keeps Bird's…
- `whatsapp_keyword_rules_delete` _(destructive)_ — Delete one of your own keyword rules. The next rule in the ladder answers that scope instead, which is not always one of yours: Bird's rule for the sender's…
- `whatsapp_keyword_rules_get` _(read)_ — Read one keyword rule, Bird's own or your workspace's. Its `scope` says which: a `workspace` rule can be changed with `whatsapp_keyword_rules_update`, one of…
- `whatsapp_keyword_rules_list` _(read)_ — List the keyword rules that apply to inbound WhatsApp messages, most specific first. Filter by `country`, `waba`, `operation`, or `scope`. Opt-out and opt-in…
- `whatsapp_keyword_rules_update` _(write)_ — Change one of your own keyword rules: its reply or its extra keywords. Bird's own rules cannot be changed; create your own instead with…
- `whatsapp_list` _(read)_ — List WhatsApp messages, newest first, as a cursor page ({data, next_cursor, …}). Each message carries the one content it was built from: a template, or…
- `whatsapp_list_events` _(read)_ — Get one WhatsApp message's delivery timeline, oldest first: whatsapp.accepted, whatsapp.sent, whatsapp.delivered, whatsapp.read, and whatsapp.failed events,…
- `whatsapp_mark_read` _(write)_ — Mark one inbound WhatsApp message as read, optionally showing a typing indicator at the same time. Accepted asynchronously (202); there is no status to poll…
- `whatsapp_media` _(read)_ — Download the media on a received WhatsApp message, or on one from the WhatsApp Business app (`origin` `business_app_echo` or `history_sync`). The media ID is…
- `whatsapp_numbers_coexistence_sync_get` _(read)_ — Read the chat history and contacts import of a number also on the WhatsApp Business app: whether the business shared its chat history, how much of it has been…
- `whatsapp_numbers_create` _(write)_ — Connect a number the workspace already holds to WhatsApp. Take the number's id from `numbers_list`, where a connectable number is a dedicated one (`nda_`…
- `whatsapp_numbers_delete` _(destructive)_ — Disconnect a WhatsApp number from the workspace so it can no longer send.
- `whatsapp_numbers_get` _(read)_ — Read a WhatsApp number and the state WhatsApp reports for it. `next` says what to do about that state, including the browser step that finishes a connection…
- `whatsapp_numbers_list` _(read)_ — List the WhatsApp numbers the workspace can send from as a cursor page, with each number's WhatsApp state, quality rating, messaging limit, throughput, and…
- `whatsapp_numbers_list_events` _(read)_ — The activity history of one WhatsApp number as a cursor page, newest first: when it was added, every change of its status, its messaging-limit and…
- `whatsapp_numbers_precheck` _(write)_ — Check whether WhatsApp will accept a phone number before buying it: take a number from `numbers_available_list`, check it here, and order it with…
- `whatsapp_numbers_profile_get` _(read)_ — Read the business profile WhatsApp shows to people a connected number messages.
- `whatsapp_numbers_profile_update` _(write)_ — Change the business profile WhatsApp shows to people a connected number messages. `username_transfer_action: force_transfer` takes the username off another of…
- `whatsapp_numbers_update` _(write)_ — Change your workspace's own label for a connected WhatsApp number.
- `whatsapp_preview` _(read)_ — Create a public bird.com message-builder link from a WhatsApp message payload. Computes the link locally without network requests, authentication, or sending a…
- `whatsapp_reaction_list_events` _(read)_ — Get every change made to one WhatsApp message's reactions, newest first, as a cursor page ({data, next_cursor, …}): each emoji placed, each one replaced by…
- `whatsapp_reaction_remove` _(destructive)_ — Take back the reaction this workspace placed on a WhatsApp message. Removing a reaction from a message you have not reacted to changes nothing and still…
- `whatsapp_reaction_set` _(write)_ — Place an emoji reaction on a WhatsApp message the workspace received. You hold at most one reaction per message, so calling this again replaces the emoji…
- `whatsapp_send` _(write)_ — Send one WhatsApp message to a phone number, business-scoped user ID or group (wag_), carrying exactly one kind of content: a template, or free-form text,…
- `whatsapp_stats_by_country` _(read)_ — Outbound WhatsApp delivery, read and latency stats grouped by the recipient's country, ranked by accepted volume. Use it to compare markets. A weak market…
- `whatsapp_stats_by_error_code` _(read)_ — Failed outbound WhatsApp messages grouped by the normalized failure reason, the same value a failed message reports in `last_error.code`, ranked by volume.…
- `whatsapp_stats_by_phone_number` _(read)_ — Outbound WhatsApp counts grouped by the business number that sent them, ranked by accepted volume, each row marked as a number your workspace connected or one…
- `whatsapp_stats_by_tag` _(read)_ — Outbound WhatsApp counts grouped by the tags a send attached, ranked by accepted volume. A row's tag is `name:value`, so one tag name spreads over as many rows…
- `whatsapp_stats_by_template` _(read)_ — Outbound WhatsApp counts grouped by template, keyed by `template_id`, ranked by accepted volume. Resolve the id through the WhatsApp template endpoints for a…
- `whatsapp_stats_by_template_category` _(read)_ — Outbound WhatsApp counts grouped by Meta's template category (`authentication`, `utility` and `marketing` today, and the vocabulary is open), ranked by…
- `whatsapp_stats_daily` _(read)_ — Outbound WhatsApp lifecycle counts, one row per calendar day of the window, gap-filled so a silent day is a zero row rather than a missing one. Every event a…
- `whatsapp_stats_hourly` _(read)_ — Outbound WhatsApp lifecycle counts, one row per hour, gap-filled. Every event a message produces counts against the hour that message was accepted, so a row is…
- `whatsapp_stats_inbound_by_phone_number` _(read)_ — Received WhatsApp message counts grouped by the business number that received them, ranked by volume. Use it to see which of your numbers customers actually…
- `whatsapp_stats_inbound_daily` _(read)_ — Received WhatsApp message counts, one row per calendar day of the window, gap-filled so a silent day is a zero row. Days are calendar days in `timezone`, or…
- `whatsapp_stats_inbound_hourly` _(read)_ — Received WhatsApp message counts, one row per hour, gap-filled. A window spans at most 720 hours (30 days); for anything longer use…
- `whatsapp_stats_inbound_summary` _(read)_ — Aggregate count of the WhatsApp messages your workspace received in one window, with the delta against the window immediately before when `compare` is set to…
- `whatsapp_stats_summary` _(read)_ — Aggregate outbound WhatsApp counts for one window: accepted, sent, delivered, failed and rejected, with delivery and failure rates, read engagement, and…
- `whatsapp_suppressions_add` _(write)_ — Record a WhatsApp address on the workspace suppression list.
- `whatsapp_suppressions_get` _(read)_ — Read one WhatsApp suppression by ID, including one that has already ended. An ended record reports when it ended and what ended it. To find a suppression by…
- `whatsapp_suppressions_list` _(read)_ — List the workspace's recorded WhatsApp suppression addresses as a cursor page.
- `whatsapp_suppressions_remove` _(destructive)_ — End one WhatsApp suppression by ID. The record is kept and stays readable. Only suppressions with reason `manual` can be ended; a recipient's own opt-out is…
- `whatsapp_templates_create` _(write)_ — Creates a WhatsApp template. Supply `languages` to seed its first draft in the same call, or omit it to create the template alone and add content through…
- `whatsapp_templates_delete` _(destructive)_ — Deletes the template and every language it holds, here first and at WhatsApp afterwards. Sends by this slug stop working. Built-in templates cannot be deleted.…
- `whatsapp_templates_duplicate` _(write)_ — Copies a template into a new one holding the source's current content as an open draft. It is how a built-in template becomes something a workspace can edit,…
- `whatsapp_templates_get` _(read)_ — Get one WhatsApp template by slug or ID: its handle, its lifecycle, and where each of its languages stands. Content is not included; use…
- `whatsapp_templates_list` _(read)_ — List the workspace's WhatsApp templates: each template's handle, its lifecycle, and where each of its languages stands. Content is not included; use…
- `whatsapp_templates_update` _(write)_ — Changes a template's display name, description, and language policies. The slug can change before the first submission; the old slug then stops resolving,…
- `whatsapp_templates_versions_create` _(write)_ — Opens the template's editable draft, seeded from the newest submitted version. A template has at most one open draft, so this is safe to call when you are…
- `whatsapp_templates_versions_delete` _(destructive)_ — Deletes the open draft and every unsubmitted edit in it, leaving the template with no draft until `whatsapp_templates_versions_create` opens another. What…
- `whatsapp_templates_versions_get` _(read)_ — Get one version of a WhatsApp template: its submission state and the languages it carries. This is the level at which content exists.
- `whatsapp_templates_versions_languages_delete` _(destructive)_ — Removes one language from the draft. The template's default language cannot be removed, and a language under review at WhatsApp refuses removal until that…
- `whatsapp_templates_versions_languages_discard` _(destructive)_ — Restores one language of the draft to the copy it was branched from, discarding the edits made to it since. Only that language moves, which is what deleting…
- `whatsapp_templates_versions_languages_get` _(read)_ — Get one language of one WhatsApp template version: its content blocks, what this version's submission did with it, and Meta's review outcome and category for…
- `whatsapp_templates_versions_languages_list` _(read)_ — List the languages one WhatsApp template version carries, with each language's review outcome at Meta and a content hash to tell which ones actually differ…
- `whatsapp_templates_versions_languages_set` _(write)_ — Writes one language of the draft, whole: send the language's complete `components` every time, because this replaces rather than merges. `optimization_spec` is…
- `whatsapp_templates_versions_list` _(read)_ — List a WhatsApp template's versions, newest first. Each version is one immutable submission; an open draft, if one exists, appears alongside them. Use this to…
- `whatsapp_templates_versions_submit` _(write)_ — Checks the draft and, unless `validate_only` is set, freezes it as an immutable version and sends each changed language to WhatsApp for review. Call it once…
- `whoami` _(read)_ — Read the identity behind the current credential, whether that is a browser session or an access token acting for a user. Returns `401 Unauthorized` when the…
- `workspace_get` _(read)_ — Fetch the current workspace's ID, name, and the ID of the organization owning it. This is the workspace the current credentials are scoped to.
- `workspace_quotas_list` _(read)_ — List the resource and value quotas as they apply to the current workspace: the shared organization limit, any workspace limit and its expiry, and workspace…
- `workspace_settings_get` _(read)_ — Read the workspace's effective feature settings: platform defaults overlaid with whatever the workspace has changed. Today that covers email content storage…

---

## Connect

Gateway URL: https://gateway.mewcp.com/personal/mcp

Every request carries one header:

    Authorization: Bearer <API_KEY>

Replace `API_KEY` with your own key from the dashboard (Developer).

## Apps

### Claude Desktop

Mac & Windows app

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://gateway.mewcp.com/personal/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open Claude Desktop → Settings → Developer → "Edit Config"
2. Paste the snippet inside the outer { } of the config file (merge with your existing "mcpServers" section if you have one)
3. Save the file, then quit Claude Desktop completely and reopen it
4. Start a new conversation — your tool will be available

### VS Code

Copilot / Cline

- Command Palette → "MCP: Open User Configuration" (opens mcp.json). For one project only, use .vscode/mcp.json instead.

```json
{
  "mcp.servers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have a "servers" section in your mcp.json? Just add the server entry inside it.

1. Open VS Code → Command Palette (Cmd+Shift+P / Ctrl+Shift+P)
2. Run "MCP: Open User Configuration" to open your mcp.json
3. Paste the snippet and save
4. Start the server when prompted (or from the MCP servers view) and use it in Copilot Chat

### Cursor

AI-first editor

- macOS: `~/.cursor/mcp.json`
- Windows: `%USERPROFILE%\.cursor\mcp.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your mcp.json? Just add the server entry inside it.

1. Open Cursor → Settings → Cursor Settings → MCP
2. Click "Add new global MCP server"
3. Paste the snippet and save
4. Restart Cursor

### Codex

OpenAI's CLI agent

- Add the snippet to your Codex MCP config or your standard MCP config file for the CLI tool you use.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Codex generally reads a standard MCP server block, so you can add this alongside your other configured servers.

1. Open your Codex MCP config or project-level config file
2. Paste the MewCP server block inside the config JSON/TOML structure your tool expects
3. Save the file and restart Codex
4. Verify the tool is available inside a fresh session

### Claude Code

Anthropic's CLI agent

- ~/.claude.json (user scope) or .mcp.json in your project root — create it if it doesn't exist. Or skip the file and use the CLI command below.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open ~/.claude.json (or .mcp.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file and start (or restart) Claude Code
4. Or skip the file entirely and run the CLI command below instead

### OpenCode

Open-source terminal agent

- ~/.config/opencode/opencode.json (global) or opencode.json in your project root — create it if it doesn't exist.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mewcp": {
      "type": "remote",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcp" section in your opencode.json? Just add the server entry inside it.

1. Open ~/.config/opencode/opencode.json (or opencode.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and start (or restart) OpenCode

### OpenClaw

Self-hosted agent gateway

- ~/.openclaw/openclaw.json — create it if it doesn't exist.

```json
{
  "mcp": {
    "servers": {
      "mewcp": {
        "transport": "streamable-http",
        "url": "https://gateway.mewcp.com/personal/mcp",
        "enabled": true,
        "headers": {
          "Authorization": "Bearer API_KEY"
        }
      }
    }
  }
}
```

Already have an "mcp" section in your openclaw.json? Just add the server entry inside "servers".

1. Open ~/.openclaw/openclaw.json in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and restart OpenClaw

### Antigravity

Google's agentic IDE

- ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (workspace-local) — create it if it doesn't exist.

```json
{
  "mcpServers": {
    "mewcp": {
      "serverUrl": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it. Remote servers must use the "serverUrl" field — the legacy "url"/"httpUrl" fields aren't supported.

1. In the editor's agent side panel, click "…" → "MCP Servers" → "Manage MCP Servers" → "View raw config" (Antigravity CLI: type /mcp instead to open the Interactive MCP Manager)
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file — the server connects automatically

### Hermes

Nous Research's CLI agent

- config.yaml in your Hermes config directory (~/.hermes) — add this under a top-level "mcp_servers:" key.

```yaml
mcp_servers:
  mewcp:
    url: "https://gateway.mewcp.com/personal/mcp"
    headers:
      Authorization: "Bearer API_KEY"
```

Already have an "mcp_servers" section in your config.yaml? Just add the server entry inside it.

1. Open config.yaml in your Hermes config directory
2. Paste the snippet under the top-level "mcp_servers:" key (merge with existing entries if you have any)
3. Save the file, then run /reload-mcp in Hermes (or start a fresh session)
4. Ask Hermes "Tell me which MCP-backed tools are available right now" to confirm it connected

### DeepSeek Harness

DeepSeek's agent harness

- cordis.yml in your DSH project — or the patch file you mount plugins from.

```yaml
- id: mcp-mewcp
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: mewcp
    transport: streamable-http
    url: https://gateway.mewcp.com/personal/mcp
    headers:
      Authorization: "Bearer API_KEY"
```

One plugin instance = one MCP server. Add this entry to your plugin list; don't nest it inside another entry.

1. Open cordis.yml (or your patch file) in your DSH project
2. Paste the entry into your plugin list, keeping the leading dash and indentation
3. Restart DSH (or let HMR reload) — tools register as mcp__mewcp__<tool_name>
4. Verify with: dsh web --dump-config | grep -A3 mcp

## SDKs

### Python

fastmcp client

```python
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport

SERVER_URL = "https://gateway.mewcp.com/personal/mcp"
API_KEY = "API_KEY"

transport = StreamableHttpTransport(
    url=SERVER_URL,
    headers={
        "Authorization": f"Bearer {API_KEY}",
    }
)

async def main():
    client = Client(transport)
    async with client:
        tools = await client.list_tools()
        print(tools)

asyncio.run(main())
```

1. Install fastmcp: pip install fastmcp
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run your script

### TypeScript

MCP SDK

```typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const SERVER_URL = "https://gateway.mewcp.com/personal/mcp";
const API_KEY = "API_KEY";

const transport = new StreamableHTTPClientTransport(new URL(SERVER_URL), {
  requestInit: {
    headers: {
      Authorization: `Bearer ${API_KEY}`,
    },
  },
});

const client = new Client({ name: "mewcp-client", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
console.log(tools.tools.map((t) => t.name));
```

1. Install: npm install @modelcontextprotocol/sdk
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run with Node 18+ as an ES module (e.g. npx tsx script.ts)