Skip to main content
POST

Authorizations

Authorization
string
header
required

Flowyte secret API key (Authorization: Bearer flowyte_sk_live_…). Scope-gated; is scoped to your organization — a key can never reach another tenant. The listed scopes in each operation's apiKey requirement are the scopes that key must hold. The tokenUrl is nominal: keys are minted in the dashboard.

Body

application/json

One outbound text, optionally with up to 10 pictures or short videos (MMS). from, to and client_message_id are always required; text is required unless the message carries at least one attachment (mediaIds or mediaUrls). String fields are whitespace-trimmed before validation. Unlike initiateEscalation there is no agent or destination to name: the conversation is keyed by the from number's assigned agent, so the recipient's reply lands on the same thread.

from
string
required

The sending number in E.164. Must be a number this workspace owns that is SMS-enabled (smsStatus: active) and assigned to an agent.

Example:

"+14155550100"

to
string
required

The recipient in E.164. Must be a US or Canada (+1) number, different from from and not one of this workspace's own numbers, with a recorded consent basis (conversational or express).

Example:

"+14155551234"

client_message_id
string
required

Idempotency key naming this one message (at most 200 characters; a UUID is ideal). A replay returns the original receipt and never sends a second text; reusing it for a different message is 409 client_message_id_reused.

Maximum string length: 200
Example:

"6f1c2d3e-4a5b-6789-abcd-ef0123456789"

text
string

The message. Send the message ONLY — on a first contact the platform prefixes your brand name and appends the "Msg & data rates may apply. Reply HELP for help, STOP to opt out." block. The text is converted to plain ASCII: smart punctuation is mapped to its plain equivalent; accented letters, emoji and other non-ASCII characters are removed. A text that is empty after that conversion is refused (400), even alongside attachments — leave text out to send attachments alone. The result is capped at two segments (truncating at a sentence boundary). Optional when the message carries attachments — a picture-only message is allowed.

Maximum string length: 4000
Example:

"Hi Dana — your cleaning is confirmed for Tue 9am."

mediaIds
string[]

Attachments by id: uploads from uploadSMSMedia (POST /sms/media) that have not expired, or any picture or video already sent or received by text in this workspace (to forward it); a web-chat upload is not a text-message attachment and is refused media_not_found. Each must be a JPEG, PNG or GIF picture or an MP4, 3GP or MOV video of at most 1 MiB. Counts toward the limit of 10 attachments per message, together with mediaUrls.

Maximum array length: 10
Example:
mediaUrls
string<uri>[]

Attachments by public https:// address on port 443 or 8443 (at most 2,048 characters each). The platform downloads each picture or video before sending, checks it like an upload, and sends its own copy — the carrier never sees your address. Counts toward the limit of 10 attachments per message, together with mediaIds, and each address counts as one upload against the upload rate limit.

Maximum array length: 10
Example:

Response

The text was sent (also returned, byte for byte, on an idempotent replay of the same client_message_id).

success
boolean
required
data
object
required

The receipt for a sent text.

message
string
errors
object[]