Skip to main content
DELETE
Disconnect a sender

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

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

sender_id
string
required

The sender's ID. A sender ID, snd_ and a ULID.

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

"snd_01JB8Z4Q3V6W0R2N7C5H1M9K4T"

Response

The sender is disconnected; it is returned with status banned.

What your agent talks from: a Telegram bot, a WhatsApp number, an iMessage line or a US SMS number. shared senders are Flow's sandbox, used by many apps in test mode; dedicated senders are yours alone; simulated senders exist only in test mode, for simulated conversations. Each sender has its own limits and warm-up state.

id
string
required

A sender ID, snd_ and a ULID.

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

"snd_01JB8Z4Q3V6W0R2N7C5H1M9K4T"

channel
enum<string>
required

A messaging channel. sms is US SMS and MMS (in pilot), from dedicated numbers only.

Available options:
telegram,
whatsapp,
imessage,
sms
kind
enum<string>
required

shared (the sandbox), dedicated (yours) or simulated (test mode only: your app's stand-in for a channel, used by simulated conversations from POST /v0/test/conversations; it never touches a network).

Available options:
shared,
dedicated,
simulated
livemode
boolean
required

false for sandbox and simulated senders, true for dedicated senders used in live mode.

status
enum<string>
required
  • pending: requested, being provisioned.
  • active: sending normally.
  • warming_up: active, with a new-contact budget that grows day by day.
  • throttled: the gate slowed it after an abuse signal; it recovers by itself.
  • flagged: the channel or Flow flagged it; starts are paused. A Telegram bot is also flagged when Telegram rejects its token (revoked in @BotFather): it then sends nothing, new sends answer 403 permission, and queued messages wait until you connect the bot again with its new token (POST /v0/senders). They wait at most 72 hours after Flow accepted them; older ones fail with outside_window (channel_code queued_too_long) in message.failed instead of going out late.
  • banned: it cannot send or receive: the channel banned it, you disconnected it (DELETE /v0/senders/{sender_id}), or its bot or line was connected to another app.
Available options:
pending,
active,
warming_up,
throttled,
flagged,
banned
address
object
required

How contacts reach the sender. Which fields are set depends on the channel.

limits
object
required

The sender's current budget for starting conversations, and how fast it sends.

created_at
string<date-time>
required

When the sender was created.

display_name
string

The name contacts see, where the channel shows one.

throttled_until
string<date-time>

With status throttled, when starts are allowed again. Recovery is automatic.

quality_rating
enum<string>

WhatsApp only. Meta's quality rating for the number.

Available options:
green,
yellow,
red,
unknown
sms
object
read-only

SMS senders only: how the number is registered with US carriers and what it can do. An SMS number stays pending until its registration is approved (carriers block traffic from unregistered numbers).

imessage
object
read-only

iMessage senders only: what the line can do beyond replying in iMessage. Set by the Flow team (ask them to change it); absent on other channels.

setup
object
read-only

Only in the answer to POST /v0/senders that connected a WhatsApp number: what you still set in your own Meta app, which Flow cannot set for you. Flow already points the number's webhooks at callback_url (Meta's phone-number-level override); entering the same URL in your app makes its field subscriptions apply. The verify token is shown only in this answer (connecting the number again shows it again); keep it like a password.

join_code
string

Shared senders only. The whole message a contact sends to this sender to join your app: Hi, the app's name (there when it has none), then the app's sandbox_join_code (from GET /v0/app) in brackets after ref, for example Hi Sandbox app (ref brave-otter-40718263). Show it to testers as is; a link that fills it in (wa.me, sms:) carries it URL-encoded. Any message of at most 160 characters that ends with (ref <code>) joins, so a tester may change the words before the brackets.

Example:

"Hi Sandbox app (ref brave-otter-40718263)"