curl --request PUT \
--url https://api.getoneprofile.ai/sequences/{sequence_id}/graph/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"edges": [
{
"branch": "default",
"from_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"expected_updated_at": "2023-11-07T05:31:56Z",
"steps": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_prompt_key": "<string>",
"agent_subject": false,
"authoring": "written",
"body_segments": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": [
"<string>"
],
"required": true,
"text": ""
}
],
"condition_window_days": 45,
"position": 0,
"prompt": "",
"reply_to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requires_approval": false,
"subject_segments": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": [
"<string>"
],
"required": true,
"text": ""
}
],
"title": "<string>",
"wait_amount": 0,
"wait_unit": "days"
}
]
}
'import requests
url = "https://api.getoneprofile.ai/sequences/{sequence_id}/graph/"
payload = {
"edges": [
{
"branch": "default",
"from_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"expected_updated_at": "2023-11-07T05:31:56Z",
"steps": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_prompt_key": "<string>",
"agent_subject": False,
"authoring": "written",
"body_segments": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": ["<string>"],
"required": True,
"text": ""
}
],
"condition_window_days": 45,
"position": 0,
"prompt": "",
"reply_to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requires_approval": False,
"subject_segments": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": ["<string>"],
"required": True,
"text": ""
}
],
"title": "<string>",
"wait_amount": 0,
"wait_unit": "days"
}
]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
edges: [
{
branch: 'default',
from_step_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
to_step_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
],
expected_updated_at: '2023-11-07T05:31:56Z',
steps: [
{
id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
agent_prompt_key: '<string>',
agent_subject: false,
authoring: 'written',
body_segments: [
{
column_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
options: ['<string>'],
required: true,
text: ''
}
],
condition_window_days: 45,
position: 0,
prompt: '',
reply_to_step_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
requires_approval: false,
subject_segments: [
{
column_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
options: ['<string>'],
required: true,
text: ''
}
],
title: '<string>',
wait_amount: 0,
wait_unit: 'days'
}
]
})
};
fetch('https://api.getoneprofile.ai/sequences/{sequence_id}/graph/', 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}/graph/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'edges' => [
[
'branch' => 'default',
'from_step_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'to_step_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'expected_updated_at' => '2023-11-07T05:31:56Z',
'steps' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'agent_prompt_key' => '<string>',
'agent_subject' => false,
'authoring' => 'written',
'body_segments' => [
[
'column_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'options' => [
'<string>'
],
'required' => true,
'text' => ''
]
],
'condition_window_days' => 45,
'position' => 0,
'prompt' => '',
'reply_to_step_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'requires_approval' => false,
'subject_segments' => [
[
'column_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'options' => [
'<string>'
],
'required' => true,
'text' => ''
]
],
'title' => '<string>',
'wait_amount' => 0,
'wait_unit' => 'days'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.getoneprofile.ai/sequences/{sequence_id}/graph/"
payload := strings.NewReader("{\n \"edges\": [\n {\n \"branch\": \"default\",\n \"from_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\",\n \"steps\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_prompt_key\": \"<string>\",\n \"agent_subject\": false,\n \"authoring\": \"written\",\n \"body_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"condition_window_days\": 45,\n \"position\": 0,\n \"prompt\": \"\",\n \"reply_to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requires_approval\": false,\n \"subject_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"title\": \"<string>\",\n \"wait_amount\": 0,\n \"wait_unit\": \"days\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.getoneprofile.ai/sequences/{sequence_id}/graph/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"edges\": [\n {\n \"branch\": \"default\",\n \"from_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\",\n \"steps\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_prompt_key\": \"<string>\",\n \"agent_subject\": false,\n \"authoring\": \"written\",\n \"body_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"condition_window_days\": 45,\n \"position\": 0,\n \"prompt\": \"\",\n \"reply_to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requires_approval\": false,\n \"subject_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"title\": \"<string>\",\n \"wait_amount\": 0,\n \"wait_unit\": \"days\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sequences/{sequence_id}/graph/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"edges\": [\n {\n \"branch\": \"default\",\n \"from_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\",\n \"steps\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_prompt_key\": \"<string>\",\n \"agent_subject\": false,\n \"authoring\": \"written\",\n \"body_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"condition_window_days\": 45,\n \"position\": 0,\n \"prompt\": \"\",\n \"reply_to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requires_approval\": false,\n \"subject_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"title\": \"<string>\",\n \"wait_amount\": 0,\n \"wait_unit\": \"days\"\n }\n ]\n}"
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>"
}Replace the sequence graph
Structural edits save immediately; the graph is validated before it lands. Allowed while the sequence is running: every contact follows the edited graph as a new contact would from where they stand. One who has done nothing on their step yet goes where the way they came in by now leads, so a step put in front of theirs reaches them first; a contact whose step is deleted goes on to the step that now follows it, or down the branch a deleted check kept; a step they already did is never sent again. A changed wait re-dates the contacts already waiting on it, from when their wait began. A contact who had finished at an end the edit connects to a step goes on to that step, its wait counted from when their last step finished, unless since then they replied, opted out, bounced, went on the do-not-contact list, answered or joined another sequence, were reached by one, left the audience, or lost their mailbox. A step whose words change is asked again with its new words wherever its old ones wait for approval, wait approved for the sending window or wait in a LinkedIn line no browser has started; a person’s own edit of a contact’s words is kept, and the agent writes its unsent, unedited messages for a step whose prompt changed again.
curl --request PUT \
--url https://api.getoneprofile.ai/sequences/{sequence_id}/graph/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"edges": [
{
"branch": "default",
"from_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"expected_updated_at": "2023-11-07T05:31:56Z",
"steps": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_prompt_key": "<string>",
"agent_subject": false,
"authoring": "written",
"body_segments": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": [
"<string>"
],
"required": true,
"text": ""
}
],
"condition_window_days": 45,
"position": 0,
"prompt": "",
"reply_to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requires_approval": false,
"subject_segments": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": [
"<string>"
],
"required": true,
"text": ""
}
],
"title": "<string>",
"wait_amount": 0,
"wait_unit": "days"
}
]
}
'import requests
url = "https://api.getoneprofile.ai/sequences/{sequence_id}/graph/"
payload = {
"edges": [
{
"branch": "default",
"from_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"expected_updated_at": "2023-11-07T05:31:56Z",
"steps": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_prompt_key": "<string>",
"agent_subject": False,
"authoring": "written",
"body_segments": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": ["<string>"],
"required": True,
"text": ""
}
],
"condition_window_days": 45,
"position": 0,
"prompt": "",
"reply_to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requires_approval": False,
"subject_segments": [
{
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"options": ["<string>"],
"required": True,
"text": ""
}
],
"title": "<string>",
"wait_amount": 0,
"wait_unit": "days"
}
]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
edges: [
{
branch: 'default',
from_step_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
to_step_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
],
expected_updated_at: '2023-11-07T05:31:56Z',
steps: [
{
id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
agent_prompt_key: '<string>',
agent_subject: false,
authoring: 'written',
body_segments: [
{
column_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
options: ['<string>'],
required: true,
text: ''
}
],
condition_window_days: 45,
position: 0,
prompt: '',
reply_to_step_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
requires_approval: false,
subject_segments: [
{
column_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
options: ['<string>'],
required: true,
text: ''
}
],
title: '<string>',
wait_amount: 0,
wait_unit: 'days'
}
]
})
};
fetch('https://api.getoneprofile.ai/sequences/{sequence_id}/graph/', 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}/graph/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'edges' => [
[
'branch' => 'default',
'from_step_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'to_step_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'expected_updated_at' => '2023-11-07T05:31:56Z',
'steps' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'agent_prompt_key' => '<string>',
'agent_subject' => false,
'authoring' => 'written',
'body_segments' => [
[
'column_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'options' => [
'<string>'
],
'required' => true,
'text' => ''
]
],
'condition_window_days' => 45,
'position' => 0,
'prompt' => '',
'reply_to_step_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'requires_approval' => false,
'subject_segments' => [
[
'column_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'options' => [
'<string>'
],
'required' => true,
'text' => ''
]
],
'title' => '<string>',
'wait_amount' => 0,
'wait_unit' => 'days'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.getoneprofile.ai/sequences/{sequence_id}/graph/"
payload := strings.NewReader("{\n \"edges\": [\n {\n \"branch\": \"default\",\n \"from_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\",\n \"steps\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_prompt_key\": \"<string>\",\n \"agent_subject\": false,\n \"authoring\": \"written\",\n \"body_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"condition_window_days\": 45,\n \"position\": 0,\n \"prompt\": \"\",\n \"reply_to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requires_approval\": false,\n \"subject_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"title\": \"<string>\",\n \"wait_amount\": 0,\n \"wait_unit\": \"days\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.getoneprofile.ai/sequences/{sequence_id}/graph/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"edges\": [\n {\n \"branch\": \"default\",\n \"from_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\",\n \"steps\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_prompt_key\": \"<string>\",\n \"agent_subject\": false,\n \"authoring\": \"written\",\n \"body_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"condition_window_days\": 45,\n \"position\": 0,\n \"prompt\": \"\",\n \"reply_to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requires_approval\": false,\n \"subject_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"title\": \"<string>\",\n \"wait_amount\": 0,\n \"wait_unit\": \"days\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sequences/{sequence_id}/graph/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"edges\": [\n {\n \"branch\": \"default\",\n \"from_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\",\n \"steps\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_prompt_key\": \"<string>\",\n \"agent_subject\": false,\n \"authoring\": \"written\",\n \"body_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"condition_window_days\": 45,\n \"position\": 0,\n \"prompt\": \"\",\n \"reply_to_step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requires_approval\": false,\n \"subject_segments\": [\n {\n \"column_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"options\": [\n \"<string>\"\n ],\n \"required\": true,\n \"text\": \"\"\n }\n ],\n \"title\": \"<string>\",\n \"wait_amount\": 0,\n \"wait_unit\": \"days\"\n }\n ]\n}"
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
Body
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?