{
  "openapi": "3.1.0",
  "info": {
    "title": "Griffynx API",
    "description": "Pre-decision trust intelligence. One surface, every domain.",
    "version": "0.1.0a0"
  },
  "paths": {
    "/v1/inquiries": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Open Inquiry",
        "description": "Open an inquiry (command OpenInquiry).\n\n``mode=sync`` waits for the first assessment within ``stake.deadline_ms``\n(fast tier, target p95 under 3 s; preliminary allowed for\n``pre_transaction``). ``async`` and ``stream`` are Chunk 6b and are\nrefused here rather than silently treated as ``sync``, because a caller\nwho asked for a webhook and got a body would not find out until the\nwebhook never arrived.\n\nRejected with I13 when ``purpose`` is missing or not allowed by policy.\nEvery outcome, including a refusal, writes one audit row; its id comes\nback on the ``X-Griffynx-Audit-Id`` header so a caller can cite the call\nthey made.",
        "operationId": "open_inquiry_v1_inquiries_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InquiryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InquiryResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/inquiries/{inquiry_id}": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Get Inquiry",
        "description": "The inquiry and its latest assessment.",
        "operationId": "get_inquiry_v1_inquiries__inquiry_id__get",
        "parameters": [
          {
            "name": "inquiry_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Inquiry Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InquiryResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/inquiries/{inquiry_id}/events": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Inquiry Events",
        "description": "SSE: AssessmentIssued, AssessmentRevised, InquiryConcluded. Replayable with ``after``.",
        "operationId": "inquiry_events_v1_inquiries__inquiry_id__events_get",
        "parameters": [
          {
            "name": "inquiry_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Inquiry Id"
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "After"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/observations": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Submit Observation",
        "description": "Submit testimony (command SubmitObservation). Enters with its provenance class; never sets a score.",
        "operationId": "submit_observation_v1_observations_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ObservationIn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObservationOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/observations/batch": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Submit Observations",
        "description": "Submit many observations at once.",
        "operationId": "submit_observations_v1_observations_batch_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "items": {
                  "$ref": "#/components/schemas/ObservationIn"
                },
                "type": "array",
                "title": "Body"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ObservationOut"
                  },
                  "type": "array",
                  "title": "Response Submit Observations V1 Observations Batch Post"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/outcomes": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Submit Outcome",
        "description": "Report what happened after a decision (command SubmitOutcome). Feeds calibration (E14).",
        "operationId": "submit_outcome_v1_outcomes_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OutcomeIn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObservationOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/outcomes/batch": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Submit Outcomes",
        "description": "Report many outcomes at once (a month of repayments, a day of chargebacks).",
        "operationId": "submit_outcomes_v1_outcomes_batch_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "items": {
                  "$ref": "#/components/schemas/OutcomeIn"
                },
                "type": "array",
                "title": "Body"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ObservationOut"
                  },
                  "type": "array",
                  "title": "Response Submit Outcomes V1 Outcomes Batch Post"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/material": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Create Material",
        "description": "Declare material (command IngestMaterial).\n\nReturns a signed upload URL for the bytes, or accepts inline text. Audio\nand video require ``consent_ref``. ``retention_mode=transient`` means the\nbytes are processed and never stored (D35). Declared C2 material is\nextracted to outcomes only.",
        "operationId": "create_material_v1_material_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/material/{material_id}": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Get Material",
        "description": "The material's status and derivation.",
        "operationId": "get_material_v1_material__material_id__get",
        "parameters": [
          {
            "name": "material_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Material Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/material/{material_id}/extraction": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Get Extraction",
        "description": "Everything extracted from the material, each with its binding.",
        "operationId": "get_extraction_v1_material__material_id__extraction_get",
        "parameters": [
          {
            "name": "material_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Material Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtractionOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Open Case",
        "description": "Open a case (command OpenCase).\n\nRequires an investigative tenant (KYB) and an authorization record (I13).",
        "operationId": "open_case_v1_cases_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Get Case",
        "description": "The case and its current state, derived from its event log.",
        "operationId": "get_case_v1_cases__case_id__get",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/members": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Add Case Members",
        "description": "Add members (command AddCaseMembers).",
        "operationId": "add_case_members_v1_cases__case_id__members_post",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseMemberIn"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/intake": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Intake Case",
        "description": "Bring many things into a case at once (command IntakeBatch, D43).\n\nA bounded manifest of presentations and declared material; bytes follow by\nhash. Each item answers for itself (accepted, duplicate, rejected); the\nmanifest becomes one case event. Nothing is spent: gathering is ``expand``.\nFor open-ended intake open a session with ``case_id`` instead.",
        "operationId": "intake_case_v1_cases__case_id__intake_post",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntakeManifest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntakeOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/expand": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Expand Case",
        "description": "One hop of attribution (command ExpandCase), budgeted.\n\nWith human_gate the candidates are shown first and nothing is spent until one is chosen.",
        "operationId": "expand_case_v1_cases__case_id__expand_post",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseExpandIn"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InquiryResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/assertions": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Assert In Case",
        "description": "An analyst's judgement as evidence (command AssertInCase, E9).",
        "operationId": "assert_in_case_v1_cases__case_id__assertions_post",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseAssertionIn"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObservationOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/hold": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Hold Case",
        "description": "Place legal hold (command HoldCase).",
        "operationId": "hold_case_v1_cases__case_id__hold_post",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseHoldIn"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/release": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Release Case",
        "description": "Release legal hold (command ReleaseCase).",
        "operationId": "release_case_v1_cases__case_id__release_post",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseHoldIn"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/review": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Review Case",
        "description": "Move the review state (command ReviewCase).",
        "operationId": "review_case_v1_cases__case_id__review_post",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseReviewIn"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/export": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Export Case",
        "description": "Produce the evidentiary bundle (command ExportCase). Requires sign-off.",
        "operationId": "export_case_v1_cases__case_id__export_post",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "bundle",
              "title": "Format"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseExportOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/close": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Close Case",
        "description": "Close the case (command CloseCase).",
        "operationId": "close_case_v1_cases__case_id__close_post",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          },
          {
            "name": "finding",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Finding"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/graph": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Case Graph",
        "description": "The case graph: nodes and edges with types, weights and provenance classes.",
        "operationId": "case_graph_v1_cases__case_id__graph_get",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseGraphOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/timeline": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Case Timeline",
        "description": "Everything that happened in the case, in observed order.",
        "operationId": "case_timeline_v1_cases__case_id__timeline_get",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventEnvelope"
                  },
                  "title": "Response Case Timeline V1 Cases  Case Id  Timeline Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cases/{case_id}/events": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Case Events",
        "description": "SSE: CaseChanged, AssessmentRevised for expansions, MonitorTriggered for case monitors.",
        "operationId": "case_events_v1_cases__case_id__events_get",
        "parameters": [
          {
            "name": "case_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Case Id"
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "After"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/monitors": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Open Monitor",
        "description": "A standing watch (command OpenMonitor).",
        "operationId": "open_monitor_v1_monitors_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonitorCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonitorOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/monitors/{monitor_id}": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Get Monitor",
        "description": "The monitor and its last assessment.",
        "operationId": "get_monitor_v1_monitors__monitor_id__get",
        "parameters": [
          {
            "name": "monitor_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Monitor Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonitorOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "v1"
        ],
        "summary": "Close Monitor",
        "description": "End the watch (command CloseMonitor).",
        "operationId": "close_monitor_v1_monitors__monitor_id__delete",
        "parameters": [
          {
            "name": "monitor_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Monitor Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/monitors/{monitor_id}/events": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Monitor Events",
        "description": "SSE: MonitorTriggered.",
        "operationId": "monitor_events_v1_monitors__monitor_id__events_get",
        "parameters": [
          {
            "name": "monitor_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Monitor Id"
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "After"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/sessions": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Open Session",
        "description": "Open a live session (command OpenSession); returns the WebSocket URL for frames and events.",
        "operationId": "open_session_v1_sessions_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SessionOpen"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/sessions/{session_id}/close": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Close Session",
        "description": "Close a session (command CloseSession); the retention mode is applied.",
        "operationId": "close_session_v1_sessions__session_id__close_post",
        "parameters": [
          {
            "name": "session_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Session Id"
            }
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ended",
              "title": "Reason"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/entities/{entity_id}": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Get Entity",
        "description": "A resolved subject as the tenant may see it.",
        "operationId": "get_entity_v1_entities__entity_id__get",
        "parameters": [
          {
            "name": "entity_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Entity Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/entities/{entity_id}/ledger": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Get Ledger",
        "description": "The entity's assessments in order: reputation over time.",
        "operationId": "get_ledger_v1_entities__entity_id__ledger_get",
        "parameters": [
          {
            "name": "entity_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Entity Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LedgerEntryOut"
                  },
                  "title": "Response Get Ledger V1 Entities  Entity Id  Ledger Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/registry/artifact-types": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Artifact Types",
        "description": "Artifact types this tenant may present, from the loaded packs.",
        "operationId": "artifact_types_v1_registry_artifact_types_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/RegistryEntryOut"
                  },
                  "type": "array",
                  "title": "Response Artifact Types V1 Registry Artifact Types Get"
                }
              }
            }
          }
        }
      }
    },
    "/v1/registry/intents": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Intents",
        "description": "Intents this tenant may use.",
        "operationId": "intents_v1_registry_intents_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/RegistryEntryOut"
                  },
                  "type": "array",
                  "title": "Response Intents V1 Registry Intents Get"
                }
              }
            }
          }
        }
      }
    },
    "/v1/registry/purposes": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Purposes",
        "description": "Purposes this tenant's policy allows.",
        "operationId": "purposes_v1_registry_purposes_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/RegistryEntryOut"
                  },
                  "type": "array",
                  "title": "Response Purposes V1 Registry Purposes Get"
                }
              }
            }
          }
        }
      }
    },
    "/v1/admin/keys": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Mint Key",
        "description": "Mint a key (command MintKey): shown once, stored hashed (I11).",
        "operationId": "mint_key_v1_admin_keys_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KeyCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KeyOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/admin/keys/{key_id}": {
      "delete": {
        "tags": [
          "v1"
        ],
        "summary": "Revoke Key",
        "description": "Revoke a key (command RevokeKey).",
        "operationId": "revoke_key_v1_admin_keys__key_id__delete",
        "parameters": [
          {
            "name": "key_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Key Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/admin/policies": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "List Policies",
        "description": "Every policy version, current first.",
        "operationId": "list_policies_v1_admin_policies_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PolicyOut"
                  },
                  "type": "array",
                  "title": "Response List Policies V1 Admin Policies Get"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Publish Policy",
        "description": "Publish a policy version (command PublishPolicy). Labels change; scores never do.",
        "operationId": "publish_policy_v1_admin_policies_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PolicyIn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PolicyOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/admin/webhooks": {
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Register Webhook",
        "description": "Register a webhook (command RegisterWebhook).",
        "operationId": "register_webhook_v1_admin_webhooks_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookIn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/admin/audit": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Audit",
        "description": "The tenant's audit trail: every call and analyst action with its cost.",
        "operationId": "audit_v1_admin_audit_get",
        "parameters": [
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "After"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AuditEntryOut"
                  },
                  "title": "Response Audit V1 Admin Audit Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/health": {
      "get": {
        "tags": [
          "v1"
        ],
        "summary": "Health",
        "description": "Liveness. The only endpoint with a body today.",
        "operationId": "health_v1_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": "object",
                  "title": "Response Health V1 Health Get"
                }
              }
            }
          }
        }
      }
    },
    "/healthz": {
      "get": {
        "tags": [
          "ops"
        ],
        "summary": "Healthz",
        "description": "Liveness and the two things worth knowing before a deploy is believed.\n\nOpen, like the provider service's own health endpoint: it reveals how\nmany tools were discovered and whether the gateway's schema answers,\nand nothing about any tenant.",
        "operationId": "healthz_healthz_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Healthz Healthz Get"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Absence": {
        "properties": {
          "about": {
            "type": "string",
            "title": "About"
          },
          "about_type": {
            "type": "string",
            "title": "About Type"
          },
          "kind": {
            "type": "string",
            "title": "Kind",
            "description": "Why it produced nothing: timeout, error, no_data, refused, budget or unregistered."
          },
          "reason": {
            "type": "string",
            "title": "Reason",
            "description": "The stated reason, with every source name removed."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "about",
          "about_type",
          "kind",
          "reason"
        ],
        "title": "Absence",
        "description": "Something that was asked and did not answer.\n\nAbsence is evidence (E3), so it is a first-class part of the report rather\nthan a gap the renderer has to notice. A report that cannot say what it\nfailed to learn is a report that overstates what it knows."
      },
      "Assessment": {
        "properties": {
          "assessment_id": {
            "type": "string",
            "format": "uuid",
            "title": "Assessment Id"
          },
          "inquiry_id": {
            "type": "string",
            "format": "uuid",
            "title": "Inquiry Id"
          },
          "score": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Score"
          },
          "low": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Low"
          },
          "high": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "High"
          },
          "preliminary": {
            "type": "boolean",
            "title": "Preliminary",
            "description": "True when the stopping rule was not yet met (pre_transaction only)."
          },
          "as_of": {
            "type": "string",
            "format": "date-time",
            "title": "As Of"
          },
          "methodology_version": {
            "type": "string",
            "title": "Methodology Version"
          },
          "label": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Label"
              },
              {
                "type": "null"
              }
            ]
          },
          "evidence": {
            "$ref": "#/components/schemas/EvidenceSummary"
          },
          "entity_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Entity Id"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "assessment_id",
          "inquiry_id",
          "score",
          "low",
          "high",
          "preliminary",
          "as_of",
          "methodology_version",
          "label",
          "evidence",
          "entity_id"
        ],
        "title": "Assessment",
        "description": "The public projection of a kernel Assessment."
      },
      "AuditEntryOut": {
        "properties": {
          "audit_id": {
            "type": "string",
            "format": "uuid",
            "title": "Audit Id"
          },
          "occurred_at": {
            "type": "string",
            "format": "date-time",
            "title": "Occurred At"
          },
          "principal": {
            "type": "string",
            "title": "Principal"
          },
          "action": {
            "type": "string",
            "title": "Action"
          },
          "target_kind": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Kind"
          },
          "target_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Id"
          },
          "cost_amount": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cost Amount"
          },
          "cost_currency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cost Currency"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "audit_id",
          "occurred_at",
          "principal",
          "action",
          "target_kind",
          "target_id",
          "cost_amount",
          "cost_currency"
        ],
        "title": "AuditEntryOut",
        "description": "One audited action: who, what, when, at what cost."
      },
      "BindingOut": {
        "properties": {
          "binding_id": {
            "type": "string",
            "format": "uuid",
            "title": "Binding Id"
          },
          "target_kind": {
            "type": "string",
            "enum": [
              "artifact",
              "fingerprint",
              "signal",
              "claim"
            ],
            "title": "Target Kind"
          },
          "target_id": {
            "type": "string",
            "title": "Target Id"
          },
          "locator_kind": {
            "type": "string",
            "enum": [
              "text",
              "document",
              "image",
              "audio",
              "video",
              "structured"
            ],
            "title": "Locator Kind"
          },
          "locator": {
            "additionalProperties": true,
            "type": "object",
            "title": "Locator"
          },
          "confidence": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Confidence"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "binding_id",
          "target_kind",
          "target_id",
          "locator_kind",
          "locator",
          "confidence"
        ],
        "title": "BindingOut",
        "description": "Where an extracted thing sits in its material."
      },
      "CaseAssertionIn": {
        "properties": {
          "summary": {
            "type": "string",
            "maxLength": 500,
            "minLength": 1,
            "title": "Summary"
          },
          "subject": {
            "$ref": "#/components/schemas/Subject"
          },
          "relates_to": {
            "items": {
              "$ref": "#/components/schemas/Presentation"
            },
            "type": "array",
            "title": "Relates To",
            "default": []
          },
          "observed_at": {
            "type": "string",
            "format": "date-time",
            "title": "Observed At"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "summary",
          "subject",
          "observed_at"
        ],
        "title": "CaseAssertionIn",
        "description": "An analyst's judgement, entering as evidence with the analyst_asserted class (E9). Never a score."
      },
      "CaseCreate": {
        "properties": {
          "purpose": {
            "type": "string",
            "title": "Purpose"
          },
          "external_reference": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "External Reference",
            "description": "FIR, ticket or complaint number."
          },
          "lead_analyst": {
            "type": "string",
            "title": "Lead Analyst",
            "description": "The principal who leads the case."
          },
          "budget_amount": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Budget Amount"
          },
          "budget_currency": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 3,
                "minLength": 3
              },
              {
                "type": "null"
              }
            ],
            "title": "Budget Currency"
          },
          "budget_hops": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Budget Hops"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "purpose",
          "lead_analyst"
        ],
        "title": "CaseCreate",
        "description": "Open an inquiry that lives for weeks: authorization first (I13)."
      },
      "CaseExpandIn": {
        "properties": {
          "from_entity_ids": {
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "type": "array",
            "title": "From Entity Ids",
            "default": []
          },
          "from_presentations": {
            "items": {
              "$ref": "#/components/schemas/Presentation"
            },
            "type": "array",
            "title": "From Presentations",
            "default": []
          },
          "max_fan_out": {
            "type": "integer",
            "maximum": 500.0,
            "minimum": 1.0,
            "title": "Max Fan Out",
            "default": 10
          },
          "tier_ceiling": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tier Ceiling"
          },
          "human_gate": {
            "type": "boolean",
            "title": "Human Gate",
            "description": "Show candidates and wait for a choice before spending.",
            "default": true
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "CaseExpandIn",
        "description": "One hop of attribution from the case graph, under the case budget."
      },
      "CaseExportOut": {
        "properties": {
          "export_id": {
            "type": "string",
            "format": "uuid",
            "title": "Export Id"
          },
          "format": {
            "type": "string",
            "enum": [
              "bundle",
              "graphml",
              "dot",
              "maltego"
            ],
            "title": "Format"
          },
          "manifest_hash": {
            "type": "string",
            "title": "Manifest Hash"
          },
          "download_url": {
            "type": "string",
            "title": "Download Url"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "title": "Expires At"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "export_id",
          "format",
          "manifest_hash",
          "download_url",
          "expires_at"
        ],
        "title": "CaseExportOut",
        "description": "The evidentiary bundle: every record by hash, the graph, the timeline, a manifest hash over it all."
      },
      "CaseGraphOut": {
        "properties": {
          "nodes": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Nodes"
          },
          "edges": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Edges"
          },
          "as_of": {
            "type": "string",
            "format": "date-time",
            "title": "As Of"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "nodes",
          "edges",
          "as_of"
        ],
        "title": "CaseGraphOut",
        "description": "Nodes and edges of the case graph with type, confidence and relationship."
      },
      "CaseHoldIn": {
        "properties": {
          "reason": {
            "type": "string",
            "minLength": 1,
            "title": "Reason"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "reason"
        ],
        "title": "CaseHoldIn",
        "description": "Place or release legal hold; deletion becomes impossible while held (I12)."
      },
      "CaseMemberIn": {
        "properties": {
          "presentations": {
            "items": {
              "$ref": "#/components/schemas/Presentation"
            },
            "type": "array",
            "title": "Presentations",
            "default": []
          },
          "material_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Material Ids",
            "default": []
          },
          "entity_ids": {
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "type": "array",
            "title": "Entity Ids",
            "default": []
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "CaseMemberIn",
        "description": "Add a presentation, material or known entity to a case."
      },
      "CaseOut": {
        "properties": {
          "case_id": {
            "type": "string",
            "format": "uuid",
            "title": "Case Id"
          },
          "opened_at": {
            "type": "string",
            "format": "date-time",
            "title": "Opened At"
          },
          "hold": {
            "type": "boolean",
            "title": "Hold"
          },
          "review_state": {
            "type": "string",
            "enum": [
              "open",
              "in_review",
              "signed_off",
              "closed"
            ],
            "title": "Review State"
          },
          "closed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed At"
          },
          "budget_remaining": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Budget Remaining"
          },
          "hops_remaining": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hops Remaining"
          },
          "events_url": {
            "type": "string",
            "title": "Events Url"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "case_id",
          "opened_at",
          "hold",
          "review_state",
          "closed_at",
          "budget_remaining",
          "hops_remaining",
          "events_url"
        ],
        "title": "CaseOut",
        "description": "The case resource and its current state, derived from its event log."
      },
      "CaseReviewIn": {
        "properties": {
          "review_state": {
            "type": "string",
            "enum": [
              "in_review",
              "signed_off",
              "closed"
            ],
            "title": "Review State"
          },
          "note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "review_state"
        ],
        "title": "CaseReviewIn",
        "description": "Move the review state; sign-off gates export."
      },
      "Claim": {
        "properties": {
          "type": {
            "type": "string",
            "title": "Type",
            "description": "A registered claim type id. Always data class C2."
          },
          "fields": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Fields",
            "description": "The claim's fields. Never stored raw; verified to an outcome."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "fields"
        ],
        "title": "Claim",
        "description": "A structured assertion to verify (never looked up): a registered claim type and its fields."
      },
      "Connection": {
        "properties": {
          "connection_id": {
            "type": "string",
            "format": "uuid",
            "title": "Connection Id",
            "description": "Stable id for this edge, so a report can cite it."
          },
          "relation": {
            "type": "string",
            "title": "Relation",
            "description": "The registered relationship type, e.g. shares_registrant."
          },
          "from_label": {
            "type": "string",
            "title": "From Label",
            "description": "The caller's own value where it was theirs, else its type."
          },
          "from_type": {
            "type": "string",
            "title": "From Type"
          },
          "to_label": {
            "type": "string",
            "title": "To Label"
          },
          "to_type": {
            "type": "string",
            "title": "To Type"
          },
          "weight": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Weight",
            "description": "The kernel's computed strength for this edge."
          },
          "reason": {
            "type": "string",
            "title": "Reason",
            "description": "Why the edge holds, with every source name removed."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "connection_id",
          "relation",
          "from_label",
          "from_type",
          "to_label",
          "to_type",
          "weight",
          "reason"
        ],
        "title": "Connection",
        "description": "An edge the engine drew between two things, and why it drew it.\n\nThis is the part a flat aggregator cannot produce and the reason the free\nreport is worth running: not a longer list, but the joins between its\nentries."
      },
      "Coverage": {
        "properties": {
          "tier_ceiling": {
            "type": "string",
            "title": "Tier Ceiling"
          },
          "checks_run": {
            "type": "integer",
            "title": "Checks Run"
          },
          "checks_answered": {
            "type": "integer",
            "title": "Checks Answered"
          },
          "checks_unanswered": {
            "type": "integer",
            "title": "Checks Unanswered"
          },
          "gaps": {
            "items": {
              "$ref": "#/components/schemas/CoverageGap"
            },
            "type": "array",
            "title": "Gaps",
            "default": []
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "tier_ceiling",
          "checks_run",
          "checks_answered",
          "checks_unanswered"
        ],
        "title": "Coverage",
        "description": "What was attempted, what answered, and what the tier put out of reach."
      },
      "CoverageGap": {
        "properties": {
          "about_type": {
            "type": "string",
            "title": "About Type"
          },
          "tools_above_ceiling": {
            "type": "integer",
            "title": "Tools Above Ceiling",
            "description": "How many registered tools this tier could not reach."
          },
          "lowest_tier_that_would_run": {
            "type": "string",
            "title": "Lowest Tier That Would Run"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "about_type",
          "tools_above_ceiling",
          "lowest_tier_that_would_run"
        ],
        "title": "CoverageGap",
        "description": "A class of check that exists but was not run, because of the tier ceiling.\n\nThis is the honest upgrade prompt. \"Nine platforms checked directly,\nopen-web discovery not run at this tier\" is true, useful to the reader,\nand better than any claim the marketing copy could make."
      },
      "EntityOut": {
        "properties": {
          "entity_id": {
            "type": "string",
            "format": "uuid",
            "title": "Entity Id"
          },
          "kind": {
            "type": "string",
            "enum": [
              "person",
              "organisation",
              "device",
              "cluster"
            ],
            "title": "Kind"
          },
          "presentations": {
            "items": {
              "$ref": "#/components/schemas/Presentation"
            },
            "type": "array",
            "title": "Presentations"
          },
          "ledger_length": {
            "type": "integer",
            "title": "Ledger Length"
          },
          "latest": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Assessment"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "entity_id",
          "kind",
          "presentations",
          "ledger_length",
          "latest"
        ],
        "title": "EntityOut",
        "description": "A resolved subject as the tenant may see it: kind, current presentations, ledger summary."
      },
      "EventEnvelope": {
        "properties": {
          "event_id": {
            "type": "string",
            "title": "Event Id"
          },
          "type": {
            "type": "string",
            "title": "Type",
            "description": "One of the event types in griffynx_api.events."
          },
          "occurred_at": {
            "type": "string",
            "format": "date-time",
            "title": "Occurred At"
          },
          "subject_id": {
            "type": "string",
            "title": "Subject Id",
            "description": "inquiry_id, case_id, monitor_id or session_id the event concerns."
          },
          "payload": {
            "additionalProperties": true,
            "type": "object",
            "title": "Payload"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "event_id",
          "type",
          "occurred_at",
          "subject_id",
          "payload"
        ],
        "title": "EventEnvelope",
        "description": "One event on any stream (SSE, WebSocket, webhook): replayable by cursor."
      },
      "EvidenceSummary": {
        "properties": {
          "signals": {
            "type": "integer",
            "title": "Signals"
          },
          "failed_signals": {
            "type": "integer",
            "title": "Failed Signals"
          },
          "contradictions": {
            "type": "integer",
            "title": "Contradictions"
          },
          "by_provenance_class": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "By Provenance Class"
          },
          "by_trust_band": {
            "additionalProperties": {
              "type": "integer"
            },
            "propertyNames": {
              "enum": [
                "high",
                "medium",
                "low"
              ]
            },
            "type": "object",
            "title": "By Trust Band"
          },
          "oldest_observed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Oldest Observed At"
          },
          "newest_observed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Newest Observed At"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "signals",
          "failed_signals",
          "contradictions",
          "by_provenance_class",
          "by_trust_band",
          "oldest_observed_at",
          "newest_observed_at"
        ],
        "title": "EvidenceSummary",
        "description": "What the tenant may see of the chain of evidence: counts and bands, never raw or provider names."
      },
      "ExtractionOut": {
        "properties": {
          "material_id": {
            "type": "string",
            "title": "Material Id"
          },
          "presentations": {
            "items": {
              "$ref": "#/components/schemas/Presentation"
            },
            "type": "array",
            "title": "Presentations"
          },
          "bindings": {
            "items": {
              "$ref": "#/components/schemas/BindingOut"
            },
            "type": "array",
            "title": "Bindings"
          },
          "fingerprint_summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fingerprint Summary"
          },
          "derived_material_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Derived Material Ids"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "material_id",
          "presentations",
          "bindings",
          "fingerprint_summary",
          "derived_material_ids"
        ],
        "title": "ExtractionOut",
        "description": "Everything extracted from one material: presentations found, fingerprint, derived material."
      },
      "Finding": {
        "properties": {
          "finding_id": {
            "type": "string",
            "format": "uuid",
            "title": "Finding Id"
          },
          "about": {
            "type": "string",
            "title": "About",
            "description": "The caller's own presented value this concerns, when it was theirs."
          },
          "about_type": {
            "type": "string",
            "title": "About Type",
            "description": "The registered artifact type of `about`."
          },
          "kind": {
            "type": "string",
            "title": "Kind",
            "description": "What sort of check produced this, e.g. account_age, domain_popularity. A renderer uses it to say what a finding of this sort means; it names the question asked, never who was asked.",
            "default": "unknown"
          },
          "statement": {
            "type": "string",
            "title": "Statement",
            "description": "What was found, in words, with every source name removed."
          },
          "provenance_class": {
            "type": "string",
            "title": "Provenance Class",
            "description": "How this came to be known, e.g. third_party, computed."
          },
          "trust_band": {
            "type": "string",
            "enum": [
              "high",
              "medium",
              "low"
            ],
            "title": "Trust Band",
            "description": "The banded trust of its source."
          },
          "observed_at": {
            "type": "string",
            "format": "date-time",
            "title": "Observed At"
          },
          "data_class": {
            "type": "string",
            "title": "Data Class",
            "description": "C0, C1 or C2. What handling this fact requires."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "finding_id",
          "about",
          "about_type",
          "statement",
          "provenance_class",
          "trust_band",
          "observed_at",
          "data_class"
        ],
        "title": "Finding",
        "description": "One thing that was established about the subject.\n\nThere is deliberately no field saying whether this is good or bad news.\nNothing in the evidence carries a direction, and inventing one here would\nbe this repo writing an interpretation, which I4 forbids. Direction is the\nassessment's job, and the report's."
      },
      "Findings": {
        "properties": {
          "inquiry_id": {
            "type": "string",
            "format": "uuid",
            "title": "Inquiry Id"
          },
          "assessment_id": {
            "type": "string",
            "format": "uuid",
            "title": "Assessment Id"
          },
          "subject": {
            "items": {
              "$ref": "#/components/schemas/Presentation"
            },
            "type": "array",
            "title": "Subject",
            "description": "What was asked about, echoed back."
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings",
            "default": []
          },
          "absences": {
            "items": {
              "$ref": "#/components/schemas/Absence"
            },
            "type": "array",
            "title": "Absences",
            "default": []
          },
          "connections": {
            "items": {
              "$ref": "#/components/schemas/Connection"
            },
            "type": "array",
            "title": "Connections",
            "default": []
          },
          "coverage": {
            "$ref": "#/components/schemas/Coverage"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Generated At"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "inquiry_id",
          "assessment_id",
          "subject",
          "coverage",
          "generated_at"
        ],
        "title": "Findings",
        "description": "The structured result of one inquiry, shaped to be written up.\n\nDeliberately not a report. It states what is known, what is not, and what\nconnects; it draws no conclusion and uses no adjectives. Whatever writes\nthe prose later, a model or a template, is the thing that gets to be\nreadable. This is the thing that gets to be true."
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "InquiryRequest": {
        "properties": {
          "subject": {
            "$ref": "#/components/schemas/Subject"
          },
          "intent": {
            "type": "string",
            "title": "Intent",
            "description": "A registered intent id, e.g. pre_transaction, onboarding_screen."
          },
          "purpose": {
            "type": "string",
            "title": "Purpose",
            "description": "A registered purpose id. Required on every call (I13)."
          },
          "stake": {
            "$ref": "#/components/schemas/Stake"
          },
          "context": {
            "items": {
              "$ref": "#/components/schemas/ObservationIn"
            },
            "type": "array",
            "title": "Context",
            "description": "The caller's own testimony, attached inline.",
            "default": []
          },
          "material_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Material Ids",
            "description": "Material already ingested, to reason over.",
            "default": []
          },
          "tier_ceiling": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tier Ceiling",
            "description": "Highest provider tier this inquiry may use."
          },
          "render": {
            "type": "string",
            "enum": [
              "none",
              "template",
              "model"
            ],
            "title": "Render",
            "description": "Whether to write the findings up as a report. `none` is the default because a caller that only wants the numbers should not pay for prose. A tenant may be clamped below what it asks for; the reply says which renderer ran.",
            "default": "none"
          },
          "render_lang": {
            "type": "string",
            "title": "Render Lang",
            "description": "Language tag for the report, e.g. en, hi.",
            "default": "en"
          },
          "mode": {
            "type": "string",
            "enum": [
              "sync",
              "async",
              "stream"
            ],
            "title": "Mode",
            "default": "sync"
          },
          "idempotency_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Idempotency Key"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "subject",
          "intent",
          "purpose",
          "stake"
        ],
        "title": "InquiryRequest",
        "description": "Ask about a subject at a stake, for a purpose, with an intent."
      },
      "InquiryResponse": {
        "properties": {
          "inquiry_id": {
            "type": "string",
            "format": "uuid",
            "title": "Inquiry Id"
          },
          "status": {
            "type": "string",
            "enum": [
              "accepted",
              "reasoning",
              "preliminary",
              "concluded",
              "rejected"
            ],
            "title": "Status"
          },
          "assessment": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Assessment"
              },
              {
                "type": "null"
              }
            ]
          },
          "findings": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Findings"
              },
              {
                "type": "null"
              }
            ],
            "description": "The structured substrate a report is written from. Present when the inquiry concluded and the tenant's scopes allow it."
          },
          "report": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Report"
              },
              {
                "type": "null"
              }
            ],
            "description": "The findings written up for a person. Present when `render` asked for one."
          },
          "events_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Events Url",
            "description": "SSE stream of revisions while reasoning."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "inquiry_id",
          "status",
          "assessment"
        ],
        "title": "InquiryResponse",
        "description": "The inquiry resource: its state and, when concluded, its assessment."
      },
      "IntakeItem": {
        "properties": {
          "item_ref": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "title": "Item Ref",
            "description": "The caller's id for this item within the batch."
          },
          "presentation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Presentation"
              },
              {
                "type": "null"
              }
            ]
          },
          "material": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MaterialCreate"
              },
              {
                "type": "null"
              }
            ]
          },
          "content_sha256": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64,
                "minLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Content Sha256",
            "description": "Required for material with bytes to follow: fixes the material id and idempotency."
          },
          "source_ref": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Ref",
            "description": "Where the caller got it (complainant, seized device, tip line). Never a relation."
          },
          "observed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observed At",
            "description": "When the caller observed it, if known."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "item_ref"
        ],
        "title": "IntakeItem",
        "description": "One thing arriving for a case: a presentation, or a declared piece of material (D43).\n\nExactly one of ``presentation`` and ``material`` is set. Bytes never travel\nin the manifest: material is declared here with its hash and the bytes\nland at the evidence store by that hash, exactly as ``POST /v1/material``\ndoes. Items are nodes only; an item never asserts a relation to another."
      },
      "IntakeItemResult": {
        "properties": {
          "item_ref": {
            "type": "string",
            "title": "Item Ref"
          },
          "status": {
            "type": "string",
            "enum": [
              "accepted",
              "duplicate",
              "rejected"
            ],
            "title": "Status"
          },
          "artifact_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Artifact Id"
          },
          "material_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Material Id"
          },
          "upload_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Upload Url",
            "description": "Where the bytes go, for accepted material with bytes to follow."
          },
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason",
            "description": "For rejected items: the rule that refused it."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "item_ref",
          "status"
        ],
        "title": "IntakeItemResult",
        "description": "One item's fate: accepted with its content id, a duplicate the case already holds, or rejected."
      },
      "IntakeManifest": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/IntakeItem"
            },
            "type": "array",
            "maxItems": 200,
            "minItems": 1,
            "title": "Items"
          },
          "note": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ],
            "title": "Note",
            "description": "The caller's note on the batch as a whole."
          },
          "idempotency_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Idempotency Key"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "items"
        ],
        "title": "IntakeManifest",
        "description": "A bounded, mixed batch of items for a case, recorded as one intake event (D43).\n\nThe manifest is hashed and written as a ``CaseEvent`` so the evidentiary\nbundle knows what arrived, when, from whom and under which authorization.\nRegistering members never spends: extraction runs on material when its\nbytes arrive, as for any material; gathering waits for ``expand``."
      },
      "IntakeOut": {
        "properties": {
          "intake_id": {
            "type": "string",
            "format": "uuid",
            "title": "Intake Id"
          },
          "case_id": {
            "type": "string",
            "format": "uuid",
            "title": "Case Id"
          },
          "manifest_hash": {
            "type": "string",
            "title": "Manifest Hash"
          },
          "accepted": {
            "type": "integer",
            "title": "Accepted"
          },
          "duplicates": {
            "type": "integer",
            "title": "Duplicates"
          },
          "rejected": {
            "type": "integer",
            "title": "Rejected"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/IntakeItemResult"
            },
            "type": "array",
            "title": "Items"
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "title": "Recorded At"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "intake_id",
          "case_id",
          "manifest_hash",
          "accepted",
          "duplicates",
          "rejected",
          "items",
          "recorded_at"
        ],
        "title": "IntakeOut",
        "description": "The intake record: partial success is normal; every item answers for itself."
      },
      "KeyCreate": {
        "properties": {
          "label": {
            "type": "string",
            "title": "Label"
          },
          "scopes": {
            "items": {
              "type": "string",
              "enum": [
                "inquiries",
                "observations",
                "material",
                "cases",
                "monitors",
                "sessions",
                "admin"
              ]
            },
            "type": "array",
            "title": "Scopes"
          },
          "environment": {
            "type": "string",
            "enum": [
              "live",
              "test"
            ],
            "title": "Environment"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "label",
          "scopes",
          "environment"
        ],
        "title": "KeyCreate",
        "description": "Mint a tenant key: shown once, stored as a salted hash, prefixed gx_live_ or gx_test_ (I11)."
      },
      "KeyOut": {
        "properties": {
          "key_id": {
            "type": "string",
            "format": "uuid",
            "title": "Key Id"
          },
          "prefix": {
            "type": "string",
            "title": "Prefix"
          },
          "secret": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Secret"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "revoked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "key_id",
          "prefix",
          "secret",
          "scopes",
          "created_at",
          "revoked_at"
        ],
        "title": "KeyOut",
        "description": "The minted key. ``secret`` is present only in the creation response."
      },
      "Label": {
        "properties": {
          "value": {
            "type": "string",
            "title": "Value"
          },
          "policy_id": {
            "type": "string",
            "format": "uuid",
            "title": "Policy Id"
          },
          "policy_version": {
            "type": "integer",
            "title": "Policy Version"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "value",
          "policy_id",
          "policy_version"
        ],
        "title": "Label",
        "description": "The tenant's policy applied to the assessment. Belongs to the policy, not the assessment."
      },
      "LedgerEntryOut": {
        "properties": {
          "position": {
            "type": "integer",
            "title": "Position"
          },
          "assessment_id": {
            "type": "string",
            "format": "uuid",
            "title": "Assessment Id"
          },
          "as_of": {
            "type": "string",
            "format": "date-time",
            "title": "As Of"
          },
          "score": {
            "type": "integer",
            "title": "Score"
          },
          "low": {
            "type": "integer",
            "title": "Low"
          },
          "high": {
            "type": "integer",
            "title": "High"
          },
          "methodology_version": {
            "type": "string",
            "title": "Methodology Version"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "position",
          "assessment_id",
          "as_of",
          "score",
          "low",
          "high",
          "methodology_version"
        ],
        "title": "LedgerEntryOut",
        "description": "One position in an entity's ledger."
      },
      "MaterialCreate": {
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "text",
              "document",
              "image",
              "audio",
              "video",
              "structured"
            ],
            "title": "Kind"
          },
          "mime_type": {
            "type": "string",
            "title": "Mime Type"
          },
          "size_bytes": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Size Bytes"
          },
          "duration_ms": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Ms"
          },
          "purpose": {
            "type": "string",
            "title": "Purpose"
          },
          "data_class_declared": {
            "type": "string",
            "enum": [
              "C0",
              "C1",
              "C2"
            ],
            "title": "Data Class Declared"
          },
          "retention_mode": {
            "type": "string",
            "enum": [
              "retain",
              "transient",
              "hold"
            ],
            "title": "Retention Mode",
            "default": "retain"
          },
          "consent_ref": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Consent Ref",
            "description": "Required for audio and video recordings."
          },
          "languages_hint": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Languages Hint",
            "default": []
          },
          "case_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Case Id"
          },
          "inline_text": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Inline Text",
            "description": "For kind=text only: the content itself."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "kind",
          "mime_type",
          "purpose",
          "data_class_declared"
        ],
        "title": "MaterialCreate",
        "description": "Declare a piece of unstructured content before its bytes arrive (D34, D35)."
      },
      "MaterialOut": {
        "properties": {
          "material_id": {
            "type": "string",
            "maxLength": 64,
            "minLength": 64,
            "title": "Material Id"
          },
          "status": {
            "type": "string",
            "enum": [
              "received",
              "extracting",
              "extracted",
              "failed",
              "purged",
              "awaiting_content"
            ],
            "title": "Status"
          },
          "upload_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Upload Url",
            "description": "Signed URL for the bytes; absent for inline text."
          },
          "upload_expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Upload Expires At"
          },
          "derived_from": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Derived From"
          },
          "derivation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Derivation"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "material_id",
          "status"
        ],
        "title": "MaterialOut",
        "description": "The material resource: its hash id, status and where to put the bytes."
      },
      "MonitorCreate": {
        "properties": {
          "subject": {
            "$ref": "#/components/schemas/Subject"
          },
          "purpose": {
            "type": "string",
            "title": "Purpose"
          },
          "threshold_delta": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Threshold Delta",
            "description": "Score movement that triggers.",
            "default": 10
          },
          "interval_max_width": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Interval Max Width"
          },
          "case_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Case Id"
          },
          "webhook_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Webhook Id"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "subject",
          "purpose"
        ],
        "title": "MonitorCreate",
        "description": "A standing watch: tell me when belief about this subject moves."
      },
      "MonitorOut": {
        "properties": {
          "monitor_id": {
            "type": "string",
            "format": "uuid",
            "title": "Monitor Id"
          },
          "active": {
            "type": "boolean",
            "title": "Active"
          },
          "last_assessment": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Assessment"
              },
              {
                "type": "null"
              }
            ]
          },
          "events_url": {
            "type": "string",
            "title": "Events Url"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "monitor_id",
          "active",
          "last_assessment",
          "events_url"
        ],
        "title": "MonitorOut",
        "description": "The monitor resource."
      },
      "ObservationIn": {
        "properties": {
          "subject": {
            "$ref": "#/components/schemas/Subject"
          },
          "provenance_class": {
            "type": "string",
            "enum": [
              "tenant_supplied",
              "self_attested",
              "analyst_asserted"
            ],
            "title": "Provenance Class"
          },
          "summary": {
            "type": "string",
            "maxLength": 500,
            "minLength": 1,
            "title": "Summary"
          },
          "observed_at": {
            "type": "string",
            "format": "date-time",
            "title": "Observed At"
          },
          "observed_range_start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observed Range Start"
          },
          "observed_range_end": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observed Range End"
          },
          "purpose": {
            "type": "string",
            "title": "Purpose"
          },
          "data_class": {
            "type": "string",
            "enum": [
              "C0",
              "C1",
              "C2"
            ],
            "title": "Data Class",
            "default": "C1"
          },
          "consent_ref": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Consent Ref",
            "description": "Required for self_attested."
          },
          "case_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Case Id",
            "description": "Required for analyst_asserted."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "subject",
          "provenance_class",
          "summary",
          "observed_at",
          "purpose"
        ],
        "title": "ObservationIn",
        "description": "Testimony the caller supplies about a subject, entering with its provenance class."
      },
      "ObservationOut": {
        "properties": {
          "observation_id": {
            "type": "string",
            "format": "uuid",
            "title": "Observation Id"
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "title": "Recorded At"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "observation_id",
          "recorded_at"
        ],
        "title": "ObservationOut",
        "description": "Acknowledgement of accepted testimony."
      },
      "OutcomeIn": {
        "properties": {
          "assessment_id": {
            "type": "string",
            "format": "uuid",
            "title": "Assessment Id"
          },
          "decision_ref": {
            "type": "string",
            "title": "Decision Ref",
            "description": "The tenant's own id for the decision they took."
          },
          "kind": {
            "type": "string",
            "enum": [
              "repaid",
              "defaulted",
              "reversed",
              "settled",
              "confirmed",
              "exposed",
              "closed_finding",
              "other"
            ],
            "title": "Kind"
          },
          "observed_at": {
            "type": "string",
            "format": "date-time",
            "title": "Observed At"
          },
          "detail": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "assessment_id",
          "decision_ref",
          "kind",
          "observed_at"
        ],
        "title": "OutcomeIn",
        "description": "What actually happened after a decision. The most valuable thing a tenant sends (E14)."
      },
      "Paragraph": {
        "properties": {
          "text": {
            "type": "string",
            "minLength": 1,
            "title": "Text"
          },
          "cites": {
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "type": "array",
            "minItems": 1,
            "title": "Cites",
            "description": "Finding, connection or assessment ids this paragraph was written from."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "text",
          "cites"
        ],
        "title": "Paragraph",
        "description": "One paragraph, and the findings it was written from.\n\n`cites` is not decoration and not a footnote a reader is expected to\nfollow. It is the mechanism: a paragraph that cannot name the evidence it\ncame from is deleted before the report leaves this service. A renderer\ncannot produce an uncited sentence and have it survive."
      },
      "PolicyBand": {
        "properties": {
          "label": {
            "type": "string",
            "title": "Label"
          },
          "min_score": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Min Score"
          },
          "max_score": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Max Score"
          },
          "max_interval_width": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Interval Width"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "label",
          "min_score",
          "max_score"
        ],
        "title": "PolicyBand",
        "description": "One label band over score and interval."
      },
      "PolicyIn": {
        "properties": {
          "bands": {
            "items": {
              "$ref": "#/components/schemas/PolicyBand"
            },
            "type": "array",
            "minItems": 1,
            "title": "Bands"
          },
          "allowed_purposes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "minItems": 1,
            "title": "Allowed Purposes"
          },
          "tier_ceiling": {
            "type": "string",
            "enum": [
              "T0",
              "T1",
              "T2",
              "T3"
            ],
            "title": "Tier Ceiling"
          },
          "monthly_budget_amount": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Monthly Budget Amount"
          },
          "budget_currency": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 3,
                "minLength": 3
              },
              {
                "type": "null"
              }
            ],
            "title": "Budget Currency"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "bands",
          "allowed_purposes",
          "tier_ceiling"
        ],
        "title": "PolicyIn",
        "description": "A new policy version: bands, allowed purposes, tier ceiling, budget.\n\nOwns the label and only the label (D05)."
      },
      "PolicyOut": {
        "properties": {
          "policy_id": {
            "type": "string",
            "format": "uuid",
            "title": "Policy Id"
          },
          "version": {
            "type": "integer",
            "title": "Version"
          },
          "bands": {
            "items": {
              "$ref": "#/components/schemas/PolicyBand"
            },
            "type": "array",
            "title": "Bands"
          },
          "allowed_purposes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Allowed Purposes"
          },
          "tier_ceiling": {
            "type": "string",
            "title": "Tier Ceiling"
          },
          "valid_from": {
            "type": "string",
            "format": "date-time",
            "title": "Valid From"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "policy_id",
          "version",
          "bands",
          "allowed_purposes",
          "tier_ceiling",
          "valid_from"
        ],
        "title": "PolicyOut",
        "description": "A policy version as stored."
      },
      "Presentation": {
        "properties": {
          "type": {
            "type": "string",
            "title": "Type",
            "description": "A registered artifact type id (see GET /v1/registry/artifact-types)."
          },
          "value": {
            "type": "string",
            "minLength": 1,
            "title": "Value",
            "description": "The presented value; normalised by the kernel."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "title": "Presentation",
        "description": "One presented identifier: a registered artifact type and its value."
      },
      "RegistryEntryOut": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "pack_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pack Id"
          },
          "core": {
            "type": "boolean",
            "title": "Core"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "id",
          "description",
          "pack_id",
          "core"
        ],
        "title": "RegistryEntryOut",
        "description": "A registered vocabulary item the tenant may use: an artifact type, intent or purpose."
      },
      "Report": {
        "properties": {
          "inquiry_id": {
            "type": "string",
            "format": "uuid",
            "title": "Inquiry Id"
          },
          "assessment_id": {
            "type": "string",
            "format": "uuid",
            "title": "Assessment Id"
          },
          "lang": {
            "type": "string",
            "title": "Lang",
            "default": "en"
          },
          "rendered_by": {
            "type": "string",
            "enum": [
              "template",
              "model"
            ],
            "title": "Rendered By",
            "description": "Which renderer produced this. A consumer should not otherwise be able to tell."
          },
          "prompt_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt Version",
            "description": "The prompt that wrote it, when a model did. Null for a template."
          },
          "sections": {
            "items": {
              "$ref": "#/components/schemas/ReportSection"
            },
            "type": "array",
            "title": "Sections"
          },
          "share": {
            "$ref": "#/components/schemas/ShareCardOut"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Generated At"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "inquiry_id",
          "assessment_id",
          "rendered_by",
          "sections",
          "share",
          "generated_at"
        ],
        "title": "Report",
        "description": "One inquiry, written for the person who asked.\n\nIt draws no conclusion the assessment did not already draw, and states no\nfact the findings did not already carry. What it adds is what each fact\nmeans for the reader, which is the one thing evidence never contains."
      },
      "ReportSection": {
        "properties": {
          "key": {
            "type": "string",
            "enum": [
              "lead",
              "found",
              "connected",
              "unseen",
              "certainty"
            ],
            "title": "Key"
          },
          "heading": {
            "type": "string",
            "title": "Heading"
          },
          "paragraphs": {
            "items": {
              "$ref": "#/components/schemas/Paragraph"
            },
            "type": "array",
            "title": "Paragraphs"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "key",
          "heading",
          "paragraphs"
        ],
        "title": "ReportSection",
        "description": "One part of the report, in the fixed order every report uses."
      },
      "SessionOpen": {
        "properties": {
          "purpose": {
            "type": "string",
            "title": "Purpose"
          },
          "intent": {
            "type": "string",
            "title": "Intent"
          },
          "stake": {
            "$ref": "#/components/schemas/Stake"
          },
          "modalities": {
            "items": {
              "type": "string",
              "enum": [
                "text",
                "audio",
                "video"
              ]
            },
            "type": "array",
            "minItems": 1,
            "title": "Modalities"
          },
          "retention_mode": {
            "type": "string",
            "enum": [
              "retain",
              "transient",
              "hold"
            ],
            "title": "Retention Mode",
            "default": "transient"
          },
          "consent_ref": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Consent Ref"
          },
          "languages_hint": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Languages Hint",
            "default": []
          },
          "case_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Case Id"
          },
          "escalate_at_score": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Escalate At Score"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "purpose",
          "intent",
          "stake",
          "modalities"
        ],
        "title": "SessionOpen",
        "description": "An inquiry whose material is still arriving: a live call, chat or video (D38)."
      },
      "SessionOut": {
        "properties": {
          "session_id": {
            "type": "string",
            "format": "uuid",
            "title": "Session Id"
          },
          "stream_url": {
            "type": "string",
            "title": "Stream Url",
            "description": "WebSocket URL for frames in and events out."
          },
          "protocol_version": {
            "type": "string",
            "title": "Protocol Version"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "title": "Expires At"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "session_id",
          "stream_url",
          "protocol_version",
          "expires_at"
        ],
        "title": "SessionOut",
        "description": "Where to stream frames and what the session will emit."
      },
      "ShareCardOut": {
        "properties": {
          "findings": {
            "type": "integer",
            "title": "Findings"
          },
          "connections": {
            "type": "integer",
            "title": "Connections"
          },
          "absences": {
            "type": "integer",
            "title": "Absences"
          },
          "checks_not_run_at_this_tier": {
            "type": "integer",
            "title": "Checks Not Run At This Tier"
          },
          "kicker": {
            "type": "string",
            "title": "Kicker"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "findings",
          "connections",
          "absences",
          "checks_not_run_at_this_tier",
          "kicker"
        ],
        "title": "ShareCardOut",
        "description": "The shareable summary: counts, and a sentence about the counts.\n\nCarries no value the subject gave us, by construction, so passing it on\ndiscloses nothing about them."
      },
      "Stake": {
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "payment",
              "credit",
              "account",
              "listing",
              "hire",
              "belief",
              "other"
            ],
            "title": "Kind"
          },
          "amount": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Amount"
          },
          "currency": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 3,
                "minLength": 3
              },
              {
                "type": "null"
              }
            ],
            "title": "Currency"
          },
          "reversible": {
            "type": "boolean",
            "title": "Reversible",
            "description": "Can the truster undo the act after the fact?",
            "default": false
          },
          "deadline_ms": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Deadline Ms",
            "description": "Time the caller can wait for a first answer."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "kind"
        ],
        "title": "Stake",
        "description": "What is at risk and how much time there is; fixes the tolerable interval and the budget."
      },
      "Subject": {
        "properties": {
          "presentations": {
            "items": {
              "$ref": "#/components/schemas/Presentation"
            },
            "type": "array",
            "title": "Presentations",
            "default": []
          },
          "entity_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Entity Id",
            "description": "A subject we have resolved before."
          },
          "claim": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Claim"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "Subject",
        "description": "What the inquiry is about: presentations, an entity we already know, or a claim."
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          },
          "input": {
            "title": "Input"
          },
          "ctx": {
            "type": "object",
            "title": "Context"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "WebhookIn": {
        "properties": {
          "url": {
            "type": "string",
            "title": "Url"
          },
          "event_types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "minItems": 1,
            "title": "Event Types"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "url",
          "event_types"
        ],
        "title": "WebhookIn",
        "description": "Where to deliver events durably; signed, retried, idempotent."
      },
      "WebhookOut": {
        "properties": {
          "webhook_id": {
            "type": "string",
            "format": "uuid",
            "title": "Webhook Id"
          },
          "url": {
            "type": "string",
            "title": "Url"
          },
          "event_types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Event Types"
          },
          "signing_secret": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Signing Secret"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "webhook_id",
          "url",
          "event_types",
          "signing_secret"
        ],
        "title": "WebhookOut",
        "description": "A registered webhook and its signing secret (shown once)."
      }
    }
  },
  "servers": [
    {
      "url": "https://api.griffynx.com",
      "description": "Production"
    }
  ]
}