curl --request POST \
--url https://api.getoneprofile.ai/sequences/{sequence_id}/resume/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/sequences/{sequence_id}/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/sequences/{sequence_id}/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/sequences/{sequence_id}/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/sequences/{sequence_id}/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/sequences/{sequence_id}/resume/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sequences/{sequence_id}/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{
"audience_table_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"audience_view_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"column_mapping": {
"company_domain_column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email_column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email_deliverability_column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email_deliverability_results": [
"valid"
],
"linkedin_url_column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"created_at": "2023-11-07T05:31:56Z",
"edges": [
{
"branch": "default",
"from_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"launched_at": "2023-11-07T05:31:56Z",
"multithreading": {},
"name": "<string>",
"opt_out_footer_text": "<string>",
"pause_reason": "<string>",
"sending_window": {},
"status": "draft",
"status_column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_count": 123,
"steps": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "message",
"agent_prompt_key": "<string>",
"agent_subject": false,
"authoring": "written",
"body_segments": [
{
"kind": "text",
"builtin": "sender_first_name",
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": [
"<string>"
],
"required": true,
"text": ""
}
],
"condition_kind": "has_email",
"condition_window_days": 45,
"position": 0,
"prompt": "",
"reply_to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requires_approval": false,
"subject_segments": [
{
"kind": "text",
"builtin": "sender_first_name",
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": [
"<string>"
],
"required": true,
"text": ""
}
],
"title": "<string>",
"wait_amount": 0,
"wait_unit": "days"
}
],
"updated_at": "2023-11-07T05:31:56Z",
"bcc_addresses": [
"<string>"
],
"cc_addresses": [
"<string>"
],
"connection_requests_sent": 123,
"connections_accepted": 123,
"contacts_added": 123,
"contacts_failed": 123,
"contacts_finished": 123,
"contacts_in_progress": 123,
"contacts_not_started": 123,
"continuous_enrolment": false,
"email_approval_mode": "<string>",
"emails_sent": 123,
"hold": {
"contacts": 123,
"reason": "linkedin_verify_account",
"long_offline": false,
"sender_name": "<string>",
"until": "2023-11-07T05:31:56Z",
"window_open": true
},
"last_synced_at": "2023-11-07T05:31:56Z",
"linkedin_approval_mode": "<string>",
"linkedin_check_max_seconds": 123,
"linkedin_check_min_seconds": 123,
"linkedin_messages_sent": 123,
"opportunity_values": {},
"outbound_agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"plain_text_only": true,
"positive": 123,
"positive_rate": 123,
"replies": 123,
"reply_rate": 123,
"sender_profile_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"sender_profile_names": [
"<string>"
],
"senders_ready": true,
"sending_priority": "new_contacts",
"sending_window_problem": {
"field": [
"<string>"
],
"message": "<string>"
},
"spending_limit_tenths": 123
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Resume a paused sequence
Every contact picks up from where they stopped; nothing restarts. Its held LinkedIn steps go back in line, and the approvals given while it was paused stand.
curl --request POST \
--url https://api.getoneprofile.ai/sequences/{sequence_id}/resume/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/sequences/{sequence_id}/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/sequences/{sequence_id}/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/sequences/{sequence_id}/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/sequences/{sequence_id}/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/sequences/{sequence_id}/resume/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sequences/{sequence_id}/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{
"audience_table_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"audience_view_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"column_mapping": {
"company_domain_column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email_column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email_deliverability_column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email_deliverability_results": [
"valid"
],
"linkedin_url_column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"created_at": "2023-11-07T05:31:56Z",
"edges": [
{
"branch": "default",
"from_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"launched_at": "2023-11-07T05:31:56Z",
"multithreading": {},
"name": "<string>",
"opt_out_footer_text": "<string>",
"pause_reason": "<string>",
"sending_window": {},
"status": "draft",
"status_column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_count": 123,
"steps": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "message",
"agent_prompt_key": "<string>",
"agent_subject": false,
"authoring": "written",
"body_segments": [
{
"kind": "text",
"builtin": "sender_first_name",
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": [
"<string>"
],
"required": true,
"text": ""
}
],
"condition_kind": "has_email",
"condition_window_days": 45,
"position": 0,
"prompt": "",
"reply_to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requires_approval": false,
"subject_segments": [
{
"kind": "text",
"builtin": "sender_first_name",
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": [
"<string>"
],
"required": true,
"text": ""
}
],
"title": "<string>",
"wait_amount": 0,
"wait_unit": "days"
}
],
"updated_at": "2023-11-07T05:31:56Z",
"bcc_addresses": [
"<string>"
],
"cc_addresses": [
"<string>"
],
"connection_requests_sent": 123,
"connections_accepted": 123,
"contacts_added": 123,
"contacts_failed": 123,
"contacts_finished": 123,
"contacts_in_progress": 123,
"contacts_not_started": 123,
"continuous_enrolment": false,
"email_approval_mode": "<string>",
"emails_sent": 123,
"hold": {
"contacts": 123,
"reason": "linkedin_verify_account",
"long_offline": false,
"sender_name": "<string>",
"until": "2023-11-07T05:31:56Z",
"window_open": true
},
"last_synced_at": "2023-11-07T05:31:56Z",
"linkedin_approval_mode": "<string>",
"linkedin_check_max_seconds": 123,
"linkedin_check_min_seconds": 123,
"linkedin_messages_sent": 123,
"opportunity_values": {},
"outbound_agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"plain_text_only": true,
"positive": 123,
"positive_rate": 123,
"replies": 123,
"reply_rate": 123,
"sender_profile_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"sender_profile_names": [
"<string>"
],
"senders_ready": true,
"sending_priority": "new_contacts",
"sending_window_problem": {
"field": [
"<string>"
],
"message": "<string>"
},
"spending_limit_tenths": 123
}{
"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
Response
Successful Response
Which audience columns carry a meaning, all detected from the table.
One field per channel (email, LinkedIn) plus the company domain the
coverage line reports on. Leave the whole object out when binding an
audience and the columns are detected server-side. Send it only to correct
a detection: a first name, a company or a last-contacted date is no longer
part of this, because every column on the table is already addressable as a
{{Column name}} variable.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Lifecycle of a sequence.
DRAFT until launch; RUNNING sequences are locked against structural edits (pause → edit → resume); PAUSED stops scheduling while leaving every enrolment exactly where it is; COMPLETED is terminal.
draft, running, paused, completed Show child attributes
Show child attributes
Blind copies on every email this sequence sends.
Addresses copied on every email this sequence sends.
Invitations from this sequence confirmed accepted. With connection_requests_sent this yields the acceptance rate.
Rollup, list reads only. None when the list's stats have never been built and could not be built on this request (for example, another request was building them). Show a zero state, not a fake 0.
A draft's contacts, who start when it launches (rollup, list reads only).
TRUE keeps the audience live: rows added to the table later enrol on their own, and rows that leave it stop. FALSE (the default for a new sequence) freezes the audience after launch; Add to sequence still adds rows to it by hand.
manual requires approval; confident adds approval for uncertain AI-written emails; null follows the sender. There is no value meaning 'send automatically': a sequence can only add an approval.
List reads only, read live on every request (never from the cached stats): on a running sequence nobody on which can move, the worst reason holding them (as GET /sequences/{id}/holds/ names it). Null while anybody moves and on any other status.
Show child attributes
Show child attributes
When the audience-enrolment diff last completed. None until the first sync (launch runs one inline). The Audience tab shows this plus a manual trigger, never a background job the user cannot see.
manual requires approval; confident adds approval for uncertain AI-written LinkedIn steps; null follows the sender. There is no value meaning 'send automatically': a sequence can only add an approval.
Retired. Acceptance checks now use the service-managed interval.
Retired. Acceptance checks now use the service-managed interval.
Dollars per outcome label; None = tracking off.
Show child attributes
Show child attributes
The sequence's outbound agent: the writer of every agent-written step and of its replies. Read and configure it under /outbound-agents/{id}/.
TRUE (recommended) sends no formatting: the bold, italic and link marks are stripped and the email reads as plain text; FALSE renders them. Either way the email carries an HTML part laid out line for line, which keeps its spacing exactly, beside a matching text part.
Threads labelled positive (rollup, list reads only).
Distinct contacts who replied: reply_rate's numerator.
Only meaningful on list reads: the sequence's senders by id, in the same order as sender_profile_names.
Only meaningful on list reads: the names of the sequence's senders.
Only meaningful on list reads: False when the sequence has senders but none currently has a connected mailbox.
Who gets scarce capacity first: new_contacts or follow_ups.
Set when the saved sending_window breaks a rule a save now refuses, which only a window saved before those rules can. It still sends on it as stored: an unknown timezone is read as UTC, and no open day sends at any hour. Fix it by saving a valid sending_window.
Show child attributes
Show child attributes
Was this page helpful?