> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.getdial.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getdial.ai/_mcp/server.

# September 4, 2026

## Fixed

### Replying to a message that arrived over SMS answers `400`, not `500`

A threaded reply attaches to its target by the message id the target's channel carries, and only iMessage and RCS carry one. When the other party has neither, an inbound message reaches your iMessage line over the **SMS fallback** — and a `body` reply to that message had nothing to attach to. [Reply to a message](/api-reference/messages/reply-to-message) reported that as `500 Internal server error`, which read as a fault on our side for a request that simply isn't supported.

It now answers `400` with a message naming the reason, so it's distinguishable from a real failure and safe not to retry. Nothing was ever delivered on the `500` and nothing is delivered on the `400` either — the behaviour is unchanged, only the classification.

To reach a contact whose messages arrive over SMS, send a new message ([`POST /api/v1/messages`](/api-reference/messages/send-a-message)) rather than a reply. It lands in the same conversation; it just isn't quoted on the recipient's device, which SMS can't render anyway.

Unaffected: a **`reaction`** on such a target still follows the reaction rules (an emoji is delivered as a regular message carrying the emoji; a reaction name answers `400`), and a `body` reply whose conversation merely can't thread at send time is still delivered as a regular message.