Attempt
18 endpoints
POST /api/v5/artifacts/attempt/get
Attempt Get
Get attempt detail with the canonical shared attempt bundle.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
attempt_id: `string`
}Response:
{
actor_name?: `string` | `null`
attempt_exists?: `boolean` | `null`
access_denied?: `boolean` | `null`
attempt?: `AttemptData` | `null`
simulation?: `SimulationData` | `null`
timer?: `TimerData` | `null`
aggregated_results?: `AggregatedResults` | `null`
current_chat_index?: `integer` | `null`
expected_chat_count?: `integer` | `null`
is_active?: `boolean` | `null`
is_lobby?: `boolean` | `null`
show_results?: `boolean` | `null`
should_show_controls?: `boolean` | `null`
is_own_attempt?: `boolean` | `null`
current_chat_id?: `string` | `null`
has_messages?: `boolean`
available_continuation_options?: `AvailableContinuationOptions` | `null`
rubric_structure?: `RubricStructureData` | `null`
training_id?: `string` | `null`
chat_entry_id?: `string` | `null`
...
}POST /api/v5/artifacts/attempt/archive
Archive Attempts
Bulk archive or unarchive attempts (simulation or benchmark).
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
archived: `boolean`
attempt_ids?: `string`[] | `null`
start_date?: `string` | `null`
end_date?: `string` | `null`
cohort_ids?: `string`[] | `null`
department_ids?: `string`[] | `null`
simulation_ids?: `string`[] | `null`
scenario_ids?: `string`[] | `null`
profile_ids_filter?: `string`[] | `null`
infinite_mode?: `boolean` | `null`
}Response:
{
updated_count?: `integer`
profile_ids_to_invalidate?: `string`[] | `null`
}POST /api/v5/artifacts/attempt/refresh
Attempt Refresh
Refresh attempt materialized views and invalidate caches.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Response:
{
success: `boolean`
refreshed_views: `string`[]
invalidated_tags: `string`[]
}POST /api/v5/artifacts/attempt/docs
Get Attempt Docs Endpoint
Get composed documentation for the attempt analytics.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
entity_id?: `string` | `null`
}Response:
{
name: `string`
type: `string`
description: `string`
artifact?: `DocsResponse` | `null`
entries: `DocsResponse`[]
resources: `DocsResponse`[]
permissions: `OperationInfo`[]
api_operations: `OperationInfo`[]
page_metadata?: `DocsApiResponse` | `null`
}POST /api/v5/artifacts/attempt/export
Export Attempt
Export attempt data as a clean, denormalized ZIP.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
attempt_id: `string`
}Response:
{
upload_id: `string`
file_name: `string`
row_count: `integer`
}POST /api/v5/artifacts/attempt/start
Start Attempt
Create a new attempt using the canonical internal attempt orchestration.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
home_id?: `string` | `null`
practice_id?: `string` | `null`
infinite_mode?: `boolean`
}Response:
{
attempt_id: `string`
chat_entry_id?: `string` | `null`
attempt_chat_id?: `string` | `null`
}POST /api/v5/artifacts/attempt/next
Next Attempt
Proceed to the next scenario in an existing attempt.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
attempt_id: `string`
draft_id?: `string` | `null`
}Response:
{
attempt_id: `string`
chat_id: `string`
}POST /api/v5/artifacts/attempt/end
End Attempt
End a single chat within an attempt.
Browser client: sends grade=True, internal AI generates full grade. Agent: can optionally provide score, feedbacks, strengths, etc. to skip AI.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
attempt_id: `string`
chat_id: `string`
grade?: `boolean`
score?: `integer` | `null`
passed?: `boolean` | `null`
time_taken?: `integer` | `null`
feedbacks?: `AttemptGradeFeedbackEntry`[] | `null`
strengths?: `AttemptGradeStrengthEntry`[] | `null`
improvements?: `AttemptGradeImprovementEntry`[] | `null`
analyses?: `AttemptGradeAnalysisEntry`[] | `null`
highlights?: `AttemptGradeHighlightEntry`[] | `null`
replacements?: `AttemptGradeReplacementEntry`[] | `null`
}Response:
{
chat_id: `string`
is_attempt_finished?: `boolean` | `null`
grade_id?: `string` | `null`
score?: `integer` | `null`
passed?: `boolean` | `null`
}POST /api/v5/artifacts/attempt/end-all
End All Attempt
End all remaining chats in an attempt.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
attempt_id: `string`
}Response:
{
attempt_id: `string`
success: `boolean`
all_scenarios_complete?: `boolean`
message?: `string` | `null`
}POST /api/v5/artifacts/attempt/message
Attempt Message
Send a message in an attempt chat.
Browser client: sends message only, internal AI generates response + hints. Agent: can optionally provide assistant_content, hints, contents to skip AI.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
attempt_id: `string`
chat_id: `string`
message: `string`
parent_message_id?: `string` | `null`
assistant_content?: `string` | `null`
hints?: `HintEntry-Input`[] | `null`
contents?: `ContentEntry-Input`[] | `null`
}Response:
{
chat_id: `string`
user_message_id?: `string` | `null`
assistant_message_id?: `string` | `null`
assistant_content?: `string` | `null`
hints?: `object`[] | `null`
}POST /api/v5/artifacts/attempt/grade
Attempt Grade
Trigger grading for an attempt chat.
Browser client: sends chat_id only, internal AI generates full grade. Agent: can optionally provide score, feedbacks, strengths, etc. to skip AI.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
attempt_id: `string`
chat_id?: `string` | `null`
resource_types?: `string`[] | `null`
user_instructions?: `string`[] | `null`
score?: `integer` | `null`
passed?: `boolean` | `null`
time_taken?: `integer` | `null`
feedbacks?: `AttemptGradeFeedbackEntry`[] | `null`
strengths?: `AttemptGradeStrengthEntry`[] | `null`
improvements?: `AttemptGradeImprovementEntry`[] | `null`
analyses?: `AttemptGradeAnalysisEntry`[] | `null`
highlights?: `AttemptGradeHighlightEntry`[] | `null`
replacements?: `AttemptGradeReplacementEntry`[] | `null`
}Response:
{
chat_id: `string`
grade_id?: `string` | `null`
score?: `integer` | `null`
passed?: `boolean` | `null`
}POST /api/v5/artifacts/attempt/stop
Attempt Stop
Stop message generation for an attempt chat.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
chat_id: `string`
}Response:
{
chat_id: `string`
success: `boolean`
message?: `string` | `null`
}POST /api/v5/artifacts/attempt/response
Attempt Response
Submit a video question response.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
chat_id: `string`
question_id: `string`
option_ids: `string`[]
}Response:
{
success: `boolean`
message?: `string` | `null`
is_correct?: `boolean` | `null`
response_id?: `string` | `null`
}POST /api/v5/artifacts/attempt/use-previous
Attempt Use Previous
Copy grades from a previous attempt’s chats.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
attempt_id: `string`
previous_chat_map: `object`
}Response:
{
success: `boolean`
message?: `string` | `null`
}POST /api/v5/artifacts/attempt/audio/start
Attempt Audio Start
Start an audio session for an attempt chat.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
chat_id: `string`
}Response:
{
chat_id: `string`
run_id: `string`
group_id: `string`
attempt_id: `string`
}POST /api/v5/artifacts/attempt/audio/frame
Attempt Audio Frame
Push audio bytes from an uploaded file into the session queue.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
chat_id: `string`
upload_id: `string`
}Response:
{
accepted: `boolean`
}POST /api/v5/artifacts/attempt/audio/stop
Attempt Audio Stop
Stop an audio session for an attempt chat.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
chat_id: `string`
}Response:
{
chat_id: `string`
stopped?: `boolean`
}POST /api/v5/artifacts/attempt/search
Search Attempt
Search attempts — composable infra architecture.
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Api-Key | header | No | — |
authorization | header | No | — |
X-MCP | header | No | — |
Request body:
{
search?: `string` | `null`
simulation_ids?: `string`[] | `null`
department_ids?: `string`[] | `null`
practice?: `boolean` | `null`
is_archived?: `boolean` | `null`
infinite_mode?: `boolean` | `null`
start_date?: `string` | `null`
end_date?: `string` | `null`
simulation_search?: `string` | `null`
department_search?: `string` | `null`
page_size?: `integer`
page_offset?: `integer`
}Response:
{
actor_name?: `string` | `null`
attempts?: `SearchAttemptItem`[] | `null`
simulation_filter?: `ListFilterSection` | `null`
department_filter?: `ListFilterSection` | `null`
total_count?: `integer` | `null`
}