outside_window
HTTP 409, orerror.type in a message.failed event. The channel will not deliver outside its conversation window.
What it means
On WhatsApp you may send free-form messages only within 24 hours of the contact’s last message. After that, WhatsApp accepts only approved templates; the send is refused with HTTP 409. On iMessage a line can reach only contacts who have messaged it (or opted in). The send is accepted, and the refusal arrives later as amessage.failed event with outside_window.
Typing and read receipts go to the channel at once, so they answer HTTP 409 outside_window directly when the channel’s window is closed: on iMessage, typing works only within 5 minutes of the contact’s last message.
Why it happens
- WhatsApp: the contact last wrote more than 24 hours ago.
- WhatsApp: you are starting a conversation with someone who never wrote to the number.
- iMessage: the contact has never messaged the line, or has not opted in to it.
- iMessage: you turned typing on more than 5 minutes after the contact’s last message.
How to fix it
On WhatsApp, send an approved template (content.type=template), or wait for the contact to write again; their message reopens the window. GET /v1/capabilities?conversation=... shows window.open and window.open_until.
address.link when the line has one, for example in your app or website), then reply in the conversation their message opens.
From typing or a read receipt, ignore it and send your reply: the indicator is a courtesy, and the reply itself is not affected.
Every error also carries hint, one sentence specific to your request, and
doc_url, this page. Coding agents connected to Flow’s MCP server
(https://api.flow.engineer/mcp) can call explain_error with the type to read this page.