<!-- Generated from the canonical Teloring documentation source. Do not edit this file. -->

Canonical page: https://docs.teloring.com/api/send-message
Last modified: 2026-08-20T20:52:05.000Z

# Send a message

import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
import ParamsDetails from "@theme/ParamsDetails";
import RequestSchema from "@theme/RequestSchema";
import StatusCodes from "@theme/StatusCodes";
import OperationTabs from "@theme/OperationTabs";
import TabItem from "@theme/TabItem";
import Heading from "@theme/Heading";
import Translate from "@docusaurus/Translate";

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Send a message"}
>
</Heading>

<MethodEndpoint
  method={"post"}
  path={"/conversations/{conversation_id}/messages"}
  context={"endpoint"}
>
  
</MethodEndpoint>



Send a message, an internal note, or a WhatsApp template. `type` selects the
shape of the request:

| `type` | What it sends | Required |
| --- | --- | --- |
| `text` *(default)* | A plain text message | `content` |
| `media` | A file by URL | `content` (an https URL), `content_type` |
| `note` | An internal note, never delivered to the customer | `content` |
| `template` | An approved WhatsApp template | `template.name` |

### The WhatsApp 24-hour window

WhatsApp only accepts free-form messages within 24 hours of the customer's last
message. Outside it, this endpoint answers `409` with
`code: whatsapp_window_closed` **before** contacting the provider, and the error
carries `details.last_customer_message_at` so you can show the operator why.
Send a template instead — that is what templates are for.

### Other channel rules

- **TikTok** — 48-hour window plus a per-window message cap; text and image only.
- **Voice** — private notes only.
- **SMS** — costs credits per segment. Insufficient credits answers `402`.
- **Templates** — cost credits by category (`utility`, `marketing`,
  `authentication`). Pass the right one: it decides the price.

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
>
  <Translate id="theme.openapi.request.title">Request</Translate>
</Heading>

<ParamsDetails
  {...require("./send-message.ParamsDetails.json")}
>
  
</ParamsDetails>

<RequestSchema
  {...require("./send-message.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./send-message.StatusCodes.json")}
>
  
</StatusCodes>
