> ## Documentation Index
> Fetch the complete documentation index at: https://help.eazybe.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Send one text, media, location, or interactive WhatsApp message from an organization-owned number.

Use this endpoint to send one supported free-form message to one recipient. Set `type` to choose the content format and include the fields required for that type.

## Endpoint

```http theme={null}
POST /broadcast/public/send-freeform
```

**Rate limit:** 20 requests per minute for each API key and `fromPhoneNumber` combination.

## Common fields

| Field             | Type   | Required | Description                                                                                                       |
| ----------------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------- |
| `fromPhoneNumber` | string | Required | A sender from [Get Phone Numbers](/en/api-reference/endpoints/broadcast-api/get-phone-numbers), using digits only |
| `toPhoneNumber`   | string | Required | The recipient's complete international number, including country code and using digits only                       |
| `type`            | string | Required | `text`, `image`, `document`, `audio`, `video`, `sticker`, `location`, or `interactive`                            |

Every request uses the same headers and endpoint. Replace `PAYLOAD` with one of the JSON bodies in the sections below.

```bash theme={null}
curl -X POST "https://cerberus.eazybe.com/prod/api/v2/broadcast/public/send-freeform" \
  -H "x-api-key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d 'PAYLOAD'
```

## Message types

<CardGroup cols={2}>
  <Card title="Text Message" href="/en/api-reference/endpoints/broadcast-api/send-free-form-message/text-message">Open the request fields and example for this message type.</Card>
  <Card title="Image Message" href="/en/api-reference/endpoints/broadcast-api/send-free-form-message/image-message">Open the request fields and example for this message type.</Card>
  <Card title="Document Message" href="/en/api-reference/endpoints/broadcast-api/send-free-form-message/document-message">Open the request fields and example for this message type.</Card>
  <Card title="Audio Message" href="/en/api-reference/endpoints/broadcast-api/send-free-form-message/audio-message">Open the request fields and example for this message type.</Card>
  <Card title="Video Message" href="/en/api-reference/endpoints/broadcast-api/send-free-form-message/video-message">Open the request fields and example for this message type.</Card>
  <Card title="Sticker Message" href="/en/api-reference/endpoints/broadcast-api/send-free-form-message/sticker-message">Open the request fields and example for this message type.</Card>
  <Card title="Location Message" href="/en/api-reference/endpoints/broadcast-api/send-free-form-message/location-message">Open the request fields and example for this message type.</Card>
  <Card title="Interactive Message" href="/en/api-reference/endpoints/broadcast-api/send-free-form-message/interactive-message">Open the request fields and example for this message type.</Card>
</CardGroup>

## Successful response

All eight content types use the same success envelope.

```json theme={null}
{
  "status": true,
  "status_code": 200,
  "message": "Free-form message queued successfully",
  "data": {}
}
```

## Errors

| Status         | Cause                                                                  | What to check                                        |
| -------------- | ---------------------------------------------------------------------- | ---------------------------------------------------- |
| `400`          | A common or type-specific field is invalid                             | Check the selected type's required fields            |
| `400`          | A media URL or extension is unsupported                                | Use `http` or `https` and an accepted path extension |
| `400`          | Coordinates, button count, or total list rows are outside their limits | Correct the payload limits                           |
| `401`          | The key or sender does not belong to the organization                  | Use a sender returned for the same key               |
| `429`          | More than 20 requests in the current window                            | Wait for the interval in the response                |
| `500` or `503` | Transient service failure                                              | Retry with exponential backoff                       |

<Info>
  This endpoint queues one message per request. For an approved template sent to multiple recipients, use [Send a Template Broadcast](/en/api-reference/endpoints/broadcast-api/send-template-broadcast).
</Info>
