Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,545Letters: 14Defects: 1,324counted 4 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:88515804760e6a80f141b8ffa75ef374f225304a9756761c7b46b86aa3cfbb38 | sha256sum