Skip to main content
POST
Send media into a conversation

Authorizations

x-api-key
string
header
required

Your workspace API key. Create one in Settings → API Keys; the plaintext value is shown once and never again.

Keys are scoped. A key needs conversations:send to send, conversations:read to read threads and messages, templates:read to list templates, and channels:read to list channels. A key missing the scope for an endpoint gets 403.

The CRM endpoints use the same resource:action form: leads:read, leads:create, leads:update, leads:delete, customers:read, customers:create, customers:update, customers:delete, customers:manage.

Several resources have no scope of their own and borrow one:

Grant only what the integration needs — a key that only sends notifications should hold conversations:send and nothing else.

X-Tenant-Id
string
header
required

Your workspace UUID. Required on every request in addition to x-api-key.

It does not select the workspace — data access is always scoped to the workspace that owns the API key, and a mismatched value cannot read anyone else's data.

Path Parameters

id
string<uuid>
required

Body

application/json
mediaUrl
string<uri>
required

Publicly reachable URL. We fetch it; it is not uploaded through this API.

type
enum<string>
required
Available options:
image,
video,
audio,
document
caption
string
fileName
string

Filename shown for documents.

Response

Queued for delivery.

id
string<uuid>
conversation_id
string<uuid>
direction
enum<string>
Available options:
inbound,
outbound
type
enum<string>

Drives how text and media are interpreted.

Available options:
text,
image,
video,
audio,
document,
sticker,
location,
contact,
poll,
reaction,
template
text
string | null

The body for text; the caption for image/video/document; the emoji for a reaction; the place name for a location; null for audio and stickers.

media
object | null

Type-specific metadata. Null for plain text.

status
enum<string>

Delivery state. failed is terminal and error_reason explains it. Read status only appears when the contact has read receipts enabled.

Available options:
pending,
sent,
delivered,
read,
failed
error_reason
string | null
sender_name
string | null
from_me
boolean

True when we sent it.

platform_message_id
string

The platform's own id. Empty until the send is acknowledged.

created_at
string<date-time>