curl --request POST \
--url https://api.getoneprofile.ai/table-enrichments/saved-agents/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "<string>",
"allow_fetch": true,
"allow_find_email": false,
"allow_linkedin_profile": false,
"allow_search": true,
"description": "<string>",
"effort": "standard",
"icon": "<string>",
"inputs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"is_template": false,
"model_key": "<string>",
"output_schema": {
"fields": [
{
"name": "<string>",
"choices": [
"<string>"
],
"description": "<string>",
"field_type": "text"
}
],
"mode": "fields"
},
"prompt": {
"segments": [
{
"text": "<string>",
"type": "text"
}
]
},
"sample_rows": [
{}
],
"use_business_context": false,
"use_row_context": false
}
'import requests
url = "https://api.getoneprofile.ai/table-enrichments/saved-agents/"
payload = {
"name": "<string>",
"allow_fetch": True,
"allow_find_email": False,
"allow_linkedin_profile": False,
"allow_search": True,
"description": "<string>",
"effort": "standard",
"icon": "<string>",
"inputs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"is_template": False,
"model_key": "<string>",
"output_schema": {
"fields": [
{
"name": "<string>",
"choices": ["<string>"],
"description": "<string>",
"field_type": "text"
}
],
"mode": "fields"
},
"prompt": { "segments": [
{
"text": "<string>",
"type": "text"
}
] },
"sample_rows": [{}],
"use_business_context": False,
"use_row_context": False
}
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({
name: '<string>',
allow_fetch: true,
allow_find_email: false,
allow_linkedin_profile: false,
allow_search: true,
description: '<string>',
effort: 'standard',
icon: '<string>',
inputs: [{id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', name: '<string>'}],
is_template: false,
model_key: '<string>',
output_schema: {
fields: [
{
name: '<string>',
choices: ['<string>'],
description: '<string>',
field_type: 'text'
}
],
mode: 'fields'
},
prompt: {segments: [{text: '<string>', type: 'text'}]},
sample_rows: [{}],
use_business_context: false,
use_row_context: false
})
};
fetch('https://api.getoneprofile.ai/table-enrichments/saved-agents/', 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/table-enrichments/saved-agents/",
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([
'name' => '<string>',
'allow_fetch' => true,
'allow_find_email' => false,
'allow_linkedin_profile' => false,
'allow_search' => true,
'description' => '<string>',
'effort' => 'standard',
'icon' => '<string>',
'inputs' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'name' => '<string>'
]
],
'is_template' => false,
'model_key' => '<string>',
'output_schema' => [
'fields' => [
[
'name' => '<string>',
'choices' => [
'<string>'
],
'description' => '<string>',
'field_type' => 'text'
]
],
'mode' => 'fields'
],
'prompt' => [
'segments' => [
[
'text' => '<string>',
'type' => 'text'
]
]
],
'sample_rows' => [
[
]
],
'use_business_context' => false,
'use_row_context' => false
]),
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/table-enrichments/saved-agents/"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"allow_fetch\": true,\n \"allow_find_email\": false,\n \"allow_linkedin_profile\": false,\n \"allow_search\": true,\n \"description\": \"<string>\",\n \"effort\": \"standard\",\n \"icon\": \"<string>\",\n \"inputs\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"is_template\": false,\n \"model_key\": \"<string>\",\n \"output_schema\": {\n \"fields\": [\n {\n \"name\": \"<string>\",\n \"choices\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"field_type\": \"text\"\n }\n ],\n \"mode\": \"fields\"\n },\n \"prompt\": {\n \"segments\": [\n {\n \"text\": \"<string>\",\n \"type\": \"text\"\n }\n ]\n },\n \"sample_rows\": [\n {}\n ],\n \"use_business_context\": false,\n \"use_row_context\": false\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/table-enrichments/saved-agents/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"allow_fetch\": true,\n \"allow_find_email\": false,\n \"allow_linkedin_profile\": false,\n \"allow_search\": true,\n \"description\": \"<string>\",\n \"effort\": \"standard\",\n \"icon\": \"<string>\",\n \"inputs\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"is_template\": false,\n \"model_key\": \"<string>\",\n \"output_schema\": {\n \"fields\": [\n {\n \"name\": \"<string>\",\n \"choices\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"field_type\": \"text\"\n }\n ],\n \"mode\": \"fields\"\n },\n \"prompt\": {\n \"segments\": [\n {\n \"text\": \"<string>\",\n \"type\": \"text\"\n }\n ]\n },\n \"sample_rows\": [\n {}\n ],\n \"use_business_context\": false,\n \"use_row_context\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/table-enrichments/saved-agents/")
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 \"name\": \"<string>\",\n \"allow_fetch\": true,\n \"allow_find_email\": false,\n \"allow_linkedin_profile\": false,\n \"allow_search\": true,\n \"description\": \"<string>\",\n \"effort\": \"standard\",\n \"icon\": \"<string>\",\n \"inputs\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"is_template\": false,\n \"model_key\": \"<string>\",\n \"output_schema\": {\n \"fields\": [\n {\n \"name\": \"<string>\",\n \"choices\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"field_type\": \"text\"\n }\n ],\n \"mode\": \"fields\"\n },\n \"prompt\": {\n \"segments\": [\n {\n \"text\": \"<string>\",\n \"type\": \"text\"\n }\n ]\n },\n \"sample_rows\": [\n {}\n ],\n \"use_business_context\": false,\n \"use_row_context\": false\n}"
response = http.request(request)
puts response.read_body{
"allow_fetch": true,
"allow_search": true,
"created_at": "2023-11-07T05:31:56Z",
"current_version": 123,
"description": "<string>",
"effort": "low",
"favorite": true,
"icon": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"inputs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"model_key": "<string>",
"name": "<string>",
"output_schema": {
"fields": [
{
"name": "<string>",
"choices": [
"<string>"
],
"description": "<string>",
"field_type": "text"
}
],
"mode": "fields"
},
"owner_user_id": "<string>",
"prompt": {
"segments": [
{
"text": "<string>",
"type": "text"
}
]
},
"updated_at": "2023-11-07T05:31:56Z",
"use_business_context": true,
"use_row_context": true,
"allow_find_email": false,
"allow_linkedin_profile": false,
"granted_verbs": [
"<string>"
],
"is_template": false,
"owner_display_name": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Create a saved agent
Create an org-level reusable agent: declared inputs, a prompt referencing them, output shape, model and tools. Agent columns can point at it.
curl --request POST \
--url https://api.getoneprofile.ai/table-enrichments/saved-agents/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "<string>",
"allow_fetch": true,
"allow_find_email": false,
"allow_linkedin_profile": false,
"allow_search": true,
"description": "<string>",
"effort": "standard",
"icon": "<string>",
"inputs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"is_template": false,
"model_key": "<string>",
"output_schema": {
"fields": [
{
"name": "<string>",
"choices": [
"<string>"
],
"description": "<string>",
"field_type": "text"
}
],
"mode": "fields"
},
"prompt": {
"segments": [
{
"text": "<string>",
"type": "text"
}
]
},
"sample_rows": [
{}
],
"use_business_context": false,
"use_row_context": false
}
'import requests
url = "https://api.getoneprofile.ai/table-enrichments/saved-agents/"
payload = {
"name": "<string>",
"allow_fetch": True,
"allow_find_email": False,
"allow_linkedin_profile": False,
"allow_search": True,
"description": "<string>",
"effort": "standard",
"icon": "<string>",
"inputs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"is_template": False,
"model_key": "<string>",
"output_schema": {
"fields": [
{
"name": "<string>",
"choices": ["<string>"],
"description": "<string>",
"field_type": "text"
}
],
"mode": "fields"
},
"prompt": { "segments": [
{
"text": "<string>",
"type": "text"
}
] },
"sample_rows": [{}],
"use_business_context": False,
"use_row_context": False
}
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({
name: '<string>',
allow_fetch: true,
allow_find_email: false,
allow_linkedin_profile: false,
allow_search: true,
description: '<string>',
effort: 'standard',
icon: '<string>',
inputs: [{id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', name: '<string>'}],
is_template: false,
model_key: '<string>',
output_schema: {
fields: [
{
name: '<string>',
choices: ['<string>'],
description: '<string>',
field_type: 'text'
}
],
mode: 'fields'
},
prompt: {segments: [{text: '<string>', type: 'text'}]},
sample_rows: [{}],
use_business_context: false,
use_row_context: false
})
};
fetch('https://api.getoneprofile.ai/table-enrichments/saved-agents/', 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/table-enrichments/saved-agents/",
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([
'name' => '<string>',
'allow_fetch' => true,
'allow_find_email' => false,
'allow_linkedin_profile' => false,
'allow_search' => true,
'description' => '<string>',
'effort' => 'standard',
'icon' => '<string>',
'inputs' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'name' => '<string>'
]
],
'is_template' => false,
'model_key' => '<string>',
'output_schema' => [
'fields' => [
[
'name' => '<string>',
'choices' => [
'<string>'
],
'description' => '<string>',
'field_type' => 'text'
]
],
'mode' => 'fields'
],
'prompt' => [
'segments' => [
[
'text' => '<string>',
'type' => 'text'
]
]
],
'sample_rows' => [
[
]
],
'use_business_context' => false,
'use_row_context' => false
]),
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/table-enrichments/saved-agents/"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"allow_fetch\": true,\n \"allow_find_email\": false,\n \"allow_linkedin_profile\": false,\n \"allow_search\": true,\n \"description\": \"<string>\",\n \"effort\": \"standard\",\n \"icon\": \"<string>\",\n \"inputs\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"is_template\": false,\n \"model_key\": \"<string>\",\n \"output_schema\": {\n \"fields\": [\n {\n \"name\": \"<string>\",\n \"choices\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"field_type\": \"text\"\n }\n ],\n \"mode\": \"fields\"\n },\n \"prompt\": {\n \"segments\": [\n {\n \"text\": \"<string>\",\n \"type\": \"text\"\n }\n ]\n },\n \"sample_rows\": [\n {}\n ],\n \"use_business_context\": false,\n \"use_row_context\": false\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/table-enrichments/saved-agents/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"allow_fetch\": true,\n \"allow_find_email\": false,\n \"allow_linkedin_profile\": false,\n \"allow_search\": true,\n \"description\": \"<string>\",\n \"effort\": \"standard\",\n \"icon\": \"<string>\",\n \"inputs\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"is_template\": false,\n \"model_key\": \"<string>\",\n \"output_schema\": {\n \"fields\": [\n {\n \"name\": \"<string>\",\n \"choices\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"field_type\": \"text\"\n }\n ],\n \"mode\": \"fields\"\n },\n \"prompt\": {\n \"segments\": [\n {\n \"text\": \"<string>\",\n \"type\": \"text\"\n }\n ]\n },\n \"sample_rows\": [\n {}\n ],\n \"use_business_context\": false,\n \"use_row_context\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/table-enrichments/saved-agents/")
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 \"name\": \"<string>\",\n \"allow_fetch\": true,\n \"allow_find_email\": false,\n \"allow_linkedin_profile\": false,\n \"allow_search\": true,\n \"description\": \"<string>\",\n \"effort\": \"standard\",\n \"icon\": \"<string>\",\n \"inputs\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"is_template\": false,\n \"model_key\": \"<string>\",\n \"output_schema\": {\n \"fields\": [\n {\n \"name\": \"<string>\",\n \"choices\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"field_type\": \"text\"\n }\n ],\n \"mode\": \"fields\"\n },\n \"prompt\": {\n \"segments\": [\n {\n \"text\": \"<string>\",\n \"type\": \"text\"\n }\n ]\n },\n \"sample_rows\": [\n {}\n ],\n \"use_business_context\": false,\n \"use_row_context\": false\n}"
response = http.request(request)
puts response.read_body{
"allow_fetch": true,
"allow_search": true,
"created_at": "2023-11-07T05:31:56Z",
"current_version": 123,
"description": "<string>",
"effort": "low",
"favorite": true,
"icon": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"inputs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"model_key": "<string>",
"name": "<string>",
"output_schema": {
"fields": [
{
"name": "<string>",
"choices": [
"<string>"
],
"description": "<string>",
"field_type": "text"
}
],
"mode": "fields"
},
"owner_user_id": "<string>",
"prompt": {
"segments": [
{
"text": "<string>",
"type": "text"
}
]
},
"updated_at": "2023-11-07T05:31:56Z",
"use_business_context": true,
"use_row_context": true,
"allow_find_email": false,
"allow_linkedin_profile": false,
"granted_verbs": [
"<string>"
],
"is_template": false,
"owner_display_name": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Body
A new saved agent's full configuration.
1 - 255Let runs buy a work email from the product's data suppliers, paid from the run's research budget. Refused when the supplier is not available to this organisation.
Let runs read a LinkedIn profile through the product's data suppliers, paid from the run's research budget. Refused when the supplier is not available to this organisation.
2000How hard the Agent works on each row.
Named levels rather than raw step counts: the level is the user-facing contract, and what each level buys (step and page budgets) is a product decision the loop maps internally. Re-tuning budgets never invalidates stored columns.
low, standard, high 1 - 16The declared inputs, in the author's order.
20Show child attributes
Show child attributes
Save as a reusable starting point instead of a working agent. Templates are offered in the template gallery and never run.
1 - 64The fields-mode output shape: repeatable named typed fields.
The default is Clay's: one text field named response.
- EnrichmentOutputFields
- EnrichmentOutputRawSchema
Show child attributes
Show child attributes
A saved agent's prompt: literal text with references between the runs.
The same convention every other stored prompt in the product uses
(EnrichmentPromptTemplate for columns, template segments for
sequences): identity-keyed segments, so renaming what a reference points
at never rewrites the prompt. Structurally parallel to the enrichment
template rather than importing it: an agent prompt references INPUTS,
an enrichment prompt references COLUMNS, and the import hierarchy keeps
the two domains apart.
Show child attributes
Show child attributes
Example input rows to remember for the Train screen: the test_cases the build flow just generated. Keyed by input name. Suggestion memory, not configuration: storing them never bumps the agent's version.
25Show child attributes
Show child attributes
Response
Successful Response
One org-level saved agent as the editor, picker and library render it.
How hard the Agent works on each row.
Named levels rather than raw step counts: the level is the user-facing contract, and what each level buys (step and page budgets) is a product decision the loop maps internally. Re-tuning budgets never invalidates stored columns.
low, standard, high Show child attributes
Show child attributes
The fields-mode output shape: repeatable named typed fields.
The default is Clay's: one text field named response.
- EnrichmentOutputFields
- EnrichmentOutputRawSchema
Show child attributes
Show child attributes
A saved agent's prompt: literal text with references between the runs.
The same convention every other stored prompt in the product uses
(EnrichmentPromptTemplate for columns, template segments for
sequences): identity-keyed segments, so renaming what a reference points
at never rewrites the prompt. Structurally parallel to the enrichment
template rather than importing it: an agent prompt references INPUTS,
an enrichment prompt references COLUMNS, and the import hierarchy keeps
the two domains apart.
Show child attributes
Show child attributes
Whether a run may buy a work email from the product's data suppliers while it researches, paid from the run's research budget.
Whether a run may read a LinkedIn profile through the product's data suppliers while it researches, paid from the run's research budget.
The workspace actions this agent may apply without asking, as verb keys (see GET /assistant/verbs/). Null means the workspace defaults apply. The agent's table runs take an allowed action themselves, without a card.
Was this page helpful?