Raw schema
{
"type": "object",
"properties": {
"action": {
"default": null,
"description": "Action to perform. ONLY these values are valid: start, advance, back, status, reset.",
"enum": [
"start",
"advance",
"back",
"status",
"reset",
null
],
"type": [
"string",
"null"
]
},
"data": {
"default": null,
"description": "Step-specific data (for \"advance\" action). Legacy untyped channel; prefer\n`payload` (typed) when your client can satisfy it."
},
"file_paths": {
"default": null,
"description": "Source file paths (required for \"start\" action). Also accepted inside\n`data` — see `workspace_dir` for why both placements are honoured.",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"payload": {
"default": null,
"description": "Typed step payload for the \"advance\" action (H16). A discriminated `oneOf`\nover each step's accepted shape — pick the branch whose `for_step` equals\nthe step number you are advancing FROM. When present it is merged over\n`data` (payload wins); when absent, behavior is identical to sending `data`.",
"oneOf": [
{
"additionalProperties": false,
"properties": {
"capped_files": {
"items": {
"type": "string"
},
"type": "array"
},
"for_step": {
"const": 1
},
"profile_summary": {
"description": "One entry per source schema (table) discovered. Writable from the user's own description of their data — a readable file is not required.",
"items": {
"additionalProperties": false,
"properties": {
"field_count": {
"description": "Distinct fields/columns in this schema — countable from a pasted column list even when the file itself was never read.",
"minimum": 0,
"type": "integer"
},
"record_count": {
"description": "Records in this schema. Use the profiler's count when it ran. If you could NOT read the file (the user only listed columns, or you have no shell), use the count the user stated, else 0. Zero is a legitimate, expected value — it means 'not measured', it is not fabrication, and it does not degrade the mapping.",
"minimum": 0,
"type": "integer"
},
"schema_name": {
"description": "Name of the source schema/table (for one flat file, its base name).",
"type": "string"
}
},
"required": [
"schema_name",
"record_count",
"field_count"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"workspace_dir": {
"type": "string"
}
},
"required": [
"profile_summary",
"for_step"
],
"title": "advance from step 1 (profile_source_data)",
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"decisions": {
"type": "array"
},
"for_step": {
"const": 2
},
"master_schemas": {
"description": "The main/primary entities (disposition 'master'). At least one is required — the slot IS the master disposition, so NO `disposition` field here.",
"items": {
"additionalProperties": false,
"properties": {
"confidence": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"data_source": {
"description": "UPPERCASE data source code",
"type": "string"
},
"field_count": {
"type": "integer"
},
"record_id_source": {
"description": "field name of the stable natural key (PREFERRED), or RECORD_HASH only when no stable unique field exists",
"type": "string"
},
"record_type": {
"enum": [
"PERSON",
"ORGANIZATION",
"VESSEL",
"AIRCRAFT"
]
},
"schema_name": {
"type": "string"
}
},
"required": [
"schema_name",
"data_source",
"record_type",
"record_id_source"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"questions": {
"type": "array"
},
"support_schemas": {
"description": "Lookups, relationships, and child schemas that fold into the masters.",
"items": {
"additionalProperties": false,
"properties": {
"confidence": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"disposition": {
"enum": [
"lookup",
"relationship",
"child"
]
},
"field_count": {
"type": "integer"
},
"from_key": {
"type": "string"
},
"join_key": {
"type": "string"
},
"key_field": {
"type": "string"
},
"role": {
"type": "string"
},
"schema_name": {
"type": "string"
},
"to_key": {
"type": "string"
}
},
"required": [
"schema_name",
"disposition"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"master_schemas",
"support_schemas",
"for_step"
],
"title": "advance from step 2 (plan_entity_structure) — master-slot shape (master-less plan ungeneratable; required/enum/minItems subset, no contains/if-then)",
"type": "object"
},
{
"properties": {
"decisions": {
"type": "array"
},
"for_step": {
"const": 3
},
"questions": {
"type": "array"
},
"schema_mappings": {
"items": {
"properties": {
"code_mappings": {
"type": "object"
},
"field_mappings": {
"items": {
"oneOf": [
{
"additionalProperties": false,
"properties": {
"attribute": {
"description": "attribute code, e.g. NAME_FULL",
"type": "string"
},
"confidence": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"custom": {
"description": "set true to deliberately map to a CUSTOM attribute not in the default Senzing spec (your schema added it); declare it via custom_attributes. Omit/false for standard catalog attributes.",
"type": "boolean"
},
"disposition": {
"const": "feature"
},
"feature": {
"description": "feature family, e.g. NAME",
"type": "string"
},
"ref": {
"type": "string"
},
"ref_citation": {
"type": "string"
},
"source_field": {
"type": "string"
},
"usage_type": {
"type": [
"string",
"null"
]
}
},
"required": [
"disposition",
"feature",
"attribute"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"confidence": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"disposition": {
"const": "payload"
},
"ref": {
"type": "string"
},
"ref_citation": {
"type": "string"
},
"source_field": {
"type": "string"
}
},
"required": [
"disposition",
"source_field"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"confidence": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"disposition": {
"const": "ignore"
},
"reason": {
"type": "string"
},
"ref": {
"type": "string"
},
"ref_citation": {
"type": "string"
},
"source_field": {
"type": "string"
}
},
"required": [
"disposition",
"source_field"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"confidence": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"derived_as": {
"enum": [
"DATA_SOURCE",
"RECORD_ID",
"RECORD_TYPE",
"REL_ANCHOR",
"REL_POINTER"
],
"type": "string"
},
"disposition": {
"const": "derived"
},
"domain": {
"description": "for REL_ANCHOR/REL_POINTER",
"type": "string"
},
"justification": {
"description": "provenance for a constant derived RECORD_TYPE (validator-enforced)",
"type": "string"
},
"ref": {
"type": "string"
},
"ref_citation": {
"type": "string"
},
"role": {
"description": "for REL_POINTER",
"type": "string"
},
"source": {
"type": "string"
},
"source_field": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"disposition",
"derived_as"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"confidence": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"disposition": {
"const": "extract"
},
"expected_features": {
"items": {
"type": "string"
},
"type": "array"
},
"extraction_notes": {
"type": "string"
},
"ref": {
"type": "string"
},
"ref_citation": {
"type": "string"
},
"source_field": {
"type": "string"
}
},
"required": [
"disposition",
"source_field",
"expected_features"
],
"type": "object"
}
]
},
"type": "array"
},
"schema_name": {
"type": "string"
},
"type_discriminator": {
"type": "object"
}
},
"required": [
"schema_name",
"field_mappings"
],
"type": "object"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"schema_mappings",
"for_step"
],
"title": "advance from step 3 (map_fields)",
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"for_step": {
"const": 4
},
"output_path": {
"type": "string"
},
"records_output": {
"minimum": 0,
"type": "integer"
},
"verdict": {
"enum": [
"approve",
"rework_mapping",
"rework_code"
],
"type": "string"
}
},
"required": [
"verdict",
"for_step"
],
"title": "advance from step 4 (generate_validate)",
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"decision": {
"enum": [
"skip",
"test_load"
],
"type": "string"
},
"for_step": {
"const": 5
},
"senzing_config": {
"type": "object"
}
},
"required": [
"decision",
"for_step"
],
"title": "advance from step 5 (detect_environment)",
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"for_step": {
"const": 6
},
"load_errors": {
"minimum": 0,
"type": "integer"
},
"records_loaded": {
"minimum": 0,
"type": "integer"
}
},
"required": [
"records_loaded",
"for_step"
],
"title": "advance from step 6 (load_test_data)",
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"for_step": {
"const": 7
},
"report_generated": {
"const": true
},
"report_path": {
"type": "string"
}
},
"required": [
"report_generated",
"for_step"
],
"title": "advance from step 7 (validation_report)",
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"for_step": {
"const": 8
},
"verdict": {
"enum": [
"approve",
"marginal",
"rework_mapping",
"rework_code"
],
"type": "string"
}
},
"required": [
"verdict",
"for_step"
],
"title": "advance from step 8 (evaluate_results)",
"type": "object"
}
],
"type": "object"
},
"state": {
"default": null,
"description": "Workflow state from previous response (required for all actions except \"start\").\nCRITICAL: Pass the EXACT 'state' JSON object from the previous mapping_workflow\nresponse verbatim — do NOT reconstruct, modify, or omit any fields.\nIf you have lost the state, call with action='start' instead."
},
"version": {
"default": "current",
"description": "Senzing version (default: \"current\").",
"type": "string"
},
"workspace_dir": {
"default": null,
"description": "Writable output directory (required for \"start\" action). Historically\nthis lived ONLY inside `data` while `file_paths` lived ONLY at the top\nlevel, so the two arguments of a single call sat in different places.\nClients reliably put both in one place — either place — and the half\nthat landed in the \"wrong\" one was silently dropped, producing a\n\"required\" error for an argument that WAS sent and forcing a retry.\nBoth placements are now accepted for both arguments; top level wins\nwhen a value is present in both.",
"type": [
"string",
"null"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}