Write a reply
Write an outbound message into an existing thread. Saved as a draft by default; with send: true it is queued and the launcher sends it after the suppression check and the send gate. A refused message comes back as blocked with the reason. Cannot start a conversation.
POST
https://app.trygtm.com/api/v1/conversations/{conversation_id}/messages- Scope
write- MCP tool
- draft_reply
Path parameters
conversation_idstringrequired- The thread to reply on.
Headers
Idempotency-Keystringoptional- A key unique to this write, up to 255 characters. A retry carrying the same key returns the first response instead of running again. Kept for 24 hours.
Body
bodystringrequired- The message text.
subjectstringoptional- Email only. Defaults to the thread's subject.
sendbooleanoptionaldefault: false- Release it for sending instead of saving a draft.
Request
curl -X POST https://app.trygtm.com/api/v1/conversations/8f2a91c4-6d1e-4c0a-9a57-2f3b1c7e9d10/messages \
-H "Authorization: Bearer $TRYGTM_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"body": "Tuesday at 10 works. I'll send an invite."
}'Response
{
"data": {
"id": "aa11bb22-cc33-4d44-8e55-ff6677889900",
"conversation_id": "0f1e2d3c-4b5a-4697-8877-665544332211",
"direction": "outbound",
"channel": "email",
"kind": "message",
"status": "drafted",
"subject": "Re: routing software",
"body": "Tuesday at 10 works. I'll send an invite.",
"gate_result": null,
"error": null,
"created_at": "2026-09-18T10:15:00.000Z",
"updated_at": "2026-09-18T10:15:00.000Z"
}
}