curl --request POST \
--url https://api.galtea.ai/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Sample Product",
"description": "Sample product description",
"organizationId": "org_123",
"userGroupIds": [
"ug_123"
],
"riskLevel": "HIGH",
"operatorType": "PROVIDER",
"interactionMode": "CONVERSATIONAL",
"primaryTask": "QUESTION_ANSWERING_RAG",
"capabilities": "Can process and analyze data",
"inabilities": "Cannot process sensitive financial data",
"policies": "Must comply with data protection regulations",
"otelInputSourceRule": {
"spanName": "ExecuteActivity:add_user_message",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "user"
}
},
"otelOutputSourceRule": {
"spanName": "ExecuteActivity:save_reply",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "assistant"
}
},
"autoCloseScope": "ALL",
"autoCloseInactivityMinutes": 30,
"closedSessionInferenceCreationPolicy": "REOPEN_AND_REEVALUATE",
"tags": [
"internal",
"beta"
],
"otelProductKey": [
"service.namespace",
"service.name"
],
"otelProductKeyValues": {
"service.namespace": "robot2",
"service.name": "plan-de-cuenta"
},
"otelVersionAttributes": [
"service.version",
"app.prompt.version"
]
}
'import requests
url = "https://api.galtea.ai/products"
payload = {
"name": "Sample Product",
"description": "Sample product description",
"organizationId": "org_123",
"userGroupIds": ["ug_123"],
"riskLevel": "HIGH",
"operatorType": "PROVIDER",
"interactionMode": "CONVERSATIONAL",
"primaryTask": "QUESTION_ANSWERING_RAG",
"capabilities": "Can process and analyze data",
"inabilities": "Cannot process sensitive financial data",
"policies": "Must comply with data protection regulations",
"otelInputSourceRule": {
"spanName": "ExecuteActivity:add_user_message",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "user"
}
},
"otelOutputSourceRule": {
"spanName": "ExecuteActivity:save_reply",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "assistant"
}
},
"autoCloseScope": "ALL",
"autoCloseInactivityMinutes": 30,
"closedSessionInferenceCreationPolicy": "REOPEN_AND_REEVALUATE",
"tags": ["internal", "beta"],
"otelProductKey": ["service.namespace", "service.name"],
"otelProductKeyValues": {
"service.namespace": "robot2",
"service.name": "plan-de-cuenta"
},
"otelVersionAttributes": ["service.version", "app.prompt.version"]
}
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({
name: 'Sample Product',
description: 'Sample product description',
organizationId: 'org_123',
userGroupIds: ['ug_123'],
riskLevel: 'HIGH',
operatorType: 'PROVIDER',
interactionMode: 'CONVERSATIONAL',
primaryTask: 'QUESTION_ANSWERING_RAG',
capabilities: 'Can process and analyze data',
inabilities: 'Cannot process sensitive financial data',
policies: 'Must comply with data protection regulations',
otelInputSourceRule: {
spanName: 'ExecuteActivity:add_user_message',
attribute: 'app.arguments',
path: '$[0].message.content',
predicate: {path: '$[0].message.role', equals: 'user'}
},
otelOutputSourceRule: {
spanName: 'ExecuteActivity:save_reply',
attribute: 'app.arguments',
path: '$[0].message.content',
predicate: {path: '$[0].message.role', equals: 'assistant'}
},
autoCloseScope: 'ALL',
autoCloseInactivityMinutes: 30,
closedSessionInferenceCreationPolicy: 'REOPEN_AND_REEVALUATE',
tags: ['internal', 'beta'],
otelProductKey: ['service.namespace', 'service.name'],
otelProductKeyValues: {'service.namespace': 'robot2', 'service.name': 'plan-de-cuenta'},
otelVersionAttributes: ['service.version', 'app.prompt.version']
})
};
fetch('https://api.galtea.ai/products', 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.galtea.ai/products",
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' => 'Sample Product',
'description' => 'Sample product description',
'organizationId' => 'org_123',
'userGroupIds' => [
'ug_123'
],
'riskLevel' => 'HIGH',
'operatorType' => 'PROVIDER',
'interactionMode' => 'CONVERSATIONAL',
'primaryTask' => 'QUESTION_ANSWERING_RAG',
'capabilities' => 'Can process and analyze data',
'inabilities' => 'Cannot process sensitive financial data',
'policies' => 'Must comply with data protection regulations',
'otelInputSourceRule' => [
'spanName' => 'ExecuteActivity:add_user_message',
'attribute' => 'app.arguments',
'path' => '$[0].message.content',
'predicate' => [
'path' => '$[0].message.role',
'equals' => 'user'
]
],
'otelOutputSourceRule' => [
'spanName' => 'ExecuteActivity:save_reply',
'attribute' => 'app.arguments',
'path' => '$[0].message.content',
'predicate' => [
'path' => '$[0].message.role',
'equals' => 'assistant'
]
],
'autoCloseScope' => 'ALL',
'autoCloseInactivityMinutes' => 30,
'closedSessionInferenceCreationPolicy' => 'REOPEN_AND_REEVALUATE',
'tags' => [
'internal',
'beta'
],
'otelProductKey' => [
'service.namespace',
'service.name'
],
'otelProductKeyValues' => [
'service.namespace' => 'robot2',
'service.name' => 'plan-de-cuenta'
],
'otelVersionAttributes' => [
'service.version',
'app.prompt.version'
]
]),
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.galtea.ai/products"
payload := strings.NewReader("{\n \"name\": \"Sample Product\",\n \"description\": \"Sample product description\",\n \"organizationId\": \"org_123\",\n \"userGroupIds\": [\n \"ug_123\"\n ],\n \"riskLevel\": \"HIGH\",\n \"operatorType\": \"PROVIDER\",\n \"interactionMode\": \"CONVERSATIONAL\",\n \"primaryTask\": \"QUESTION_ANSWERING_RAG\",\n \"capabilities\": \"Can process and analyze data\",\n \"inabilities\": \"Cannot process sensitive financial data\",\n \"policies\": \"Must comply with data protection regulations\",\n \"otelInputSourceRule\": {\n \"spanName\": \"ExecuteActivity:add_user_message\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"user\"\n }\n },\n \"otelOutputSourceRule\": {\n \"spanName\": \"ExecuteActivity:save_reply\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"assistant\"\n }\n },\n \"autoCloseScope\": \"ALL\",\n \"autoCloseInactivityMinutes\": 30,\n \"closedSessionInferenceCreationPolicy\": \"REOPEN_AND_REEVALUATE\",\n \"tags\": [\n \"internal\",\n \"beta\"\n ],\n \"otelProductKey\": [\n \"service.namespace\",\n \"service.name\"\n ],\n \"otelProductKeyValues\": {\n \"service.namespace\": \"robot2\",\n \"service.name\": \"plan-de-cuenta\"\n },\n \"otelVersionAttributes\": [\n \"service.version\",\n \"app.prompt.version\"\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.galtea.ai/products")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sample Product\",\n \"description\": \"Sample product description\",\n \"organizationId\": \"org_123\",\n \"userGroupIds\": [\n \"ug_123\"\n ],\n \"riskLevel\": \"HIGH\",\n \"operatorType\": \"PROVIDER\",\n \"interactionMode\": \"CONVERSATIONAL\",\n \"primaryTask\": \"QUESTION_ANSWERING_RAG\",\n \"capabilities\": \"Can process and analyze data\",\n \"inabilities\": \"Cannot process sensitive financial data\",\n \"policies\": \"Must comply with data protection regulations\",\n \"otelInputSourceRule\": {\n \"spanName\": \"ExecuteActivity:add_user_message\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"user\"\n }\n },\n \"otelOutputSourceRule\": {\n \"spanName\": \"ExecuteActivity:save_reply\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"assistant\"\n }\n },\n \"autoCloseScope\": \"ALL\",\n \"autoCloseInactivityMinutes\": 30,\n \"closedSessionInferenceCreationPolicy\": \"REOPEN_AND_REEVALUATE\",\n \"tags\": [\n \"internal\",\n \"beta\"\n ],\n \"otelProductKey\": [\n \"service.namespace\",\n \"service.name\"\n ],\n \"otelProductKeyValues\": {\n \"service.namespace\": \"robot2\",\n \"service.name\": \"plan-de-cuenta\"\n },\n \"otelVersionAttributes\": [\n \"service.version\",\n \"app.prompt.version\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/products")
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 \"name\": \"Sample Product\",\n \"description\": \"Sample product description\",\n \"organizationId\": \"org_123\",\n \"userGroupIds\": [\n \"ug_123\"\n ],\n \"riskLevel\": \"HIGH\",\n \"operatorType\": \"PROVIDER\",\n \"interactionMode\": \"CONVERSATIONAL\",\n \"primaryTask\": \"QUESTION_ANSWERING_RAG\",\n \"capabilities\": \"Can process and analyze data\",\n \"inabilities\": \"Cannot process sensitive financial data\",\n \"policies\": \"Must comply with data protection regulations\",\n \"otelInputSourceRule\": {\n \"spanName\": \"ExecuteActivity:add_user_message\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"user\"\n }\n },\n \"otelOutputSourceRule\": {\n \"spanName\": \"ExecuteActivity:save_reply\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"assistant\"\n }\n },\n \"autoCloseScope\": \"ALL\",\n \"autoCloseInactivityMinutes\": 30,\n \"closedSessionInferenceCreationPolicy\": \"REOPEN_AND_REEVALUATE\",\n \"tags\": [\n \"internal\",\n \"beta\"\n ],\n \"otelProductKey\": [\n \"service.namespace\",\n \"service.name\"\n ],\n \"otelProductKeyValues\": {\n \"service.namespace\": \"robot2\",\n \"service.name\": \"plan-de-cuenta\"\n },\n \"otelVersionAttributes\": [\n \"service.version\",\n \"app.prompt.version\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "prod_123",
"organizationId": "org_123",
"userId": "user_123",
"name": "Sample Product",
"description": "Sample product description",
"riskLevel": "HIGH",
"operatorType": "PROVIDER",
"interactionMode": "CONVERSATIONAL",
"primaryTask": "QUESTION_ANSWERING_RAG",
"capabilities": "Can process and analyze data",
"inabilities": "Cannot process sensitive financial data",
"policies": "Must comply with data protection regulations",
"otelInputSourceRule": {
"spanName": "ExecuteActivity:add_user_message",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "user"
}
},
"otelOutputSourceRule": {
"spanName": "ExecuteActivity:save_reply",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "assistant"
}
},
"autoCloseScope": "ALL",
"autoCloseInactivityMinutes": 30,
"closedSessionInferenceCreationPolicy": "REOPEN_AND_REEVALUATE",
"tags": [
"internal",
"beta"
],
"otelProductKey": [
"service.namespace",
"service.name"
],
"otelProductKeyValues": {
"service.namespace": "robot2",
"service.name": "plan-de-cuenta"
},
"otelVersionAttributes": [
"service.version",
"app.prompt.version"
],
"source": "banking",
"createdAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}Create product
Create a new product. Key values must give one value for each attribute of the key in force: the product key when the body sends one, else the key of the organization. A MEMBER creates a product only when one of its user groups grants all products and allows product.create. See Products.
curl --request POST \
--url https://api.galtea.ai/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Sample Product",
"description": "Sample product description",
"organizationId": "org_123",
"userGroupIds": [
"ug_123"
],
"riskLevel": "HIGH",
"operatorType": "PROVIDER",
"interactionMode": "CONVERSATIONAL",
"primaryTask": "QUESTION_ANSWERING_RAG",
"capabilities": "Can process and analyze data",
"inabilities": "Cannot process sensitive financial data",
"policies": "Must comply with data protection regulations",
"otelInputSourceRule": {
"spanName": "ExecuteActivity:add_user_message",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "user"
}
},
"otelOutputSourceRule": {
"spanName": "ExecuteActivity:save_reply",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "assistant"
}
},
"autoCloseScope": "ALL",
"autoCloseInactivityMinutes": 30,
"closedSessionInferenceCreationPolicy": "REOPEN_AND_REEVALUATE",
"tags": [
"internal",
"beta"
],
"otelProductKey": [
"service.namespace",
"service.name"
],
"otelProductKeyValues": {
"service.namespace": "robot2",
"service.name": "plan-de-cuenta"
},
"otelVersionAttributes": [
"service.version",
"app.prompt.version"
]
}
'import requests
url = "https://api.galtea.ai/products"
payload = {
"name": "Sample Product",
"description": "Sample product description",
"organizationId": "org_123",
"userGroupIds": ["ug_123"],
"riskLevel": "HIGH",
"operatorType": "PROVIDER",
"interactionMode": "CONVERSATIONAL",
"primaryTask": "QUESTION_ANSWERING_RAG",
"capabilities": "Can process and analyze data",
"inabilities": "Cannot process sensitive financial data",
"policies": "Must comply with data protection regulations",
"otelInputSourceRule": {
"spanName": "ExecuteActivity:add_user_message",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "user"
}
},
"otelOutputSourceRule": {
"spanName": "ExecuteActivity:save_reply",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "assistant"
}
},
"autoCloseScope": "ALL",
"autoCloseInactivityMinutes": 30,
"closedSessionInferenceCreationPolicy": "REOPEN_AND_REEVALUATE",
"tags": ["internal", "beta"],
"otelProductKey": ["service.namespace", "service.name"],
"otelProductKeyValues": {
"service.namespace": "robot2",
"service.name": "plan-de-cuenta"
},
"otelVersionAttributes": ["service.version", "app.prompt.version"]
}
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({
name: 'Sample Product',
description: 'Sample product description',
organizationId: 'org_123',
userGroupIds: ['ug_123'],
riskLevel: 'HIGH',
operatorType: 'PROVIDER',
interactionMode: 'CONVERSATIONAL',
primaryTask: 'QUESTION_ANSWERING_RAG',
capabilities: 'Can process and analyze data',
inabilities: 'Cannot process sensitive financial data',
policies: 'Must comply with data protection regulations',
otelInputSourceRule: {
spanName: 'ExecuteActivity:add_user_message',
attribute: 'app.arguments',
path: '$[0].message.content',
predicate: {path: '$[0].message.role', equals: 'user'}
},
otelOutputSourceRule: {
spanName: 'ExecuteActivity:save_reply',
attribute: 'app.arguments',
path: '$[0].message.content',
predicate: {path: '$[0].message.role', equals: 'assistant'}
},
autoCloseScope: 'ALL',
autoCloseInactivityMinutes: 30,
closedSessionInferenceCreationPolicy: 'REOPEN_AND_REEVALUATE',
tags: ['internal', 'beta'],
otelProductKey: ['service.namespace', 'service.name'],
otelProductKeyValues: {'service.namespace': 'robot2', 'service.name': 'plan-de-cuenta'},
otelVersionAttributes: ['service.version', 'app.prompt.version']
})
};
fetch('https://api.galtea.ai/products', 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.galtea.ai/products",
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' => 'Sample Product',
'description' => 'Sample product description',
'organizationId' => 'org_123',
'userGroupIds' => [
'ug_123'
],
'riskLevel' => 'HIGH',
'operatorType' => 'PROVIDER',
'interactionMode' => 'CONVERSATIONAL',
'primaryTask' => 'QUESTION_ANSWERING_RAG',
'capabilities' => 'Can process and analyze data',
'inabilities' => 'Cannot process sensitive financial data',
'policies' => 'Must comply with data protection regulations',
'otelInputSourceRule' => [
'spanName' => 'ExecuteActivity:add_user_message',
'attribute' => 'app.arguments',
'path' => '$[0].message.content',
'predicate' => [
'path' => '$[0].message.role',
'equals' => 'user'
]
],
'otelOutputSourceRule' => [
'spanName' => 'ExecuteActivity:save_reply',
'attribute' => 'app.arguments',
'path' => '$[0].message.content',
'predicate' => [
'path' => '$[0].message.role',
'equals' => 'assistant'
]
],
'autoCloseScope' => 'ALL',
'autoCloseInactivityMinutes' => 30,
'closedSessionInferenceCreationPolicy' => 'REOPEN_AND_REEVALUATE',
'tags' => [
'internal',
'beta'
],
'otelProductKey' => [
'service.namespace',
'service.name'
],
'otelProductKeyValues' => [
'service.namespace' => 'robot2',
'service.name' => 'plan-de-cuenta'
],
'otelVersionAttributes' => [
'service.version',
'app.prompt.version'
]
]),
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.galtea.ai/products"
payload := strings.NewReader("{\n \"name\": \"Sample Product\",\n \"description\": \"Sample product description\",\n \"organizationId\": \"org_123\",\n \"userGroupIds\": [\n \"ug_123\"\n ],\n \"riskLevel\": \"HIGH\",\n \"operatorType\": \"PROVIDER\",\n \"interactionMode\": \"CONVERSATIONAL\",\n \"primaryTask\": \"QUESTION_ANSWERING_RAG\",\n \"capabilities\": \"Can process and analyze data\",\n \"inabilities\": \"Cannot process sensitive financial data\",\n \"policies\": \"Must comply with data protection regulations\",\n \"otelInputSourceRule\": {\n \"spanName\": \"ExecuteActivity:add_user_message\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"user\"\n }\n },\n \"otelOutputSourceRule\": {\n \"spanName\": \"ExecuteActivity:save_reply\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"assistant\"\n }\n },\n \"autoCloseScope\": \"ALL\",\n \"autoCloseInactivityMinutes\": 30,\n \"closedSessionInferenceCreationPolicy\": \"REOPEN_AND_REEVALUATE\",\n \"tags\": [\n \"internal\",\n \"beta\"\n ],\n \"otelProductKey\": [\n \"service.namespace\",\n \"service.name\"\n ],\n \"otelProductKeyValues\": {\n \"service.namespace\": \"robot2\",\n \"service.name\": \"plan-de-cuenta\"\n },\n \"otelVersionAttributes\": [\n \"service.version\",\n \"app.prompt.version\"\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.galtea.ai/products")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sample Product\",\n \"description\": \"Sample product description\",\n \"organizationId\": \"org_123\",\n \"userGroupIds\": [\n \"ug_123\"\n ],\n \"riskLevel\": \"HIGH\",\n \"operatorType\": \"PROVIDER\",\n \"interactionMode\": \"CONVERSATIONAL\",\n \"primaryTask\": \"QUESTION_ANSWERING_RAG\",\n \"capabilities\": \"Can process and analyze data\",\n \"inabilities\": \"Cannot process sensitive financial data\",\n \"policies\": \"Must comply with data protection regulations\",\n \"otelInputSourceRule\": {\n \"spanName\": \"ExecuteActivity:add_user_message\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"user\"\n }\n },\n \"otelOutputSourceRule\": {\n \"spanName\": \"ExecuteActivity:save_reply\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"assistant\"\n }\n },\n \"autoCloseScope\": \"ALL\",\n \"autoCloseInactivityMinutes\": 30,\n \"closedSessionInferenceCreationPolicy\": \"REOPEN_AND_REEVALUATE\",\n \"tags\": [\n \"internal\",\n \"beta\"\n ],\n \"otelProductKey\": [\n \"service.namespace\",\n \"service.name\"\n ],\n \"otelProductKeyValues\": {\n \"service.namespace\": \"robot2\",\n \"service.name\": \"plan-de-cuenta\"\n },\n \"otelVersionAttributes\": [\n \"service.version\",\n \"app.prompt.version\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/products")
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 \"name\": \"Sample Product\",\n \"description\": \"Sample product description\",\n \"organizationId\": \"org_123\",\n \"userGroupIds\": [\n \"ug_123\"\n ],\n \"riskLevel\": \"HIGH\",\n \"operatorType\": \"PROVIDER\",\n \"interactionMode\": \"CONVERSATIONAL\",\n \"primaryTask\": \"QUESTION_ANSWERING_RAG\",\n \"capabilities\": \"Can process and analyze data\",\n \"inabilities\": \"Cannot process sensitive financial data\",\n \"policies\": \"Must comply with data protection regulations\",\n \"otelInputSourceRule\": {\n \"spanName\": \"ExecuteActivity:add_user_message\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"user\"\n }\n },\n \"otelOutputSourceRule\": {\n \"spanName\": \"ExecuteActivity:save_reply\",\n \"attribute\": \"app.arguments\",\n \"path\": \"$[0].message.content\",\n \"predicate\": {\n \"path\": \"$[0].message.role\",\n \"equals\": \"assistant\"\n }\n },\n \"autoCloseScope\": \"ALL\",\n \"autoCloseInactivityMinutes\": 30,\n \"closedSessionInferenceCreationPolicy\": \"REOPEN_AND_REEVALUATE\",\n \"tags\": [\n \"internal\",\n \"beta\"\n ],\n \"otelProductKey\": [\n \"service.namespace\",\n \"service.name\"\n ],\n \"otelProductKeyValues\": {\n \"service.namespace\": \"robot2\",\n \"service.name\": \"plan-de-cuenta\"\n },\n \"otelVersionAttributes\": [\n \"service.version\",\n \"app.prompt.version\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "prod_123",
"organizationId": "org_123",
"userId": "user_123",
"name": "Sample Product",
"description": "Sample product description",
"riskLevel": "HIGH",
"operatorType": "PROVIDER",
"interactionMode": "CONVERSATIONAL",
"primaryTask": "QUESTION_ANSWERING_RAG",
"capabilities": "Can process and analyze data",
"inabilities": "Cannot process sensitive financial data",
"policies": "Must comply with data protection regulations",
"otelInputSourceRule": {
"spanName": "ExecuteActivity:add_user_message",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "user"
}
},
"otelOutputSourceRule": {
"spanName": "ExecuteActivity:save_reply",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "assistant"
}
},
"autoCloseScope": "ALL",
"autoCloseInactivityMinutes": 30,
"closedSessionInferenceCreationPolicy": "REOPEN_AND_REEVALUATE",
"tags": [
"internal",
"beta"
],
"otelProductKey": [
"service.namespace",
"service.name"
],
"otelProductKeyValues": {
"service.namespace": "robot2",
"service.name": "plan-de-cuenta"
},
"otelVersionAttributes": [
"service.version",
"app.prompt.version"
],
"source": "banking",
"createdAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}Authorizations
API key authorization. Pass your API key in the Authorization header as a Bearer token. Both new (gsk_*) and legacy (gsk-) API keys are accepted, e.g. Authorization: Bearer gsk_... or Authorization: Bearer gsk-....
Headers
Send return=minimal to get no body back from a write and skip reading the resource: a create answers 201 with only Location, and an update answers 204.
"return=minimal"
Body
"Sample Product"
"Sample product description"
The organization the product belongs to. Omit it or send null for the organization of the caller.
"org_123"
User groups of the product organization that the new product is linked to, which grants it to their members. The caller must be allowed to update each group.
1001["ug_123"]
EU AI Act risk classification. PROHIBITED: banned AI use cases. GPAI: general-purpose AI. GPAI_SYSTEMIC: GPAI with systemic risk. HIGH: high-risk AI system. SPECIAL_SYSTEM: special-category system.
PROHIBITED, GPAI, GPAI_SYSTEMIC, HIGH, SPECIAL_SYSTEM, null "HIGH"
EU AI Act operator role classification.
AUTHORISED_REPRESENTATIVE, DEPLOYER, DISTRIBUTER, IMPORTER, PRODUCT_MANUFACTURER, PROVIDER, null "PROVIDER"
Who consumes the product's output. CONVERSATIONAL: a person exchanges several turns with it. HUMAN_DIRECT: a person reads the output directly, with no dialogue. PROGRAMMATIC: another system consumes it and no person reads it directly. The onboarding AI suggests a value; the owner can change or clear it. Null means unclassified.
CONVERSATIONAL, HUMAN_DIRECT, PROGRAMMATIC, null "CONVERSATIONAL"
The one dominant task the product performs on its input. The onboarding AI suggests a value; the owner can change or clear it. Null means unclassified.
CONVERSATIONAL_ASSISTANCE, QUESTION_ANSWERING_RAG, DOCUMENT_EXTRACTION, DOCUMENT_GENERATION, SUMMARIZATION, CLASSIFICATION, TRANSLATION, CORRECTION, AGENTIC_WORKFLOW, OTHER, null "QUESTION_ANSWERING_RAG"
"Can process and analyze data"
"Cannot process sensitive financial data"
"Must comply with data protection regulations"
Recover a turn's user-visible input for products whose user message lives on a non-LLM span. Set per organization, product or version. The version rule wins, then the product rule. Per span it applies only when no LLM input is present. Per turn the value it extracts IS the turn input, ahead of every fallback, and the turn input is EMPTY when the rule extracts nothing from any span of the turn. The two directions resolve independently. Null uses the rule of the organization.
Show child attributes
Show child attributes
{
"spanName": "ExecuteActivity:add_user_message",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "user"
}
}
Recover a turn's user-visible output for templated or non-LLM replies whose final answer lives on a non-LLM span. Set per organization, product or version. The version rule wins, then the product rule. Per span it applies only when no LLM output is present. Per turn the value it extracts IS the turn output, ahead of every fallback, and the turn output is EMPTY when the rule extracts nothing from any span of the turn. The two directions resolve independently. Null uses the rule of the organization.
Show child attributes
Show child attributes
{
"spanName": "ExecuteActivity:save_reply",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "assistant"
}
}
Which sessions the product-level auto-close sweep considers. ALL (default) closes both production and development sessions; PRODUCTION only production sessions; DEVELOPMENT only development (test) sessions; NONE disables auto-close.
NONE, DEVELOPMENT, PRODUCTION, ALL "ALL"
Minutes of inactivity after which an eligible session is auto-closed.
x >= 130
What happens when a new trace is created for an already-closed session. REOPEN_AND_REEVALUATE (the default) stores the trace, returns the session to PENDING and marks its existing monitor evaluations OUTDATED so a monitor scores the session again once it closes for good. A development session reopens the same way, without monitor evaluations to outdate. IGNORE drops the trace silently. REJECT returns an error.
REJECT, IGNORE, REOPEN_AND_REEVALUATE "REOPEN_AND_REEVALUATE"
Free-form labels for organizing products. Normalized to lowercase and trimmed on save.
["internal", "beta"]
This product's own key, 1 to 10 resource attribute names. Null makes the product follow the key of its organization, including every later change of it.
["service.namespace", "service.name"]
One value for each attribute of the key in force, as a map of attribute name to text. A trace resource with no galtea.version.id and no galtea.product.id that carries these values on its resource attributes is routed to this product. Its facts come from its galtea.version.fact.* attributes, else from the version attributes in force. A resource must carry every attribute of the key to match. The values must be unique among the live products of the organization, or the request answers 409. Null clears them.
Show child attributes
Show child attributes
{
"service.namespace": "robot2",
"service.name": "plan-de-cuenta"
}
This product's own list of the resource attributes whose values make up a version, 1 to 32 names. Each fact keeps the attribute name as its key. A name cannot start with "galtea." or be "customer.id". Null makes the product follow the list of its organization, including every later change of it. An empty list is refused.
["service.version", "app.prompt.version"]
Response
Product created successfully. On Prefer: return=minimal, or when the read after the write fails, the answer has no body.
"prod_123"
"org_123"
"user_123"
"Sample Product"
"Sample product description"
EU AI Act risk classification. PROHIBITED: banned AI use cases. GPAI: general-purpose AI. GPAI_SYSTEMIC: GPAI with systemic risk. HIGH: high-risk AI system. SPECIAL_SYSTEM: special-category system.
PROHIBITED, GPAI, GPAI_SYSTEMIC, HIGH, SPECIAL_SYSTEM, null "HIGH"
EU AI Act operator role classification.
AUTHORISED_REPRESENTATIVE, DEPLOYER, DISTRIBUTER, IMPORTER, PRODUCT_MANUFACTURER, PROVIDER, null "PROVIDER"
Who consumes the product's output. CONVERSATIONAL: a person exchanges several turns with it. HUMAN_DIRECT: a person reads the output directly, with no dialogue. PROGRAMMATIC: another system consumes it and no person reads it directly. The onboarding AI suggests a value; the owner can change or clear it. Null means unclassified.
CONVERSATIONAL, HUMAN_DIRECT, PROGRAMMATIC, null "CONVERSATIONAL"
The one dominant task the product performs on its input. The onboarding AI suggests a value; the owner can change or clear it. Null means unclassified.
CONVERSATIONAL_ASSISTANCE, QUESTION_ANSWERING_RAG, DOCUMENT_EXTRACTION, DOCUMENT_GENERATION, SUMMARIZATION, CLASSIFICATION, TRANSLATION, CORRECTION, AGENTIC_WORKFLOW, OTHER, null "QUESTION_ANSWERING_RAG"
"Can process and analyze data"
"Cannot process sensitive financial data"
"Must comply with data protection regulations"
Recover a turn's user-visible input for products whose user message lives on a non-LLM span. Set per organization, product or version. The version rule wins, then the product rule. Per span it applies only when no LLM input is present. Per turn the value it extracts IS the turn input, ahead of every fallback, and the turn input is EMPTY when the rule extracts nothing from any span of the turn. The two directions resolve independently. Null uses the rule of the organization.
Show child attributes
Show child attributes
{
"spanName": "ExecuteActivity:add_user_message",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "user"
}
}
Recover a turn's user-visible output for templated or non-LLM replies whose final answer lives on a non-LLM span. Set per organization, product or version. The version rule wins, then the product rule. Per span it applies only when no LLM output is present. Per turn the value it extracts IS the turn output, ahead of every fallback, and the turn output is EMPTY when the rule extracts nothing from any span of the turn. The two directions resolve independently. Null uses the rule of the organization.
Show child attributes
Show child attributes
{
"spanName": "ExecuteActivity:save_reply",
"attribute": "app.arguments",
"path": "$[0].message.content",
"predicate": {
"path": "$[0].message.role",
"equals": "assistant"
}
}
Which sessions the product-level auto-close sweep considers. ALL (default) closes both production and development sessions; PRODUCTION only production sessions; DEVELOPMENT only development (test) sessions; NONE disables auto-close.
NONE, DEVELOPMENT, PRODUCTION, ALL "ALL"
Minutes of inactivity after which an eligible session is auto-closed.
x >= 130
What happens when a new trace is created for an already-closed session. REOPEN_AND_REEVALUATE (the default) stores the trace, returns the session to PENDING and marks its existing monitor evaluations OUTDATED so a monitor scores the session again once it closes for good. A development session reopens the same way, without monitor evaluations to outdate. IGNORE drops the trace silently. REJECT returns an error.
REJECT, IGNORE, REOPEN_AND_REEVALUATE "REOPEN_AND_REEVALUATE"
Free-form labels for organizing products. Normalized to lowercase and trimmed on save.
["internal", "beta"]
This product's own key, 1 to 10 resource attribute names. Null makes the product follow the key of its organization, including every later change of it.
["service.namespace", "service.name"]
One value for each attribute of the key in force, as a map of attribute name to text. A trace resource with no galtea.version.id and no galtea.product.id that carries these values on its resource attributes is routed to this product. Its facts come from its galtea.version.fact.* attributes, else from the version attributes in force. A resource must carry every attribute of the key to match. The values must be unique among the live products of the organization, or the request answers 409. Null clears them.
Show child attributes
Show child attributes
{
"service.namespace": "robot2",
"service.name": "plan-de-cuenta"
}
This product's own list of the resource attributes whose values make up a version, 1 to 32 names. Each fact keeps the attribute name as its key. A name cannot start with "galtea." or be "customer.id". Null makes the product follow the list of its organization, including every later change of it. An empty list is refused.
["service.version", "app.prompt.version"]
Demo key the product was cloned from (e.g. "banking"); null for user-created products. Server-stamped on demo-clone; not client-writable.
"banking"