Skip to main content
POST
Mark a conversation done, or not

Authorizations

X-API-Key
string
header
required

Path Parameters

thread_id
string<uuid>
required

Body

application/json

Whether the conversation is done.

done
boolean
required

True marks it done now; false clears the mark.

Response

Successful Response

came_back
boolean
required

Back in the Inbox because our answer went three business days unanswered: returns_at has passed.

channel
enum<string>
required

Which surface a conversation happens on.

Threads are contact-scoped, not channel-scoped, so this says how a thread is REACHED rather than partitioning the inbox: a reply arrives, is classified and stops the cadence identically either way, and only the send path differs.

Available options:
email,
linkedin
contact_email
string | null
required
contact_key
string
required
contact_name
string
required
created_at
string<date-time>
required
follow_up_expected
boolean
required

Whether an answer of ours they leave unanswered would come back to the Inbox: the contact has written, and the verdict on their latest reply, by the classifier or a label a person set, does not say the conversation is over.

id
string<uuid>
required
is_bounce
boolean
required
is_done
boolean
required

Marked done, and no new message has reached us since: out of the Inbox. Their reply, or an answer of ours, arriving after the mark ends it, whatever time the message gives itself; an auto-reply, a bounce, a forward or a reply still waiting on Tasks does not.

is_out_of_office
boolean
required
is_unread
boolean
required
label_ids
string<uuid>[]
required
last_message_at
string<date-time>
required
last_snippet
string
required
listed_at
string<date-time>
required

The moment the list sorts this conversation by: its last message, or later when a reminder went off or, on the Inbox's own views, when it came back from silence. The time to show beside the row.

mailbox_id
string<uuid> | null
required
message_count
integer
required
sequence_id
string<uuid> | null
required
step_id
string<uuid> | null
required
subject
string
required
updated_at
string<date-time>
required
can_reply_on_linkedin
boolean
default:false

Whether an explicit channel='linkedin' reply can go out on this thread, because it carries a LinkedIn member identity and a paired account. The composer's channel toggle keys off this.

contact_linkedin_url
string | null

The contact's LinkedIn profile URL, when our own evidence (invitation ledger, dispatched actions, or the sequence's mapped column) names one. Only the SINGLE-thread read resolves it; the list leaves it null.

contact_replied
boolean | null

Whether the contact has written back in this thread: a person's reply, never an auto-reply, a bounce or a robot's acknowledgement. False on a send nobody answered, which the working views never list. Only the thread LIST populates it; single-thread reads leave it null.

done_at
string<date-time> | null

When a person marked the conversation done. is_done says whether the mark still holds.

enrolment_id
string<uuid> | null

The contact's enrolment in this thread's sequence, when it has one: the id the 'Resume cadence' action targets.

has_pending_draft
boolean
default:false

An AI reply is waiting for approval on this thread: the list row's 'Action required' mark. Only the thread LIST populates it; single-thread reads leave it False and the open conversation fetches the draft itself.

linkedin_account_status
enum<string> | null

The pairing state of the LinkedIn account this thread replies from. Anything but 'active' blocks queueing a LinkedIn reply: 'revoked' was disconnected and 'pending' never bound a member. Only the SINGLE-thread read resolves it; the list leaves it null, as does a thread with no LinkedIn account or one whose account row is gone.

Available options:
pending,
active,
revoked
linkedin_checkpoint_status
enum<string> | null

Whether LinkedIn is currently challenging that account. Single-thread read only; the list leaves it null.

Available options:
ok,
checkpoint
linkedin_last_seen_at
string<date-time> | null

When a browser on that account last checked in; null when none ever has. Single-thread read only; the list leaves it null.

linkedin_presence
enum<string> | null

How recently a browser on that account checked in: active, idle or not seen. Carried beside the status rather than blanked for a non-active account (the senders list does that), because the composer shows the two as separate facts. Single-thread read only; the list leaves it null.

Available options:
active,
idle,
not_seen
linkedin_queue_expiry_days
integer | null

Always null. The wait window was retired: a queued LinkedIn reply now waits for a person, or for a browser, without expiring. The field stays so older clients still find it; a null hides the composer's sentence about it.

linkedin_sender_profile_id
string<uuid> | null

The sender the LinkedIn account belongs to, so the composer can send a person to that sender's LinkedIn tab to reconnect. Single-thread read only; the list leaves it null.

match_excerpt
string | null

The matched message, headlined around the match. Only set when searching.

returns_at
string<date-time> | null

When this conversation comes back to the Inbox if the contact stays quiet: three business days after our latest answer, at the same time of day, counted in the sender's timezone. In the past once it has come back (came_back). Null when it will not: they have the last word, the verdict on their latest reply, by the classifier or a label a person set, says the conversation is over (Negative, Meeting booked, Meeting completed, Closed or Wrong contact), or it is done.

snoozed_until
string<date-time> | null

Hidden from the working views until this instant.

stop_reason
enum<string> | null

Set when the cadence is stopped (reply, unsubscribe, bounce, ...). None for a live or normally-completed enrolment. Only 'reply' is resumable.

Available options:
reply,
unsubscribe,
bounce,
manual,
company_reply,
row_left_audience,
row_left_paused,
step_removed,
removed,
cooldown,
rejected,
mailbox_removed