{
  "openapi": "3.1.0",
  "info": {
    "title": "Bloch Inc Unified Intelligence — Partner API",
    "version": "1.2.0",
    "description": "Private BI-PoRB, investigations, observation watchlists and Graphus/Bloch Space source modules. Real bounded public-chain facts. Red describes sample-relative structural deviation; Blue describes recorded-evidence completeness. Neither is a validated AML/credit assessment. No owner identity is inferred. Invitations and key administration use the browser portal."
  },
  "servers": [
    {
      "url": "/api/porb",
      "description": "Same host as this documentation. Production currently rednblue.space."
    }
  ],
  "tags": [
    {
      "name": "Analysis"
    },
    {
      "name": "Models"
    },
    {
      "name": "Research"
    },
    {
      "name": "Investigations"
    },
    {
      "name": "Watchlists"
    },
    {
      "name": "Enrichment"
    },
    {
      "name": "Graphus"
    },
    {
      "name": "Bloch Space"
    },
    {
      "name": "Atlas"
    }
  ],
  "paths": {
    "/v1/atlas/timeline": {
      "get": {
        "operationId": "get_v1_atlas_timeline",
        "tags": [
          "Atlas"
        ],
        "summary": "Explore timed activity in a retained source sample",
        "description": "Reuses one tenant-owned analysis after verifying its payload, manifest and dataset SHA-256. Exact optional reference, relative direction, event kind and minimum integer value. Incoming/outgoing/self filters require a reference. Inclusive UTC query dates, half-open minute/hour/day bins aligned to the Unix epoch; automatic resolution chooses the finest interval with at most 366 bins. Empty bins keep null counts and unknown coverage, never inferred zero chain activity. Every returned event is included once with exact amounts and bucket index; sums remain separate by event kind and relative direction, including UTXO inputs/outputs and self events. Missing/invalid times and other exclusions are counted. Duplicate movement identities and inconsistent transaction/block claims fail closed. Up to 4,000 events, 1,200 nodes, eight source pages and 8 MB complete response; no silent truncation. report_sha256 hashes JSON.stringify(report without report_sha256) in returned property order. Twenty requests/minute/organization; no source collection, rescoring or persistence. Private, no-store and audited.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "analysis",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "reference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "incoming",
                "outgoing",
                "self"
              ],
              "default": "all"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "all",
              "description": "An event type supported by the selected asset, or all."
            }
          },
          {
            "name": "interval",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "auto",
                "minute",
                "hour",
                "day"
              ],
              "default": "auto"
            }
          },
          {
            "name": "minimum",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]{0,77})$",
              "default": "0"
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/atlas/motifs": {
      "get": {
        "operationId": "get_v1_atlas_motifs",
        "tags": [
          "Atlas"
        ],
        "summary": "Inspect observed temporal patterns in a retained sample",
        "description": "Digest-verified retained dataset, one asset and exact node ID. Native ETH and USDT/USDC Transfer events only; BTC/BLCH and a zero-address root return not_applicable. Cycles use 2–6 steps with distinct intermediaries; pass-through uses every qualifying distinct-source/destination in/out pair. Both require strictly increasing UTC block times and heights within window_seconds. Fan and repeated directed-pair groups use non-overlapping half-open UTC bins of that width, aligned to the Unix epoch; groups do not imply ordering and do not search across bin boundaries. Fan threshold counts distinct counterparties; repeated threshold counts events in one direction. Same events may support multiple sequences; no conserved-funds, intent, ownership or risk claim. Exact per-event amounts; directional sums only for unordered groups. Self/zero-address events and unsupported/missing metadata are excluded with counts. Token events require log position; duplicate native transaction identities, duplicate token transaction/log positions and inconsistent transaction blocks fail closed. At most 20 results and 20,000 examined candidates, with explicit truncation; complete_within_query is never full-chain coverage. Complete event lists and source provenance, 8 MB maximum serialized response. report_sha256 hashes JSON.stringify(report without report_sha256) in returned property order. 20 searches/minute/organization; no source collection, rescoring or persistence. Private, no-store and audited.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "analysis",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "reference",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "cycles",
                "pass_through",
                "fan_in",
                "fan_out",
                "repeated_pair"
              ],
              "default": "cycles"
            }
          },
          {
            "name": "max_hops",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 2,
              "maximum": 6,
              "default": 4
            }
          },
          {
            "name": "max_results",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10
            }
          },
          {
            "name": "window_seconds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 604800,
              "default": 3600
            }
          },
          {
            "name": "min_counterparties",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 2,
              "maximum": 20,
              "default": 3
            }
          },
          {
            "name": "min_events",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 2,
              "maximum": 100,
              "default": 2
            }
          },
          {
            "name": "minimum",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]{0,77})$",
              "default": "0"
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/atlas/reviews": {
      "get": {
        "operationId": "get_v1_atlas_reviews",
        "tags": [
          "Atlas"
        ],
        "summary": "Read the organization review queue and eligible reviewers",
        "description": "Up to 200 active review/correction records, ordered by human priority, earliest deadline, then creation time and ID. Includes up to 200 active owner/admin/analyst reviewers, with reviewers_truncated when the picker is bounded. Missing or read-only assignees are marked unavailable; assignment never grants access or implies approval or independence. Saved report metadata and linked case context are included only with analyses:read and scores:read as well, and only while the report is retained. No model ranking or source collection. Private, no-store and audited.",
        "x-required-scopes": [
          "cases:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/atlas/records/{id}/assignment": {
      "post": {
        "operationId": "post_v1_atlas_records__id__assignment",
        "tags": [
          "Atlas"
        ],
        "summary": "Assign a reviewer, priority and deadline with revision control",
        "description": "Only active review/correction records. Reviewer must currently hold owner/admin/analyst membership in the same organization; null clears assignment. Requires exact current revision. Assignment increments revision and atomically preserves the version and audit, without changing decision state or retention. Competing writes, invalid membership/deadline, expired records or 100 stored versions fail 409 review_assignment_conflict. Shares the 30 record writes/minute/organization budget.",
        "x-required-scopes": [
          "cases:read",
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "assignee_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uuid"
                  },
                  "priority": {
                    "type": "string",
                    "enum": [
                      "high",
                      "normal",
                      "low"
                    ]
                  },
                  "due_at": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "UTC epoch milliseconds, between record creation and current expiry. Null clears the deadline."
                  }
                },
                "required": [
                  "revision",
                  "assignee_id",
                  "priority",
                  "due_at"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/atlas/records/{id}/history": {
      "get": {
        "operationId": "get_v1_atlas_records__id__history",
        "tags": [
          "Atlas"
        ],
        "summary": "Read and export retained governance revisions",
        "description": "Up to 100 server-recorded versions, oldest first, with exact text, scope, declarations, state, actor credential ID, assignment and original expiry. Migration retains only the then-current revision and does not invent prior authors or versions. complete=false and missing_revisions disclose expired or pre-migration gaps. Each version retains its own expiry; current parent expiry/deletion denies all history. Extending retention never revives expired versions. A concurrent edit or inconsistent latest snapshot fails 409. 30 reads/minute/organization, private, no-store and audited. history_sha256 covers JSON.stringify of the response without history_sha256, preserving property order. It is an export checksum, not independent attestation of decisions or reviewer independence. Downloaded copies do not automatically enforce server retention.",
        "x-required-scopes": [
          "cases:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/atlas/cases/{id}": {
      "get": {
        "operationId": "get_v1_atlas_cases__id_",
        "tags": [
          "Atlas"
        ],
        "summary": "Read investigation links and current Atlas report reviews",
        "description": "Reuses an existing tenant investigation. Up to 20 ordered report links and the current unexpired governance records for each retained report. The list contains metadata, not verified report payloads. Expired/deleted reports return unavailable with attachment identity only: no title, payload or governance content. These link identifiers/digests remain until detached or the case is deleted. Closing a case is not an evidence approval. Reference snapshots remain a separate export.",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/atlas/cases/{id}/reports": {
      "post": {
        "operationId": "post_v1_atlas_cases__id__reports",
        "tags": [
          "Atlas"
        ],
        "summary": "Attach a verified saved Atlas report to an investigation",
        "description": "Requires an open tenant-owned case and an unexpired tenant-owned report whose complete payload verifies against its stored and expected digests. At most 20 links, including unavailable reports until detached. Existing case/report links return 200 duplicate=true without another attachment audit; simultaneous requests create one link. 30 attempts/minute/organization. Link, audit and case timestamp are atomic. No report is copied and no retention is extended.",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read",
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Existing identical item returned; duplicate=true.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "report_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "payload_sha256": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  }
                },
                "required": [
                  "report_id",
                  "payload_sha256"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/atlas/cases/{id}/reports/{link_id}": {
      "delete": {
        "operationId": "delete_v1_atlas_cases__id__reports__link_id_",
        "tags": [
          "Atlas"
        ],
        "summary": "Detach a report without deleting its original content",
        "description": "Requires an open tenant case, link identity and its exact attachment digest. Audit and timestamp update only for an actual deletion. Expired or deleted report links may also be removed. The original report and its reviews are unchanged.",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read",
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "link_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "payload_sha256": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  }
                },
                "required": [
                  "payload_sha256"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/atlas/cases/{id}/export": {
      "get": {
        "operationId": "get_v1_atlas_cases__id__export",
        "tags": [
          "Atlas"
        ],
        "summary": "Export a verified Atlas dossier and retained governance records",
        "description": "Six exports/minute/organization. Includes every link, complete retained report payloads, current exact-subject governance records and explicit unavailable placeholders. complete=false means at least one linked report expired or was deleted; it never silently drops missing evidence. Report corruption or attachment digest mismatch fails 409; a changed case/link/report/review manifest during verification fails 409 case_changed_retry. Maximum complete bundle size 12 MB, checked before payload reads and after serialization; oversize returns 422 without truncation. bundle_sha256 hashes JSON.stringify of the returned bundle with bundle_sha256 omitted, preserving property order. expires_at is the earliest included report/record expiry, or null if no retained content. Closing a case does not approve evidence. No source collection or rescoring. Reference snapshots are excluded and have their own existing investigation export. Private, no-store, audited, attachment JSON; downloaded copies do not automatically refresh or enforce server retention.",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/atlas/reports": {
      "get": {
        "operationId": "get_v1_atlas_reports",
        "tags": [
          "Atlas"
        ],
        "summary": "List active saved Atlas calculations",
        "description": "Up to 20 immutable report metadata rows, newest first. Includes retained/expired counts and storage bounds. Expired data is hidden immediately and consumes capacity until an administrator purges it. Tenant-private, no-store and audited; full payloads require a separate verified read.",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      },
      "post": {
        "operationId": "post_v1_atlas_reports",
        "tags": [
          "Atlas"
        ],
        "summary": "Save a verified timeline, path, pattern or comparison calculation",
        "description": "Recomputes the calculation from tenant-owned, digest-verified saved analyses and requires expected_report_sha256 to match the preview. Client report content is not accepted. Six new save attempts/minute/organization; up to 20 retained reports, 6 MB each, with 1–365 day retention. Complete serialized reports only: oversize fails 422 without removing events, even when the query endpoint permits a larger response. Timeline reports preserve all queried bins, exact events, exclusions and unknown coverage, including empty or untimed results. For kind=timeline, range/search selection affects only the browser view. For kind=window_comparison, submit disjoint chronological baseline/comparison bucket ranges with the same normalized search and exactly one source: analysis plus timeline query, or timeline_report. The server recomputes both windows from the verified source. A graphus-atlas-window-comparison-record-1.0.0 wrapper hashes the canonical parameters and unchanged child comparison, including its original comparison_sha256 and parent timeline SHA-256. expected_report_sha256 is the wrapper hash. Source timelines must remain active and unchanged through commit; the child then survives either ancestor deletion. No recalculation is needed when viewing a retained child. Counts, exact concentration fractions and complete selected events are descriptive, with unknown coverage preserved. Empty, unavailable, not-applicable and search-truncated reports retain their original state and limits; saving does not turn them into complete-chain findings. No new collection or rescoring. Required purpose, lawful basis and source rights are user declarations. Atomic metadata, payload chunks and audit; request_id UUID retries with identical normalized content return the existing report with duplicate=true (200), even after source analyses or parent timelines leave history. Reusing an extant request_id with different content or an expired report returns 409. After deletion or purge the request_id can be reused. Saved payloads survive analysis retention. Immutable; reviews/corrections are separate Atlas records using returned review_subject, and reports may be linked to dossiers. No score access is granted.",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read",
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Existing identical item returned; duplicate=true.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "request_id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "title": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 120
                      },
                      "purpose": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "lawful_basis": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "source_licence": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "retention_days": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 365
                      },
                      "expected_report_sha256": {
                        "type": "string",
                        "pattern": "^[a-f0-9]{64}$"
                      },
                      "kind": {
                        "const": "window_comparison"
                      },
                      "parameters": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "analysis": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "timeline": {
                                "type": "object",
                                "properties": {
                                  "reference": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "minLength": 1,
                                    "maxLength": 200
                                  },
                                  "direction": {
                                    "type": "string",
                                    "enum": [
                                      "all",
                                      "incoming",
                                      "outgoing",
                                      "self"
                                    ]
                                  },
                                  "kind": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 80
                                  },
                                  "interval": {
                                    "type": "string",
                                    "enum": [
                                      "auto",
                                      "minute",
                                      "hour",
                                      "day"
                                    ]
                                  },
                                  "minimum": {
                                    "type": "string",
                                    "pattern": "^(0|[1-9][0-9]{0,77})$"
                                  },
                                  "start": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "format": "date-time"
                                  },
                                  "end": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "format": "date-time"
                                  }
                                },
                                "required": [],
                                "additionalProperties": false
                              },
                              "baseline": {
                                "type": "object",
                                "properties": {
                                  "first": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 365
                                  },
                                  "last": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 365
                                  },
                                  "query": {
                                    "type": "string",
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "first",
                                  "last"
                                ],
                                "additionalProperties": false
                              },
                              "comparison": {
                                "type": "object",
                                "properties": {
                                  "first": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 365
                                  },
                                  "last": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 365
                                  },
                                  "query": {
                                    "type": "string",
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "first",
                                  "last"
                                ],
                                "additionalProperties": false
                              }
                            },
                            "required": [
                              "analysis",
                              "timeline",
                              "baseline",
                              "comparison"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "timeline_report": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "baseline": {
                                "type": "object",
                                "properties": {
                                  "first": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 365
                                  },
                                  "last": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 365
                                  },
                                  "query": {
                                    "type": "string",
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "first",
                                  "last"
                                ],
                                "additionalProperties": false
                              },
                              "comparison": {
                                "type": "object",
                                "properties": {
                                  "first": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 365
                                  },
                                  "last": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 365
                                  },
                                  "query": {
                                    "type": "string",
                                    "maxLength": 200
                                  }
                                },
                                "required": [
                                  "first",
                                  "last"
                                ],
                                "additionalProperties": false
                              }
                            },
                            "required": [
                              "timeline_report",
                              "baseline",
                              "comparison"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "required": [
                      "request_id",
                      "title",
                      "purpose",
                      "lawful_basis",
                      "source_licence",
                      "retention_days",
                      "expected_report_sha256",
                      "kind",
                      "parameters"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "request_id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "title": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 120
                      },
                      "purpose": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "lawful_basis": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "source_licence": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "retention_days": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 365
                      },
                      "expected_report_sha256": {
                        "type": "string",
                        "pattern": "^[a-f0-9]{64}$"
                      },
                      "kind": {
                        "const": "timeline"
                      },
                      "parameters": {
                        "type": "object",
                        "properties": {
                          "analysis": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "reference": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "direction": {
                            "type": "string",
                            "enum": [
                              "all",
                              "incoming",
                              "outgoing",
                              "self"
                            ]
                          },
                          "kind": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 80
                          },
                          "interval": {
                            "type": "string",
                            "enum": [
                              "auto",
                              "minute",
                              "hour",
                              "day"
                            ]
                          },
                          "minimum": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,77})$"
                          },
                          "start": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          },
                          "end": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        },
                        "required": [
                          "analysis"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "request_id",
                      "title",
                      "purpose",
                      "lawful_basis",
                      "source_licence",
                      "retention_days",
                      "expected_report_sha256",
                      "kind",
                      "parameters"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "request_id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "title": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 120
                      },
                      "purpose": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "lawful_basis": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "source_licence": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "retention_days": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 365
                      },
                      "expected_report_sha256": {
                        "type": "string",
                        "pattern": "^[a-f0-9]{64}$"
                      },
                      "kind": {
                        "const": "paths"
                      },
                      "parameters": {
                        "type": "object",
                        "properties": {
                          "analysis": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "from": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "to": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "max_hops": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 6
                          },
                          "max_paths": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 20
                          },
                          "max_gap_seconds": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 604800
                          },
                          "max_duration_seconds": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 604800
                          },
                          "minimum": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,77})$"
                          },
                          "start": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          },
                          "end": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        },
                        "required": [
                          "analysis",
                          "from",
                          "to"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "request_id",
                      "title",
                      "purpose",
                      "lawful_basis",
                      "source_licence",
                      "retention_days",
                      "expected_report_sha256",
                      "kind",
                      "parameters"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "request_id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "title": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 120
                      },
                      "purpose": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "lawful_basis": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "source_licence": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "retention_days": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 365
                      },
                      "expected_report_sha256": {
                        "type": "string",
                        "pattern": "^[a-f0-9]{64}$"
                      },
                      "kind": {
                        "const": "motifs"
                      },
                      "parameters": {
                        "type": "object",
                        "properties": {
                          "analysis": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "reference": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "type": {
                            "type": "string",
                            "enum": [
                              "cycles",
                              "pass_through",
                              "fan_in",
                              "fan_out",
                              "repeated_pair"
                            ]
                          },
                          "max_hops": {
                            "type": "integer",
                            "minimum": 2,
                            "maximum": 6
                          },
                          "max_results": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 20
                          },
                          "window_seconds": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 604800
                          },
                          "min_counterparties": {
                            "type": "integer",
                            "minimum": 2,
                            "maximum": 20
                          },
                          "min_events": {
                            "type": "integer",
                            "minimum": 2,
                            "maximum": 100
                          },
                          "minimum": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,77})$"
                          },
                          "start": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          },
                          "end": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        },
                        "required": [
                          "analysis",
                          "reference"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "request_id",
                      "title",
                      "purpose",
                      "lawful_basis",
                      "source_licence",
                      "retention_days",
                      "expected_report_sha256",
                      "kind",
                      "parameters"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "request_id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "title": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 120
                      },
                      "purpose": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "lawful_basis": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "source_licence": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 300
                      },
                      "retention_days": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 365
                      },
                      "expected_report_sha256": {
                        "type": "string",
                        "pattern": "^[a-f0-9]{64}$"
                      },
                      "kind": {
                        "const": "comparison"
                      },
                      "parameters": {
                        "type": "object",
                        "properties": {
                          "baseline": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "current": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "reference": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "required": [
                          "baseline",
                          "current"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "request_id",
                      "title",
                      "purpose",
                      "lawful_basis",
                      "source_licence",
                      "retention_days",
                      "expected_report_sha256",
                      "kind",
                      "parameters"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/v1/atlas/reports/{id}": {
      "get": {
        "operationId": "get_v1_atlas_reports__id_",
        "tags": [
          "Atlas"
        ],
        "summary": "Read a complete verified saved Atlas report",
        "description": "Checks tenant, expiry, complete ordered chunks, byte count, SHA-256 of JSON.stringify(report), the inner report_sha256 over the calculation without its hash, and agreement of manifest kind, version, parameters and summary with that calculation. Returns metadata, integrity and report; corruption fails 409, missing or expired fails 404. The export route adds an attachment filename. No fresh source access. Private, no-store and audited.",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      },
      "delete": {
        "operationId": "delete_v1_atlas_reports__id_",
        "tags": [
          "Atlas"
        ],
        "summary": "Delete a saved report and its complete payload",
        "description": "Requires the exact stored payload digest and tenant ownership. Deletes all report chunks atomically. Access audit and separately governed reviews remain. Conflicts return 409.",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read",
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "payload_sha256": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  }
                },
                "required": [
                  "payload_sha256"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/atlas/reports/{id}/export": {
      "get": {
        "operationId": "get_v1_atlas_reports__id__export",
        "tags": [
          "Atlas"
        ],
        "summary": "Export a complete verified saved Atlas report",
        "description": "Checks tenant, expiry, complete ordered chunks, byte count, SHA-256 of JSON.stringify(report), the inner report_sha256 over the calculation without its hash, and agreement of manifest kind, version, parameters and summary with that calculation. Returns metadata, integrity and report; corruption fails 409, missing or expired fails 404. The export route adds an attachment filename. No fresh source access. Private, no-store and audited.",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/atlas/private": {
      "get": {
        "operationId": "get_v1_atlas_private",
        "tags": [
          "Atlas"
        ],
        "summary": "Read organization Data Atlas records and access context",
        "description": "Up to 200 unexpired private governance records and 100 case summaries. Only administrator sessions receive the latest 50 access audit events. Session identity is omitted for API keys. The observation model card also requires scores:read; public AML scores are never returned.",
        "x-required-scopes": [
          "cases:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/atlas/paths": {
      "get": {
        "operationId": "get_v1_atlas_paths",
        "tags": [
          "Atlas"
        ],
        "summary": "Explore ordered event paths in one retained analysis",
        "description": "Exact distinct node IDs from one tenant-owned saved sample. Dataset SHA-256 must match the stored payload and database manifest. ETH native_value and USDT/USDC erc20_transfer events only; BTC/BLCH return not_applicable. Simple directed paths require strictly increasing UTC block timestamps and heights, gap and total-duration bounds, inclusive UTC start/end and exact integer minimum per event. Missing/invalid time, self events, unsupported kinds and exclusions are counted. Zero-address intermediaries are not traversed. Deterministic breadth-first traversal orders by hop count, then event time/ID; at most 20,000 candidate expansions and 20 returned paths with explicit truncation. Every step retains exact amounts, block and transaction identities, gap, source and dataset lineage. No conserved-value, ownership or AML conclusion. No new collection or rescoring. 20 requests/minute/organization; private, no-store and audited. report_sha256 covers JSON.stringify of the report without report_sha256, preserving field order.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "analysis",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "max_hops",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 6,
              "default": 4
            }
          },
          {
            "name": "max_paths",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10
            }
          },
          {
            "name": "max_gap_seconds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 604800,
              "default": 86400
            }
          },
          {
            "name": "max_duration_seconds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 604800,
              "default": 604800
            }
          },
          {
            "name": "minimum",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]{0,77})$",
              "default": "0"
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/atlas/compare": {
      "get": {
        "operationId": "get_v1_atlas_compare",
        "tags": [
          "Atlas"
        ],
        "summary": "Compare two retained source samples with exact amounts",
        "description": "Both analyses must belong to this organization and share asset, network and source; conflicting recorded token contracts are rejected. Stored dataset hashes are verified against both payloads and database manifests. No collection or rescoring. Optional reference is an exact node ID present in either sample. Event identity is the exact source event ID; changes, one-sided observations, block hash disagreements, reference/neighbor counts and per-kind/direction base-unit integer deltas are retained. Self events count once; UTXO input/output totals stay separate. Up to 4,000 events, 1,200 nodes and 8 pages per side; complete union at most 8,000 event rows and 16 MB response, with no silent truncation. 20 comparisons/minute/organization. Report SHA-256 covers JSON.stringify of the response with report_sha256 omitted, preserving property and array order. Absence is not inactivity and source conflicts do not prove a reorganization. Red/Blue trends are not calculated. Audited, private and no-store; no new comparison is persisted.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "baseline",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "current",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "reference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/atlas/records": {
      "post": {
        "operationId": "post_v1_atlas_records",
        "tags": [
          "Atlas"
        ],
        "summary": "Save a private note, processing ground, correction or review",
        "description": "200 records per organization, including expired records until an administrator purges them. 30 writes/minute. Required purpose, lawful basis and source rights are user declarations, not legal validation. Expiry blocks reads; manual administrative purge physically deletes expired records.",
        "x-required-scopes": [
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "annotation",
                      "processing",
                      "correction",
                      "review"
                    ]
                  },
                  "subject": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "body": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 2000
                  },
                  "purpose": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 300
                  },
                  "lawful_basis": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 300
                  },
                  "source_licence": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 300
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "reviewed",
                      "resolved"
                    ]
                  },
                  "retention_days": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 365
                  }
                },
                "required": [
                  "kind",
                  "subject",
                  "body",
                  "purpose",
                  "lawful_basis",
                  "source_licence",
                  "status",
                  "retention_days"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/atlas/records/{id}": {
      "post": {
        "operationId": "post_v1_atlas_records__id_",
        "tags": [
          "Atlas"
        ],
        "summary": "Update an Atlas record with optimistic revision control",
        "description": "Requires the current revision and an unexpired record in this organization. Revision, retained snapshot and audit are atomic. At most 100 stored versions per record, including expired ones until administrator purge. Current expiry resets from this write; earlier versions retain their original expiry. Existing review deadlines must fit within the new retention; changing kind to annotation/processing clears assignment, priority and deadline. Conflicts return 409 without overwriting newer decisions.",
        "x-required-scopes": [
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "annotation",
                      "processing",
                      "correction",
                      "review"
                    ]
                  },
                  "subject": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "body": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 2000
                  },
                  "purpose": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 300
                  },
                  "lawful_basis": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 300
                  },
                  "source_licence": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 300
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "reviewed",
                      "resolved"
                    ]
                  },
                  "retention_days": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 365
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "required": [
                  "kind",
                  "subject",
                  "body",
                  "purpose",
                  "lawful_basis",
                  "source_licence",
                  "status",
                  "retention_days",
                  "revision"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "delete_v1_atlas_records__id_",
        "tags": [
          "Atlas"
        ],
        "summary": "Delete a private Atlas record",
        "description": "Requires the current revision and organization scope; audit event remains after deletion.",
        "x-required-scopes": [
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "required": [
                  "revision"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/atlas/sources": {
      "get": {
        "operationId": "get_v1_atlas_sources",
        "tags": [
          "Atlas"
        ],
        "summary": "Inspect official reference sources and identifier formats",
        "description": "Lists the fixed UN, UK and EU reference adapters without downloading their snapshots.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      },
      "post": {
        "operationId": "post_v1_atlas_sources",
        "tags": [
          "Atlas"
        ],
        "summary": "Look up exact official listing references",
        "description": "Reads official XML, retaining reference numbers only. Includes source digest, byte count, parser and six-hour expiry. 6 lookups/minute. A reference match does not link a name, person, wallet or owner to the listing. Unavailable, malformed, oversize or redirected sources fail closed; failed refreshes do not return expired snapshots.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "source": {
                    "type": "string",
                    "enum": [
                      "un-consolidated",
                      "uk-sanctions",
                      "eu-financial-sanctions"
                    ]
                  },
                  "references": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 25,
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "source",
                  "references"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/capabilities": {
      "get": {
        "operationId": "get_v1_capabilities",
        "tags": [
          "Research"
        ],
        "summary": "Inspect supported assets, limits and this key’s granted scopes",
        "description": "No source queries. Describes installed capabilities and the current credential permissions, not source health.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/overview": {
      "get": {
        "operationId": "get_v1_overview",
        "tags": [
          "Analysis"
        ],
        "summary": "Connected network observations",
        "description": "",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/science": {
      "get": {
        "operationId": "get_v1_science",
        "tags": [
          "Models"
        ],
        "summary": "Time series and historical model evaluation",
        "description": "",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/model": {
      "get": {
        "operationId": "get_v1_model",
        "tags": [
          "Models"
        ],
        "summary": "Descriptive Red/Blue model card",
        "description": "",
        "x-required-scopes": [
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/analyses": {
      "post": {
        "operationId": "post_v1_analyses",
        "tags": [
          "Analysis"
        ],
        "summary": "Collect real source pages and save a scored analysis",
        "description": "Also indexes references and evaluates existing organization watchlists. 6 collections/minute and 100/day per organization. This POST has no idempotency key: after a timeout inspect recent analyses before submitting again.",
        "x-required-scopes": [
          "data:read",
          "analyses:write",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "asset": {
                    "type": "string",
                    "enum": [
                      "BTC",
                      "ETH",
                      "BLCH",
                      "USDT",
                      "USDC"
                    ]
                  },
                  "pages": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 8,
                    "default": 2
                  }
                },
                "required": [
                  "asset"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "get_v1_analyses",
        "tags": [
          "Analysis"
        ],
        "summary": "List the latest 50 retained analyses",
        "description": "Returns {analyses, retention}. No pagination parameters are accepted on this endpoint.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/analyses/{id}": {
      "get": {
        "operationId": "get_v1_analyses__id_",
        "tags": [
          "Analysis"
        ],
        "summary": "Read a saved source graph, scores and provenance",
        "description": "",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/analyses/{id}/scores": {
      "get": {
        "operationId": "get_v1_analyses__id__scores",
        "tags": [
          "Analysis"
        ],
        "summary": "Read reference scores and model version",
        "description": "",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/analyses/{id}/export": {
      "get": {
        "operationId": "get_v1_analyses__id__export",
        "tags": [
          "Analysis"
        ],
        "summary": "Download a saved analysis with exact source records",
        "description": "",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/analyses/{id}/enrichment": {
      "post": {
        "operationId": "post_v1_analyses__id__enrichment",
        "tags": [
          "Enrichment"
        ],
        "summary": "Compare saved references with official OFAC identifiers",
        "description": "Fetches official SDN and supplementary remarks. 3 requests/minute and 24/day per organization. Shared source snapshots expire after 6 hours. Stores the latest report separately from scores; failures preserve the prior report. No personal names, ownership inference or indirect exposure. Match status is potential_exact_identifier_match, no_exact_identifier_match_in_snapshot or not_covered. BLCH script hashes are not comparable. Red/Blue are unchanged.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read",
          "data:read",
          "analyses:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {},
                "required": [],
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "get_v1_analyses__id__enrichment",
        "tags": [
          "Enrichment"
        ],
        "summary": "Read the latest retained official identifier evidence",
        "description": "Does not fetch sources. Returns source_expired when the snapshot is past its 6-hour freshness window and policy_outdated when the report requires refresh after a parser/policy update. report_digest is SHA-256 of JSON.stringify(report) in returned property order before adding report_digest, source_expired and policy_outdated. File digests cover downloaded source bytes. Reports are tenant-scoped and removed with the analysis.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read",
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/references/batch": {
      "post": {
        "operationId": "post_v1_references_batch",
        "tags": [
          "Research"
        ],
        "summary": "Research up to 25 exact references in one asset",
        "description": "Read-only batch lookup of retained indexed samples; no collection or score recalculation. Normalizes and deduplicates references. Up to five recent observations per reference, stable created_at/id order. 20 batches/minute per organization. Returns index coverage; no observation is not a clearance or inactivity finding.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "asset": {
                    "type": "string",
                    "enum": [
                      "BTC",
                      "ETH",
                      "BLCH",
                      "USDT",
                      "USDC"
                    ]
                  },
                  "references": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 25,
                    "items": {
                      "type": "string",
                      "maxLength": 100
                    }
                  },
                  "runs_per_reference": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 5,
                    "default": 3
                  }
                },
                "required": [
                  "asset",
                  "references"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/analyses/{id}/profile": {
      "get": {
        "operationId": "get_v1_analyses__id__profile",
        "tags": [
          "Research"
        ],
        "summary": "Read time, structure and exact typed-amount evidence profile",
        "description": "Returns source anchors and dataset digest. For legacy runs, derives only the descriptive profile from the retained graph without modifying saved scores.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/analyses/{id}/ml": {
      "get": {
        "operationId": "get_v1_analyses__id__ml",
        "tags": [
          "Models"
        ],
        "summary": "Read Isolation Forest, neighborhood and clustering results",
        "description": "Returns saved model versions, availability, feature scaling, statistics and correlation. Does not retrain a saved run.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/analyses/{id}/neighbors": {
      "get": {
        "operationId": "get_v1_analyses__id__neighbors",
        "tags": [
          "Models"
        ],
        "summary": "Inspect the three nearest feature neighbors of one reference",
        "description": "The ten-neighbor mean distance uses the saved asset cohort; three nearest references are retained. Feature neighbors are not transaction counterparties. Small cohorts and older runs explicitly return available=false.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "reference",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/references": {
      "get": {
        "operationId": "get_v1_references",
        "tags": [
          "Research"
        ],
        "summary": "Find an exact reference across indexed analyses",
        "description": "Returns {items,next_cursor,asset,reference,index:{retained,indexed},coverage}. Ethereum and Bloch references are case-normalized; Bitcoin Base58 is case-sensitive. Read pre-release analyses once to index them. Checks format only, not an address checksum. A missing match does not establish inactivity.",
        "x-required-scopes": [
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "asset",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "BTC",
                "ETH",
                "BLCH",
                "USDT",
                "USDC"
              ]
            }
          },
          {
            "name": "reference",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Opaque next_cursor from the preceding page. Keep the same filters."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/cases": {
      "get": {
        "operationId": "get_v1_cases",
        "tags": [
          "Investigations"
        ],
        "summary": "List private investigations",
        "description": "",
        "x-required-scopes": [
          "cases:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Opaque next_cursor from the preceding page. Keep the same filters."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      },
      "post": {
        "operationId": "post_v1_cases",
        "tags": [
          "Investigations"
        ],
        "summary": "Create an investigation",
        "description": "Maximum 100 investigations per organization. Titles are private; do not use them to assert wallet ownership.",
        "x-required-scopes": [
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 120
                  }
                },
                "required": [
                  "title"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/cases/{id}": {
      "get": {
        "operationId": "get_v1_cases__id_",
        "tags": [
          "Investigations"
        ],
        "summary": "Read an investigation and retained evidence",
        "description": "",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      },
      "delete": {
        "operationId": "delete_v1_cases__id_",
        "tags": [
          "Investigations"
        ],
        "summary": "Delete an investigation and its evidence",
        "description": "Deletes the case and snapshots. This action is audited and permanent.",
        "x-required-scopes": [
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {},
                "required": [],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/cases/{id}/status": {
      "post": {
        "operationId": "post_v1_cases__id__status",
        "tags": [
          "Investigations"
        ],
        "summary": "Close or reopen an investigation",
        "description": "",
        "x-required-scopes": [
          "cases:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "closed"
                    ]
                  }
                },
                "required": [
                  "status"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/cases/{id}/evidence": {
      "post": {
        "operationId": "post_v1_cases__id__evidence",
        "tags": [
          "Investigations"
        ],
        "summary": "Attach a reference evidence snapshot",
        "description": "Choose node_id from a saved graph or score row. Retains the first 100 incident records in dataset order, endpoint nodes, score/model, anchors and source. records_total, records_returned and truncated disclose bounds. digest is SHA-256 of UTF-8 JSON.stringify(snapshot), in returned property order. Maximum 50 snapshots per case. Repeating case/analysis/node returns the existing snapshot. Evidence survives the 50-analysis retention window.",
        "x-required-scopes": [
          "cases:write",
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Existing identical item returned; duplicate=true.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "analysis_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "node_id": {
                    "type": "string",
                    "maxLength": 200
                  }
                },
                "required": [
                  "analysis_id",
                  "node_id"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/cases/{id}/export": {
      "get": {
        "operationId": "get_v1_cases__id__export",
        "tags": [
          "Investigations"
        ],
        "summary": "Export an investigation and evidence digests",
        "description": "",
        "x-required-scopes": [
          "cases:read",
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/watchlists": {
      "get": {
        "operationId": "get_v1_watchlists",
        "tags": [
          "Watchlists"
        ],
        "summary": "List watched public references",
        "description": "",
        "x-required-scopes": [
          "watchlists:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Opaque next_cursor from the preceding page. Keep the same filters."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      },
      "post": {
        "operationId": "post_v1_watchlists",
        "tags": [
          "Watchlists"
        ],
        "summary": "Watch a public reference",
        "description": "Maximum 100 references per organization. Same asset/reference returns the existing entry. No continuous scanning or email notifications.",
        "x-required-scopes": [
          "watchlists:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Existing identical item returned; duplicate=true.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "asset": {
                    "type": "string",
                    "enum": [
                      "BTC",
                      "ETH",
                      "BLCH",
                      "USDT",
                      "USDC"
                    ]
                  },
                  "reference": {
                    "type": "string",
                    "maxLength": 100
                  }
                },
                "required": [
                  "asset",
                  "reference"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/watchlists/{id}": {
      "delete": {
        "operationId": "delete_v1_watchlists__id_",
        "tags": [
          "Watchlists"
        ],
        "summary": "Remove a watched reference and its observations",
        "description": "",
        "x-required-scopes": [
          "watchlists:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {},
                "required": [],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/watchlists/evaluate": {
      "post": {
        "operationId": "post_v1_watchlists_evaluate",
        "tags": [
          "Watchlists"
        ],
        "summary": "Evaluate watchlists against one retained analysis",
        "description": "Idempotent per watched reference and analysis ID; returns observations_created. Different runs can contain overlapping chain records; observations are not a count of unique transactions.",
        "x-required-scopes": [
          "watchlists:write",
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "analysis_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "analysis_id"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/observations": {
      "get": {
        "operationId": "get_v1_observations",
        "tags": [
          "Watchlists"
        ],
        "summary": "Read the observation inbox",
        "description": "Latest 500 matches per organization, including reviewed matches. Returns {items,next_cursor,retention,coverage}. Snapshot fields survive source-analysis retention; the source graph may no longer be available.",
        "x-required-scopes": [
          "watchlists:read",
          "analyses:read",
          "scores:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Opaque next_cursor from the preceding page. Keep the same filters."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/observations/{id}/review": {
      "post": {
        "operationId": "post_v1_observations__id__review",
        "tags": [
          "Watchlists"
        ],
        "summary": "Mark an observation as reviewed",
        "description": "",
        "x-required-scopes": [
          "watchlists:write"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {},
                "required": [],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/v1/graphus/system/map": {
      "get": {
        "operationId": "get_v1_graphus_system_map",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · system/map",
        "description": "Module registry, implementation/access states, workflow and data contracts. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/graphus/daas/manifest": {
      "get": {
        "operationId": "get_v1_graphus_daas_manifest",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · daas/manifest",
        "description": "Public Graphus capability manifest. Any prototype/planned status remains unchanged by portal aggregation. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/graphus/atlas/schema": {
      "get": {
        "operationId": "get_v1_graphus_atlas_schema",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · atlas/schema",
        "description": "Versioned 84-field registry with implementation states, asset identities, methods and limits. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/graphus/atlas/analyze": {
      "get": {
        "operationId": "get_v1_graphus_atlas_analyze",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · atlas/analyze",
        "description": "asset required. Descriptive fields over one bounded source page. Optional UTC start/end, exact reference, minimum base units, kind and max_hops (1–6). No private records or scores. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "asset",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "BTC",
                "ETH",
                "BLCH",
                "USDT",
                "USDC"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_hops",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minimum",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/graphus/chain/network": {
      "get": {
        "operationId": "get_v1_graphus_chain_network",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · chain/network",
        "description": "Bounded network page. asset required. Feed next_cursor into cursor for the next page. No score or ownership label. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "asset",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "BTC",
                "ETH",
                "BLCH",
                "USDT",
                "USDC"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/graphus/chain/wallet": {
      "get": {
        "operationId": "get_v1_graphus_chain_wallet",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · chain/wallet",
        "description": "asset, network and address required. Networks: bitcoin-mainnet, ethereum-mainnet, bloch-mainnet. Bounded source-reported address/script observations. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "asset",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "BTC",
                "ETH",
                "BLCH",
                "USDT",
                "USDC"
              ]
            }
          },
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "address",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/graphus/chain/activity": {
      "get": {
        "operationId": "get_v1_graphus_chain_activity",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · chain/activity",
        "description": "asset and address required. Ethereum USDT/USDC Transfer logs over a bounded finalized block window. Native ETH history requires an index and is unavailable here. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "asset",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "BTC",
                "ETH",
                "BLCH",
                "USDT",
                "USDC"
              ]
            }
          },
          {
            "name": "address",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "to_block",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "expected_hash",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/graphus/chain/transaction-receipt": {
      "get": {
        "operationId": "get_v1_graphus_chain_transaction_receipt",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · chain/transaction-receipt",
        "description": "hash, expected_block, expected_hash and expected_index required. Finalized Ethereum receipt checked against the selected log. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "hash",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "expected_block",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "expected_hash",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "expected_index",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/graphus/chain/bloch-history": {
      "get": {
        "operationId": "get_v1_graphus_chain_bloch_history",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · chain/bloch-history",
        "description": "address required. Bloch script-hash history; pass the returned source cursor unchanged. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "address",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/graphus/chain/holders": {
      "get": {
        "operationId": "get_v1_graphus_chain_holders",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · chain/holders",
        "description": "asset=BLCH required. Up to 64 indexed positive script balances, without identities. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "asset",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "BTC",
                "ETH",
                "BLCH",
                "USDT",
                "USDC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/graphus/chain/balances": {
      "get": {
        "operationId": "get_v1_graphus_chain_balances",
        "tags": [
          "Graphus"
        ],
        "summary": "Graphus · chain/balances",
        "description": "asset and comma-separated addresses required; 1–16 BTC/ETH/USDT/USDC addresses. Anchoring and source limitations are returned. Fixed source gateway; keys/cookies are never forwarded. Shared 60 upstream reads/minute per organization. Upstream errors remain errors.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "asset",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "BTC",
                "ETH",
                "BLCH",
                "USDT",
                "USDC"
              ]
            }
          },
          {
            "name": "addresses",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/overview": {
      "get": {
        "operationId": "get_v1_space_overview",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · overview",
        "description": "Current bounded network overview. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/series": {
      "get": {
        "operationId": "get_v1_space_series",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · series",
        "description": "Recorded time series: Bitcoin 10/30 blocks, Ethereum 12/48 blocks, Bloch 6h/24h/7d peer windows. These windows are not interchangeable. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          },
          {
            "name": "range",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/intelligence": {
      "get": {
        "operationId": "get_v1_space_intelligence",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · intelligence",
        "description": "Bitcoin mining, fee, mempool and forecast inputs; source-reported and bounded. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/validators": {
      "get": {
        "operationId": "get_v1_space_validators",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · validators",
        "description": "Bloch validator pages, offset 0–4096 in steps of 32. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/graphus": {
      "get": {
        "operationId": "get_v1_space_graphus",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · graphus",
        "description": "Public Graphus capability and holder context; partial source availability remains explicit. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/graph": {
      "get": {
        "operationId": "get_v1_space_graph",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · graph",
        "description": "Typed evidence graph: network, matching asset, kind=recent|address|tx, optional public query and cursor. Exact amounts and provenance; no ownership labels. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          },
          {
            "name": "asset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "BTC",
                "ETH",
                "BLCH",
                "USDT",
                "USDC"
              ]
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "query",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/research": {
      "get": {
        "operationId": "get_v1_space_research",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · research",
        "description": "Unified address research: Graphus balance and source records, typed Graph Lab evidence, exact reference flows, graph topology and descriptive k-means on comparable references (minimum 9). Partial module failures remain explicit. Native ETH address history and address forecasts are unavailable. Versioned full JSON report with SHA-256; no private labels or scores. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          },
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "asset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "BTC",
                "ETH",
                "BLCH",
                "USDT",
                "USDC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/address": {
      "get": {
        "operationId": "get_v1_space_address",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · address",
        "description": "A public address or script hash, with optional supported asset. Bounded source observations. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          },
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "asset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "BTC",
                "ETH",
                "BLCH",
                "USDT",
                "USDC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/block": {
      "get": {
        "operationId": "get_v1_space_block",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · block",
        "description": "Block hash/height; offset where supported. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          },
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/tx": {
      "get": {
        "operationId": "get_v1_space_tx",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · tx",
        "description": "Exact transaction reference. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          },
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    },
    "/v1/space/history": {
      "get": {
        "operationId": "get_v1_space_history",
        "tags": [
          "Bloch Space"
        ],
        "summary": "Bloch Space · history",
        "description": "Bloch indexed script-hash history; pass the returned cursor unchanged. Fixed public read-only source gateway at bloch.space. No account, score, write or arbitrary URL passthrough. Credentials, cookies and tenant data are never forwarded. Shared 60 module reads/minute/organization; upstream errors remain errors. Public tools remain available on the source site without a portal login.",
        "x-required-scopes": [
          "data:read"
        ],
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [
          {
            "name": "network",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "bitcoin",
                "ethereum",
                "bloch"
              ]
            }
          },
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "description": "Server-generated support correlation ID",
                "schema": {
                  "type": "string"
                }
              },
              "X-Porb-Api-Version": {
                "schema": {
                  "const": "1.2"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "413": {
            "$ref": "#/components/responses/413"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "429": {
            "$ref": "#/components/responses/429"
          },
          "502": {
            "$ref": "#/components/responses/502"
          },
          "503": {
            "$ref": "#/components/responses/503"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "PartnerKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "porb_<64 hex characters>",
        "description": "Generated by an organization owner/admin in Access & API. All scopes in x-required-scopes are required. Send only through Authorization, never URLs."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          }
        },
        "required": [
          "error"
        ],
        "additionalProperties": false
      }
    },
    "responses": {
      "400": {
        "description": "Invalid JSON, reference, parameters or fields",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "401": {
        "description": "Missing/expired/revoked authentication",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "403": {
        "description": "Required scope, role or same-origin action missing",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "404": {
        "description": "Resource unavailable in this organization",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "409": {
        "description": "Capacity, state or conflict",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "413": {
        "description": "Request body exceeds 8 KiB",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "422": {
        "description": "Collection exceeds supported bounds",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "429": {
        "description": "Rate limit; honor Retry-After in seconds",
        "headers": {
          "Retry-After": {
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "502": {
        "description": "Public source failed or returned inconsistent data",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "503": {
        "description": "Service unavailable",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    }
  },
  "x-available-scopes": [
    "data:read",
    "analyses:read",
    "analyses:write",
    "scores:read",
    "cases:read",
    "cases:write",
    "watchlists:read",
    "watchlists:write"
  ]
}
