chats

Create Draft

Start a draft and return its poll handle.

Returns 202 with status='pending': the pipeline has NOT run yet. The committed suggestion row is the durability boundary - dispatch after it is best-effort, so a client holding an id can always poll for an outcome even if the process that accepted this request disappears.

Reuse (TOS-6979): unless force_new is set, a draft for the same chat, responder and asker created after the chat's latest message change is returned instead of starting a new run. See draft_jobs.find_reusable_draft for exactly which rows qualify.

Authorization:

  • Caller must be an active participant in the chat (404 otherwise, to avoid leaking chat existence to non-participants).
  • When responder_identity_id differs from the caller, the responder must also be an active participant (422 otherwise).
  • A kind='person' responder other than the caller is rejected (422): a draft is grounded in the responder's own Mind (TOS-4716's async pipeline runs it identity-keyed, and the result is readable via GET .../draft/{id} by any chat participant), so allowing a caller to draft as a co-participant person would ground the response in that person's private Mind and hand the text to someone else. TOS-269 (2026-05-28) deliberately allowed a person responder for the draft-my-own-reply case (responder_id == identity.id); this only closes the gap for a THIRD PARTY person (TOS-5036).
post/api/chats/{chat_id}/draft

Request

  • Base URL: https://app.thinqos.com (the document declares no server; this is the origin it was published from)
  • URL: https://app.thinqos.com/api/chats/{chat_id}/draft
  • Auth: none declared

Path parameters

chat_idstring uuid required

Headers

x-impersonate-identity-idstring nullable

Request body

responder_identity_idstring uuid nullable
force_newboolean

Response

Successful Response

suggestion_idstring uuid required
statusstring required
candidate_textstring
errorstring nullable

Changes

No recorded changes to this operation across all 1 revision of this API.