curl --request POST \
--url https://api.getoneprofile.ai/sequences/{sequence_id}/agent/preview/stream/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fresh": false
}
'import requests
url = "https://api.getoneprofile.ai/sequences/{sequence_id}/agent/preview/stream/"
payload = {
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fresh": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
record_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
step_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
fresh: false
})
};
fetch('https://api.getoneprofile.ai/sequences/{sequence_id}/agent/preview/stream/', 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}/agent/preview/stream/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'record_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'step_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'fresh' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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}/agent/preview/stream/"
payload := strings.NewReader("{\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fresh\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.post("https://api.getoneprofile.ai/sequences/{sequence_id}/agent/preview/stream/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fresh\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sequences/{sequence_id}/agent/preview/stream/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fresh\": false\n}"
response = http.request(request)
puts response.read_body<string>{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Preview one contact's agent-written message, streaming the research
Have the sequence’s agent write one contact’s whole sequence as a preview, in one call the way the real first send writes it (each later step reads the drafts before it), researching the contact on the web the way the real first message would, and stream its work as Server-Sent Events. The result frame carries the step asked for; each of the contact’s other agent-written steps on their path that comes back with words is saved as a sample of its own step, read through the sequence’s agent examples. A step that only runs on a branch this contact does not take, or a contact already sent a message, gets the asked step alone. Nobody receives the preview and it costs no credits; it counts against the workspace’s daily preview allowance once for each step it writes, where a preview that researches counts for more than one that does not. The agent researches only when its research switch is on, the contact has never been researched and the workspace has credits; otherwise it writes from the contact’s row and what earlier research found. The same preview asked for again the same day is shown again at no further cost, unless fresh asks for another, which writes the whole sequence again from its first step.
The first frame is turn, carrying the preview_id a Stop is sent to; then a step frame for each thing the agent did (searching, reading pages, writing, checking), each with its measured duration; then one result frame with the asked step’s message, the agent’s confidence, its reason for that rating and what the checks found.
Failures arrive as an error frame, because the stream has already answered 200: reason not_found when the sequence, the step or the contact is gone, limit when today’s preview allowance is spent, stopped when the caller stopped it, ai_unavailable when the agent’s model cannot be asked right now (nothing about the workspace; a retry does not help until it is back), and no reason for anything else.
Closing the connection does not stop the preview; the Stop route does.
curl --request POST \
--url https://api.getoneprofile.ai/sequences/{sequence_id}/agent/preview/stream/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fresh": false
}
'import requests
url = "https://api.getoneprofile.ai/sequences/{sequence_id}/agent/preview/stream/"
payload = {
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fresh": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
record_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
step_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
fresh: false
})
};
fetch('https://api.getoneprofile.ai/sequences/{sequence_id}/agent/preview/stream/', 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}/agent/preview/stream/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'record_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'step_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'fresh' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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}/agent/preview/stream/"
payload := strings.NewReader("{\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fresh\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.post("https://api.getoneprofile.ai/sequences/{sequence_id}/agent/preview/stream/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fresh\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sequences/{sequence_id}/agent/preview/stream/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"record_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"step_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"fresh\": false\n}"
response = http.request(request)
puts response.read_body<string>{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
Which message to preview, for which contact.
The contact: a row of the sequence's audience table.
An agent-written step of this sequence: the one the result frame carries. The rest of the contact's sequence is written with it.
Write a new message instead of showing the one already written for this step, contact and agent version. Set it when someone asks for another example: without it the same ask the same day is answered from what was written before, so a second ask returns the first message word for word. For a contact the sequence has not written to yet, a fresh write writes the contact's whole sequence again from its first step; it takes the daily preview allowance for each step it writes.
Response
A stream of Server-Sent Events; the final result frame's data is the asked step's preview message.
One message the agent wrote for one contact as a preview.
Nobody receives it. Sender variables such as {{Sender first name}} are
left in place: they are filled in for whichever mailbox sends the real
message.
Was this page helpful?