Sign inGet Started

Send a message

POST
/v1/amb/messages
const result = await bird.amb.send({
  from: "b52d6267-2b62-4f8a-8842-0533d0f1dc07",
  to: "opaque-customer",
  text: { body: "Your order is ready." },
});
console.log(result);
प्रतिक्रिया202
{
  "id": "amb_01krdgeqcxet5s7t44vh8rt9mg",
  "conversation_id": "acv_01krdgeqcxet5s7t44vh8rt9mg",
  "business_account_id": "abz_01krdgeqcxet5s7t44vh8rt9mg",
  "direction": "outbound",
  "status": "accepted",
  "kind": "text",
  "source": "operator",
  "text": {
    "body": "Your order is ready."
  },
  "rich_link": {
    "rich_link_construct": {
      "url": "https://apps.apple.com/app/id123456789?clip=1",
      "store_region": "US"
    }
  },
  "interactive": {
    "received_message": {
      "title": "Pick a delivery slot"
    },
    "list_picker": {
      "sections": [
        {
          "title": "Tomorrow",
          "items": [
            {
              "identifier": "am",
              "title": "Morning"
            }
          ]
        }
      ]
    }
  },
  "interactive_reply": {
    "request_identifier": "6f1c2a4e-8b7d-4c3a-9e1f-2d5b7a9c0e3f",
    "quick_reply": {
      "selected_identifier": "yes",
      "selected_index": 0
    }
  },
  "in_reply_to_message_id": "amb_01krdgeqcxet5s7t44vh8rt9mg",
  "reply_message_id": "amb_01krdgh7m2zq8w4x6y9b3c5d7e",
  "replied_at": "2026-10-13T10:09:00Z",
  "locale": "en_US",
  "category": "order_update",
  "tags": [
    {
      "name": "category",
      "value": "welcome"
    }
  ],
  "reference": "INV-1234",
  "cost": {
    "amount": "0.00990",
    "currency_code": "USD",
    "transaction_amount": "0.00790",
    "passthrough_amount": "0.00200"
  },
  "last_error": {
    "code": "bird:business_not_registered",
    "description": "Apple refused the message with HTTP status 404."
  },
  "requested_language": "pt-BR",
  "resolved_language": "pt-BR",
  "template_id": "amt_01krdgeqcxet5s7t44vh8rt9mg",
  "template_version_id": "amv_01krdgeqcxet5s7t44vh8rt9mg",
  "template_content_hash": "sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
}

Send a message in an existing Apple Messages for Business conversation. from is the Apple business identifier and to is the customer’s opaque identifier for that business. An unknown conversation returns 404; a closed conversation returns 422. Only the customer can reopen a conversation.

Choose text, rich_link, or interactive content. Interactive content contains a quick reply, list picker, event, form, or custom iMessage app. Native payment and authentication requests are not available through this public operation. Device support varies; an unsupported interaction returns 422.

Supply attachments by source URL. Bird downloads the files and uploads them to Apple before sending. Interactive images must be PNG files up to 200 kB each, totaling at most 5 MB. Each attachment must be smaller than 100 MB. A media or provider failure after acceptance changes the message status to send_failed.

The 202 response confirms acceptance, not delivery. Read the message to obtain its final status.

Request Payload

from
string
आवश्यक

Apple business identifier of the brand sending the message. Read it from the business’s apple_business_id. The customer must have opened the conversation with this business.

to
string
आवश्यक

Apple’s opaque customer identifier for this business, available as the conversation’s recipient.opaque_user_id. The conversation must exist and its native status must be open.

source
string

Who this message is sent as. A signed-in session may send as operator or automation; an API key may send as api or automation. Omit it to take the default for your credential. Naming a source your credential cannot use is refused with a 422 AMBMessageSourceNotPermitted.

Possible values: operator, automation, api

text
object

A text message. Alongside rich_link or interactive, it is sent first as its own text bubble, in the same message.

चाइल्ड पैरामीटर दिखाएँ
rich_link
object

A link with a preview card.

चाइल्ड पैरामीटर दिखाएँ
interactive
object

Something for the customer to tap, such as quick replies, a list picker, a time picker, a form or a custom iMessage app.

चाइल्ड पैरामीटर दिखाएँ
template
object

Send using a stored template instead of text, rich_link or interactive. The category is derived from the template, so category is rejected alongside it.

चाइल्ड पैरामीटर दिखाएँ
category
string

Free-form reporting label; it does not change sending or suppression policy, for example order_update. Omit it to send with the default empty category. Rejected alongside template, where the category is derived from the template.

metadata
object

Arbitrary JSON object for per-message context. Maximum 2 KB serialized. Top-level keys beginning with __bird are reserved. Returned in the send response, message reads and customer message webhooks.

tags
array of object

Structured {name, value} labels for filtering. Maximum 20 tags per send.

चाइल्ड पैरामीटर दिखाएँ
reference
string

An identifier you want to find this message by, such as an order or ticket number, matched exactly by the message list's reference filter. Set it only when you need to search on it, and put any other data in metadata. Stored on the message, returned on reads and echoed in webhook payloads. Several messages can share one.

group
string

Department identifier for this message.

intent
string

Purpose of this conversation.

locale
string

Apple locale identifier, for example en_US. Defaults to the conversation locale.

skip_typing
boolean

Send the first part without the typing indicator and one-second pause Bird otherwise shows before it. Set it only after you sent typing_start with the conversation typing operation, so the customer already sees typing. A first part that Apple accepts clears that indicator when it arrives. If Bird accepts the message but it fails before then, such as a failed send or a rejection during processing, Bird sends typing_end instead. If the request itself returns an error, nothing is sent, so send typing_end yourself. When Bird splits the message into several parts, such as text around a link, the parts after the first keep their typing indicator.

Response Payload

id
string
आवश्यक

ID of the message, assigned when it is accepted or received. Pass it as message_id to the get-message and list-events endpoints.

conversation_id
string
आवश्यक

The conversation this message belongs to.

business_account_id
string
आवश्यक

The business the message was sent from or received by.

from
string

Apple business identifier on outbound messages, or the customer's opaque Apple identifier on inbound messages. Omitted when that address is unavailable on a historical record.

to
string

Customer's opaque Apple identifier on outbound messages, or the Apple business identifier on inbound messages. Omitted when that address is unavailable on a historical record.

direction
string
आवश्यक

Whether a message was sent by the business or received from the customer:

  • outbound: A reply the business sent into the conversation.
  • inbound: A message the customer sent.

Possible values: outbound, inbound

status
string
आवश्यक

Send status:

  • accepted: Accepted and queued for delivery to Apple.
  • sent: Handed to Apple. There is no delivery or read receipt on this channel, so sent is the furthest an outbound message's status advances.
  • send_failed: Sending stopped because of a business or conversation restriction, a recipient opt-out, an Apple refusal, or exhausted attempts. An earlier attempt may have reached Apple if its response or the local record of success was lost. See last_error for why sending stopped.
  • rejected: Refused by Bird before any send attempt and never charged: the destination has no price, the wallet could not fund the send, or the content cannot be sent yet. See last_error.
  • received: Received as an inbound message.

Possible values: accepted, sent, send_failed, rejected, received

kind
string
आवश्यक

Derived content classification for filtering and statistics.

Possible values: text, attachment, rich_link, quick_reply, list_picker, time_picker, form, apple_pay, authenticate, imessage_app, interactive

source
string

Who sent this message. Absent on an inbound message, which has no source to report.

Possible values: operator, automation, api

text
object

The message's text and files. Next to rich_link, interactive or interactive_reply, it is the text that came with them.

चाइल्ड एट्रिब्यूट दिखाएँ
rich_link
object

The link preview an outbound message carried.

चाइल्ड एट्रिब्यूट दिखाएँ
interactive
object

What an outbound message offered the customer to tap.

चाइल्ड एट्रिब्यूट दिखाएँ
interactive.session_identifier
string

Session UUID to preserve across interactions. Apple creates one when omitted.

interactive.request_identifier
string

Correlation identifier for this interaction. Bird generates one when omitted. Use a new value for each message. A reply is linked to its request only when no other sent message in the conversation uses the same identifier.

interactive.images
array of object

Images the interaction references by image_identifier, such as list picker thumbnails.

चाइल्ड एट्रिब्यूट दिखाएँ
interactive.quick_reply
object
आवश्यक
चाइल्ड एट्रिब्यूट दिखाएँ
interactive.quick_reply.summary_text
string
आवश्यक

Text used for the device notification and shown in the transcript after the customer chooses an item. To introduce the choices, send text alongside interactive; it arrives first as its own bubble.

interactive.quick_reply.items
array of object
आवश्यक

The buttons offered to the customer. Apple requires between two and five; outside that range the request is refused with a 422 AMBQuickReplyItemsInvalid. For more choices, send list_picker content instead.

चाइल्ड एट्रिब्यूट दिखाएँ
interactive_reply
object

What the customer answered, on an inbound message replying to an interactive message.

चाइल्ड एट्रिब्यूट दिखाएँ
in_reply_to_message_id
string

Original message matched through Apple’s request identifier within the same workspace, business, and conversation. Omitted when no verified match exists, including when more than one sent message in the conversation uses the reply's request identifier.

reply_message_id
string

Latest customer reply whose in_reply_to_message_id names this message. Omitted until a reply is matched, and in webhook payloads.

replied_at
string

When Apple delivered the reply in reply_message_id to Bird. This can be slightly earlier than that reply's created_at, which records when Bird processed it. Omitted until a reply is matched, and in webhook payloads.

locale
nullable string

Locale for this message, preserved in Apple’s format, for example en_US. Outbound messages use the request override, then the conversation locale, then the business default. Inbound messages preserve the locale in Apple’s callback. Null when unknown.

category
string

The category this message was sent with, for reporting only. It does not affect sending or suppression policy, or select an Apple department or purpose. Defaults to an empty string when a send names no category. Absent on an inbound message, which has no category to report.

metadata
object

Arbitrary JSON object for per-message context. Maximum 2 KB serialized. Top-level keys beginning with __bird are reserved. Returned in the send response, message reads and customer message webhooks.

tags
array of object

Structured {name, value} filter labels applied to this message. Absent on an inbound message.

चाइल्ड एट्रिब्यूट दिखाएँ
reference
string

The reference from the send request. Absent when the send set none, and on inbound messages.

cost
nullable object
आवश्यक

Recorded per-message charge before MAC pricing. Null in the initial send response, while unpriced, and for MAC-covered replies. MAC fees belong to monthly contact usage, not individual messages. Historical charges have no priced passthrough component.

चाइल्ड एट्रिब्यूट दिखाएँ
last_error
nullable object

Failure detail on a message whose send failed or that Bird rejected before any send attempt. Omitted when there is no failure detail.

चाइल्ड एट्रिब्यूट दिखाएँ
created_at
string
आवश्यक

The moment this message was accepted (outbound), or recorded by Bird after Apple delivered it (inbound). This is the timestamp the outbound statistics families bucket and attribute on; there is no separate accepted_at field.

sent_at
nullable string

When the selected sending outcome occurred. Null unless the current status is sent and the message is outbound. For older messages without a retained sending event, the stored record time is used.

group
string

Apple department identifier carried by this message. Omitted when absent from the message or unavailable on a historical record.

intent
string

Apple purpose identifier carried by this message. Omitted when absent from the message or unavailable on a historical record.

requested_language
nullable string
आवश्यक

The template language requested by the send, in canonical form. Null when the send named no language or used no template.

resolved_language
nullable string
आवश्यक

The template language whose text was rendered, in canonical form. Null when the send used no template. This can differ from requested_language when the template's fallback policy selects another language.

template_id
nullable string
आवश्यक

The template rendered for this message, or null for a message sent with native content.

template_version_id
nullable string
आवश्यक

The workspace published version or synthetic built-in version rendered at acceptance, or null for a message sent with native content. For a built-in template, template_content_hash identifies the exact catalogue source.

template_content_hash
nullable string
आवश्यक

The rendered language's source fingerprint, or null for a message sent with native content.

इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।