Connect and reply
1
Get a test key
From your project folder:This creates a test key without an account, writes
Terminal
FLOW_MESSAGING_KEY and
FLOW_CLAIM_TOKEN to .env, and prints a sandbox link. It asks before installing coding-agent
support or configuring the optional MCP connection.Already have a key? Use it instead of creating another app.2
Join from your phone
Open the printed Telegram link and tap Start. If you found the bot another way, send
the join message printed by the CLI.Check it worked: your app has a conversation with your phone. The sandbox only sends
to people who have joined it.
3
Run the reply handler
Choose an SDK, install it and set Check it worked: text “hello” to the bot and receive “You said: hello”.
A send is queued first; watch
FLOW_MESSAGING_KEY in your process environment.
Node does not automatically load .env; use the run command below.message.sent or message.failed to learn its outcome.4
Use your agent's answer
Replace the echo with a call to your model or agent. The TypeScript SDK’s
reply() also
accepts supported model streams and sends complete chat bubbles as they become ready.See streaming replies or choose your
agent framework.Sandbox limits
An anonymous test key allows one contact and 50 outbound messages, and expires after seven days. Sign in to keep the app and use the signed-in allowance. Use synthetic data and shared sandbox senders only for testing.Use plain HTTP
The API works from any language. These alternatives use the same key and conversation:Receive and reply with curl
Receive and reply with curl
curl
Run the Go HTTP example
Run the Go HTTP example
Go (HTTP)
/basic, /buttons, /list, /carousel, …), and its
page opens with the channels it works on. A kind, field or value the channel does not take answers
422 unsupported_content and sends nothing;
its hint says what to send instead.
Moving from the older API
The API is V0: every path starts with/v0, and each kind of message has its own endpoint instead
of POST /v1/conversations/{conversation_id}/messages with content. There is no fallback,
delivered_as, markdown format or capabilities endpoint, typing takes no state, and starts are
flat ({"sender": "snd_...", "to": {...}, "kind": "basic", "text": "Hi"}).
- Plain HTTP or the SDKs (
@flow-engineer/messaging0.4.0,flow-messaging0.2.0): have your coding agent run theflow-messaging-migrateskill. In Claude Code, runclaude plugin marketplace add flow-engineer/sdk, thenclaude plugin install flow-messaging@flow-engineer. The skill’s source is on GitHub. - Flow Framework: upgrade
@flow-engineer/flowto 0.7.0. Your agent code does not change.
Receive signed webhooks
Use a public endpoint or forward events to localhost.
Go live
Connect your own sender and switch to a live key.