---
title: "Send a message"
method: POST
path: "/v3/messages"
tags: ["Messages"]
---

# Send a message

`POST /v3/messages`

Sends a message to one or more recipients using a template. Supports multi-channel broadcast — when multiple channels are specified (e.g. ["sms", "whatsapp"]), a separate message is created for each (recipient, channel) pair. Returns immediately with per-recipient message IDs for async tracking via webhooks or the GET /messages/{id} endpoint.

## Headers

- `Idempotency-Key` string
- `x-profile-id` string, uuid

## Request body

- SentDmServicesEndpointsCustomerAPIv3RequestsSendMessageV3Request — Request to send a message (v3 SDK-style with multi-recipient and multi-channel broadcast)
  - `sandbox` boolean — Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution
  - `to` string[], required — List of recipient phone numbers in E.164 format (multi-recipient fan-out)
  - `channel` string[], nullable — Channels to broadcast on, e.g. ["whatsapp", "sms"]. Each channel produces a separate message per recipient. "sent" = auto-detect. Defaults to ["sent"] (auto-detect) if omitted.
  - `template` SentDmServicesCommonServicesTemplatesContractsTemplateV3Ref, required — SDK-style template reference: resolve by ID or by name, with optional parameters.
    - `id` string, uuid, nullable — Template ID (mutually exclusive with name)
    - `name` string, nullable — Template name (mutually exclusive with id)
    - `parameters` object, nullable — Template variable parameters for personalization

## Response `202`

Message accepted for processing

- SentDmServicesEndpointsCustomerAPIv3ResponsesApiResponseOfSendMessageV3Response — Standard API response envelope for all v3 endpoints
  - `success` boolean — Indicates whether the request was successful
  - `data` SentDmServicesCommonServicesMessagingContractsSendMessageV3Response — Response for the multi-recipient send message endpoint
    - `status` string — Overall request status: "QUEUED" when the batch has been accepted and published to Kafka.
    - `template_id` string, uuid — Template ID that was used
    - `template_name` string — Template display name
    - `recipients` SentDmServicesCommonServicesMessagingContractsMessageV3Recipient[] — Per-recipient message results
      - `message_id` string, uuid — Unique message identifier for tracking this recipient's message
      - `to` string — Phone number in E.164 format
      - `channel` string, nullable — Channel this message will be sent on (e.g. "sms", "whatsapp"), or null for auto-detect
      - `body` string, nullable — Resolved template body text for this recipient's channel, or null for auto-detect
  - `error` SentDmServicesEndpointsCustomerAPIv3ResponsesApiError — Error information
    - `code` string — Machine-readable error code (e.g., "RESOURCE_001")
    - `message` string — Human-readable error message
    - `details` object, nullable — Additional validation error details (field-level errors)
    - `doc_url` string, nullable — URL to documentation about this error
  - `meta` SentDmServicesEndpointsCustomerAPIv3ResponsesApiMeta — Request and response metadata
    - `request_id` string — Unique identifier for this request (for tracing and support)
    - `timestamp` string, date-time — Server timestamp when the response was generated
    - `version` string — API version used for this request

## Other responses

- `400` — Invalid request parameters
- `401` — Unauthorized - Invalid API credentials
- `402` — Insufficient balance
- `403` — Forbidden
- `404` — Template not found
- `500` — Internal server error

---

[API](https://skmtc.net/sentdm/apis/sent-dm-api-v3.md) · [All operations](https://skmtc.net/sentdm/apis/sent-dm-api-v3/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sentdm/sent-dm-api-v3/revisions/c451eca46f1b/schema)
