# Send a message

Create or reuse a Bow Chat conversation, send a free-form or approved template message, and store the returned message identity.

## Before sending

You need an `account_id`, `inbox_id`, `contact_id`, and the contact's `source_id` for that inbox. Choose content permitted by the channel:

- WhatsApp Business Platform: use an approved template when the customer-service window or message type requires it.
- WhatsApp Web: keep sends low-volume, expected, and consented; this connection is not a bulk API.
- Customer Rooms and other provisioned channels: follow the channel contract agreed for the workspace.

## Create the conversation

```bash
curl --request POST \
  --url https://app.bow.chat/api/v1/accounts/ACCOUNT_ID/conversations \
  --header 'api_access_token: BOW_CHAT_TOKEN' \
  --header 'content-type: application/json' \
  --data '{"source_id":"40722123456","inbox_id":14001,"contact_id":84291,"status":"open"}'
```

Store the returned `id` as the conversation display ID. Reuse the same contact/inbox conversation instead of creating a new thread for every notification.

## Send free-form content

```bash
curl --request POST \
  --url https://app.bow.chat/api/v1/accounts/ACCOUNT_ID/conversations/CONVERSATION_ID/messages \
  --header 'api_access_token: BOW_CHAT_TOKEN' \
  --header 'content-type: application/json' \
  --data '{"content":"Your appointment is confirmed for 14:30.","message_type":"outgoing","private":false}'
```

Free-form content works only where the selected channel permits it.

## Send an approved WhatsApp template

```bash
curl --request POST \
  --url https://app.bow.chat/api/v1/accounts/ACCOUNT_ID/conversations/CONVERSATION_ID/messages \
  --header 'api_access_token: BOW_CHAT_TOKEN' \
  --header 'content-type: application/json' \
  --data '{"content":"Your appointment is confirmed for 14:30.","message_type":"outgoing","private":false,"template_params":{"name":"appointment_confirmation","category":"UTILITY","language":"ro","processed_params":{"body":{"1":"14:30"}}}}'
```

The template name, language, category, and parameters must match the approved template in the WhatsApp Business account. Meta can reject or reclassify templates.

## Store these fields

- Your business-event ID, such as `appointment:84291:2026-09-10T14:30`.
- Bow Chat `message.id`.
- Conversation display ID.
- Sender inbox ID and channel.
- Initial acceptance time and latest delivery state.
- Any terminal error and the one fallback decision, if one was made.

A `200` response means Bow Chat accepted the request. It is not proof of delivery. Continue with [Webhooks](/developers/webhooks) and [Delivery and fallback](/developers/delivery-and-fallback).

Canonical: https://docs.bow.chat/developers/send-a-message
Version: 1
Updated: 2026-09-04T10:04:30.508Z
