curl --request POST \
--url https://api.galtea.ai/products/generate-config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form 'userDescription=A mobile sales assistant for smartphones.' \
--form 'productSpecs=<string>' \
--form 'productName=Mobile Sales Assistant' \
--form useDetailedGeneration=true \
--form productSpecs.items='@example-file'import requests
url = "https://api.galtea.ai/products/generate-config"
files = { "productSpecs.items": ("example-file", open("example-file", "rb")) }
payload = {
"userDescription": "A mobile sales assistant for smartphones.",
"productSpecs": "<string>",
"productName": "Mobile Sales Assistant",
"useDetailedGeneration": "true"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('userDescription', 'A mobile sales assistant for smartphones.');
form.append('productSpecs', '<string>');
form.append('productName', 'Mobile Sales Assistant');
form.append('useDetailedGeneration', 'true');
form.append('productSpecs.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.galtea.ai/products/generate-config', 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/generate-config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userDescription\"\r\n\r\nA mobile sales assistant for smartphones.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productName\"\r\n\r\nMobile Sales Assistant\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"useDetailedGeneration\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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/generate-config"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userDescription\"\r\n\r\nA mobile sales assistant for smartphones.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productName\"\r\n\r\nMobile Sales Assistant\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"useDetailedGeneration\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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/generate-config")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userDescription\"\r\n\r\nA mobile sales assistant for smartphones.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productName\"\r\n\r\nMobile Sales Assistant\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"useDetailedGeneration\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/products/generate-config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userDescription\"\r\n\r\nA mobile sales assistant for smartphones.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productName\"\r\n\r\nMobile Sales Assistant\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"useDetailedGeneration\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"name": "<string>",
"description": "<string>",
"specifications": [
{
"description": "<string>",
"testVariant": "<string>"
}
]
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}Generate product configuration using AI
Uses AI to generate a refined product description and testable specifications from a product name and user description. Optionally accepts product specification files (documents, images, audio, video, code) to enrich the generation. See Products.
curl --request POST \
--url https://api.galtea.ai/products/generate-config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form 'userDescription=A mobile sales assistant for smartphones.' \
--form 'productSpecs=<string>' \
--form 'productName=Mobile Sales Assistant' \
--form useDetailedGeneration=true \
--form productSpecs.items='@example-file'import requests
url = "https://api.galtea.ai/products/generate-config"
files = { "productSpecs.items": ("example-file", open("example-file", "rb")) }
payload = {
"userDescription": "A mobile sales assistant for smartphones.",
"productSpecs": "<string>",
"productName": "Mobile Sales Assistant",
"useDetailedGeneration": "true"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('userDescription', 'A mobile sales assistant for smartphones.');
form.append('productSpecs', '<string>');
form.append('productName', 'Mobile Sales Assistant');
form.append('useDetailedGeneration', 'true');
form.append('productSpecs.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.galtea.ai/products/generate-config', 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/generate-config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userDescription\"\r\n\r\nA mobile sales assistant for smartphones.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productName\"\r\n\r\nMobile Sales Assistant\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"useDetailedGeneration\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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/generate-config"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userDescription\"\r\n\r\nA mobile sales assistant for smartphones.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productName\"\r\n\r\nMobile Sales Assistant\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"useDetailedGeneration\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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/generate-config")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userDescription\"\r\n\r\nA mobile sales assistant for smartphones.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productName\"\r\n\r\nMobile Sales Assistant\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"useDetailedGeneration\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/products/generate-config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userDescription\"\r\n\r\nA mobile sales assistant for smartphones.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productName\"\r\n\r\nMobile Sales Assistant\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"useDetailedGeneration\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productSpecs.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"name": "<string>",
"description": "<string>",
"specifications": [
{
"description": "<string>",
"testVariant": "<string>"
}
]
}{
"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-....
Body
A brief description of what the product does.
1"A mobile sales assistant for smartphones."
Optional product specification files (documents, images, audio, video, code). Max 50 files, 10MB total.
The name of the product.
"Mobile Sales Assistant"
Whether to use detailed generation mode (heavier model).
"true"