curl --request POST \
--url https://api.getoneprofile.ai/outbound-agents/{agent_id}/proposals/stream/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"also_slots": [
"<string>"
],
"revision_request": "",
"slot_keys": [
"<string>"
]
}
'import requests
url = "https://api.getoneprofile.ai/outbound-agents/{agent_id}/proposals/stream/"
payload = {
"also_slots": ["<string>"],
"revision_request": "",
"slot_keys": ["<string>"]
}
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({also_slots: ['<string>'], revision_request: '', slot_keys: ['<string>']})
};
fetch('https://api.getoneprofile.ai/outbound-agents/{agent_id}/proposals/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/outbound-agents/{agent_id}/proposals/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([
'also_slots' => [
'<string>'
],
'revision_request' => '',
'slot_keys' => [
'<string>'
]
]),
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/outbound-agents/{agent_id}/proposals/stream/"
payload := strings.NewReader("{\n \"also_slots\": [\n \"<string>\"\n ],\n \"revision_request\": \"\",\n \"slot_keys\": [\n \"<string>\"\n ]\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/outbound-agents/{agent_id}/proposals/stream/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"also_slots\": [\n \"<string>\"\n ],\n \"revision_request\": \"\",\n \"slot_keys\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/outbound-agents/{agent_id}/proposals/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 \"also_slots\": [\n \"<string>\"\n ],\n \"revision_request\": \"\",\n \"slot_keys\": [\n \"<string>\"\n ]\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>"
}Propose better prompts from the agent's feedback, streaming the work
The same rewrite as proposing better prompts, as a stream of Server-Sent Events: a step frame for each piece of work once it is done (reading what people rated and rewrote, then each prompt it rewrote), each with its measured duration, then one result frame whose data is the proposal, the before and after for each prompt. Nothing is written until the proposal is accepted. Spends one of the workspace’s daily assistant turns.
Failures arrive as an error frame, because the stream has already answered 200: reason not_found when the agent is not this workspace’s, limit when the workspace has used today’s AI Assistant allowance, paused when the AI Assistant is paused, and no reason for anything else, including no feedback to learn from, whose sentence says so.
Closing the connection does not stop the rewrite.
curl --request POST \
--url https://api.getoneprofile.ai/outbound-agents/{agent_id}/proposals/stream/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"also_slots": [
"<string>"
],
"revision_request": "",
"slot_keys": [
"<string>"
]
}
'import requests
url = "https://api.getoneprofile.ai/outbound-agents/{agent_id}/proposals/stream/"
payload = {
"also_slots": ["<string>"],
"revision_request": "",
"slot_keys": ["<string>"]
}
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({also_slots: ['<string>'], revision_request: '', slot_keys: ['<string>']})
};
fetch('https://api.getoneprofile.ai/outbound-agents/{agent_id}/proposals/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/outbound-agents/{agent_id}/proposals/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([
'also_slots' => [
'<string>'
],
'revision_request' => '',
'slot_keys' => [
'<string>'
]
]),
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/outbound-agents/{agent_id}/proposals/stream/"
payload := strings.NewReader("{\n \"also_slots\": [\n \"<string>\"\n ],\n \"revision_request\": \"\",\n \"slot_keys\": [\n \"<string>\"\n ]\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/outbound-agents/{agent_id}/proposals/stream/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"also_slots\": [\n \"<string>\"\n ],\n \"revision_request\": \"\",\n \"slot_keys\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/outbound-agents/{agent_id}/proposals/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 \"also_slots\": [\n \"<string>\"\n ],\n \"revision_request\": \"\",\n \"slot_keys\": [\n \"<string>\"\n ]\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
Ask for a rewrite of the agent's prompts from its feedback.
Teach the same feedback to these prompts too, even though none was given on their messages. Feedback names the one message it was given on, so without this a note on the opener can only ever change the opener. Each prompt is still rewritten against its own wording.
What to change about a proposal already seen.
2000Only rewrite these prompts; every prompt that has feedback when null.
Response
A stream of Server-Sent Events; the final result frame's data is the proposal.
A proposed rewrite of the agent's prompts, tied to the version it was written against.
Was this page helpful?