curl --request POST \
--url https://api.getbluejay.ai/v1/queue-sms-simulation-run \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <x-api-key>' \
--data '
{
"simulation_id": "<string>",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"knowledge_base_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digital_human_ids": [
"<string>"
],
"terminate_overlapping_simulations": false,
"runs_per_digital_human": 1
}
'import requests
url = "https://api.getbluejay.ai/v1/queue-sms-simulation-run"
payload = {
"simulation_id": "<string>",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"knowledge_base_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digital_human_ids": ["<string>"],
"terminate_overlapping_simulations": False,
"runs_per_digital_human": 1
}
headers = {
"X-API-Key": "<x-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': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
simulation_id: '<string>',
prompt_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
agent_version_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
knowledge_base_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
digital_human_ids: ['<string>'],
terminate_overlapping_simulations: false,
runs_per_digital_human: 1
})
};
fetch('https://api.getbluejay.ai/v1/queue-sms-simulation-run', 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.getbluejay.ai/v1/queue-sms-simulation-run",
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([
'simulation_id' => '<string>',
'prompt_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'agent_version_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'knowledge_base_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'digital_human_ids' => [
'<string>'
],
'terminate_overlapping_simulations' => false,
'runs_per_digital_human' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <x-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.getbluejay.ai/v1/queue-sms-simulation-run"
payload := strings.NewReader("{\n \"simulation_id\": \"<string>\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"knowledge_base_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"digital_human_ids\": [\n \"<string>\"\n ],\n \"terminate_overlapping_simulations\": false,\n \"runs_per_digital_human\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<x-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.getbluejay.ai/v1/queue-sms-simulation-run")
.header("X-API-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"simulation_id\": \"<string>\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"knowledge_base_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"digital_human_ids\": [\n \"<string>\"\n ],\n \"terminate_overlapping_simulations\": false,\n \"runs_per_digital_human\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbluejay.ai/v1/queue-sms-simulation-run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"simulation_id\": \"<string>\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"knowledge_base_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"digital_human_ids\": [\n \"<string>\"\n ],\n \"terminate_overlapping_simulations\": false,\n \"runs_per_digital_human\": 1\n}"
response = http.request(request)
puts response.read_body{
"simulation_run_id": "<string>",
"simulation_result_ids": [
"<string>"
],
"agent_id": "<string>",
"status": "success",
"terminated_conversations": [
{}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Queue SMS Simulation Run
curl --request POST \
--url https://api.getbluejay.ai/v1/queue-sms-simulation-run \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <x-api-key>' \
--data '
{
"simulation_id": "<string>",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"knowledge_base_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digital_human_ids": [
"<string>"
],
"terminate_overlapping_simulations": false,
"runs_per_digital_human": 1
}
'import requests
url = "https://api.getbluejay.ai/v1/queue-sms-simulation-run"
payload = {
"simulation_id": "<string>",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"knowledge_base_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digital_human_ids": ["<string>"],
"terminate_overlapping_simulations": False,
"runs_per_digital_human": 1
}
headers = {
"X-API-Key": "<x-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': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
simulation_id: '<string>',
prompt_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
agent_version_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
knowledge_base_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
digital_human_ids: ['<string>'],
terminate_overlapping_simulations: false,
runs_per_digital_human: 1
})
};
fetch('https://api.getbluejay.ai/v1/queue-sms-simulation-run', 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.getbluejay.ai/v1/queue-sms-simulation-run",
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([
'simulation_id' => '<string>',
'prompt_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'agent_version_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'knowledge_base_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'digital_human_ids' => [
'<string>'
],
'terminate_overlapping_simulations' => false,
'runs_per_digital_human' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <x-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.getbluejay.ai/v1/queue-sms-simulation-run"
payload := strings.NewReader("{\n \"simulation_id\": \"<string>\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"knowledge_base_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"digital_human_ids\": [\n \"<string>\"\n ],\n \"terminate_overlapping_simulations\": false,\n \"runs_per_digital_human\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<x-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.getbluejay.ai/v1/queue-sms-simulation-run")
.header("X-API-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"simulation_id\": \"<string>\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"knowledge_base_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"digital_human_ids\": [\n \"<string>\"\n ],\n \"terminate_overlapping_simulations\": false,\n \"runs_per_digital_human\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbluejay.ai/v1/queue-sms-simulation-run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"simulation_id\": \"<string>\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agent_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"knowledge_base_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"digital_human_ids\": [\n \"<string>\"\n ],\n \"terminate_overlapping_simulations\": false,\n \"runs_per_digital_human\": 1\n}"
response = http.request(request)
puts response.read_body{
"simulation_run_id": "<string>",
"simulation_result_ids": [
"<string>"
],
"agent_id": "<string>",
"status": "success",
"terminated_conversations": [
{}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}# Bluejay — Testing & Monitoring Platform for Conversational AI Agents
You are a senior backend engineer integrating the Bluejay API. Think step-by-step: first understand the endpoint, then plan the integration, then implement with minimal changes.
## Queue SMS Simulation Run — POST /v1/queue-sms-simulation-run
**Endpoint:** POST `https://api.getbluejay.ai/v1/queue-sms-simulation-run`
**Auth:** `X-API-Key` header
**Content-Type:** application/json
### Required Parameters
| Name | Type | Description |
|------|------|-------------|
| X-API-Key | string | API key required to authenticate requests. |
| simulation_id | string | ID of the simulation to be run |
Review the full parameter list at https://docs.getbluejay.ai/api-reference/endpoint/queue-sms-simulation-run and include any optional parameters (e.g., `agent_version_id`, `knowledge_base_id`, `digital_human_ids`, `terminate_overlapping_simulations`) that serve your integration's use case and align with Bluejay's testing and monitoring capabilities.
### Request Body (required fields)
```json
{
"simulation_id": "string"
}
```
Refer to the full schema at https://docs.getbluejay.ai/api-reference/endpoint/queue-sms-simulation-run. Include optional fields that serve the goal of setting up for testing and monitoring on Bluejay.
### Example
**POST with body:**
```python
import requests
def queue_sms_simulation_run(payload: dict, api_key: str) -> dict:
url = "https://api.getbluejay.ai/v1/queue-sms-simulation-run"
headers = {"X-API-Key": api_key}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
return response.json()
```
### Constraints
- Minimal changes — only add/change files needed for this integration.
- Match existing codebase patterns (naming, file structure, error handling).
- Include error handling for 422: Validation Error.
### Integration Checklist
Before writing code, verify:
1. Which module/service owns this API domain in the codebase?
2. What HTTP client and error-handling patterns does the project use?
3. Are there existing types/interfaces to extend?
Then implement the integration, export it, and confirm it compiles/passes lint.
agent_version_idDeprecated: prompt_id. Same uuid, still works. If both are sent and they differ, the request is 400.Body
Pydantic model for simulation run request
ID of the simulation to be run
Deprecated. Use agent_version_id. Same uuid, still works.
Agent version UUID associated with this run
Knowledge base UUID associated with this run
Digital human IDs to be used in the simulation
If true, all overlapping conversations with same pair of phone numbers will be ended
Optional per-run override for how many test_results to spawn per selected digital human. Falls back to experiments.settings.runs_per_digital_human, then to 1.
x > 0Response
Successful Response
ID of the created simulation run
IDs of the created simulation results (test results)
ID of the agent associated with the simulation run
Status of the response
List of conversations that were terminated due to overlapping phone numbers