curl --request POST \
--url https://api.galtea.ai/conversationSimulator/generateNextUserMessage \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sessionId": "session_123",
"maxTurns": 5
}
'import requests
url = "https://api.galtea.ai/conversationSimulator/generateNextUserMessage"
payload = {
"sessionId": "session_123",
"maxTurns": 5
}
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({sessionId: 'session_123', maxTurns: 5})
};
fetch('https://api.galtea.ai/conversationSimulator/generateNextUserMessage', 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/conversationSimulator/generateNextUserMessage",
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([
'sessionId' => 'session_123',
'maxTurns' => 5
]),
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/conversationSimulator/generateNextUserMessage"
payload := strings.NewReader("{\n \"sessionId\": \"session_123\",\n \"maxTurns\": 5\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/conversationSimulator/generateNextUserMessage")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sessionId\": \"session_123\",\n \"maxTurns\": 5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/conversationSimulator/generateNextUserMessage")
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 \"sessionId\": \"session_123\",\n \"maxTurns\": 5\n}"
response = http.request(request)
puts response.read_body{
"nextMessage": "<string>",
"finished": true,
"inferenceResultId": "<string>",
"stoppingReason": "<string>",
"simulatorVersion": "<string>",
"creditsUsed": 123
}{
"error": "Error type",
"message": "Error message description"
}{
"error": "Error type",
"message": "Error message description"
}Generate next user message
Simulate the next user message in a conversation based on the provided scenario and turns. The generated turn is stored pending, and the caller that answers it owns its terminal status: send the agent output with PATCH /inferenceResults/{id}, or set the status there when no agent will answer. Evaluations on a session holding a pending turn are skipped, and can be retried once the turn is answered. See Sessions.
curl --request POST \
--url https://api.galtea.ai/conversationSimulator/generateNextUserMessage \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sessionId": "session_123",
"maxTurns": 5
}
'import requests
url = "https://api.galtea.ai/conversationSimulator/generateNextUserMessage"
payload = {
"sessionId": "session_123",
"maxTurns": 5
}
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({sessionId: 'session_123', maxTurns: 5})
};
fetch('https://api.galtea.ai/conversationSimulator/generateNextUserMessage', 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/conversationSimulator/generateNextUserMessage",
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([
'sessionId' => 'session_123',
'maxTurns' => 5
]),
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/conversationSimulator/generateNextUserMessage"
payload := strings.NewReader("{\n \"sessionId\": \"session_123\",\n \"maxTurns\": 5\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/conversationSimulator/generateNextUserMessage")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sessionId\": \"session_123\",\n \"maxTurns\": 5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.galtea.ai/conversationSimulator/generateNextUserMessage")
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 \"sessionId\": \"session_123\",\n \"maxTurns\": 5\n}"
response = http.request(request)
puts response.read_body{
"nextMessage": "<string>",
"finished": true,
"inferenceResultId": "<string>",
"stoppingReason": "<string>",
"simulatorVersion": "<string>",
"creditsUsed": 123
}{
"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
The session to generate the next user message for
"session_123"
The number of turns this run itself may add. The turns of a predefined conversation are already answered, so they widen this budget instead of spending it. Defaults to the test case's max iterations.
x >= 15
Response
Next user message generated successfully
The generated next user message. Empty when the conversation has finished.
The pending turn that holds the generated message. Empty when the conversation has finished.
The credits the simulator spent on this turn. Null without evaluation.readInference on the session's product.