Send a reply on an existing conversation.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Sends a reply on an existing conversation. The reply uses the same channel (SMS or email) and the same configured sender that the conversation was originally opened with. Messages sent through this endpoint count against the account's messaging credit.
Attachments are not supported on this endpoint. To send a brand-new message (rather than reply to an existing thread), use /v1/start_conversation.
| Field | Type | Required | Description |
|---|---|---|---|
| conversation_id | Number | yes | The id of the conversation to reply to, as returned by /v1/conversations. |
| message | String | yes | The reply body to send. Must be non-empty. |
| and_archive | Boolean | no | If true, the conversation is archived after the reply is sent. |
| allow_number_change | Boolean | no | SMS only. If true, Apptoto may send the reply from a different number when the original sender is unavailable. |
The endpoint returns the updated conversation in the same shape as /v1/conversations. Possible error responses:
| Status | Meaning |
|---|---|
| 400 | message was blank. |
| 404 | The conversation_id is not found or does not belong to the authenticated user. |
| 403 | The account does not have two-way messaging enabled. |
Example request body (form-encoded):
conversation_id=9876&message=Thanks!&and_archive=trueExample response:
{
"id": 9876,
"event": { "id": 123, "title": "Demo with Fred", "...": "..." },
"participant": { "id": 789, "name": "Fred Smith", "...": "..." },
"conversation_type": "sms",
"from": "+15035550100",
"to": "+16505551212",
"last_out": "2026-04-14T17:35:00-07:00",
"last_in": "2026-04-14T17:33:21-07:00"
}OAuth scope
Calls authenticated with an OAuth 2.0 bearer token must include the messaging:send scope. A token without it receives a 403 insufficient_scope response. HTTP Basic auth is not scope-gated.
