curl --request POST \
--url https://api.getoneprofile.ai/sequences/{sequence_id}/steps/{step_id}/looks-good/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/sequences/{sequence_id}/steps/{step_id}/looks-good/"
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}/steps/{step_id}/looks-good/', 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}/steps/{step_id}/looks-good/",
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}/steps/{step_id}/looks-good/"
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}/steps/{step_id}/looks-good/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sequences/{sequence_id}/steps/{step_id}/looks-good/")
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{
"body": "<string>",
"in_thread": true,
"missing_columns": [
"<string>"
],
"subject": "<string>",
"agent_written": false,
"approved": false,
"is_sample": false,
"message_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pinned": false,
"sample_created_at": "2023-11-07T05:31:56Z",
"sample_version": 123,
"sent": {
"body": "<string>",
"sent_at": "2023-11-07T05:31:56Z",
"subject": "<string>"
},
"spam_findings": [
{
"code": "<string>",
"detail": "<string>",
"message": "<string>",
"severity": "<string>",
"title": "<string>",
"excerpt": "<string>",
"excerpts": [
"<string>"
]
}
],
"waiting_for_approval": false,
"written": true
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Mark one email the agent wrote for a contact Looks good
The Builder’s Looks good on the one step it shows. The email saved for this contact at this step becomes what sends to them, until the agent’s writing or the contact’s row changes, and the AI writing tab marks it Looks good. The contact’s other emails are left as they are. Writes nothing and spends nothing; marking an email whose mark still stands is a no-op. With message_id, the mark lands only on those words. Refused where the Builder offers no Looks good: a step a person writes, a person’s own words, a step already sent to the contact, or a real email the agent already wrote for them. Needs work is given on the AI writing tab, where the note rewrites the thread.
curl --request POST \
--url https://api.getoneprofile.ai/sequences/{sequence_id}/steps/{step_id}/looks-good/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/sequences/{sequence_id}/steps/{step_id}/looks-good/"
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}/steps/{step_id}/looks-good/', 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}/steps/{step_id}/looks-good/",
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}/steps/{step_id}/looks-good/"
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}/steps/{step_id}/looks-good/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sequences/{sequence_id}/steps/{step_id}/looks-good/")
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{
"body": "<string>",
"in_thread": true,
"missing_columns": [
"<string>"
],
"subject": "<string>",
"agent_written": false,
"approved": false,
"is_sample": false,
"message_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pinned": false,
"sample_created_at": "2023-11-07T05:31:56Z",
"sample_version": 123,
"sent": {
"body": "<string>",
"sent_at": "2023-11-07T05:31:56Z",
"subject": "<string>"
},
"spam_findings": [
{
"code": "<string>",
"detail": "<string>",
"message": "<string>",
"severity": "<string>",
"title": "<string>",
"excerpt": "<string>",
"excerpts": [
"<string>"
]
}
],
"waiting_for_approval": false,
"written": true
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Query Parameters
The email on screen, as the step's preview answered it in message_id. Given, the mark is refused when the words saved for the contact are no longer those; left out, it marks whatever is saved now.
Response
Successful Response
The agent wrote this for the contact. A preview is one draft; the real send is written fresh, unless approved.
The words were marked Looks good, with the contact's thread on the AI writing tab or as this one email from the Builder, and still stand, so they are what sends. They stop standing, and the agent writes the step fresh, once the agent's writing or the contact's row changes.
The agent's message these words are, on an agent-written step: the sample on screen, or the one marked Looks good. The looks-good route takes it back as message_id, so a mark lands only on the words that were read.
The words are pinned for this contact by a person (their own edit) or by the approval queue, and send exactly as they are. A thread marked Looks good is approved instead.
The email this step already got out to this contact, as it went, when one did: what they received, whoever wrote it, rather than the words above. Set by the preview route; null when the step has not reached them.
Show child attributes
Show child attributes
The spam check and the placeholder scan, run on the agent's words for this contact. Always empty for a written step, whose text the composer's own check covers. Advice, never a refusal.
Show child attributes
Show child attributes
This contact's message at this step waits for a person's approval on its Tasks card, where its words are changed, approved or rejected. Set by the preview route; false once the card is decided, or when the step never asked.
False only when the preview was asked to write nothing and nothing is written for this contact at this step yet: subject and body are empty.
Was this page helpful?