Needs keys Sends one message in a conversation. Conductor picks an action, runs it, and returns the reply and the result. Conductor checks that you have credits for the tier before it runs and charges them after.
With an OpenAI key set, OpenAI chooses the action and writes the reply (gpt-5.6-terra-mini for fast, gpt-5.6-terra otherwise).
Without an OpenAI key, or if the model call fails, the action comes from keywords in the message: "walk me through" or "how do I" gives walkthrough; "write tests" gives write_tests; "run tests" gives run_tests; "dashboard", "chart" or "graph" gives build_dashboard; "build", "create", "make", "set up" or "new" followed by "agent", "receptionist", "assistant" or "bot" gives build_agent; "investigate", "why" or "what happened", or a question with calls attached, gives investigate_calls; anything else gives chat. Tests and dashboards come from built-in templates, and the reply is a template sentence about the result.
Request#
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Conversation ID, for example conductor_1d3f5a7c9e2b4d6f8a0c2e4b. |
Body:
| Field | Type | Required | Description |
|---|---|---|---|
content |
string | Yes | The message, 1 to 8000 characters. |
tier |
string | No | fast (0.5 credits), default (1 credit, the default) or advanced (3 credits). |
action |
string | No | Force an action instead of letting Conductor choose. Default auto. |
attachments |
object[] | No | Up to 10 more attachments, added to the conversation for this and later messages. The conversation can hold 10 in total. See Create Conductor session for the shapes. |
Actions:
action |
What it does |
|---|---|
chat |
Answers from the attached context. |
build_agent |
Builds an agent from the conversation. Everything you have said since the build started is the brief. If the brief is too thin (under about 12 words besides "build a new agent"), Conductor asks which business it is for, what the agent should handle and when to transfer, and the next message continues the build. When the brief is enough it creates a single prompt agent with the Premium voice and an end_call tool, as Generate agent does. |
investigate_calls |
Reviews the attached calls, or the most recent ended calls (10 by default, up to 50; only failed or negative ones if you ask about failures), and lists issues such as unsuccessful calls, negative sentiment, tool failures, slow responses and errors. |
write_tests |
Writes simulation test cases for the first attached agent and runs them as a batch test if you ask it to run them. Needs an attached agent. |
run_tests |
Runs up to 20 existing test cases of the first attached agent as a batch test. |
build_dashboard |
Creates an analytics dashboard with up to 12 charts. |
walkthrough |
Returns dashboard steps to follow, as in Get Conductor walkthrough. |
Example request#
curl -X POST https://api.tried.com.au/conductor/sessions/conductor_1d3f5a7c9e2b4d6f8a0c2e4b/messages \
-H "Authorization: Bearer $TRIED_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Build a dashboard of call volume and latency by agent",
"tier": "default"
}'const res = await fetch("https://api.tried.com.au/conductor/sessions/conductor_1d3f5a7c9e2b4d6f8a0c2e4b/messages", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.TRIED_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"content": "Build a dashboard of call volume and latency by agent",
"tier": "default"
}),
});
const turn = await res.json();import os, requests
res = requests.post(
"https://api.tried.com.au/conductor/sessions/conductor_1d3f5a7c9e2b4d6f8a0c2e4b/messages",
headers={"Authorization": f"Bearer {os.environ['TRIED_API_KEY']}"},
json={
"content": "Build a dashboard of call volume and latency by agent",
"tier": "default",
},
)
turn = res.json()Response#
200 OK
{
"reply": "I built the dashboard \"call volume and latency by agent\" with 3 charts. Open Analytics to see it.",
"action": "build_dashboard",
"result": {
"type": "dashboard",
"dashboard_id": "dash_6e1a9c3f5b7d2e4a8c0f1b3d",
"name": "call volume and latency by agent",
"charts": 3
},
"mode": "mock",
"credits": {
"charged": 1,
"source": "free_workspace",
"cost": 0
},
"credit_status": {
"tiers": {
"fast": 0.5,
"default": 1,
"advanced": 3
},
"today": {
"user_used": 0,
"user_free_remaining": 30,
"workspace_used": 38,
"workspace_free_remaining": 162,
"free_per_user": 30,
"free_per_workspace": 200
},
"month": {
"paid_credits": 0,
"paid_cost": 0,
"payg_enabled": false,
"monthly_limit": 0,
"price_per_credit": 0.3
}
}
}| Field | Type | Description |
|---|---|---|
reply |
string | Conductor's answer. |
action |
string | The action that ran. |
result |
object or null | Action output. type is agent (with agent_id and agent_name), investigation (with calls and patterns), tests (with test_case_definition_ids, test_cases and batch_test_id), test_run (with batch_test_id and test_cases), dashboard (with dashboard_id, name and charts) or walkthrough (with title and steps). null for chat, and for build_agent while Conductor is still asking questions. |
mode |
string | llm when OpenAI planned the turn, mock otherwise. |
credits |
object | What this message cost: charged credits, source (free_user, free_workspace or paid) and cost in dollars. |
credit_status |
object | Balance after the message, as in Get Conductor credits. |
The user message and the reply are appended to the conversation. The first message also becomes the conversation title (first 60 characters).
Errors#
| Status | When |
|---|---|
400 |
Body validation failed, more than 10 attachments in total (At most 10 attachments per conversation), or build_dashboard with 10 dashboards already (A workspace can have at most 10 dashboards. Delete one first.). |
401 |
Missing or invalid API key. |
402 |
No credits left. The body adds error_code: conductor_credits_exhausted when free credits are used up and pay-as-you-go is off, or conductor_limit_reached when the paid monthly limit is reached. |
403 |
The key's IP allowlist or scopes reject the request. This route needs the admin scope. Dashboard users with the member role get The member role is read-only. |
404 |
Conductor session <id> not found, or an attachment does not exist. |
429 |
Rate limit exceeded. See Rate limits. |
See Errors for the body format.
Retell compatibility#
Retell's public API reference has no Conductor endpoints, so this route has no Retell SDK equivalent.