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

# Send Bulk Messages

> Retired — this v1 endpoint returns HTTP 410 Gone. Use the v2 Bulk Send API.

<Warning>
  **Retired.** The v1 message-send endpoints have been retired. `POST /v1/messages/bulk` now returns **HTTP 410 Gone** on every request and sends nothing. Migrate to the [v2 Bulk Send API](/api-reference/v2/messages/send-bulk).
</Warning>

## Response

Every authenticated request returns `410 Gone`:

<ResponseExample>
  ```json 410 Gone theme={null}
  {
    "error": "The v1 message-send endpoints are retired. Migrate to the v2 messages API.",
    "code": "endpoint_retired"
  }
  ```
</ResponseExample>

| HTTP Status | Error Code            | Description                                                            |
| ----------- | --------------------- | ---------------------------------------------------------------------- |
| 410         | `endpoint_retired`    | The v1 message-send path is retired. Use `POST /v2/send/bulk` instead. |
| 401         | `invalid_credentials` | Missing or invalid API key.                                            |

Authenticated requests can also return `403 account_suspended` or `429 rate_limited` — see [Error Codes](/api-reference/v2/error-codes).

## Migrating to v2

Replace `POST /v1/messages/bulk` with [`POST /v2/send/bulk`](/api-reference/v2/messages/send-bulk), which keeps the partial-success model (per-message `errors[]`) and returns a `message_id` for each queued message.

| v1 field               | v2 equivalent     |
| ---------------------- | ----------------- |
| `from_phone_number_id` | `list_number`     |
| `messages[].to_msisdn` | `messages[].to`   |
| `messages[].body`      | `messages[].body` |
