curl --request POST \
--url https://api.getoneprofile.ai/sequences/{sequence_id}/agent/training/{session_id}/contacts/{record_id}/feedback/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"expected_revision": 2,
"note": "<string>"
}
'import requests
url = "https://api.getoneprofile.ai/sequences/{sequence_id}/agent/training/{session_id}/contacts/{record_id}/feedback/"
payload = {
"expected_revision": 2,
"note": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({expected_revision: 2, note: '<string>'})
};
fetch('https://api.getoneprofile.ai/sequences/{sequence_id}/agent/training/{session_id}/contacts/{record_id}/feedback/', 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/training/{session_id}/contacts/{record_id}/feedback/",
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([
'expected_revision' => 2,
'note' => '<string>'
]),
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}/agent/training/{session_id}/contacts/{record_id}/feedback/"
payload := strings.NewReader("{\n \"expected_revision\": 2,\n \"note\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.getoneprofile.ai/sequences/{sequence_id}/agent/training/{session_id}/contacts/{record_id}/feedback/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"expected_revision\": 2,\n \"note\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sequences/{sequence_id}/agent/training/{session_id}/contacts/{record_id}/feedback/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expected_revision\": 2,\n \"note\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"applied_version": 123,
"base_version": 123,
"contacts": [
{
"context": {},
"fields": [
{
"name": "<string>",
"value": "<string>"
}
],
"label": "<string>",
"messages": [
{
"authored": true,
"body": "<string>",
"conditional": "<string>",
"edited_body": "<string>",
"edited_subject": "<string>",
"error": "<string>",
"facts_used": [
"<string>"
],
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "<string>",
"note": "<string>",
"previous_body": "<string>",
"previous_subject": "<string>",
"reasoning": "<string>",
"reply_to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"steps": [
{
"action": "<string>",
"detail": "",
"duration_ms": 123,
"observation": "",
"outcome": "completed",
"thought": "<string>"
}
],
"subject": "<string>",
"timing": "<string>",
"title": "<string>",
"proposed_body": "<string>",
"proposed_error": "<string>",
"proposed_send": {
"alone": true,
"reason": "low_confidence",
"doubt": "<string>"
},
"proposed_subject": "<string>",
"send": {
"alone": true,
"reason": "low_confidence",
"doubt": "<string>"
}
}
],
"note": "<string>",
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"verdict": "good",
"notes": [
{
"note": "<string>",
"state": "pending"
}
],
"notice": "<string>",
"profile_mismatch": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"error": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"progress": {
"fixed": 123,
"in_a_row": 123,
"lessons": [
"<string>"
],
"ready": true,
"ready_after": 123,
"reviewed": 123
},
"proposal": {
"summary": "<string>",
"changes": [
{
"current": "<string>",
"proposed": "<string>",
"rationale": "<string>",
"slot_key": "<string>"
}
],
"made_at": 0,
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"round_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
},
"revision": 123,
"status": "running",
"note_waiting": false,
"reviewed_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"steps": [
{
"action": "<string>",
"detail": "",
"duration_ms": 123,
"observation": "",
"outcome": "completed",
"thought": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Say what should change in a contact's messages, and have them rewritten
The one way to say what should change in the Preview. The agent works out the change to its instructions the note asks for, and writes this contact’s whole thread again with it: the rewrite comes back on each message as proposed_subject, proposed_body and proposed_send, with the lesson in the proposal’s summary. Nothing about the agent changes until the rewrite is kept with the apply route; discard drops it. A note on a rewrite already shown refines the lesson it tried. Given while another contact is being written, the rewrite is worked out once that write lands. The contact’s earlier Looks good no longer pins its words. Spends one daily assistant turn, and the rewritten messages count against the daily preview cap.
curl --request POST \
--url https://api.getoneprofile.ai/sequences/{sequence_id}/agent/training/{session_id}/contacts/{record_id}/feedback/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"expected_revision": 2,
"note": "<string>"
}
'import requests
url = "https://api.getoneprofile.ai/sequences/{sequence_id}/agent/training/{session_id}/contacts/{record_id}/feedback/"
payload = {
"expected_revision": 2,
"note": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({expected_revision: 2, note: '<string>'})
};
fetch('https://api.getoneprofile.ai/sequences/{sequence_id}/agent/training/{session_id}/contacts/{record_id}/feedback/', 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/training/{session_id}/contacts/{record_id}/feedback/",
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([
'expected_revision' => 2,
'note' => '<string>'
]),
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}/agent/training/{session_id}/contacts/{record_id}/feedback/"
payload := strings.NewReader("{\n \"expected_revision\": 2,\n \"note\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.getoneprofile.ai/sequences/{sequence_id}/agent/training/{session_id}/contacts/{record_id}/feedback/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"expected_revision\": 2,\n \"note\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sequences/{sequence_id}/agent/training/{session_id}/contacts/{record_id}/feedback/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expected_revision\": 2,\n \"note\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"applied_version": 123,
"base_version": 123,
"contacts": [
{
"context": {},
"fields": [
{
"name": "<string>",
"value": "<string>"
}
],
"label": "<string>",
"messages": [
{
"authored": true,
"body": "<string>",
"conditional": "<string>",
"edited_body": "<string>",
"edited_subject": "<string>",
"error": "<string>",
"facts_used": [
"<string>"
],
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "<string>",
"note": "<string>",
"previous_body": "<string>",
"previous_subject": "<string>",
"reasoning": "<string>",
"reply_to_step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"steps": [
{
"action": "<string>",
"detail": "",
"duration_ms": 123,
"observation": "",
"outcome": "completed",
"thought": "<string>"
}
],
"subject": "<string>",
"timing": "<string>",
"title": "<string>",
"proposed_body": "<string>",
"proposed_error": "<string>",
"proposed_send": {
"alone": true,
"reason": "low_confidence",
"doubt": "<string>"
},
"proposed_subject": "<string>",
"send": {
"alone": true,
"reason": "low_confidence",
"doubt": "<string>"
}
}
],
"note": "<string>",
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"verdict": "good",
"notes": [
{
"note": "<string>",
"state": "pending"
}
],
"notice": "<string>",
"profile_mismatch": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"error": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"progress": {
"fixed": 123,
"in_a_row": 123,
"lessons": [
"<string>"
],
"ready": true,
"ready_after": 123,
"reviewed": 123
},
"proposal": {
"summary": "<string>",
"changes": [
{
"current": "<string>",
"proposed": "<string>",
"rationale": "<string>",
"slot_key": "<string>"
}
],
"made_at": 0,
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"round_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
},
"revision": 123,
"status": "running",
"note_waiting": false,
"reviewed_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"steps": [
{
"action": "<string>",
"detail": "",
"duration_ms": 123,
"observation": "",
"outcome": "completed",
"thought": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Path Parameters
Body
One note on a contact's thread: what should change, in the person's words.
x >= 1What should change in this contact's messages. The agent works out the change to its instructions the note asks for and writes the contact's whole thread again with it; nothing about the agent changes until the rewrite is kept.
1 - 4000Response
Successful Response
Show child attributes
Show child attributes
How training on this sequence is going, counted across the run.
Show child attributes
Show child attributes
The session's candidate prompt update, kept pending until applied.
Show child attributes
Show child attributes
A session's phase, also used to resume its review screen.
running, reviewing, proposing, proposed, completed, abandoned A note was given while another contact was being written: its rewrite is worked out as soon as that write lands.
Every contact given Looks good or a note in this run, including ones that left the run to make room.
Show child attributes
Show child attributes
Was this page helpful?