Changelog

Kürzlich veröffentlicht.

Seite 2

feature

Answer incoming calls in the browser with ring groups

Your team can now answer incoming calls in the browser phone. Choose Online in the dashboard phone, and a call for one of your ring groups rings with the ringtone you picked and shows a system notification with the caller's number and contact name. The first member to select Accept takes the call, and it stops ringing for everyone else. Choose Busy to keep placing calls without being rung.

Every workspace starts with a Default group that rings everyone online. Add your own, such as support or sales, and point a number or your workspace's default inbound route at the group that should answer it. Members are rung five at a time until one of them answers, and after three missed calls in a row the phone stops ringing that member until they choose Back online.

Manage groups from Voice → Ring groups in the dashboard, or through the API, SDKs, CLI (bird voice ring-groups), and MCP: create a group and add members by user ID, then set a number's or the workspace's route type to ring_group (see update a number and update voice settings). A workspace can have up to 50 groups beyond the default, each with up to 200 members. See the ring groups guide for the full walkthrough.

Also in this release:

  • Email template personalization isn't just for broadcasts anymore. An individual, batch, or scheduled send can now use {{ bird.contact.* }} placeholders: Bird looks up each To address's contact in your workspace, and Cc/Bcc recipients receive a personalized copy for every To. A To with no matching contact rejects the send with 422 (E04099). See personalizing with variables and create an email message.
  • Broadcast templates can loop again. A broadcast template can now use {% for %} over a local list built with split, and, when it takes no caller parameters, literal ranges and {% tablerow %} too. Broadcast parameters stay scalar-only; arrays and objects still aren't supported.
  • Large files can upload to the media library in the background. New asset upload session endpoints let a client transfer bytes directly to temporary storage and complete the upload asynchronously, instead of a single multipart request, with sessions capped per workspace and organization.
  • SMS and WhatsApp message history masks sensitive template values instead of fully redacting them. A one-time code sent through a system template now reads with one asterisk per digit in its surrounding text; only authentication messages without declared sensitive variables still read **REDACTED**.

improvement

Guidance for building automatic SMS replies with Automations

Send messages in an automation now documents a complete pattern for auto-replying to an inbound SMS: start from an Incoming SMS trigger, map the reply's recipient to the incoming sender, and choose the receiving number as the reply's sender, noting that a number can accept inbound SMS without being eligible to send outbound. It also covers using a trigger filter to scope replies to one receiving number and to exclude opt-out and help keywords, so a STOP or HELP reply doesn't trigger your general acknowledgement. The SMS overview now links to this pattern as the no-code way to handle replies.

Also clarified in the same guide:

  • The WhatsApp messaging step can respond to incoming messages, but built-in steps can't label a WhatsApp conversation or assign it to a teammate, that's still a dashboard action under WhatsApp conversations.
  • The failure path on a send step now explicitly covers sends blocked by your workspace's send limits, not just channel rejections.

fix

Corrected field paths for Apple Messages for Business interactive replies

The API reference for send message, get message, list messages, list conversation messages, and get template version language previously described a customer's quick reply, list picker, or time picker selection as arriving on interactive_data.data.*. That field no longer exists; selections arrive on interactive_reply.

The docs now point to the right paths:

  • A quick reply selection is interactive_reply.quick_reply.selected_identifier.
  • A list picker selection is interactive_reply.list_picker.sections[].items[].
  • A time picker selection is interactive_reply.reply_message.title or a slot identifier under interactive_reply.
  • An image identifier referenced from a row or button resolves against interactive.images on the outbound message, or interactive_reply.images on a reply.

If you were parsing replies against the old interactive_data.data path, switch to interactive_reply.

feature

mTLS for API requests and webhook deliveries

Bird introduces mTLS, available on request, for both directions of a connection.

For API requests, add your certificate authority's public certificate in Workspace settings → mTLS (or POST /v1/workspace/mtls-certificate-authorities), then send requests to the new mtls.<region>.platform.bird.com endpoint with a client certificate. Run in evaluating mode while you move traffic over, then switch to enforced so the standard endpoint stops accepting API key and service account requests entirely.

For webhook deliveries, Bird generates a key pair and a certificate signing request under Webhooks → mTLS, your certificate authority signs it, and Bird presents the signed certificate whenever your receiver asks for one during the TLS handshake. POST /v1/webhooks/{webhook_id}/test now returns a client_certificate field (presented, not_requested, or rejected) so you can confirm your receiver is checking it correctly before enforcing.

Both directions support certificate revocation checks against a certificate's CRL, and a required subject alternative name for API requests when your certificate authority also issues to other parties. See the mTLS guide for setup, rotation, and troubleshooting.

Also in this release:

  • WhatsApp templates can set a delivery time-to-live. message_send_ttl_seconds on a template language controls how long WhatsApp keeps trying before dropping an undelivered message, from 30 seconds up to 30 days depending on category. See Upsert WhatsApp template language.
  • Workspace quotas report their type. GET /v1/workspace/quotas now returns type (integer or boolean) and label alongside each quota, so a feature-switch quota no longer reports a misleading unit.
  • Callback signing secrets now cover voice sequence webhooks. Rotating your workspace's signing secret at POST /v1/webhook-callbacks/rotate-signing-secret re-signs both SMS callback URLs and voice sequence webhook requests, which now share one secret.

feature

Verify binds SMS passcodes to your Android app for tap-free autofill

Set an Android app hash on the Verify Configure page, or pass options.android_app_hash on create verification, and the SMS shortens to just the code and your app's 11-character hash on its own line, within Google's 140-byte SMS Retriever limit. Your Android app reads the code automatically, with no SMS permission request and no tap from the user. Leave it unset and SMS passcodes behave as before, with the website-binding line browsers read for autofill.

A request can override the workspace default with its own hash, for example to point a debug build at its own signing certificate. See Verification settings for how to compute the hash and troubleshoot it.

Also in this release:

  • Email mailboxes can set up forwarding after creation. POST /v1/email/mailboxes/{mailbox_id}/forwarding-address, or Mailbox settings → Set up forwarding in the dashboard, gives an existing own-domain mailbox a forwarding address on Bird's receiving domain without recreating it. Until now, a mailbox only got one automatically, and only if its domain wasn't already set up for receiving when it was created.
  • Workspace-level rate limits. An organization with several workspaces can give one workspace its own request-rate ceiling on top of the limit it shares with the rest of the organization, from the dashboard's workspace Rate limits page, the new GET /v1/workspace/rate-limits endpoint, or bird organization workspaces rate-limits. A 429 now reports which policy, and which scope, organization or workspace, refused the request.
  • Apple Messages for Business sends are simpler. text, rich_link, and interactive are now top-level fields on send message instead of nested under a content object, a reply to an interactive message comes back as interactive_reply, and a new skip_typing flag skips the typing indicator Bird shows before a reply when you already sent one yourself through the typing-indicator endpoint.

Start building with Bird in minutes.