Skip to main content
POST

Authorizations

Authorization
string
header
required

An API key of one app, sent as Authorization: Bearer <key>. Keys start with fk_test_ (test mode: sandbox senders and test data only) or fk_live_ (live mode). Keep live keys on your server; never ship them in an app or page.

Headers

Idempotency-Key
string

A unique string (up to 255 characters) that makes this request safe to retry. A repeat with the same key within 24 hours returns the first answer instead of acting again. See "Idempotency" in the introduction.

Required string length: 1 - 255
Flow-Version
string<date>

The API version to use, as a date. Without it, the version pinned to your app when it was created is used.

Example:

"2026-11-01"

Path Parameters

conversation_id
string
required

The conversation's ID. A conversation ID, conv_ and a ULID.

Pattern: ^conv_[0-9A-HJKMNP-TV-Z]{26}$
Example:

"conv_01JB8ZC3K5M7P9R1T3V5X7Z9B1"

Body

application/json

One turn from a simulated contact (test keys only).

content
object
required

What a simulated contact sends in one turn, as a message kind with kind (required): basic (text and/or media by file_id), voice (by file_id), location, contact_card, or button_reply (a tap on a reply button, or on a list row, of a message your app sent). Fields a contact cannot send (reply_to and metadata inside the kind, channel blocks, link_preview, url) and other kinds answer 400 invalid_request.

from
string

Simulated group conversations only, and required there. The participant who writes this turn (a contact in the conversation's group.participants); another contact answers 400 invalid_request with param from. Refused the same way on one-to-one conversations.

Pattern: ^ct_[0-9A-HJKMNP-TV-Z]{26}$
Example:

"ct_01JB8ZB2J4K6N8Q0S2V4W6Y8A0"

reply_to
string

A message of this conversation the contact replies to inline, on channels with inline replies (Telegram, WhatsApp, iMessage; on SMS it answers 400 invalid_request). The received message shows it in reply_to.

Pattern: ^msg_[0-9A-HJKMNP-TV-Z]{26}$
Example:

"msg_01JB8ZD4M6P8R0T2V4X6Z8B0C2"

Response

The turn was accepted; message.received follows.

A simulated turn Flow accepted. Its message.received event follows.

message
string
required

The ID the received message will have, in its message.received event and in the transcript.

Pattern: ^msg_[0-9A-HJKMNP-TV-Z]{26}$
Example:

"msg_01JB8ZD4M6P8R0T2V4X6Z8B0C2"

conversation
string
required

A conversation ID, conv_ and a ULID.

Pattern: ^conv_[0-9A-HJKMNP-TV-Z]{26}$
Example:

"conv_01JB8ZC3K5M7P9R1T3V5X7Z9B1"

channel_message_id
string
required

The simulated channel's ID for the message (the received message's channel_message_id).

status
enum<string>
required

Always queued; the message is stored and delivered right after.

Available options:
queued