# Flow > Build for every chat interface with Flow Framework, or connect your agent through the Unified Messaging API. - [Welcome to Flow Framework](https://flow.engineer/docs/framework/index.md): Build once. Ship to every chat. - [Your first Flow project](https://flow.engineer/docs/framework/quickstart.md): Create a project, choose an interface and make your first tool call. - [For coding agents](https://flow.engineer/docs/agents.md): Build, connect, test and deploy a Flow project with CLI exit codes and next steps. - [Write a tool](https://flow.engineer/docs/build-agent.md): Define a product capability once. Call it from MCP, a CLI or your messaging agent. - [Teach a workflow](https://flow.engineer/docs/skills.md): Give your tools the instructions an agent needs to use them well. - [Models and configuration](https://flow.engineer/docs/reference.md): Choose a model and configure your messaging agent's runtime behavior. - [Try it in the playground](https://flow.engineer/docs/playground.md): Test the same agent across channels and inspect every tool call. - [Build an MCP server](https://flow.engineer/docs/framework/mcp.md): Make your product's tools available in Claude, ChatGPT and other assistants. - [Package a plugin](https://flow.engineer/docs/plugins.md): Ship your skills and MCP connection together in a native plugin package. - [Claude Code plugin](https://flow.engineer/docs/plugins/claude-code.md): Load your Flow tools and skills as a Claude Code plugin. - [ChatGPT plugin](https://flow.engineer/docs/plugins/chatgpt.md): Bring your Flow tools and skills into ChatGPT. - [Codex plugin](https://flow.engineer/docs/plugins/codex.md): Package your product's tools and skills for Codex. - [Other Agent Plugins hosts](https://flow.engineer/docs/plugins/agent-plugins.md): Use the portable package in hosts that implement Agent Plugins 1.0.0. - [Connect messaging channels](https://flow.engineer/docs/conversations.md): Run the same agent on WhatsApp, iMessage, Telegram, SMS and your own app. - [WhatsApp agent](https://flow.engineer/docs/messaging/whatsapp.md): Connect your product to WhatsApp, with buttons, templates and channel-aware replies. - [iMessage agent](https://flow.engineer/docs/messaging/imessage.md): Let people text your product on iMessage through Flow Messaging. - [Telegram agent](https://flow.engineer/docs/messaging/telegram.md): Connect a Telegram bot and try your Flow agent from your phone. - [SMS agent](https://flow.engineer/docs/messaging/sms.md): Run your agent over plain-text SMS with Flow Messaging or your own provider. - [Web and app chat](https://flow.engineer/docs/messaging/web.md): Connect your own interface to the same tools, skills and conversation runtime. - [Build a command line](https://flow.engineer/docs/cli.md): Build a product CLI over your MCP server, with custom commands, authentication and terminal conversations. - [Reminders and nudges](https://flow.engineer/docs/nudges.md): Send useful follow-ups with schedules, quiet hours, opt-outs and WhatsApp templates. - [Business events](https://flow.engineer/docs/events.md): Turn signed backend events into messages with delivery levels, quiet hours and deduplication. - [The agent's own records](https://flow.engineer/docs/records.md): Keep small JSON documents the agent needs across days and people, in the same store as its conversations. - [Wake-ups: the agent comes back later](https://flow.engineer/docs/wake-ups.md): Let the agent give itself a turn later, with a note, to check on something no one will write about. - [Deploy your project](https://flow.engineer/docs/hosting.md): Deploy to staging on Flow, check the release and promote it to production. - [Host it yourself](https://flow.engineer/docs/self-hosting.md): Run MCP servers and messaging agents on your own Node infrastructure. - [Test your agent](https://flow.engineer/docs/testing.md): Check real conversation behavior with simulated people, simulated tools and a judge. - [Inspect traces](https://flow.engineer/docs/traces.md): Follow conversations and tool calls across messaging, MCP, plugins and the CLI. - [Unified Messaging API](https://flow.engineer/docs/unified-messaging-api/index.md): Receive and send messages on WhatsApp, iMessage and Telegram through one API. - [Send your first reply](https://flow.engineer/docs/unified-messaging-api/quickstart.md): Get a test key, join the Telegram sandbox and answer a message. - [Keys and sign-in](https://flow.engineer/docs/unified-messaging-api/get-a-key.md): Create a test key, check your allowance and claim the app with your Flow account. - [Build with a coding agent](https://flow.engineer/docs/unified-messaging-api/coding-agents.md): Give your coding agent the setup, examples and checks for a Messaging API integration. - [Build for real conversations](https://flow.engineer/docs/unified-messaging-api/guides/real-people.md): Handle consent, corrections, retries, delays and people returning later. - [Messaging MCP server](https://flow.engineer/docs/unified-messaging-api/mcp.md): Test your Messaging API integration from a coding agent. - [Pricing and allowances](https://flow.engineer/docs/unified-messaging-api/pricing.md): Plans, the people each reaches per channel, and sandbox allowances. - [Observe conversations](https://flow.engineer/docs/unified-messaging-api/observe/index.md): Inspect replies, grades and failures across your agent's conversations. - [Connect Messaging to Observe](https://flow.engineer/docs/unified-messaging-api/observe/flow-messaging.md): Connect your Messaging app to Observe without changing its message handler. - [Send traces to Observe](https://flow.engineer/docs/unified-messaging-api/observe/traces.md): Export one OpenTelemetry trace per turn from an agent on any channel. - [Trace your agent framework](https://flow.engineer/docs/unified-messaging-api/observe/frameworks.md): Attach model and tool spans to your conversation's turn trace. - [Test your integration](https://flow.engineer/docs/unified-messaging-api/trust.md): Exercise conversations before you send a new agent version to real people. - [Connect a sender](https://flow.engineer/docs/unified-messaging-api/concepts/senders.md): Choose the bot, number or line your agent sends from. - [Conversations and contacts](https://flow.engineer/docs/unified-messaging-api/concepts/conversations.md): Reply to a conversation without selecting a channel for each message. - [Send text, media and buttons](https://flow.engineer/docs/unified-messaging-api/concepts/content-types.md): One endpoint per message kind: what each channel takes, and what to send where it does not. - [Receive events](https://flow.engineer/docs/unified-messaging-api/concepts/events-and-webhooks.md): Receive messages through signed webhooks, a live stream or the event log. - [Stream replies](https://flow.engineer/docs/unified-messaging-api/concepts/streaming-replies.md): Turn a model stream into complete chat bubbles while showing typing. - [Sending rules](https://flow.engineer/docs/unified-messaging-api/concepts/send-gate.md): Understand reply windows, new-contact budgets, pacing and send refusals. - [Test and live mode](https://flow.engineer/docs/unified-messaging-api/concepts/test-and-live-mode.md): Keep sandbox data and real customer conversations separate. - [Retry without duplicate sends](https://flow.engineer/docs/unified-messaging-api/concepts/idempotency.md): Reuse an idempotency key to retry the same API request safely. - [Retention and deletion](https://flow.engineer/docs/unified-messaging-api/concepts/data-retention.md): Understand retention and delete one contact's message data. - [API versions](https://flow.engineer/docs/unified-messaging-api/concepts/versioning.md): Pin requests with Flow-Version and handle dated contract changes. - [Rate limits](https://flow.engineer/docs/unified-messaging-api/concepts/rate-limits.md): Read your request budget and retry a 429 response at the right time. - [Telegram](https://flow.engineer/docs/unified-messaging-api/guides/telegram-agent.md): Try the sandbox bot, then connect your own Telegram sender. - [iMessage](https://flow.engineer/docs/unified-messaging-api/guides/imessage-agent.md): Receive and answer iMessage, one-to-one and in group chats, on Flow's shared line or a dedicated line. - [WhatsApp](https://flow.engineer/docs/unified-messaging-api/guides/whatsapp-agent.md): Connect your number, send replies and handle templates outside the reply window. - [Local development](https://flow.engineer/docs/unified-messaging-api/guides/local-development.md): Receive events or forward signed deliveries to localhost without a tunnel. - [Go live](https://flow.engineer/docs/unified-messaging-api/guides/going-live.md): Connect a dedicated sender, use a live key and check production delivery. - [Messaging recipes](https://flow.engineer/docs/unified-messaging-api/guides/recipes.md): Common messaging workflows, from waiting for a reply to recovering a failed send. - [Vercel AI SDK](https://flow.engineer/docs/unified-messaging-api/frameworks/vercel-ai-sdk.md): Connect a Vercel AI SDK agent to Flow Messaging. - [OpenAI Agents SDK](https://flow.engineer/docs/unified-messaging-api/frameworks/openai-agents-sdk.md): Receive messages and send an OpenAI Agents SDK run back as chat bubbles. - [Claude Agent SDK](https://flow.engineer/docs/unified-messaging-api/frameworks/claude-agent-sdk.md): Run a Claude agent for each message and deliver its streamed answer. - [LangChain](https://flow.engineer/docs/unified-messaging-api/frameworks/langchain.md): Connect a LangChain model or chain to your messaging conversations. - [Mastra](https://flow.engineer/docs/unified-messaging-api/frameworks/mastra.md): Deliver a Mastra agent's streamed replies through Flow Messaging. - [Choose a messaging API](https://flow.engineer/docs/unified-messaging-api/compare/choosing-a-messaging-api.md): Compare channels, delivery contracts and hosting models against your requirements. - [Flow and Photon](https://flow.engineer/docs/unified-messaging-api/compare/flow-vs-photon.md): Compare the hosted Messaging API with Photon's Spectrum SDK and cloud. - [HTTP API](https://flow.engineer/docs/unified-messaging-api/api-reference/introduction.md): Authentication, pagination, errors and versioning for the Unified Messaging API. - [Send a basic message (text, or media with a caption)](https://flow.engineer/docs/api-reference/messages/send-a-basic-message-text-or-media-with-a-caption.md): | Channel | Works | Limits | |---|---|---| | Telegram | Yes | `text` 4096 UTF-16 code units (an emoji such as šŸ˜€ counts as 2); a caption 1024; files up to 50 MB; `media.filename` only with `file_id` (Telegram names a document sent by `url` itself) | | WhatsApp | Yes | `text` 4096 characters; a capti… - [Send a voice note](https://flow.engineer/docs/api-reference/messages/send-a-voice-note.md): | Channel | Works | Limits | |---|---|---| | Telegram | Yes | files up to 50 MB | | WhatsApp | Yes | files up to 100 MB | | iMessage | Yes | files up to 100 MB | | SMS (US, pilot) | No | | - [Send text with buttons](https://flow.engineer/docs/api-reference/messages/send-text-with-buttons.md): | Channel | Works | Limits | |---|---|---| | Telegram | Yes | 1 to 10 buttons, reply and URL buttons mixed; `text` 4096 UTF-16 code units, 1024 with a media `header` | | WhatsApp | Yes | 1 to 3 reply buttons, or exactly one URL button (a call-to-action link); `text` 1024 characters | | iMessage | No… - [Send a list to pick one option from](https://flow.engineer/docs/api-reference/messages/send-a-list-to-pick-one-option-from.md): | Channel | Works | Limits | |---|---|---| | Telegram | No | | | WhatsApp | Yes | 1 to 10 sections, at most 10 rows in all; `text` 4096 characters | | iMessage | No | | | SMS (US, pilot) | No | | - [Send a carousel of cards](https://flow.engineer/docs/api-reference/messages/send-a-carousel-of-cards.md): | Channel | Works | Limits | |---|---|---| | Telegram | No | | | WhatsApp | Yes | 2 to 10 cards, 1 to 2 buttons each; `text` 1024 characters | | iMessage | No | | | SMS (US, pilot) | No | | - [Send a WhatsApp template](https://flow.engineer/docs/api-reference/messages/send-a-whatsapp-template.md): | Channel | Works | Limits | |---|---|---| | Telegram | No | | | WhatsApp | Yes | an `approved` template of the conversation's sender; required outside the 24-hour window | | iMessage | No | | | SMS (US, pilot) | No | | - [Send a contact card](https://flow.engineer/docs/api-reference/messages/send-a-contact-card.md): | Channel | Works | Limits | |---|---|---| | Telegram | Yes | at least one phone number; every phone number and email address goes on the card, which Telegram caps at 2048 bytes (a longer one answers `400 invalid_request` with `param` `phones`) | | WhatsApp | Yes | | | iMessage | No | | | SMS (US, p… - [Send a place](https://flow.engineer/docs/api-reference/messages/send-a-place.md): | Channel | Works | Limits | |---|---|---| | Telegram | Yes | `name` and `address` together, or neither | | WhatsApp | Yes | | | iMessage | No | | | SMS (US, pilot) | No | | - [Send text with an iMessage effect](https://flow.engineer/docs/api-reference/messages/send-text-with-an-imessage-effect.md): | Channel | Works | Limits | |---|---|---| | Telegram | No | | | WhatsApp | No | | | iMessage | Yes | `text` 9999 characters; not shown when the message goes by SMS or RCS | | SMS (US, pilot) | No | | - [React to a message](https://flow.engineer/docs/api-reference/messages/react-to-a-message.md): | Channel | Works | Limits | |---|---|---| | Telegram | Yes | only Telegram's reaction emoji (listed below); `telegram.is_big` for a large animation | | WhatsApp | Yes | any one emoji | | iMessage | Yes | any one emoji; not in group conversations | | SMS (US, pilot) | No | | - [Start a conversation](https://flow.engineer/docs/api-reference/messages/start-a-conversation.md): Sends the first message from one of your senders to a contact, creating the conversation if it does not exist. The body is a `basic` or `template` message, with `kind` (required here) saying which, plus where to send it: `sender`, `to` and, on SMS, `consent`. Any other `kind` answers `422 unsupporte… - [Get a message](https://flow.engineer/docs/api-reference/messages/get-a-message.md): Returns one message, inbound or outbound, with its current status. - [Edit a sent message](https://flow.engineer/docs/api-reference/messages/edit-a-sent-message.md): | Channel | Works | Limits | |---|---|---| | Telegram | Yes | no time limit; a caption 1024 UTF-16 code units, text 4096 | | WhatsApp | No | | | iMessage | Yes | within 15 minutes of sending; not the message that started the conversation; not a message that went by SMS or RCS | | SMS (US, pilot) | N… - [Unsend a message](https://flow.engineer/docs/api-reference/messages/unsend-a-message.md): | Channel | Works | Limits | |---|---|---| | Telegram | Yes | within 48 hours of sending | | WhatsApp | No | | | iMessage | Yes | within 2 minutes of sending; not a message that went by SMS or RCS | | SMS (US, pilot) | No | | - [List conversations](https://flow.engineer/docs/api-reference/conversations/list-conversations.md): Lists your app's conversations in this mode, newest first. - [Get a conversation](https://flow.engineer/docs/api-reference/conversations/get-a-conversation.md): Returns one conversation with its window state. - [List a conversation's messages](https://flow.engineer/docs/api-reference/conversations/list-a-conversations-messages.md): Lists the messages in a conversation, inbound and outbound, newest first. Message content is kept for your plan's retention period (30 days by default); older messages are not returned. - [Show the typing indicator](https://flow.engineer/docs/api-reference/conversations/show-the-typing-indicator.md): | Channel | Works | Limits | |---|---|---| | Telegram | Yes | | | WhatsApp | Yes | within 24 hours of the contact's last message, after they wrote at least once | | iMessage | Yes | within 5 minutes of the contact's last message; not in group conversations; `imessage.duration_seconds` 1 to 60 | | SM… - [Mark messages as read](https://flow.engineer/docs/api-reference/conversations/mark-messages-as-read.md): | Channel | Works | Limits | |---|---|---| | Telegram | No | | | WhatsApp | Yes | up to any inbound message (`up_to`) | | iMessage | Yes | the whole conversation (no `up_to`); not in group conversations | | SMS (US, pilot) | No | | - [List events](https://flow.engineer/docs/api-reference/events/list-events.md): Reads your app's event log in this mode, **oldest first**. Pass the ID of the last event you processed as `after` to catch up after downtime, or to replay from any point. The log is the same one webhooks and the stream deliver from, so it is also how you recover events whose webhook deliveries faile… - [Get an event](https://flow.engineer/docs/api-reference/events/get-an-event.md): Returns one event from the log. - [Open the live event stream (WebSocket)](https://flow.engineer/docs/api-reference/stream/open-the-live-event-stream-websocket.md): Upgrades to a WebSocket that pushes your app's events as they happen, in log order. Pass `after` to resume from the last event you saw: the stream first replays everything after it, then goes live, so a reconnect never loses an event. - [An event delivered to your endpoint](https://flow.engineer/docs/api-reference/webhook-endpoints/an-event-delivered-to-your-endpoint.md): Flow `POST`s each event your endpoint subscribes to, one event per request, in order per conversation. Verify `Flow-Signature` before trusting the body (see "Webhooks" in the introduction). Deliveries are at least once: deduplicate on the event's `id`. - [List webhook endpoints](https://flow.engineer/docs/api-reference/webhook-endpoints/list-webhook-endpoints.md): Lists your app's webhook endpoints in this mode, newest first. Signing secrets are not included. - [Create a webhook endpoint](https://flow.engineer/docs/api-reference/webhook-endpoints/create-a-webhook-endpoint.md): Registers an HTTPS URL to receive your app's events of the listed types. The answer includes the endpoint's signing `secret`, shown only this once. Status events (`message.sent`, `message.delivered`, ...) are high volume; subscribe only to the types you use. - [Get a webhook endpoint](https://flow.engineer/docs/api-reference/webhook-endpoints/get-a-webhook-endpoint.md): Returns one webhook endpoint. The signing secret is not included. - [Update a webhook endpoint](https://flow.engineer/docs/api-reference/webhook-endpoints/update-a-webhook-endpoint.md): Changes an endpoint's URL, event types, description, or whether it is enabled. Fields you leave out are kept. A `url` another endpoint of the app already has in this mode answers `400 invalid_request` with `param` `url`. - [Delete a webhook endpoint](https://flow.engineer/docs/api-reference/webhook-endpoints/delete-a-webhook-endpoint.md): Stops deliveries to the endpoint and deletes it. Events stay in the log. - [Rotate a webhook endpoint's signing secret](https://flow.engineer/docs/api-reference/webhook-endpoints/rotate-a-webhook-endpoints-signing-secret.md): Makes a new signing secret for the endpoint and returns it in `secret`, shown only this once. The previous secret keeps signing for `overlap_seconds` (default 86400, one day; `0` retires it at once): during the overlap every delivery's `Flow-Signature` carries two `v1` values, one per secret, so you… - [Upload a file](https://flow.engineer/docs/api-reference/files/upload-a-file.md): Uploads a file to send later (by `file_id`) as a basic message's `media`, a voice note, or a header. The real type is checked from the file's first bytes: programs, web pages and unknown types are refused with `422 unsupported_content`. Images, audio and video are not scanned and are taken. Document… - [Download a file](https://flow.engineer/docs/api-reference/files/download-a-file.md): Redirects to a short-lived signed URL for the file's bytes, on Flow's separate file domain. Inbound media (photos, documents, voice notes) is fetched from the channel once, before its event is delivered, and served this way; event payloads link to this endpoint. - [List senders](https://flow.engineer/docs/api-reference/senders/list-senders.md): Lists the senders your app can use in this mode, newest first. Test keys see the shared sandbox senders (a sandbox sender Flow has replaced is left out; `GET /v0/senders/{sender_id}` still shows it, retired); live keys see your dedicated senders. Your app's simulated senders (test mode only) are lis… - [Request a dedicated sender](https://flow.engineer/docs/api-reference/senders/request-a-dedicated-sender.md): Connects a dedicated sender to your app. Telegram bots and WhatsApp numbers in your own WhatsApp Business Account are connected here, self-serve, with a live key (below). iMessage lines and US SMS numbers are connected by the Flow team, not by API: a request with `channel` `imessage` or `sms` answer… - [Get a sender](https://flow.engineer/docs/api-reference/senders/get-a-sender.md): Returns one sender with its status, limits and, on WhatsApp, its quality rating. - [List templates](https://flow.engineer/docs/api-reference/templates/list-templates.md): Lists WhatsApp message templates for your senders, newest first. - [Create a template](https://flow.engineer/docs/api-reference/templates/create-a-template.md): Submits a WhatsApp message template for review for one of your dedicated WhatsApp senders. It starts as `pending`; you receive `template.status_changed` when WhatsApp approves, rejects or pauses it. Templates are WhatsApp only: a Telegram or iMessage sender gets `422 unsupported_content`, and a name… - [Get a template](https://flow.engineer/docs/api-reference/templates/get-a-template.md): Returns one template with its approval status. - [Delete a template](https://flow.engineer/docs/api-reference/templates/delete-a-template.md): Deletes the template at Meta and here. Messages already sent with it are unaffected. Templates of a shared sandbox sender belong to Flow and cannot be deleted (`403 permission`). - [Disconnect a sender](https://flow.engineer/docs/api-reference/senders/disconnect-a-sender.md): Disconnects one of your dedicated Telegram bots or WhatsApp numbers from Flow. For a bot, Flow removes its webhook (best effort) and deletes its stored token; for a WhatsApp number, Flow deletes its stored token and app secret and stops taking its webhooks. Either way the sender is retired: its stat… - [List contacts](https://flow.engineer/docs/api-reference/contacts/list-contacts.md): Lists the contacts your app has talked with in this mode, newest first. - [Get a contact](https://flow.engineer/docs/api-reference/contacts/get-a-contact.md): Returns one contact and the address they are reached at on their channel. A deleted contact answers `404 not_found`. - [Get the calling app](https://flow.engineer/docs/api-reference/app/get-the-calling-app.md): Returns the app, account and API key that made the request, and the mode it runs in. Useful to check a key and to read the app's pinned API version. - [Delete a contact and their data](https://flow.engineer/docs/api-reference/contacts/delete-a-contact-and-their-data.md): Erases the contact and what Flow keeps about them in this app and mode. It cannot be undone. Use it when the person asks you to delete their data, or when you delete them in your own product. - [Get a test key without an account](https://flow.engineer/docs/api-reference/onboarding/get-a-test-key-without-an-account.md): Creates a new app with a `fk_test_` key, without an account or sign-in. This is the first call for an AI coding agent that has no key: no API key is sent, and the answer holds everything needed to start (the key, the sandbox senders with their links and the app's join message). - [Start a sign-in from an agent or CLI (device flow)](https://flow.engineer/docs/api-reference/onboarding/start-a-sign-in-from-an-agent-or-cli-device-flow.md): Starts a sign-in that a person finishes in a browser with a Flow account (flow.engineer): the OAuth 2.0 device authorization grant (RFC 8628) in Flow's JSON shape. Show the person `verification_uri` and `user_code`: they open the page, sign in and type the code you show them. Then poll `POST /v0/dev… - [Poll a device sign-in for its key](https://flow.engineer/docs/api-reference/onboarding/poll-a-device-sign-in-for-its-key.md): Answers the state of a sign-in started with `POST /v0/device/authorizations`. While the person has not finished, `status` is `pending`: wait `interval` seconds and poll again. Polling faster answers `429 rate_limited` with `retry_after`. Once they approve, `status` is `approved` and the answer holds… - [Create a simulated conversation](https://flow.engineer/docs/api-reference/testing/create-a-simulated-conversation.md): Test keys only. Creates a conversation with a **simulated contact**, an end user that exists only inside Flow, so an agent or a test suite can play the person's side with no phone and no real channel. Write as the contact with `POST /v0/test/conversations/{conversation_id}/inbound`; your agent recei… - [Write as the simulated contact](https://flow.engineer/docs/api-reference/testing/write-as-the-simulated-contact.md): Test keys only. Posts one inbound turn from the simulated contact of a simulated conversation. It goes through the same inbound path as a real channel's message: Flow stores it, then delivers it as a `message.received` event by webhook, on the stream and in the event log, in order with the conversat… - [Read a simulated conversation, both ways](https://flow.engineer/docs/api-reference/testing/read-a-simulated-conversation-both-ways.md): Test keys only. Lists a simulated conversation's messages, both directions, **oldest first**, so a test can page forward with `after` (the last message ID it has) to see what your agent sent back to the simulated contact. Each entry is a `Message`; a sent message's `content` is exactly what the simu… - [invalid_request](https://flow.engineer/docs/unified-messaging-api/errors/invalid_request.md): The request is malformed or a parameter is invalid. - [authentication](https://flow.engineer/docs/unified-messaging-api/errors/authentication.md): The API key is missing, malformed, unknown, revoked or expired. - [permission](https://flow.engineer/docs/unified-messaging-api/errors/permission.md): The key may not do this. - [not_found](https://flow.engineer/docs/unified-messaging-api/errors/not_found.md): No such object for this app and mode. - [idempotency_conflict](https://flow.engineer/docs/unified-messaging-api/errors/idempotency_conflict.md): The idempotency key was used for a different request, or that request is still running. - [outside_window](https://flow.engineer/docs/unified-messaging-api/errors/outside_window.md): The channel will not deliver outside its conversation window: WhatsApp's 24 hours, an iMessage contact who has not messaged the line, or an SMS sender's quiet hours. - [unsupported_content](https://flow.engineer/docs/unified-messaging-api/errors/unsupported_content.md): The conversation's channel does not take this kind, field or value, so nothing was sent. - [new_contact_limit](https://flow.engineer/docs/unified-messaging-api/errors/new_contact_limit.md): The sender has used its budget for starting conversations. - [sender_throttled](https://flow.engineer/docs/unified-messaging-api/errors/sender_throttled.md): Abuse signals tripped, so the sender may not start conversations for a while. - [file_blocked](https://flow.engineer/docs/unified-messaging-api/errors/file_blocked.md): The file failed the malware scan and was not stored. - [rate_limited](https://flow.engineer/docs/unified-messaging-api/errors/rate_limited.md): Too many requests for this key, or sends faster than the sender's sending rate (pacing). - [channel_error](https://flow.engineer/docs/unified-messaging-api/errors/channel_error.md): The channel refused or failed the message. - [not_implemented](https://flow.engineer/docs/unified-messaging-api/errors/not_implemented.md): This endpoint or channel is not live yet during the beta. - [api_error](https://flow.engineer/docs/unified-messaging-api/errors/api_error.md): Something went wrong on Flow's side. ## OpenAPI Specs - [openapi](https://flow.engineer/docs/unified-messaging-api/openapi.yaml)