curl --request POST \
--url https://app.octavehq.com/api/v2/suggestion/create \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"changeType": "add",
"entityType": "persona",
"instructions": "<string>",
"name": "<string>",
"oId": "<string>",
"keyContext": "<string>",
"sources": [
{
"content": "<string>"
}
]
}
'import requests
url = "https://app.octavehq.com/api/v2/suggestion/create"
payload = {
"changeType": "add",
"entityType": "persona",
"instructions": "<string>",
"name": "<string>",
"oId": "<string>",
"keyContext": "<string>",
"sources": [{ "content": "<string>" }]
}
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
changeType: 'add',
entityType: 'persona',
instructions: '<string>',
name: '<string>',
oId: '<string>',
keyContext: '<string>',
sources: [{content: '<string>'}]
})
};
fetch('https://app.octavehq.com/api/v2/suggestion/create', 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://app.octavehq.com/api/v2/suggestion/create",
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([
'changeType' => 'add',
'entityType' => 'persona',
'instructions' => '<string>',
'name' => '<string>',
'oId' => '<string>',
'keyContext' => '<string>',
'sources' => [
[
'content' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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://app.octavehq.com/api/v2/suggestion/create"
payload := strings.NewReader("{\n \"changeType\": \"add\",\n \"entityType\": \"persona\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"oId\": \"<string>\",\n \"keyContext\": \"<string>\",\n \"sources\": [\n {\n \"content\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("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://app.octavehq.com/api/v2/suggestion/create")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"changeType\": \"add\",\n \"entityType\": \"persona\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"oId\": \"<string>\",\n \"keyContext\": \"<string>\",\n \"sources\": [\n {\n \"content\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.octavehq.com/api/v2/suggestion/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api_key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"changeType\": \"add\",\n \"entityType\": \"persona\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"oId\": \"<string>\",\n \"keyContext\": \"<string>\",\n \"sources\": [\n {\n \"content\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"data": {
"oId": "<string>",
"status": "draft",
"changeType": "add",
"suggestionType": "create_entity",
"targetEntityType": "Product",
"targetEntityOId": "<string>",
"groupOId": "<string>",
"message": "<string>"
}
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}Create Suggestion
Queue a PENDING entity suggestion for human review. This does NOT create or modify any library entity — it produces a proposal that must be explicitly accepted (via suggestion/accept or the Suggestions inbox) before anything changes. Set changeType to ‘add’ (with name) to propose a new entity, or ‘refine’ (with the target entity oId) to propose changes to an existing one.
curl --request POST \
--url https://app.octavehq.com/api/v2/suggestion/create \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"changeType": "add",
"entityType": "persona",
"instructions": "<string>",
"name": "<string>",
"oId": "<string>",
"keyContext": "<string>",
"sources": [
{
"content": "<string>"
}
]
}
'import requests
url = "https://app.octavehq.com/api/v2/suggestion/create"
payload = {
"changeType": "add",
"entityType": "persona",
"instructions": "<string>",
"name": "<string>",
"oId": "<string>",
"keyContext": "<string>",
"sources": [{ "content": "<string>" }]
}
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
changeType: 'add',
entityType: 'persona',
instructions: '<string>',
name: '<string>',
oId: '<string>',
keyContext: '<string>',
sources: [{content: '<string>'}]
})
};
fetch('https://app.octavehq.com/api/v2/suggestion/create', 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://app.octavehq.com/api/v2/suggestion/create",
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([
'changeType' => 'add',
'entityType' => 'persona',
'instructions' => '<string>',
'name' => '<string>',
'oId' => '<string>',
'keyContext' => '<string>',
'sources' => [
[
'content' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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://app.octavehq.com/api/v2/suggestion/create"
payload := strings.NewReader("{\n \"changeType\": \"add\",\n \"entityType\": \"persona\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"oId\": \"<string>\",\n \"keyContext\": \"<string>\",\n \"sources\": [\n {\n \"content\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("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://app.octavehq.com/api/v2/suggestion/create")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"changeType\": \"add\",\n \"entityType\": \"persona\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"oId\": \"<string>\",\n \"keyContext\": \"<string>\",\n \"sources\": [\n {\n \"content\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.octavehq.com/api/v2/suggestion/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api_key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"changeType\": \"add\",\n \"entityType\": \"persona\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"oId\": \"<string>\",\n \"keyContext\": \"<string>\",\n \"sources\": [\n {\n \"content\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"data": {
"oId": "<string>",
"status": "draft",
"changeType": "add",
"suggestionType": "create_entity",
"targetEntityType": "Product",
"targetEntityOId": "<string>",
"groupOId": "<string>",
"message": "<string>"
}
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}Authorizations
Body
'add' proposes a brand new entity; 'refine' proposes changes to an existing one.
add, refine "add"
Library entity type: persona, product, segment, use_case, competitor, alternative, buying_trigger, objection, proof_point, reference, service, solution, brand_voice.
persona, product, segment, use_case, competitor, alternative, buying_trigger, core_feature, objection, proof_point, reference, service, solution, brand_voice "persona"
Detailed natural-language description of what to add or change, and why.
Name of the new entity. Required when changeType is 'add'.
oId of the entity to refine (from the entity list endpoints). Required when changeType is 'refine'.
Additional background text to inform the proposal.
Optional source materials (URLs to fetch, or raw text) to inform the proposal.
Show child attributes
Show child attributes