API reference
API Surface
The stable lookup and critical-cell editing contracts are grouped here by workflow so diagnostics and curation work can move quickly without leaving the app shell.
Read models
Reference and lookup payloads
Reference data
GET /api/reference-dataBootstraps attack tables, critical tables, labels, and high-level metadata for the main client flows.
{
"attackTables": [
{
"key": "broadsword",
"label": "Broadsword",
"attackKind": "melee",
"fumbleMinRoll": 1,
"fumbleMaxRoll": 2
}
],
"criticalTables": [
{
"key": "mana",
"label": "Mana Critical Strike Table",
"family": "standard",
"sourceDocument": "Mana.pdf",
"notes": "Imported from PDF XML extraction."
}
]
}Attack lookup
POST /api/lookup/attackResolves attack-table outcomes for the player-facing `Play` surface.
{
"attackTable": "broadsword",
"armorType": "AT10",
"roll": 111,
"criticalRoll": 72
}Critical lookup
POST /api/lookup/criticalReturns resolved critical outcomes plus the imported table metadata needed to inspect the underlying source row.
{
"criticalType": "mana",
"column": "E",
"roll": 100,
"group": null
}Curation contracts
Critical-cell editing workflow
Cell editor load
GET /api/tables/critical/{slug}/cells/{resultId}Loads the full editable graph for one stored critical-table cell, including review notes and nested branches.
{
"resultId": 412,
"tableSlug": "slash",
"tableName": "Slash Critical Strike Table",
"rollBand": "66-70",
"groupKey": null,
"columnKey": "C",
"isCurated": false,
"sourcePageNumber": 1,
"sourceImageUrl": "/api/tables/critical/slash/cells/412/source-image",
"rawCellText": "Original imported full cell text",
"descriptionText": "Current curated prose",
"rawAffixText": "+8H - 2S",
"parseStatus": "verified",
"parsedJson": "{\"version\":1,\"isDescriptionOverridden\":false,\"isRawAffixTextOverridden\":false,\"areEffectsOverridden\":false,\"areBranchesOverridden\":false,\"effects\":[],\"branches\":[]}",
"isDescriptionOverridden": false,
"isRawAffixTextOverridden": false,
"areEffectsOverridden": false,
"areBranchesOverridden": false,
"validationMessages": [],
"effects": [],
"branches": []
}Cell source image
GET /api/tables/critical/{slug}/cells/{resultId}/source-imageStreams the importer-generated PNG crop for the current critical cell and returns `404` when no stored artifact is available.
Cell re-parse
POST /api/tables/critical/{slug}/cells/{resultId}/reparseRe-runs the single-cell parser and merges generated output with the current override state without persisting changes.
{
"currentState": {
"rawCellText": "Strike to thigh. +8H\nWith greaves: blow glances aside.",
"descriptionText": "Curated prose",
"rawAffixText": "+8H",
"parseStatus": "partial",
"parsedJson": "{}",
"isCurated": false,
"isDescriptionOverridden": true,
"isRawAffixTextOverridden": false,
"areEffectsOverridden": false,
"areBranchesOverridden": false,
"effects": [],
"branches": []
}
}Cell editor save
PUT /api/tables/critical/{slug}/cells/{resultId}Replaces the stored base result, branch rows, and effect rows for the targeted cell with the submitted curated payload.
{
"rawCellText": "Corrected imported text",
"descriptionText": "Rewritten prose after manual review",
"rawAffixText": "+10H - must parry 2 rnds",
"parseStatus": "manually_curated",
"parsedJson": "{\"reviewed\":true}",
"isCurated": true,
"isDescriptionOverridden": true,
"isRawAffixTextOverridden": false,
"areEffectsOverridden": false,
"areBranchesOverridden": false,
"effects": [
{
"effectCode": "direct_hits",
"target": null,
"valueInteger": 10,
"valueDecimal": null,
"valueExpression": null,
"durationRounds": null,
"perRound": null,
"modifier": null,
"bodyPart": null,
"isPermanent": false,
"sourceType": "symbol",
"sourceText": "+10H",
"originKey": "base:direct_hits:1",
"isOverridden": true
}
],
"branches": []
}