Skip to main content
POST
Send a human a one-way notification

Authorizations

x-api-key
string
header
required

Body

application/json

A notification to send: the message text, an optional named channel that carries it (omit to record to the internal sink), an optional per-call recipient delivery address, and an optional audience identity whose in-app inbox shows it (honored even with a channel set; distinct from recipient).

message
string
required
audience
string | null

The identity (user_id) whose in-app inbox shows this (honored even with a channel set); leave unset for an operator/broadcast notification. Distinct from recipient, which is a channel delivery address.

channel
string | null

Optional short trailing line under an interactive message. Like the header it COMPOSES an interactive message, so it REQUIRES options or sections; it rides the choice surface's own capability (no separate flag) and mutually exclusive with template.

header
MediaItem · object | null

Optional single display-media header above an interactive message. It COMPOSES an interactive message, so it REQUIRES options or sections; it rides the interactive choice surface's own capability (no separate flag) and mutually exclusive with template.

location
LocationElement · object | null

Optional shared geographic point sent WITH the message (a map pin). On a named channel it requires a channel that advertises location support (else a 501); with no channel it is stored on the internal inbox record. It may carry the message content on its own (a blank message is admissible when media or a location carries it). Mutually exclusive with template.

media
MediaItem · object[] | null

Optional display media sent WITH the message. On a named channel it requires a channel that advertises media support (else a 501); with no channel it is stored on the internal inbox record and rendered there. Mutually exclusive with template.

options
(ReplyOption · object | LinkOption · object)[] | null

Optional FLAT tappable options sent WITH the message — each a reply option (a tap submits its text as a visitor message) or a link option (a tap opens its url). On a named channel it requires a channel that advertises interactive support (else a 501); with no channel it is stored on the internal inbox record. One message carries ONE interactive surface: mutually exclusive with template, sections and schema; may combine with media and location.

A tappable suggested reply. Tapping SUBMITS text as the participant's next inbound message — the quick-reply / list-row case, where the option's own text becomes the turn. description is an OPTIONAL secondary line a sectioned-list row renders under its text; a channel that renders flat buttons (no descriptions) ignores it.

id is an OPTIONAL author-set stable identifier for the button/list row. When set, a channel sends it verbatim on the wire and the participant's tap echoes it back (a channel surfaces the echoed id to the inbound turn as opaque enrichment — e.g. Slack forwards it as params.reply_id); when None the channel mints its own id as today. Bounded by OPTION_ID_MAX_CHARS and a single-line non-blank label — the strictest carrier's rule. Frozen.

recipient
string | null
schema
Schema · object | null

Optional form answer schema for an ask-less form: the channel renders the message as the form's prompt and this schema as the fillable form, and a submission enters the conversation as a message from the person. Requires a named channel (else a 400 — the internal sink has no submission door) that advertises form support (else a 501). Mutually exclusive with template and with options, may combine with media.

sections
OptionSection · object[] | null

Optional SECTIONED tappable options — titled groups of reply rows, the sectioned alternative to the flat options list (rows summed across sections stay within the same cap). On a named channel it requires a channel that advertises interactive support (else a 501); with no channel it is stored on the internal inbox record. One message carries ONE interactive surface: mutually exclusive with options, template and schema; may combine with media and location.

sender_identity
string | null

Reserved: the sending identity a channel message leaves FROM, set by the conversation bridge on the notification it builds to answer a route. Callers MUST NOT supply it here — a set value is rejected with a 400, never forwarded.

template
ChannelTemplate · object | null

Optional pre-approved template for an out-of-window send. On a named channel it requires a channel that advertises template support (else a 501); with no channel it is stored on the internal inbox record. Mutually exclusive with media and options.

Response

Success.

data
string
required

The notify-user body: a bare confirmation STRING (the adapter envelopes it as {"data": <str>}). Typed as a string rather than wrapped, so the wire body is unchanged.