{
  "openapi": "3.0.3",
  "info": {
    "title": "Preprints.ai API",
    "description": "Machine-generated Evidence, Trust, and Novelty screening signals for academic preprints, with assessment provenance. The partner workflow is autonomous and advisory: it contains no human-review state and is not peer review, editorial approval, or scientific verification.",
    "version": "1.4.0",
    "contact": {
      "name": "Infinite Researchers",
      "url": "https://infiniteresearchers.com"
    }
  },
  "servers": [
    { "url": "https://api.preprints.ai", "description": "Production API" }
  ],
  "paths": {
    "/.well-known/mcp.json": {
      "get": {
        "summary": "Discover the remote MCP server",
        "operationId": "discoverMcp",
        "tags": ["MCP"],
        "responses": {
          "200": { "description": "MCP endpoint, protocol versions and authentication policy" }
        }
      }
    },
    "/mcp": {
      "get": {
        "summary": "Read the MCP tool manifest",
        "operationId": "getMcpManifest",
        "tags": ["MCP"],
        "responses": { "200": { "description": "MCP tools and protocol versions" } }
      },
      "post": {
        "summary": "Call the stateless MCP JSON-RPC transport",
        "description": "Supports server/discover, initialize, notifications/initialized, tools/list and tools/call. Public read tools need no key; partner mutation tools use X-API-Key.",
        "operationId": "callMcp",
        "tags": ["MCP"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": ["jsonrpc", "method"],
                "properties": {
                  "jsonrpc": { "type": "string", "enum": ["2.0"] },
                  "id": { "oneOf": [{ "type": "string" }, { "type": "integer" }, { "type": "null" }] },
                  "method": { "type": "string" },
                  "params": { "type": "object", "additionalProperties": true }
                }
              }
            }
          }
        },
        "responses": { "200": { "description": "JSON-RPC result or tool error" } }
      }
    },
    "/v1/assess": {
      "post": {
        "summary": "Submit a complete manuscript for automated screening",
        "description": "Validate and durably queue one complete manuscript. Idempotency is partner ID + submission_ref + assessment_config.version. Contract 1.1 verifies the exact manuscript digest and complete Markdown structure before queueing.",
        "operationId": "submitAssessment",
        "tags": ["Assessment"],
        "security": [{ "PartnerApiKey": [] }],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PartnerSubmission" }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Assessment queued",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PartnerSubmissionResponse" }
              }
            }
          },
          "400": { "description": "Invalid manuscript or metadata", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PartnerErrorResponse" } } } },
          "409": { "description": "Contract version or digest conflict", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PartnerErrorResponse" } } } },
          "422": { "description": "Contract validation failed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PartnerErrorResponse" } } } },
          "429": { "description": "Rate limit exceeded" }
        }
      }
    },
    "/v1/assess/{assessment_id}": {
      "get": {
        "summary": "Retrieve an assessment result",
        "description": "Fetch the result of a previously submitted assessment by its ID.",
        "operationId": "getAssessment",
        "tags": ["Assessment"],
        "security": [{ "PartnerApiKey": [] }],
        "parameters": [
          {
            "name": "assessment_id",
            "in": "path",
            "required": true,
            "schema": { "type": "string" }
          }
        ],
        "responses": {
          "200": {
            "description": "Assessment result",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AssessmentResult" }
              }
            }
          },
          "404": { "description": "Assessment not found" }
        }
      }
    },
    "/v1/assess/{previous_assessment_id}/reassess": {
      "post": {
        "summary": "Re-assess an updated preprint version",
        "operationId": "reassessment",
        "tags": ["Assessment"],
        "security": [{ "PartnerApiKey": [] }],
        "parameters": [
          {
            "name": "previous_assessment_id",
            "in": "path",
            "required": true,
            "schema": { "type": "string" }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PartnerSubmission" }
            }
          }
        },
        "responses": {
          "202": { "description": "Re-assessment queued", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PartnerSubmissionResponse" } } } }
        }
      }
    },
    "/v1/partner-capabilities": {
      "get": {
        "summary": "Read the live partner-contract capabilities",
        "description": "Public, data-free compatibility handshake. Consumers compare contract_version and contract_sha256 with their vendored contract before submitting.",
        "operationId": "partnerCapabilities",
        "tags": ["Partner contract"],
        "responses": {
          "200": {
            "description": "Version, byte digest, formats, limits, features, statuses and endpoints",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PartnerCapabilities" } } }
          }
        }
      }
    },
    "/v1/partner-contract/validate": {
      "post": {
        "summary": "Validate a partner submission without queueing it",
        "description": "Authenticated production-safe dry-run. Performs the same 1.1 request validation but does not insert, queue, assess, or charge.",
        "operationId": "validatePartnerContract",
        "tags": ["Partner contract"],
        "security": [{ "PartnerApiKey": [] }],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PartnerSubmission" } } }
        },
        "responses": {
          "200": { "description": "Request is valid and queued=false" },
          "409": { "description": "Version or digest conflict", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PartnerErrorResponse" } } } },
          "422": { "description": "Request shape or manuscript structure is invalid", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PartnerErrorResponse" } } } }
        }
      }
    },
    "/v1/assess/batch-status": {
      "post": {
        "summary": "Reconcile up to 200 assessment identifiers",
        "description": "Returns a lightweight status for every supplied submission or assessment ID, including explicit not_found values.",
        "operationId": "batchAssessmentStatus",
        "tags": ["Assessment"],
        "security": [{ "PartnerApiKey": [] }],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": ["ids"],
                "properties": {
                  "ids": { "type": "array", "maxItems": 200, "items": { "type": "string" } }
                }
              }
            }
          }
        },
        "responses": {
          "200": { "description": "One status entry per requested identifier" }
        }
      }
    },
    "/v1/score/{identifier}": {
      "get": {
        "summary": "Look up a cached assessment by DOI or arXiv ID",
        "description": "Returns a cached assessment if previously assessed. Does not trigger a new assessment.",
        "operationId": "lookupScore",
        "tags": ["Assessment"],
        "parameters": [
          {
            "name": "identifier",
            "in": "path",
            "required": true,
            "schema": { "type": "string" },
            "description": "DOI or arXiv ID"
          }
        ],
        "responses": {
          "200": {
            "description": "Cached assessment",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AssessmentResult" }
              }
            }
          },
          "404": { "description": "Not yet assessed — use POST /v1/assess to submit" }
        }
      }
    },
    "/v1/evidence-graph/stats": {
      "get": {
        "summary": "Get scholarly evidence graph coverage and freshness",
        "description": "Returns aggregate work, identifier, edge, and observation counts plus the latest projection state. Graph records are contextual and do not affect screening scores.",
        "operationId": "evidenceGraphStats",
        "tags": ["Evidence graph"],
        "responses": {
          "200": { "description": "Graph counts and source freshness" }
        }
      }
    },
    "/v1/evidence-graph/{identifier}": {
      "get": {
        "summary": "Get a bounded scholarly evidence neighbourhood",
        "description": "Returns up to 100 source-attributed edges and observations one hop from a DOI, arXiv ID, or platform paper ID.",
        "operationId": "evidenceGraphForWork",
        "tags": ["Evidence graph"],
        "parameters": [
          {
            "name": "identifier",
            "in": "path",
            "required": true,
            "schema": { "type": "string" },
            "description": "DOI, arXiv ID, or platform paper ID"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 100 }
          }
        ],
        "responses": {
          "200": { "description": "Bounded source-attributed graph" },
          "404": { "description": "Identifier not present in the latest graph projection" },
          "503": { "description": "No successful graph projection is available" }
        }
      }
    },
    "/v1/portfolio-signals": {
      "get": {
        "summary": "Get public portfolio triage snapshots",
        "description": "Returns source or subject snapshots with 30-day and preceding 180-day numerators, denominators, rates, and bounded examples. Severity is triage urgency, not a misconduct or error probability.",
        "operationId": "publicPortfolioSignals",
        "tags": ["Portfolio signals"],
        "parameters": [
          {
            "name": "scope_type",
            "in": "query",
            "schema": { "type": "string", "enum": ["source", "subject"], "default": "source" }
          },
          {
            "name": "scope_key",
            "in": "query",
            "schema": { "type": "string" }
          }
        ],
        "responses": {
          "200": { "description": "Public source/subject signal snapshots" },
          "503": { "description": "No successful snapshot computation is available" }
        }
      }
    },
    "/v1/publisher/signals": {
      "get": {
        "summary": "Get the authenticated partner's portfolio snapshots",
        "description": "Returns only snapshots keyed to the partner represented by X-API-Key. Partner scope cannot be selected through the public endpoint.",
        "operationId": "publisherPortfolioSignals",
        "tags": ["Portfolio signals"],
        "security": [{ "PartnerApiKey": [] }],
        "responses": {
          "200": { "description": "Partner-isolated signal snapshots" },
          "401": { "description": "Missing API key" },
          "403": { "description": "Invalid or inactive API key" }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "PartnerApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    },
    "schemas": {
      "PartnerSubmission": {
        "type": "object",
        "required": [
          "contract_version",
          "submission_ref",
          "manuscript_content",
          "manuscript_sha256",
          "content_format",
          "metadata",
          "provenance",
          "assessment_config"
        ],
        "properties": {
          "contract_version": { "type": "string", "enum": ["1.1.0"] },
          "submission_ref": { "type": "string", "description": "Stable producer reference used for idempotency." },
          "manuscript_content": { "type": "string", "minLength": 2000, "description": "Complete manuscript text; Markdown is preferred." },
          "manuscript_sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
          "content_format": { "type": "string", "enum": ["markdown", "text"] },
          "metadata": {
            "type": "object",
            "required": ["title", "authors"],
            "properties": {
              "title": { "type": "string" },
              "authors": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "object",
                  "required": ["name"],
                  "properties": {
                    "name": { "type": "string" },
                    "affiliation": { "type": "string" }
                  }
                }
              },
              "subject": { "type": "string" },
              "posted_date": { "type": "string", "format": "date" }
            }
          },
          "provenance": {
            "type": "object",
            "required": ["platform", "discovery_id", "submitted_at", "artifact_manifest_sha256"],
            "properties": {
              "platform": { "type": "string" },
              "discovery_id": { "type": "string" },
              "submitted_at": { "type": "string", "format": "date-time" },
              "artifact_manifest_sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
            },
            "additionalProperties": true
          },
          "assessment_config": {
            "type": "object",
            "required": ["version", "require_full_manuscript"],
            "properties": {
              "version": { "type": "integer", "minimum": 1 },
              "require_full_manuscript": { "type": "boolean", "enum": [true] }
            }
          },
          "callback_url": { "type": "string", "format": "uri" },
          "callback_secret": { "type": "string", "writeOnly": true }
        }
      },
      "PartnerSubmissionResponse": {
        "type": "object",
        "required": ["contract_version", "assessment_id", "submission_ref", "status", "status_url", "retry_after_seconds", "idempotent", "manuscript_sha256"],
        "properties": {
          "contract_version": { "type": "string", "enum": ["1.1.0"] },
          "assessment_id": {
            "type": "string",
            "pattern": "^ps_",
            "description": "Immutable partner-facing ID. The same value is returned by acceptance, every poll, idempotent replay, batch status, and callback."
          },
          "submission_ref": { "type": "string" },
          "status": { "type": "string", "enum": ["pending", "queued", "processing", "deferred", "completed", "failed"] },
          "status_url": { "type": "string" },
          "retry_after_seconds": { "type": "integer", "minimum": 0 },
          "idempotent": { "type": "boolean" },
          "manuscript_sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
        }
      },
      "PartnerCapabilities": {
        "type": "object",
        "required": ["service", "contract_version", "contract_sha256", "compatible_major", "accepted_content_formats", "limits", "features", "statuses", "endpoints"],
        "properties": {
          "service": { "type": "string", "enum": ["preprints.ai"] },
          "contract_version": { "type": "string", "enum": ["1.1.0"] },
          "contract_sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
          "compatible_major": { "type": "integer", "enum": [1] },
          "accepted_content_formats": { "type": "array", "items": { "type": "string" } },
          "limits": { "type": "object", "additionalProperties": { "type": "integer" } },
          "features": { "type": "array", "items": { "type": "string" } },
          "statuses": { "type": "object", "additionalProperties": true },
          "endpoints": { "type": "object", "additionalProperties": { "type": "string" } }
        }
      },
      "PartnerErrorResponse": {
        "type": "object",
        "required": ["contract_version", "error"],
        "properties": {
          "contract_version": { "type": "string", "enum": ["1.1.0"] },
          "error": {
            "type": "object",
            "required": ["code", "message", "retryable"],
            "properties": {
              "code": { "type": "string" },
              "message": { "type": "string" },
              "retryable": { "type": "boolean" },
              "details": { "type": "object", "additionalProperties": true }
            }
          }
        }
      },
      "CriterionStatus": {
        "type": "string",
        "enum": ["reported", "not_reported", "not_applicable", "unknown"],
        "description": "Whether a rigor criterion was found in the paper text."
      },
      "ScreeningAxis": {
        "type": "object",
        "required": ["status", "value"],
        "properties": {
          "status": {
            "type": "string",
            "enum": ["available", "limited", "unavailable"],
            "description": "Whether the recorded provenance supports displaying this axis."
          },
          "value": {
            "nullable": true,
            "description": "The axis value, or null when unavailable."
          },
          "basis": {
            "type": "string",
            "enum": ["literature_grounded", "literature_assisted_reconstructed", "llm_derived", "unknown"],
            "description": "For Novelty, how the machine-generated finding was grounded or reconstructed."
          },
          "label": {
            "type": "string",
            "description": "Human-readable basis label, such as Literature-grounded or LLM-derived."
          }
        }
      },
      "ScreeningSignal": {
        "type": "object",
        "required": ["product", "status", "provenance_complete", "scientific_verification", "axes", "limitations"],
        "properties": {
          "product": { "type": "string", "enum": ["machine_generated_screening_signal"] },
          "contract_version": { "type": "string", "example": "2026-07-21.3" },
          "description": { "type": "string" },
          "status": { "type": "string", "enum": ["complete", "limited", "withheld"] },
          "label": { "type": "string" },
          "provenance_complete": {
            "type": "boolean",
            "description": "True only when the required screening stages and score contracts are positively recorded."
          },
          "scientific_verification": { "type": "boolean", "enum": [false] },
          "human_interpretation_required": { "type": "boolean", "enum": [true] },
          "notice": { "type": "string" },
          "axes": {
            "type": "object",
            "required": ["evidence", "trust", "novelty"],
            "properties": {
              "evidence": { "$ref": "#/components/schemas/ScreeningAxis" },
              "trust": { "$ref": "#/components/schemas/ScreeningAxis" },
              "novelty": { "$ref": "#/components/schemas/ScreeningAxis" }
            }
          },
          "provenance": { "type": "object", "additionalProperties": true },
          "limitations": {
            "type": "array",
            "items": {
              "type": "object",
              "required": ["code", "message", "affects"],
              "properties": {
                "code": { "type": "string" },
                "message": { "type": "string" },
                "affects": { "type": "array", "items": { "type": "string", "enum": ["evidence", "trust", "novelty"] } }
              }
            }
          }
        }
      },
      "RigorCriterion": {
        "type": "object",
        "description": "Result for a single ScreenIT rigor criterion (Eckmann et al. 2026, PLoS ONE 21(2):e0342225).",
        "properties": {
          "status": { "$ref": "#/components/schemas/CriterionStatus" },
          "evidence": {
            "type": "string",
            "nullable": true,
            "description": "Text excerpt that triggered the detection."
          },
          "section": {
            "type": "string",
            "nullable": true,
            "description": "Paper section where the evidence was found (methods, abstract, other)."
          },
          "recommendation": {
            "type": "string",
            "nullable": true,
            "description": "Actionable guidance if criterion is not_reported."
          },
          "confidence": {
            "type": "number",
            "format": "float",
            "minimum": 0,
            "maximum": 1,
            "description": "Detection confidence (0–1). Reflects published F1 benchmarks from Eckmann et al. 2026."
          },
          "tool_source": {
            "type": "string",
            "description": "Detection methodology (e.g. regex_sciScore_aligned, regex_preRob_SciScore_ensemble)."
          }
        }
      },
      "RigorCriteriaFlags": {
        "type": "object",
        "description": "Per-criterion rigor reporting flags from Layer 1 automated detection. Exposed separately from integrity_score so API consumers can apply their own sensitivity/specificity tradeoffs. Reference: Eckmann et al. (2026) PLoS ONE 21(2):e0342225.",
        "properties": {
          "blinding": {
            "allOf": [{ "$ref": "#/components/schemas/RigorCriterion" }],
            "description": "Blinding procedure reporting. Text-pattern F1≈0.89 (SciScore-aligned)."
          },
          "randomisation": {
            "allOf": [{ "$ref": "#/components/schemas/RigorCriterion" }],
            "description": "Randomisation method reporting. Text-pattern F1≈0.76 (pre-rob + SciScore ensemble)."
          },
          "power_calculation": {
            "allOf": [{ "$ref": "#/components/schemas/RigorCriterion" }],
            "description": "Power/sample size calculation reporting. Text-pattern F1≈0.79 (SciScore-aligned)."
          },
          "inclusion_exclusion": {
            "allOf": [{ "$ref": "#/components/schemas/RigorCriterion" }],
            "description": "Inclusion/exclusion criteria. Text component F1≈0.70–0.88. Flowchart-described criteria require separate image analysis."
          }
        }
      },
      "SoftwareCitationFlags": {
        "type": "object",
        "description": "Software citation quality flags. Full-paper SoftCite-aligned detection (F1≈0.87). Reference: Du et al. 2021; benchmark Eckmann et al. 2026.",
        "properties": {
          "unique_tools": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Software tools detected in the paper."
          },
          "has_unversioned": {
            "type": "boolean",
            "description": "True if any tool is mentioned without a version number."
          },
          "has_uncited": {
            "type": "boolean",
            "description": "True if any tool lacks a citation, URL, or RRID."
          },
          "has_rrid": {
            "type": "boolean",
            "description": "True if any tool has an RRID (Research Resource Identifier)."
          },
          "recommendations": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Actionable recommendations for improving software citation."
          }
        }
      },
      "AssessmentResult": {
        "type": "object",
        "properties": {
          "contract_version": { "type": "string", "description": "Partner boundary contract used for this assessment." },
          "assessment_id": {
            "type": "string",
            "pattern": "^ps_",
            "description": "Immutable partner-facing ID issued when the assessment was accepted."
          },
          "submission_ref": { "type": "string" },
          "manuscript_sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
          "doi": { "type": "string" },
          "publication_tier": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "description": "Legacy experimental derived field retained for backwards compatibility. Not a validated journal-placement or editorial-decision prediction. Prefer the independent Evidence, Trust, and Novelty axes."
          },
          "tier_label": {
            "type": "string",
            "description": "Legacy label for publication_tier. Retained for backwards compatibility and not a validated journal-placement prediction.",
            "enum": [
              "Landmark", "Broad-impact", "Field-flagship", "Specialty solid",
              "PLOS One bar", "Specialty mid-tier", "Major revisions needed",
              "Reject — methodology broken", "Inadequate evidence",
              "Not for publication"
            ]
          },
          "grade": {
            "type": "string",
            "description": "Three-axis grade: Evidence A–E + Trust A–E + Novelty 1–10. Example: AC4.",
            "pattern": "^[A-E][A-E](10|[1-9])$"
          },
          "integrity_letter": {
            "type": "string",
            "enum": ["A", "B", "C", "D", "E"],
            "description": "Evidence axis: strength of methods, results, and claims."
          },
          "trust_grade": {
            "type": "string",
            "enum": ["A", "B", "C", "D", "E"],
            "description": "Trust axis: coverage of applicable transparency and reproducibility markers."
          },
          "novelty_10": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "description": "Machine-generated Novelty axis. Lower numbers indicate greater novelty; screening_signal.axes.novelty.basis records whether it is literature-grounded, reconstructed, or LLM-derived."
          },
          "pipeline_completeness": {
            "type": "string",
            "description": "Recorded execution state such as full, degraded, minimal, insufficient, or unknown."
          },
          "provenance_complete": {
            "type": "boolean",
            "description": "True when full text, full panel, safety-critical checks, authoritative judge, and literature grounding are recorded. This does not verify scientific correctness."
          },
          "screening_status": {
            "type": "string",
            "enum": ["complete", "limited", "withheld"],
            "description": "Canonical public run status. Prefer screening_signal for axis-level detail."
          },
          "screening_signal": { "$ref": "#/components/schemas/ScreeningSignal" },
          "evidence_strength": {
            "type": "string",
            "enum": ["Compelling", "Convincing", "Solid", "Incomplete", "Inadequate"]
          },
          "significance": {
            "type": "string",
            "enum": ["Landmark", "Fundamental", "Important", "Valuable", "Useful"]
          },
          "integrity_score": {
            "type": "number",
            "format": "float",
            "minimum": 0,
            "maximum": 1,
            "description": "Normalised strength-of-evidence score (aggregate)"
          },
          "novelty_score": {
            "type": "number",
            "format": "float",
            "minimum": 0,
            "maximum": 1,
            "description": "Normalised significance-of-findings score (aggregate)"
          },
          "flags": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Integrity flags raised by Layer 1 deterministic checks"
          },
          "rigor_criteria": {
            "allOf": [{ "$ref": "#/components/schemas/RigorCriteriaFlags" }],
            "nullable": true,
            "description": "Per-criterion rigor reporting status (ScreenIT, Eckmann et al. 2026). Null if Layer 1 was not run or study type is fully computational."
          },
          "software_citation": {
            "allOf": [{ "$ref": "#/components/schemas/SoftwareCitationFlags" }],
            "nullable": true,
            "description": "Software citation quality (SoftCite-aligned). Null if no software detected."
          },
          "confidence": {
            "type": "number",
            "format": "float",
            "minimum": 0,
            "maximum": 1,
            "description": "Internal model/run confidence signal; not a probability that the paper is correct."
          },
          "num_reviewers": {
            "type": "integer",
            "description": "Number of AI reviewer agents that contributed"
          },
          "status": {
            "type": "string",
            "enum": ["pending", "queued", "processing", "completed", "complete", "failed", "deferred"]
          },
          "assessed_at": { "type": "string", "format": "date-time" },
          "error": {
            "type": "object",
            "nullable": true,
            "required": ["code", "message", "retryable"],
            "properties": {
              "code": { "type": "string" },
              "message": { "type": "string" },
              "retryable": { "type": "boolean" }
            }
          }
        }
      }
    }
  }
}
