Server definition
- Hash
- sha256:88515804760e6a80f141b8ffa75ef374f225304a9756761c7b46b86aa3cfbb38
- What it is
- What a remote MCP server returned when asked what it offers: 14 tools
The blob, as servednamed by its sha256
{
"instructions": "Praetorium is a free and open source Warhammer 40,000 army builder and battle tracker. Public reference tools work without signing in. Account tools require OAuth sign-in; read and write access have separate scopes. Use list_reference to discover factions, rule documents, mission packs, kinds, and the active snapshot. For roster planning, call list_units once with the faction, battle size, and optional detachment to get unit-size costs, composition, attachments, limits, and detachment rules instead of reading every datasheet. Use search_reference to locate source text, then get_reference or get_reference_record before answering. Use faction, pack, and document filters when names or rule numbers are ambiguous. Cite the canonical URL and preserve the result attribution. Say when the source does not provide an answer. Missing, conflicting, or unavailable source facts remain explicit. They must not be repaired or guessed from model memory.",
"tools": [
{
"description": "Creates a battle with named player seats, using the same rules as the site. Requires mcp:write.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"allyId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"casual": {
"default": false,
"type": "boolean"
},
"limit": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"missionPackId": {
"anyOf": [
{
"maxLength": 64,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"opponentId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"opponentIds": {
"items": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"maxItems": 2,
"minItems": 1,
"type": "array"
}
},
"type": "object"
},
"name": "create_battle",
"outputSchema": null
},
{
"description": "Returns the current seated view of a battle for the signed-in player. Requires mcp:read.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"token": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"token"
],
"type": "object"
},
"name": "get_my_battle",
"outputSchema": null
},
{
"description": "Returns the saved choices for one roster owned by the signed-in player. Requires mcp:read.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_my_roster",
"outputSchema": null
},
{
"description": "Reads the complete bounded document returned by search_reference, with its source location, revisions, and attribution.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "The stable result id returned by search_reference.",
"maxLength": 400,
"minLength": 1,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_reference",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"attribution": {
"items": {
"type": "string"
},
"type": "array"
},
"faction": {
"type": [
"string",
"null"
]
},
"id": {
"type": "string"
},
"kind": {
"enum": [
"datasheet",
"deployment",
"detachment",
"mission",
"rule",
"terrain"
],
"type": "string"
},
"revisions": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"sections": {
"items": {
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"title",
"text",
"url"
],
"type": "object"
},
"type": "array"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"kind",
"title",
"faction",
"url",
"sections",
"revisions",
"attribution"
],
"type": "object"
}
},
{
"description": "Returns the source-faithful structured record behind a search result, including mission cards, deployments, terrain geometry, detachments, and datasheets.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "The stable id returned by search_reference or list_reference.",
"maxLength": 400,
"minLength": 1,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_reference_record",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"data": {},
"document": {
"additionalProperties": false,
"properties": {
"attribution": {
"items": {
"type": "string"
},
"type": "array"
},
"faction": {
"type": [
"string",
"null"
]
},
"id": {
"type": "string"
},
"kind": {
"enum": [
"datasheet",
"deployment",
"detachment",
"mission",
"rule",
"terrain"
],
"type": "string"
},
"revisions": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"sections": {
"items": {
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"title",
"text",
"url"
],
"type": "object"
},
"type": "array"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"kind",
"title",
"faction",
"url",
"sections",
"revisions",
"attribution"
],
"type": "object"
}
},
"required": [
"document",
"data"
],
"type": "object"
}
},
{
"description": "Lists the factions that can be used to narrow reference searches.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_factions",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"factions": {
"items": {
"additionalProperties": false,
"properties": {
"datasheets": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"detachments": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
}
},
"required": [
"id",
"slug",
"name",
"datasheets",
"detachments"
],
"type": "object"
},
"type": "array"
},
"revisions": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"required": [
"factions",
"revisions"
],
"type": "object"
}
},
{
"description": "Lists up to 25 battles with a cursor for the next page. Requires mcp:read.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"before": {
"anyOf": [
{
"properties": {
"at": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"id": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"at",
"id"
],
"type": "object"
},
{
"type": "null"
}
],
"default": null
}
},
"type": "object"
},
"name": "list_my_battles",
"outputSchema": null
},
{
"description": "Lists the rosters saved to the signed-in Praetorium account. Requires mcp:read.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_my_rosters",
"outputSchema": null
},
{
"description": "Discovers available factions, mission packs, rule documents, reference kinds, and active source revisions.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_reference",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"corpusRevision": {
"type": "string"
},
"factions": {
"items": {
"additionalProperties": false,
"properties": {
"datasheets": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"detachments": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
}
},
"required": [
"id",
"slug",
"name",
"datasheets",
"detachments"
],
"type": "object"
},
"type": "array"
},
"kinds": {
"additionalProperties": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"missionPacks": {
"items": {
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"title",
"url"
],
"type": "object"
},
"type": "array"
},
"revisions": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"ruleDocuments": {
"items": {
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
},
"sections": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"slug",
"title",
"sections",
"url"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"corpusRevision",
"revisions",
"kinds",
"factions",
"missionPacks",
"ruleDocuments"
],
"type": "object"
}
},
{
"description": "Returns every pickable unit in one bounded response with unit-size costs, composition, attachment relationships, roster limits, roles, keywords, and links. Include a detachment to receive its complete rules, enhancements, upgrades, and stratagems without opening every unit page.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"battleSize": {
"description": "Battle size in points for size-dependent limits.",
"maximum": 10000,
"minimum": 1,
"type": "integer"
},
"detachment": {
"description": "Detachment id, slug, or display name.",
"maxLength": 160,
"minLength": 1,
"type": "string"
},
"faction": {
"description": "Faction id, URL slug, or display name from list_reference.",
"maxLength": 160,
"minLength": 1,
"type": "string"
}
},
"required": [
"faction"
],
"type": "object"
},
"name": "list_units",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"battleSize": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
]
},
"detachment": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"faction": {
"additionalProperties": false,
"properties": {
"datasheets": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"detachments": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
}
},
"required": [
"id",
"slug",
"name",
"datasheets",
"detachments"
],
"type": "object"
},
"revisions": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"units": {
"items": {
"additionalProperties": false,
"properties": {
"allied": {
"type": "boolean"
},
"alliedFaction": {
"type": [
"string",
"null"
]
},
"canBeLedBy": {
"items": {
"type": "string"
},
"type": "array"
},
"canBeSupportedBy": {
"items": {
"type": "string"
},
"type": "array"
},
"canLead": {
"items": {
"type": "string"
},
"type": "array"
},
"canSupport": {
"items": {
"type": "string"
},
"type": "array"
},
"composition": {
"items": {
"type": "string"
},
"type": "array"
},
"costs": {
"items": {
"additionalProperties": false,
"properties": {
"cost": {
"type": "string"
},
"detachment": {
"type": [
"string",
"null"
]
},
"faction": {
"type": [
"string",
"null"
]
},
"keyword": {
"type": [
"string",
"null"
]
},
"models": {
"type": "string"
}
},
"required": [
"models",
"cost",
"keyword",
"faction",
"detachment"
],
"type": "object"
},
"type": "array"
},
"group": {
"type": "string"
},
"id": {
"type": "string"
},
"keywords": {
"items": {
"type": "string"
},
"type": "array"
},
"limit": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"points": {
"type": [
"number",
"null"
]
},
"referenceId": {
"type": [
"string",
"null"
]
},
"slug": {
"type": "string"
},
"url": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"slug",
"name",
"group",
"allied",
"alliedFaction",
"points",
"limit",
"keywords",
"composition",
"costs",
"canLead",
"canSupport",
"canBeLedBy",
"canBeSupportedBy",
"url",
"referenceId"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"faction",
"battleSize",
"detachment",
"units",
"revisions"
],
"type": "object"
}
},
{
"description": "Saves a complete roster. Pass its id to edit an owned roster; omit id to create one. Requires mcp:write.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"borrowedDetachmentId": {
"anyOf": [
{
"maxLength": 128,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"catalogueId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"detachmentIds": {
"items": {
"maxLength": 128,
"minLength": 1,
"type": "string"
},
"maxItems": 3,
"type": "array"
},
"disposition": {
"anyOf": [
{
"maxLength": 64,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"limit": {
"maximum": 10000,
"minimum": 0,
"type": "integer"
},
"name": {
"maxLength": 80,
"type": "string"
},
"optionalRules": {
"items": {
"enum": [
"kotc-borrowed-disposition"
],
"type": "string"
},
"maxItems": 1,
"type": "array"
},
"picks": {
"items": {
"properties": {
"attachedTo": {
"maximum": 99,
"minimum": 0,
"type": "integer"
},
"catalogueId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"choices": {
"additionalProperties": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"propertyNames": {
"maxLength": 400,
"type": "string"
},
"type": "object"
},
"entryId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"models": {
"maximum": 60,
"minimum": 1,
"type": "integer"
},
"spreads": {
"additionalProperties": {
"additionalProperties": {
"maximum": 60,
"minimum": 0,
"type": "integer"
},
"propertyNames": {
"maxLength": 64,
"type": "string"
},
"type": "object"
},
"propertyNames": {
"maxLength": 400,
"type": "string"
},
"type": "object"
},
"toggles": {
"additionalProperties": {
"maximum": 1,
"minimum": 0,
"type": "integer"
},
"propertyNames": {
"maxLength": 400,
"type": "string"
},
"type": "object"
}
},
"required": [
"entryId"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"prep": {
"anyOf": [
{
"properties": {
"reminders": {
"default": [],
"items": {
"properties": {
"ability": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"description": {
"maxLength": 10000,
"type": "string"
},
"key": {
"maxLength": 240,
"minLength": 1,
"type": "string"
},
"timings": {
"items": {
"oneOf": [
{
"properties": {
"moment": {
"enum": [
"phase-start",
"phase-end"
],
"type": "string"
},
"phase": {
"enum": [
"command",
"movement",
"shooting",
"charge",
"fight"
],
"type": "string"
},
"turn": {
"enum": [
"your-turn",
"opponent-turn",
"either"
],
"type": "string"
}
},
"required": [
"moment",
"phase",
"turn"
],
"type": "object"
},
{
"properties": {
"moment": {
"enum": [
"turn-start",
"turn-end"
],
"type": "string"
},
"phase": {
"type": "null"
},
"turn": {
"enum": [
"your-turn",
"opponent-turn",
"either"
],
"type": "string"
}
},
"required": [
"moment",
"phase",
"turn"
],
"type": "object"
}
]
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"unit": {
"properties": {
"index": {
"maximum": 99,
"minimum": 0,
"type": "integer"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"index",
"name"
],
"type": "object"
}
},
"required": [
"key",
"ability",
"description",
"timings"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"remindersEnabled": {
"default": true,
"type": "boolean"
},
"secondaries": {
"items": {
"properties": {
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
},
"maxItems": 6,
"type": "array"
},
"stratagems": {
"items": {
"properties": {
"cp": {
"maximum": 6,
"minimum": 0,
"type": "integer"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"limit": {
"enum": [
"phase",
"turn",
"battle-round",
"battle",
"unlimited"
],
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"phases": {
"items": {
"enum": [
"command",
"movement",
"shooting",
"charge",
"fight",
"end"
],
"type": "string"
},
"maxItems": 6,
"type": "array"
},
"turn": {
"enum": [
"your-turn",
"opponent-turn",
"either"
],
"type": "string"
}
},
"required": [
"key",
"name",
"cp",
"limit"
],
"type": "object"
},
"maxItems": 48,
"type": "array"
}
},
"required": [
"stratagems",
"secondaries"
],
"type": "object"
},
{
"type": "null"
}
]
},
"source": {
"default": "editable",
"enum": [
"legacy",
"editable",
"praetorium",
"battlebase",
"newrecruit",
"roster-file"
],
"type": "string"
},
"visibility": {
"default": "private",
"enum": [
"private",
"unlisted",
"public"
],
"type": "string"
},
"waivedRules": {
"items": {
"enum": [
"points-limit",
"detachments",
"detachment-points",
"kotc-infantry",
"kotc-warlord",
"kotc-epic-heroes",
"kotc-toughness",
"kotc-datasheet-copies"
],
"type": "string"
},
"maxItems": 8,
"type": "array"
}
},
"required": [
"name",
"catalogueId",
"detachmentIds",
"disposition",
"limit",
"picks",
"prep"
],
"type": "object"
},
"name": "save_roster",
"outputSchema": null
},
{
"description": "Searches the verified mission, rules, detachment, and datasheet text used by Praetorium. Returns bounded excerpts with canonical URLs, source revisions, and attribution.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cursor": {
"type": "string"
},
"document": {
"maxLength": 160,
"minLength": 1,
"type": "string"
},
"faction": {
"maxLength": 160,
"minLength": 1,
"type": "string"
},
"kinds": {
"items": {
"enum": [
"datasheet",
"deployment",
"detachment",
"mission",
"rule",
"terrain"
],
"type": "string"
},
"maxItems": 6,
"type": "array"
},
"limit": {
"default": 10,
"maximum": 25,
"minimum": 1,
"type": "integer"
},
"pack": {
"maxLength": 160,
"minLength": 1,
"type": "string"
},
"query": {
"description": "Words, a printed rule number, an ability, a weapon, or a rules phrase.",
"maxLength": 120,
"minLength": 2,
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_reference",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"nextCursor": {
"type": [
"string",
"null"
]
},
"query": {
"type": "string"
},
"results": {
"items": {
"additionalProperties": false,
"properties": {
"attribution": {
"items": {
"type": "string"
},
"type": "array"
},
"excerpt": {
"type": "string"
},
"faction": {
"type": [
"string",
"null"
]
},
"id": {
"type": "string"
},
"kind": {
"enum": [
"datasheet",
"deployment",
"detachment",
"mission",
"rule",
"terrain"
],
"type": "string"
},
"revisions": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"section": {
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"title",
"url"
],
"type": "object"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"kind",
"title",
"faction",
"url",
"section",
"excerpt",
"revisions",
"attribution"
],
"type": "object"
},
"type": "array"
},
"revisions": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"required": [
"query",
"results",
"revisions",
"nextCursor"
],
"type": "object"
}
},
{
"description": "Changes the visibility of an owned roster. Requires mcp:write.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"visibility": {
"enum": [
"private",
"unlisted",
"public"
],
"type": "string"
}
},
"required": [
"id",
"visibility"
],
"type": "object"
},
"name": "set_roster_visibility",
"outputSchema": null
},
{
"description": "Appends a legal battle command only when expectedSeq matches the current log. Requires mcp:write.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"command": {
"anyOf": [
{
"oneOf": [
{
"properties": {
"clockLimitMinutes": {
"anyOf": [
{
"maximum": 300,
"minimum": 5,
"type": "integer"
},
{
"type": "null"
}
]
},
"kind": {
"const": "configure-battle",
"type": "string"
},
"limit": {
"maximum": 10000,
"minimum": 0,
"type": "integer"
},
"missionPackId": {
"anyOf": [
{
"maxLength": 64,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
]
},
"playerCount": {
"anyOf": [
{
"const": 2,
"type": "number"
},
{
"const": 3,
"type": "number"
},
{
"const": 4,
"type": "number"
}
]
},
"teamBattle": {
"type": "boolean"
},
"terrainLayoutId": {
"anyOf": [
{
"maxLength": 64,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
]
},
"twistId": {
"anyOf": [
{
"maxLength": 64,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"kind",
"limit",
"missionPackId",
"terrainLayoutId",
"twistId",
"clockLimitMinutes"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "reset-setup",
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "detach-roster",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"eventToken": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"kind": {
"const": "lock-league-rosters",
"type": "string"
},
"leagueToken": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"leagueToken"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "set-setup-step",
"type": "string"
},
"step": {
"maximum": 9,
"minimum": 0,
"type": "integer"
}
},
"required": [
"kind",
"step"
],
"type": "object"
},
{
"properties": {
"attackerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"kind": {
"const": "set-attacker",
"type": "string"
}
},
"required": [
"kind",
"attackerId"
],
"type": "object"
},
{
"properties": {
"firstPlayerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"kind": {
"const": "set-first-turn",
"type": "string"
}
},
"required": [
"kind",
"firstPlayerId"
],
"type": "object"
},
{
"properties": {
"disposition": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"kind": {
"const": "set-side-disposition",
"type": "string"
},
"side": {
"maximum": 1,
"minimum": 0,
"type": "integer"
}
},
"required": [
"kind",
"side",
"disposition"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "attach-roster",
"type": "string"
},
"painted": {
"type": "boolean"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"prep": {
"anyOf": [
{
"properties": {
"primary": {
"anyOf": [
{
"properties": {
"awards": {
"items": {
"properties": {
"criteria": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
]
},
"cumulative": {
"type": "boolean"
},
"group": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"mode": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
]
},
"per": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"properties": {
"phase": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"playerTurn": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"roundMax": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"roundMin": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"timing": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"timing",
"phase",
"playerTurn",
"roundMin",
"roundMax"
],
"type": "object"
},
"vp": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"vp",
"per",
"mode",
"max",
"group",
"cumulative",
"criteria",
"trigger"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
},
{
"type": "null"
}
]
},
"secondaries": {
"items": {
"properties": {
"awards": {
"items": {
"properties": {
"criteria": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
]
},
"cumulative": {
"type": "boolean"
},
"group": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"mode": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
]
},
"per": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"properties": {
"phase": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"playerTurn": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"roundMax": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"roundMin": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"timing": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"timing",
"phase",
"playerTurn",
"roundMin",
"roundMax"
],
"type": "object"
},
"vp": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"vp",
"per",
"mode",
"max",
"group",
"cumulative",
"criteria",
"trigger"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
},
"maxItems": 6,
"type": "array"
},
"secondaryDeck": {
"items": {
"properties": {
"awards": {
"items": {
"properties": {
"criteria": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
]
},
"cumulative": {
"type": "boolean"
},
"group": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"mode": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
]
},
"per": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"properties": {
"phase": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"playerTurn": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"roundMax": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"roundMin": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"timing": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"timing",
"phase",
"playerTurn",
"roundMin",
"roundMax"
],
"type": "object"
},
"vp": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"vp",
"per",
"mode",
"max",
"group",
"cumulative",
"criteria",
"trigger"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
},
"maxItems": 60,
"type": "array"
},
"secondaryMode": {
"enum": [
"fixed",
"tactical"
],
"type": "string"
},
"stratagems": {
"items": {
"properties": {
"cp": {
"maximum": 6,
"minimum": 0,
"type": "integer"
},
"detachment": {
"maxLength": 249,
"minLength": 1,
"type": "string"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"limit": {
"enum": [
"phase",
"turn",
"battle-round",
"battle",
"unlimited"
],
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"phases": {
"items": {
"enum": [
"command",
"movement",
"shooting",
"charge",
"fight",
"end"
],
"type": "string"
},
"maxItems": 6,
"type": "array"
},
"turn": {
"enum": [
"your-turn",
"opponent-turn",
"either"
],
"type": "string"
}
},
"required": [
"key",
"name",
"cp",
"limit"
],
"type": "object"
},
"maxItems": 48,
"type": "array"
}
},
"required": [
"stratagems",
"secondaries",
"primary",
"secondaryMode"
],
"type": "object"
},
{
"type": "null"
}
]
},
"roster": {
"properties": {
"built": {
"properties": {
"catalogueId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"detachment": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"detachmentIds": {
"items": {
"maxLength": 128,
"minLength": 1,
"type": "string"
},
"maxItems": 3,
"type": "array"
},
"detachmentPointBudget": {
"anyOf": [
{
"maximum": 3,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"detachments": {
"items": {
"properties": {
"name": {
"maxLength": 80,
"type": "string"
},
"points": {
"anyOf": [
{
"maximum": 3,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"points"
],
"type": "object"
},
"maxItems": 3,
"type": "array"
},
"disposition": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
]
},
"limit": {
"maximum": 10000,
"minimum": 0,
"type": "integer"
},
"picks": {
"items": {
"properties": {
"attachedTo": {
"maximum": 99,
"minimum": 0,
"type": "integer"
},
"catalogueId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"choices": {
"additionalProperties": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"propertyNames": {
"maxLength": 400,
"type": "string"
},
"type": "object"
},
"entryId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"models": {
"maximum": 60,
"minimum": 1,
"type": "integer"
},
"spreads": {
"additionalProperties": {
"additionalProperties": {
"maximum": 60,
"minimum": 0,
"type": "integer"
},
"propertyNames": {
"maxLength": 64,
"type": "string"
},
"type": "object"
},
"propertyNames": {
"maxLength": 400,
"type": "string"
},
"type": "object"
},
"toggles": {
"additionalProperties": {
"maximum": 1,
"minimum": 0,
"type": "integer"
},
"propertyNames": {
"maxLength": 400,
"type": "string"
},
"type": "object"
}
},
"required": [
"entryId"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"revision": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"strategicReserveLimit": {
"maximum": 5000,
"minimum": 0,
"type": "integer"
},
"units": {
"items": {
"properties": {
"attachedTo": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"enhancements": {
"items": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"maxItems": 20,
"type": "array"
},
"entryId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"formationOptions": {
"items": {
"enum": [
"battlefield",
"strategic-reserves",
"deep-strike",
"embarked"
],
"type": "string"
},
"maxItems": 4,
"type": "array"
},
"group": {
"enum": [
"epic-hero",
"character",
"battleline",
"infantry",
"swarm",
"mounted",
"beast",
"monster",
"vehicle",
"drone",
"transport",
"fortification",
"other"
],
"type": "string"
},
"joined": {
"items": {
"properties": {
"label": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"label",
"name"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"models": {
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"points": {
"maximum": 10000,
"minimum": 0,
"type": "integer"
},
"prebattleRules": {
"items": {
"enum": [
"infiltrators",
"scouts"
],
"type": "string"
},
"maxItems": 2,
"type": "array"
},
"strategicReserveExempt": {
"type": "boolean"
},
"transport": {
"type": "boolean"
},
"transportRule": {
"maxLength": 4000,
"type": "string"
},
"upgrades": {
"items": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"maxItems": 20,
"type": "array"
},
"wargear": {
"items": {
"properties": {
"count": {
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"count"
],
"type": "object"
},
"maxItems": 200,
"type": "array"
},
"warlord": {
"type": "boolean"
},
"warlordEligible": {
"type": "boolean"
},
"wounds": {
"maximum": 100,
"minimum": 1,
"type": "integer"
}
},
"required": [
"key",
"name",
"points",
"models"
],
"type": "object"
},
"maxItems": 200,
"type": "array"
},
"waivedRules": {
"items": {
"enum": [
"points-limit",
"detachments",
"detachment-points",
"kotc-infantry",
"kotc-warlord",
"kotc-epic-heroes",
"kotc-toughness",
"kotc-datasheet-copies"
],
"type": "string"
},
"maxItems": 8,
"type": "array"
}
},
"required": [
"catalogueId",
"revision",
"limit",
"detachment",
"disposition",
"units"
],
"type": "object"
},
"id": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"type": "string"
},
"reminders": {
"items": {
"properties": {
"ability": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"description": {
"maxLength": 10000,
"type": "string"
},
"key": {
"maxLength": 240,
"minLength": 1,
"type": "string"
},
"timings": {
"items": {
"oneOf": [
{
"properties": {
"moment": {
"enum": [
"phase-start",
"phase-end"
],
"type": "string"
},
"phase": {
"enum": [
"command",
"movement",
"shooting",
"charge",
"fight"
],
"type": "string"
},
"turn": {
"enum": [
"your-turn",
"opponent-turn",
"either"
],
"type": "string"
}
},
"required": [
"moment",
"phase",
"turn"
],
"type": "object"
},
{
"properties": {
"moment": {
"enum": [
"turn-start",
"turn-end"
],
"type": "string"
},
"phase": {
"type": "null"
},
"turn": {
"enum": [
"your-turn",
"opponent-turn",
"either"
],
"type": "string"
}
},
"required": [
"moment",
"phase",
"turn"
],
"type": "object"
}
]
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"unit": {
"properties": {
"index": {
"maximum": 99,
"minimum": 0,
"type": "integer"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"index",
"name"
],
"type": "object"
}
},
"required": [
"key",
"ability",
"description",
"timings"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"remindersEnabled": {
"type": "boolean"
},
"text": {
"maxLength": 20000,
"type": "string"
}
},
"required": [
"name",
"text"
],
"type": "object"
}
},
"required": [
"kind",
"roster"
],
"type": "object"
},
{
"properties": {
"destroyed": {
"type": "boolean"
},
"kind": {
"const": "set-unit",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"unitKey": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"unitKey",
"destroyed"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "set-prep",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"primary": {
"anyOf": [
{
"properties": {
"awards": {
"items": {
"properties": {
"criteria": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
]
},
"cumulative": {
"type": "boolean"
},
"group": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"mode": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
]
},
"per": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"properties": {
"phase": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"playerTurn": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"roundMax": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"roundMin": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"timing": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"timing",
"phase",
"playerTurn",
"roundMin",
"roundMax"
],
"type": "object"
},
"vp": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"vp",
"per",
"mode",
"max",
"group",
"cumulative",
"criteria",
"trigger"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
},
{
"type": "null"
}
]
},
"secondaries": {
"items": {
"properties": {
"awards": {
"items": {
"properties": {
"criteria": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
]
},
"cumulative": {
"type": "boolean"
},
"group": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"mode": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
]
},
"per": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"properties": {
"phase": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"playerTurn": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"roundMax": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"roundMin": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"timing": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"timing",
"phase",
"playerTurn",
"roundMin",
"roundMax"
],
"type": "object"
},
"vp": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"vp",
"per",
"mode",
"max",
"group",
"cumulative",
"criteria",
"trigger"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
},
"maxItems": 6,
"type": "array"
},
"secondaryDeck": {
"items": {
"properties": {
"awards": {
"items": {
"properties": {
"criteria": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
]
},
"cumulative": {
"type": "boolean"
},
"group": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"mode": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
]
},
"per": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"properties": {
"phase": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"playerTurn": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"roundMax": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"roundMin": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"timing": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"timing",
"phase",
"playerTurn",
"roundMin",
"roundMax"
],
"type": "object"
},
"vp": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"vp",
"per",
"mode",
"max",
"group",
"cumulative",
"criteria",
"trigger"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
},
"maxItems": 60,
"type": "array"
},
"secondaryMode": {
"enum": [
"fixed",
"tactical"
],
"type": "string"
},
"stratagems": {
"items": {
"properties": {
"cp": {
"maximum": 6,
"minimum": 0,
"type": "integer"
},
"detachment": {
"maxLength": 249,
"minLength": 1,
"type": "string"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"limit": {
"enum": [
"phase",
"turn",
"battle-round",
"battle",
"unlimited"
],
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"phases": {
"items": {
"enum": [
"command",
"movement",
"shooting",
"charge",
"fight",
"end"
],
"type": "string"
},
"maxItems": 6,
"type": "array"
},
"turn": {
"enum": [
"your-turn",
"opponent-turn",
"either"
],
"type": "string"
}
},
"required": [
"key",
"name",
"cp",
"limit"
],
"type": "object"
},
"maxItems": 48,
"type": "array"
}
},
"required": [
"kind",
"stratagems",
"secondaries",
"primary",
"secondaryMode"
],
"type": "object"
},
{
"properties": {
"deployed": {
"type": "boolean"
},
"kind": {
"const": "deploy-unit",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"unitKey": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"unitKey",
"deployed"
],
"type": "object"
},
{
"properties": {
"formation": {
"enum": [
"battlefield",
"strategic-reserves",
"deep-strike",
"embarked"
],
"type": "string"
},
"kind": {
"const": "set-unit-formation",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"transportKey": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"unitKey": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"unitKey",
"formation"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "set-painted",
"type": "string"
},
"painted": {
"type": "boolean"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"painted"
],
"type": "object"
},
{
"properties": {
"delta": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"kind": {
"const": "wound-unit",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"unitKey": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"unitKey",
"delta"
],
"type": "object"
},
{
"properties": {
"delta": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"kind": {
"const": "damage-unit",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"unitKey": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"unitKey",
"delta"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "set-deployment",
"type": "string"
},
"patternId": {
"anyOf": [
{
"maxLength": 64,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"kind",
"patternId"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "set-battlefield",
"type": "string"
},
"patternId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"terrainLayoutId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"patternId",
"terrainLayoutId"
],
"type": "object"
},
{
"properties": {
"cp": {
"maximum": 6,
"minimum": 0,
"type": "integer"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"kind": {
"const": "use-stratagem",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"key"
],
"type": "object"
},
{
"properties": {
"cp": {
"maximum": 6,
"minimum": 0,
"type": "integer"
},
"kind": {
"const": "use-new-orders",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"secondary": {
"properties": {
"awards": {
"items": {
"properties": {
"criteria": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
]
},
"cumulative": {
"type": "boolean"
},
"group": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"mode": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
]
},
"per": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"properties": {
"phase": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"playerTurn": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"roundMax": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"roundMin": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"timing": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"timing",
"phase",
"playerTurn",
"roundMin",
"roundMax"
],
"type": "object"
},
"vp": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"vp",
"per",
"mode",
"max",
"group",
"cumulative",
"criteria",
"trigger"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
},
"secondaryKey": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"stratagemKey": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"stratagemKey",
"secondaryKey",
"secondary"
],
"type": "object"
},
{
"properties": {
"delta": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"kind": {
"const": "score-secondary",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"key",
"delta"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "score-settlement",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"round": {
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"scores": {
"items": {
"oneOf": [
{
"properties": {
"category": {
"const": "primary",
"type": "string"
},
"delta": {
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"category",
"delta"
],
"type": "object"
},
{
"properties": {
"category": {
"const": "secondary",
"type": "string"
},
"delta": {
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"status": {
"const": "achieved",
"type": "string"
}
},
"required": [
"category",
"key",
"delta"
],
"type": "object"
}
]
},
"maxItems": 31,
"minItems": 1,
"type": "array"
}
},
"required": [
"kind",
"scores"
],
"type": "object"
},
{
"properties": {
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"kind": {
"const": "set-secondary-status",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"status": {
"enum": [
"active",
"achieved",
"discarded",
"returned"
],
"type": "string"
}
},
"required": [
"kind",
"key",
"status"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "draw-secondary",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"secondary": {
"properties": {
"awards": {
"items": {
"properties": {
"criteria": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
]
},
"cumulative": {
"type": "boolean"
},
"group": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"mode": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
]
},
"per": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"properties": {
"phase": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"playerTurn": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"roundMax": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"roundMin": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"timing": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"timing",
"phase",
"playerTurn",
"roundMin",
"roundMax"
],
"type": "object"
},
"vp": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"vp",
"per",
"mode",
"max",
"group",
"cumulative",
"criteria",
"trigger"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
}
},
"required": [
"kind",
"secondary"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "draw-secondaries",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"secondaries": {
"items": {
"properties": {
"awards": {
"items": {
"properties": {
"criteria": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
]
},
"cumulative": {
"type": "boolean"
},
"group": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"mode": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
]
},
"per": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"properties": {
"phase": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"playerTurn": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"roundMax": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"roundMin": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"timing": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"timing",
"phase",
"playerTurn",
"roundMin",
"roundMax"
],
"type": "object"
},
"vp": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"vp",
"per",
"mode",
"max",
"group",
"cumulative",
"criteria",
"trigger"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
},
"maxItems": 2,
"minItems": 1,
"type": "array"
},
"selected": {
"const": true,
"type": "boolean"
}
},
"required": [
"kind",
"secondaries"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "acknowledge-draw",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "acknowledge-scoring",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "select-secret",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"secondary": {
"properties": {
"awards": {
"items": {
"properties": {
"criteria": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
]
},
"cumulative": {
"type": "boolean"
},
"group": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
]
},
"max": {
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"mode": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
]
},
"per": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"properties": {
"phase": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"playerTurn": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
},
"roundMax": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"roundMin": {
"anyOf": [
{
"maximum": 5,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
]
},
"timing": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"timing",
"phase",
"playerTurn",
"roundMin",
"roundMax"
],
"type": "object"
},
"vp": {
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"vp",
"per",
"mode",
"max",
"group",
"cumulative",
"criteria",
"trigger"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"key": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"name"
],
"type": "object"
}
},
"required": [
"kind",
"secondary"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "reveal-secret",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"attackerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"firstPlayerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"kind": {
"const": "begin-battle",
"type": "string"
}
},
"required": [
"kind",
"firstPlayerId"
],
"type": "object"
},
{
"properties": {
"delta": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"kind": {
"const": "adjust-cp",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"delta"
],
"type": "object"
},
{
"properties": {
"gainCp": {
"type": "boolean"
},
"keys": {
"items": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"type": "array"
},
"kind": {
"const": "resolve-tactical-hand",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"category": {
"enum": [
"primary",
"secondary"
],
"type": "string"
},
"delta": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"kind": {
"const": "score",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"category",
"delta"
],
"type": "object"
},
{
"properties": {
"delta": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"kind": {
"const": "correct-player",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"resource": {
"enum": [
"cp",
"primary",
"secondary"
],
"type": "string"
}
},
"required": [
"kind",
"playerId",
"resource",
"delta"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "settle-opponent-turn",
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "request-advance",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "cancel-advance",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "advance",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "pause-clock",
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "resume-clock",
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"concededBy": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"kind": {
"const": "end-battle",
"type": "string"
},
"reason": {
"enum": [
"completed",
"finished-early",
"conceded"
],
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "reopen-battle",
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
{
"properties": {
"kind": {
"const": "undo",
"type": "string"
},
"target": {
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"kind",
"target"
],
"type": "object"
}
]
},
{
"additionalProperties": false,
"properties": {
"kind": {
"const": "attach-saved-roster",
"type": "string"
},
"playerId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"rosterId": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"rosterId"
],
"type": "object"
}
]
},
"expectedSeq": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"token": {
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"token",
"expectedSeq",
"command"
],
"type": "object"
},
"name": "submit_battle_action",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:88515804760e6a80f141b8ffa75ef374f225304a9756761c7b46b86aa3cfbb38 | sha256sum