Skip to content
The API may change between versions while TTX-Zone is 0.x.

Transition MSEL

POST
/api/v1/ttx/{ttx_id}/msel/transitions

Moving to READY records who did it (no step-up: like validating an inject, it’s a reviewer’s sign-off, undone by going back to DRAFT).

Media typeapplication/json
MselTransitionRequest
object
to
required
MselStatus
string
Allowed values: draft in_review ready

Successful Response

Media typeapplication/json
MselRead
object
actors
required
Actors
Array<object>
ActorRead
object
channel
Any of:
DeliveryMethod
string
Allowed values: email phone chat ticket security_tool in_person briefing media document
code
required
Code
string
description
Description
string
""
id
required
Id
string format: uuid
name
required
Name
string
origin
ActorOrigin

Where a simulated actor comes from – the actor library’s levels. An exercise’s cast only holds copies; the origin says of what.

string
default: exercise
Allowed values: system organization exercise
origin_id
Any of:
string
origin_name
Any of:
string
played_by
required
Played By
string
type
required
ActorType
string
Allowed values: soc csirt authority media supplier customer threat_actor internal other
attack_techniques
required
Attack Techniques
Array<object>
AttackRefRead

With its names in the pinned release (English, as MITRE publishes them) – kept in snapshots, so a frozen MSEL reads on its own.

object
domain
required
Domain
string
Allowed values: enterprise ics
tactic_id
required
Tactic Id
string
/^TA\d{4}$/
tactic_name
required
Tactic Name
string
technique_id
required
Technique Id
string
/^T\d{4}(\.\d{3})?$/
technique_name
required
Technique Name
string
attack_version
required
Attack Version
string
duration_minutes
required
Any of:
integer
editable
required
Editable
boolean
exercise_code
required
Exercise Code
string
exercise_start
required
Any of:
string format: time
frozen_versions
Frozen Versions
Array<object>
FrozenVersionRead

A version of the MSEL frozen when it became READY, and the sessions played from it.

object
ready_at
required
Ready At
string format: date-time
ready_by
required
Ready By
string
sessions
required
Sessions
integer
version
required
Version
integer
id
required
Id
string format: uuid
incident_date
Any of:
string format: date
incident_start
Any of:
string format: time
injects
required
Injects
Array<object>
InjectRead
object
artifact
Any of:
InjectArtifact

An inject’s content rendered as a simulated artifact. The body is the inject’s own content; these are the template’s other fields, whose meaning follows kind (email: from, address, to, subject, date; press release: outlet, dateline, headline, date; social post: author, handle, date; chat message: sender, channel, date). All plain text: the Playground draws them, nothing is ever rendered as markup.

object
kind
required
ArtifactKind

How the Playground renders an inject’s content as a simulated artifact (a template drawn by the app, never uploaded markup).

string
Allowed values: email press_release social_post chat_message
location
Location
string
"" <= 255 characters
recipient
Recipient
string
"" <= 255 characters
sender
Sender
string
"" <= 255 characters
sender_address
Sender Address
string
"" <= 255 characters
subject
Subject
string
"" <= 255 characters
timestamp
Timestamp
string
"" <= 64 characters
attachment_notes
required
Attachment Notes
Array<string>
attack_attribution
Any of:
AttackAttribution

Whose activity an inject’s ATT&CK techniques are: a threat actor of the scenario’s, or noise – unrelated activity (other attackers, commodity malware, coincidences, false positives) that tests the players’ triage. None (the column null): no ATT&CK at all.

string
Allowed values: threat_actor noise
attack_techniques
required
Attack Techniques
Array<object>
AttackRefRead

With its names in the pinned release (English, as MITRE publishes them) – kept in snapshots, so a frozen MSEL reads on its own.

object
domain
required
Domain
string
Allowed values: enterprise ics
tactic_id
required
Tactic Id
string
/^TA\d{4}$/
tactic_name
required
Tactic Name
string
technique_id
required
Technique Id
string
/^T\d{4}(\.\d{3})?$/
technique_name
required
Technique Name
string
branch_action_id
Any of:
string format: uuid
branch_from_id
Any of:
string format: uuid
code
required
Code
string
content
required
Content
string
contingent_purpose
required
Contingent Purpose
string
delivery_method
required
DeliveryMethod
string
Allowed values: email phone chat ticket security_tool in_person briefing media document
expected_actions
required
Expected Actions
Array<object>
ExpectedActionRead
object
code
required
Code
string
description
required
Description
string
expected_within_minutes
required
Any of:
integer
id
required
Id
string format: uuid
objective_ids
Any of:
Array<string>
responsible_role
required
Responsible Role
string
facilitator_notes
required
Facilitator Notes
string
files
Files
Array<object>
default:
InjectFileRead
object
description
required
Description
string
id
required
Id
string format: uuid
name
required
Name
string
sha256
required
Sha256
string
size_bytes
required
Size Bytes
integer
fires_at_minute
Any of:
integer
format
InjectFormat

What an inject is, and so what it asks of the table: an inject that evaluates objectives (INJ), a discussion slide – a debrief or reflection prompt, no objective, not in the EEG nor the coverage (DSC) –, or a poll the Players vote on, outside the evaluation too (POL).

string
default: inject
Allowed values: inject discussion poll
id
required
Id
string format: uuid
images
Images
Array<object>
default:
InjectImageRead
object
caption
required
Caption
string
height
required
Height
integer
id
required
Id
string format: uuid
width
required
Width
integer
kind
required
InjectKind
string
Allowed values: mandatory contingent
objective_ids
required
Objective Ids
Array<string>
offset_minutes
required
Any of:
integer
origin
Any of:
ActorOrigin

Where a simulated actor comes from – the actor library’s levels. An exercise’s cast only holds copies; the origin says of what.

string
Allowed values: system organization exercise
origin_id
Any of:
string
origin_name
Any of:
string
phase_id
required
Any of:
string format: uuid
poll_impacts
Poll Impacts
Array<object>
default:
object
key
additional properties
integer
poll_options
Poll Options
Array<string>
default:
poll_outcomes
Poll Outcomes
Array<string>
default:
poll_question
Poll Question
string
""
recipients
required
Recipients
Array<string>
rejoin_inject_id
Any of:
string format: uuid
review_status
required
InjectReviewStatus
string
Allowed values: draft validated
room_ids
Room Ids
Array<string>
default:
simulated_actor_id
required
Any of:
string format: uuid
threat_actor_id
Any of:
string format: uuid
title
required
Title
string
trigger_condition
required
Trigger Condition
string
validated_by
required
Validated By
string
validated_by_id
Any of:
string format: uuid
meters
Meters
Array<object>
MeterRead
object
key
required
Key
string
name
required
Name
string
needs
required
NeedsContext

What the MSEL needs from the needs analysis to be edited: the objectives to link, the participants recipients must be (M09: the participating areas and, optional, the third parties), the duration limit and the TLP it inherits. Nothing else of the form.

object
max_duration_hours
required
Any of:
integer
objectives
required
Objectives
Array<object>
NeedsObjectiveSummary
object
capability
required
Capability

Capabilities an exercise can validate – TTX-Zone’s own taxonomy.

string
Allowed values: detection_triage_escalation incident_classification crisis_decision_making regulatory_notification internal_external_comms cross_unit_coordination third_party_supply_chain continuity_recovery legal_forensics
code
required
Code
string
id
required
Id
string format: uuid
statement
required
Statement
string
title
Title
string
""
participating_areas
required
Participating Areas
Array<string>
status
required
NeedsFormStatus
string
Allowed values: draft ready_for_approval approved
third_parties
Third Parties
Array<string>
default:
tlp
required
Tlp

FIRST Traffic Light Protocol 2.0 labels.

string
Allowed values: clear green amber amber_strict red
version
required
Version
integer
needs_form_version
required
Needs Form Version
integer
phases
required
Phases
Array<object>
PhaseRead
object
code
required
Code
string
due_objective_ids
Due Objective Ids
Array<string>
default:
end_offset
required
End Offset
integer
headline
Headline
string
""
id
required
Id
string format: uuid
incident_jump_minutes
Incident Jump Minutes
integer
0
key_questions
required
Key Questions
Array<string>
name
required
Name
string
objective_ids
required
Objective Ids
Array<string>
situation_update
required
Situation Update
string
start_offset
required
Start Offset
integer
ready_at
Any of:
string format: date-time
ready_by
Ready By
string
""
ready_by_id
Any of:
string format: uuid
renumberable
Renumberable
Array<string>
revision
required
Revision
integer
rooms
Rooms
Array<object>
MselRoomRead

A room of the exercise, as the MSEL aims injects at it.

object
code
required
Code
string
id
required
Id
string format: uuid
name
required
Name
string
status
required
MselStatus
string
Allowed values: draft in_review ready
summary
required
Summary
string
threat_actors
Threat Actors
Array<object>
ThreatActorRead
object
aliases
required
Aliases
Array<string>
code
required
Code
string
description
required
Description
string
id
required
Id
string format: uuid
mitre_group_id
required
Any of:
string
modified_at
Any of:
string format: date-time
name
required
Name
string
origin
required
ActorOrigin

Where a simulated actor comes from – the actor library’s levels. An exercise’s cast only holds copies; the origin says of what.

string
Allowed values: system organization exercise
origin_id
required
Any of:
string
origin_name
required
Any of:
string
techniques
required
Techniques
Array<object>
ThreatActorTechniqueRead
object
domain
required
Domain
string
Allowed values: enterprise ics
tactic_ids
required
Tactic Ids
Array<string>
technique_id
required
Technique Id
string
/^T\d{4}(\.\d{3})?$/
technique_name
required
Technique Name
string
time_compression
required
Time Compression
integer
title
required
Title
string
ttx_id
required
Ttx Id
string format: uuid
updated_at
required
Updated At
string format: date-time
uses_rooms
Uses Rooms
boolean
validation
required
ValidationReport

ready blocks DRAFT -> READY_FOR_APPROVAL, approved additionally blocks READY_FOR_APPROVAL -> APPROVED; warnings never block.

object
approved
required
Approved
Array<object>
ValidationIssue

One rule a form breaks. section is the form section (0-9) to send the user to; field the field within it; item_id the row (need, objective) or value (capability, approver kind) concerned, if any.

object
code
required
Code
string
field
Any of:
string
item_id
Any of:
string
section
required
Section
integer
ready
required
Ready
Array<object>
ValidationIssue

One rule a form breaks. section is the form section (0-9) to send the user to; field the field within it; item_id the row (need, objective) or value (capability, approver kind) concerned, if any.

object
code
required
Code
string
field
Any of:
string
item_id
Any of:
string
section
required
Section
integer
warnings
required
Warnings
Array<object>
ValidationIssue

One rule a form breaks. section is the form section (0-9) to send the user to; field the field within it; item_id the row (need, objective) or value (capability, approver kind) concerned, if any.

object
code
required
Code
string
field
Any of:
string
item_id
Any of:
string
section
required
Section
integer
version
required
Version
integer

Example

{
"actors": [
{
"channel": "email",
"description": "",
"origin": "system",
"type": "soc"
}
],
"attack_techniques": [
{
"domain": "enterprise"
}
],
"injects": [
{
"artifact": {
"kind": "email",
"location": "",
"recipient": "",
"sender": "",
"sender_address": "",
"subject": "",
"timestamp": ""
},
"attack_attribution": "threat_actor",
"attack_techniques": [
{
"domain": "enterprise"
}
],
"delivery_method": "email",
"files": [],
"format": "inject",
"images": [],
"kind": "mandatory",
"origin": "system",
"poll_impacts": [],
"poll_options": [],
"poll_outcomes": [],
"poll_question": "",
"review_status": "draft",
"room_ids": []
}
],
"needs": {
"objectives": [
{
"capability": "detection_triage_escalation",
"title": ""
}
],
"status": "draft",
"third_parties": [],
"tlp": "clear"
},
"phases": [
{
"due_objective_ids": [],
"headline": "",
"incident_jump_minutes": 0
}
],
"ready_by": "",
"status": "draft",
"threat_actors": [
{
"origin": "system",
"techniques": [
{
"domain": "enterprise"
}
]
}
],
"uses_rooms": false
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
ctx
Context
object
input
Input
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string

Example generated

{
"detail": [
{
"ctx": {},
"input": "example",
"loc": [
"example"
],
"msg": "example",
"type": "example"
}
]
}