Create a new Template
curl --request POST \
--url https://api.trugen.ai/v1/ext/template \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"template_name": "HR Assistant",
"template_system_prompt": "You are a helpful HR AI Assistant.",
"config": {
"maxCallDuration": 5,
"conversationalContext": ""
},
"knowledge_base": [
{
"id": "ac79226e-73e1-41fe-8cde-469ae4e244fa",
"name": "Product Support Articles",
"description": "Contains FAQs and troubleshooting guides for product lines."
}
],
"guardrail": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"record": true
}
'import requests
url = "https://api.trugen.ai/v1/ext/template"
payload = {
"template_name": "HR Assistant",
"template_system_prompt": "You are a helpful HR AI Assistant.",
"config": {
"maxCallDuration": 5,
"conversationalContext": ""
},
"knowledge_base": [
{
"id": "ac79226e-73e1-41fe-8cde-469ae4e244fa",
"name": "Product Support Articles",
"description": "Contains FAQs and troubleshooting guides for product lines."
}
],
"guardrail": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"record": True
}
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({
template_name: 'HR Assistant',
template_system_prompt: 'You are a helpful HR AI Assistant.',
config: {maxCallDuration: 5, conversationalContext: ''},
knowledge_base: [
{
id: 'ac79226e-73e1-41fe-8cde-469ae4e244fa',
name: 'Product Support Articles',
description: 'Contains FAQs and troubleshooting guides for product lines.'
}
],
guardrail: [{id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', name: '<string>'}],
record: true
})
};
fetch('https://api.trugen.ai/v1/ext/template', 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.trugen.ai/v1/ext/template",
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([
'template_name' => 'HR Assistant',
'template_system_prompt' => 'You are a helpful HR AI Assistant.',
'config' => [
'maxCallDuration' => 5,
'conversationalContext' => ''
],
'knowledge_base' => [
[
'id' => 'ac79226e-73e1-41fe-8cde-469ae4e244fa',
'name' => 'Product Support Articles',
'description' => 'Contains FAQs and troubleshooting guides for product lines.'
]
],
'guardrail' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'name' => '<string>'
]
],
'record' => true
]),
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.trugen.ai/v1/ext/template"
payload := strings.NewReader("{\n \"template_name\": \"HR Assistant\",\n \"template_system_prompt\": \"You are a helpful HR AI Assistant.\",\n \"config\": {\n \"maxCallDuration\": 5,\n \"conversationalContext\": \"\"\n },\n \"knowledge_base\": [\n {\n \"id\": \"ac79226e-73e1-41fe-8cde-469ae4e244fa\",\n \"name\": \"Product Support Articles\",\n \"description\": \"Contains FAQs and troubleshooting guides for product lines.\"\n }\n ],\n \"guardrail\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"record\": true\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.trugen.ai/v1/ext/template")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"template_name\": \"HR Assistant\",\n \"template_system_prompt\": \"You are a helpful HR AI Assistant.\",\n \"config\": {\n \"maxCallDuration\": 5,\n \"conversationalContext\": \"\"\n },\n \"knowledge_base\": [\n {\n \"id\": \"ac79226e-73e1-41fe-8cde-469ae4e244fa\",\n \"name\": \"Product Support Articles\",\n \"description\": \"Contains FAQs and troubleshooting guides for product lines.\"\n }\n ],\n \"guardrail\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"record\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.trugen.ai/v1/ext/template")
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 \"template_name\": \"HR Assistant\",\n \"template_system_prompt\": \"You are a helpful HR AI Assistant.\",\n \"config\": {\n \"maxCallDuration\": 5,\n \"conversationalContext\": \"\"\n },\n \"knowledge_base\": [\n {\n \"id\": \"ac79226e-73e1-41fe-8cde-469ae4e244fa\",\n \"name\": \"Product Support Articles\",\n \"description\": \"Contains FAQs and troubleshooting guides for product lines.\"\n }\n ],\n \"guardrail\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"record\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "d65a4f92-44b1-4fe6-b2ac-a1cb66366ddc",
"message": "Template created successfully"
}{
"error": "Invalid request body"
}{
"error": "Unauthorized: not a valid authorization api key"
}{
"error": "Failed to retrieve template details"
}Persona Templates
Create Persona Template
Creates a new template.
POST
/
ext
/
template
Create a new Template
curl --request POST \
--url https://api.trugen.ai/v1/ext/template \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"template_name": "HR Assistant",
"template_system_prompt": "You are a helpful HR AI Assistant.",
"config": {
"maxCallDuration": 5,
"conversationalContext": ""
},
"knowledge_base": [
{
"id": "ac79226e-73e1-41fe-8cde-469ae4e244fa",
"name": "Product Support Articles",
"description": "Contains FAQs and troubleshooting guides for product lines."
}
],
"guardrail": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"record": true
}
'import requests
url = "https://api.trugen.ai/v1/ext/template"
payload = {
"template_name": "HR Assistant",
"template_system_prompt": "You are a helpful HR AI Assistant.",
"config": {
"maxCallDuration": 5,
"conversationalContext": ""
},
"knowledge_base": [
{
"id": "ac79226e-73e1-41fe-8cde-469ae4e244fa",
"name": "Product Support Articles",
"description": "Contains FAQs and troubleshooting guides for product lines."
}
],
"guardrail": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"record": True
}
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({
template_name: 'HR Assistant',
template_system_prompt: 'You are a helpful HR AI Assistant.',
config: {maxCallDuration: 5, conversationalContext: ''},
knowledge_base: [
{
id: 'ac79226e-73e1-41fe-8cde-469ae4e244fa',
name: 'Product Support Articles',
description: 'Contains FAQs and troubleshooting guides for product lines.'
}
],
guardrail: [{id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', name: '<string>'}],
record: true
})
};
fetch('https://api.trugen.ai/v1/ext/template', 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.trugen.ai/v1/ext/template",
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([
'template_name' => 'HR Assistant',
'template_system_prompt' => 'You are a helpful HR AI Assistant.',
'config' => [
'maxCallDuration' => 5,
'conversationalContext' => ''
],
'knowledge_base' => [
[
'id' => 'ac79226e-73e1-41fe-8cde-469ae4e244fa',
'name' => 'Product Support Articles',
'description' => 'Contains FAQs and troubleshooting guides for product lines.'
]
],
'guardrail' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'name' => '<string>'
]
],
'record' => true
]),
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.trugen.ai/v1/ext/template"
payload := strings.NewReader("{\n \"template_name\": \"HR Assistant\",\n \"template_system_prompt\": \"You are a helpful HR AI Assistant.\",\n \"config\": {\n \"maxCallDuration\": 5,\n \"conversationalContext\": \"\"\n },\n \"knowledge_base\": [\n {\n \"id\": \"ac79226e-73e1-41fe-8cde-469ae4e244fa\",\n \"name\": \"Product Support Articles\",\n \"description\": \"Contains FAQs and troubleshooting guides for product lines.\"\n }\n ],\n \"guardrail\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"record\": true\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.trugen.ai/v1/ext/template")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"template_name\": \"HR Assistant\",\n \"template_system_prompt\": \"You are a helpful HR AI Assistant.\",\n \"config\": {\n \"maxCallDuration\": 5,\n \"conversationalContext\": \"\"\n },\n \"knowledge_base\": [\n {\n \"id\": \"ac79226e-73e1-41fe-8cde-469ae4e244fa\",\n \"name\": \"Product Support Articles\",\n \"description\": \"Contains FAQs and troubleshooting guides for product lines.\"\n }\n ],\n \"guardrail\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"record\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.trugen.ai/v1/ext/template")
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 \"template_name\": \"HR Assistant\",\n \"template_system_prompt\": \"You are a helpful HR AI Assistant.\",\n \"config\": {\n \"maxCallDuration\": 5,\n \"conversationalContext\": \"\"\n },\n \"knowledge_base\": [\n {\n \"id\": \"ac79226e-73e1-41fe-8cde-469ae4e244fa\",\n \"name\": \"Product Support Articles\",\n \"description\": \"Contains FAQs and troubleshooting guides for product lines.\"\n }\n ],\n \"guardrail\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"record\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "d65a4f92-44b1-4fe6-b2ac-a1cb66366ddc",
"message": "Template created successfully"
}{
"error": "Invalid request body"
}{
"error": "Unauthorized: not a valid authorization api key"
}{
"error": "Failed to retrieve template details"
}Create a reusable template: the shared configuration that many agents can derive from. Use templates to enforce consistent behavior across a fleet of agents.
Response:
What belongs in a template
- The shared system prompt
- Attached knowledge bases
- Attached guardrails
- LLM, STT, TTS configuration
- Default avatar (individual agents can override)
- Callback configuration
What doesn’t
- Per-user or per-agent identifiers (avatar assignments, meeting emails, agent names)
- Runtime session data
Example
curl --request POST \
--url https://api.trugen.ai/v1/ext/template \
--header 'Content-Type: application/json' \
--header 'x-api-key: YOUR_API_KEY' \
--data '{
"template_name": "Customer Support Template",
"template_system_prompt": "You are a friendly support agent. Answer in 1-2 sentences and always confirm before taking action.",
"config": {
"timeout": 300,
"conversationalContext": "support"
},
"knowledge_base": [
{ "id": "kb_prod_docs", "name": "Product Docs" },
{ "id": "kb_faqs", "name": "FAQs" }
],
"guardrail": [
{ "id": "grd_hate_speech", "name": "Hate Speech Filter" }
],
"is_active": true,
"record": true
}'
{
"id": "tpl_abc123",
"message": "Template created successfully"
}
Using the template
Once created, spin up agents from it with Create Agent by Template.Next steps
Authorizations
Body
application/json
Name of the template
Example:
"HR Assistant"
System prompt text used by the template
Example:
"You are a helpful HR AI Assistant."
Settings and configuration for the template
Show child attributes
Show child attributes
List of knowledge bases attached to this agent.
Show child attributes
Show child attributes
List of guardrails attached to this template.
Show child attributes
Show child attributes
Whether the call should be recorded
Example:
true
Was this page helpful?