curl --request POST \
--url https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"came_back": true,
"channel": "email",
"contact_email": "<string>",
"contact_key": "<string>",
"contact_name": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"follow_up_expected": true,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"is_bounce": true,
"is_done": true,
"is_out_of_office": true,
"is_unread": true,
"label_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"last_message_at": "2023-11-07T05:31:56Z",
"last_snippet": "<string>",
"listed_at": "2023-11-07T05:31:56Z",
"mailbox_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"message_count": 123,
"sequence_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"subject": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"blocked_reply": {
"message_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reason": "credits"
},
"can_reply_on_linkedin": false,
"contact_linkedin_url": "<string>",
"contact_replied": true,
"contact_status_live": false,
"contact_status_word": "<string>",
"done_at": "2023-11-07T05:31:56Z",
"enrolment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"has_open_questions": false,
"has_pending_draft": false,
"linkedin_account_status": "pending",
"linkedin_checkpoint_status": "ok",
"linkedin_last_seen_at": "2023-11-07T05:31:56Z",
"linkedin_presence": "active",
"linkedin_queue_expiry_days": 123,
"linkedin_sender_profile_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"match_excerpt": "<string>",
"pending_draft_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"question_card": {
"message_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"questions": [
{
"id": "<string>",
"text": "<string>"
}
],
"readiness": "ready",
"reason": "<string>",
"waiting_since": "2023-11-07T05:31:56Z",
"others_waiting": 0,
"saved_answers": {},
"shared_question_ids": [
"<string>"
]
},
"returns_at": "2023-11-07T05:31:56Z",
"rewriting_draft": {
"draft_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"learning_subject_key": "<string>"
},
"snoozed_until": "2023-11-07T05:31:56Z",
"stop_reason": "reply",
"stop_request": {
"blocked": true,
"message_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequences_stopped": 123
},
"unread_reply_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"waiting_since": "2023-11-07T05:31:56Z"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Resume the follow-ups a reply the AI could not read stopped
Resume follow-ups on a conversation’s “Couldn’t read this reply” card, for a person who read the reply and wants the sequence to go on. Every sequence that stopped the contact for it (stop_reason unread_reply) picks up at the step it kept. The card stays while the AI has not read the reply, so Try again is still there. A contact stopped for anything else is untouched. With dry_run it makes the same checks and answers the conversation as Resume would leave it, resuming nothing.
curl --request POST \
--url https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/inbox/threads/{thread_id}/unread-reply/resume/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"came_back": true,
"channel": "email",
"contact_email": "<string>",
"contact_key": "<string>",
"contact_name": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"follow_up_expected": true,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"is_bounce": true,
"is_done": true,
"is_out_of_office": true,
"is_unread": true,
"label_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"last_message_at": "2023-11-07T05:31:56Z",
"last_snippet": "<string>",
"listed_at": "2023-11-07T05:31:56Z",
"mailbox_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"message_count": 123,
"sequence_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"subject": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"blocked_reply": {
"message_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reason": "credits"
},
"can_reply_on_linkedin": false,
"contact_linkedin_url": "<string>",
"contact_replied": true,
"contact_status_live": false,
"contact_status_word": "<string>",
"done_at": "2023-11-07T05:31:56Z",
"enrolment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"has_open_questions": false,
"has_pending_draft": false,
"linkedin_account_status": "pending",
"linkedin_checkpoint_status": "ok",
"linkedin_last_seen_at": "2023-11-07T05:31:56Z",
"linkedin_presence": "active",
"linkedin_queue_expiry_days": 123,
"linkedin_sender_profile_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"match_excerpt": "<string>",
"pending_draft_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"question_card": {
"message_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"questions": [
{
"id": "<string>",
"text": "<string>"
}
],
"readiness": "ready",
"reason": "<string>",
"waiting_since": "2023-11-07T05:31:56Z",
"others_waiting": 0,
"saved_answers": {},
"shared_question_ids": [
"<string>"
]
},
"returns_at": "2023-11-07T05:31:56Z",
"rewriting_draft": {
"draft_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"learning_subject_key": "<string>"
},
"snoozed_until": "2023-11-07T05:31:56Z",
"stop_reason": "reply",
"stop_request": {
"blocked": true,
"message_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequences_stopped": 123
},
"unread_reply_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"waiting_since": "2023-11-07T05:31:56Z"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Path Parameters
Query Parameters
Answer the conversation as Resume would leave it, and change nothing.
Response
Successful Response
Back in the Inbox because our answer went three business days unanswered: returns_at has passed.
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.
email, linkedin 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.
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.
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.
The sequence the conversation is filed under: the one its newest reply answers, else the first that wrote to the contact.
The conversation's newest reply, which its sequence's agent would answer and wrote no draft for, and why, while nothing of ours answered it and no question_card asks instead: the conversation says "No draft for this reply", and POST /inbox/threads/{thread_id}/blocked-reply/retry/ has the agent write it now. Only the single-thread read sets it; the list leaves it null.
Show child attributes
Show child attributes
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.
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.
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.
Whether the contact is still moving through the sequence (their word is one of the Audience tab's In progress words), so its follow-ups may still go out. False when it is waiting on an approval, paused, done or blocked, and on the list, which never resolves it.
The contact's status in this thread's sequence, in the word the sequence's Audience tab shows for them (Finished, Failed, Paused, Replied, In progress, Needs approval...). Set with enrolment_id; only the SINGLE-thread read resolves it, the list leaves it null.
When a person marked the conversation done. is_done says whether the mark still holds.
The contact's enrolment in this thread's sequence, when it has one: the id the 'Resume cadence' action targets.
The agent asks questions before it answers a reply here, so the conversation waits in Needs approval. Only the thread LIST populates it; single-thread reads leave it False and carry question_card instead.
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.
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.
pending, active, revoked Whether LinkedIn is currently challenging that account. Single-thread read only; the list leaves it null.
ok, checkpoint When a browser on that account last checked in; null when none ever has. Single-thread read only; the list leaves it 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.
active, idle, not_seen 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.
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.
The matched message, headlined around the match. Only set when searching.
Which AI reply waits for approval here, by its draft id: what a bulk Approve and send names, so the reply it sends is the one that was read. Only the thread LIST populates it, like has_pending_draft.
What the agent needs before it answers the conversation's newest reply it could not answer alone, while nobody answered it, the contact did not write again and the agent still writes replies to it: "Before I answer, I need to know" with a box per question, or the reason a person must answer. Only the single-thread read sets it; the list leaves it null.
Show child attributes
Show child attributes
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.
The reply a sequence's agent wrote, retired to be written again (a Needs work, or Write again), while it is the conversation's newest draft: nothing was written in its place yet, or the rewrite wrote nothing usable. Its thumbs-down event says which. Only the single-thread read sets it; the list leaves it null.
Show child attributes
Show child attributes
Hidden from the working views until this instant.
Set when the cadence is stopped (reply, unsubscribe, bounce, ...). None for a live or normally-completed enrolment. Only 'reply' is resumable through the sequence; 'unread_reply' is resumed from this conversation's unread-reply card.
reply, unsubscribe, bounce, manual, company_reply, row_left_audience, row_left_paused, step_removed, removed, cooldown, rejected, mailbox_removed, unread_reply, declined, trashed, trashed_paused The newest reply the AI read as asking never to be contacted again, while nobody undid it and it still keeps the contact on do-not-contact or stopped somewhere for good: the conversation says "Asked not to be contacted again" with Undo. Only the single-thread read sets it; the list leaves it null.
Show child attributes
Show child attributes
The reply the AI could not read, a second try included, while it is the conversation's newest reply and nothing answered it: the conversation shows "Couldn't read this reply" with Try again. Only the single-thread read sets it; the list leaves it null.
When the reply waiting on a person here was sent: the message a waiting AI reply answers, or the oldest reply the agent's questions wait on, the older when both do. Needs approval shows it as how long the contact has waited. Only the thread LIST populates it; null when nothing waits on a person, and on single-thread reads.
Was this page helpful?