POST
/
api
/
v1
/
episodes
/
{id}
/
turns
cURL
curl --request POST \
  --url https://labs.tacitintelligence.co/api/v1/episodes/{id}/turns \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "id": "<string>",
  "messages": [
    {
      "content": "<string>",
      "tool_calls": [
        {
          "name": "<string>",
          "input": {}
        }
      ]
    }
  ],
  "reward_config": {
    "quality_weights": {
      "success_metrics": 0.5,
      "failure_metrics": 0.5,
      "best_practices": 0.5,
      "rubrics": 0.5,
      "discovery": 0.5,
      "output_similarity": 0.5,
      "decision_match": 0.5
    },
    "skip_safety_gate": true
  }
}
'
{
  "turn": 123,
  "observation": {
    "role": "<string>",
    "content": "<string>"
  },
  "reward": 0.5,
  "episode_complete": true,
  "scores": {},
  "score_breakdown": {}
}

Authorizations

Authorization
string
header
required

API key obtained from Labs Portal

Path Parameters

id
string
required

The episode ID (from path parameter)

Body

application/json
id
string
required

The episode ID (from path parameter)

messages
object[]
required

New messages in this turn (user prompt and model response)

reward_config
object

Per-turn reward configuration. Controls which scorers run and their weights. Omitted quality weight keys default to 0, so only specified scorers execute. Saves tokens during curriculum learning.

Response

Success

turn
number
required

Current turn number (1-indexed)

observation
object
required

The observation for the next turn

reward
number
required

Reward score (0 to 1) based on the full conversation so far

Required range: 0 <= x <= 1
episode_complete
boolean
required

Whether the episode has ended

scores
object

Optional breakdown of individual score dimensions. When omitted, only the combined reward is provided.

score_breakdown
object

Textual reasoning per score dimension. Only included for subscriptions with full score access.

terminal_reason
enum<string>

Reason for episode termination (only present when episode_complete is true)

Available options:
client_terminated,
max_turns_reached,
error,
completed