{
  "openapi": "3.1.0",
  "info": {
    "title": "Article 11 Public Proof Surface",
    "version": "0.2.0-irongate",
    "summary": "Discoverable verification endpoints for IRONLEDGER and IRONGATE.",
    "description": "Public proof surface for auditors, buyers, and agents. IRONLEDGER proves what happened; IRONGATE is an authorization checkpoint for deciding what is allowed to happen when an orchestrator invokes it. Public claim changes to this surface require Bridge authorization."
  },
  "servers": [
    {
      "url": "https://article11.ai",
      "description": "Public Article 11 site and Worker routes"
    }
  ],
  "tags": [
    {
      "name": "Proof Surface",
      "description": "Independent verification endpoints and downloadable verifier artifacts."
    },
    {
      "name": "Capability Control Plane",
      "description": "Discovery for IRONGATE, the governed-authorization checkpoint. BRIDGE_AUTH is live; inline runtime enforcement, node quorum, and dissent channels remain roadmap."
    }
  ],
  "paths": {
    "/api/ironledger/verify": {
      "get": {
        "tags": ["Proof Surface"],
        "summary": "Return the canonical IRONLEDGER integrity verdict",
        "description": "Use canonical_spine_valid as the authoritative chain-integrity field. The legacy valid field is strict-table scoped and intentionally disclosed for backward compatibility.",
        "operationId": "getIronledgerVerify",
        "responses": {
          "200": {
            "description": "Canonical integrity verdict with strict-table caveats",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/IronledgerVerify" }
              }
            }
          }
        }
      }
    },
    "/api/ironledger/strict-table": {
      "get": {
        "tags": ["Proof Surface"],
        "summary": "Return strict all-row IRONLEDGER verification data",
        "description": "The strict-table view exposes all rows, including the documented block-153 seam. Add preimage=true to verify current-recipe hashes independently.",
        "operationId": "getIronledgerStrictTable",
        "parameters": [
          {
            "name": "preimage",
            "in": "query",
            "required": false,
            "schema": { "type": "boolean" },
            "description": "Include public hash preimages for recomputation where disclosure is safe."
          },
          {
            "name": "description",
            "in": "query",
            "required": false,
            "schema": { "type": "boolean" },
            "description": "Include row descriptions when available."
          }
        ],
        "responses": {
          "200": {
            "description": "Strict-table verification rows and caveats",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StrictTable" }
              }
            }
          }
        }
      }
    },
    "/api/chain/strict-table": {
      "get": {
        "tags": ["Proof Surface"],
        "summary": "Alias for /api/ironledger/strict-table",
        "operationId": "getChainStrictTable",
        "responses": {
          "200": {
            "description": "Strict-table verification rows and caveats",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StrictTable" }
              }
            }
          }
        }
      }
    },
    "/api/ironledger/rows": {
      "get": {
        "tags": ["Proof Surface"],
        "summary": "Alias for /api/ironledger/strict-table",
        "operationId": "getIronledgerRows",
        "responses": {
          "200": {
            "description": "Strict-table verification rows and caveats",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StrictTable" }
              }
            }
          }
        }
      }
    },
    "/api/chain/status": {
      "get": {
        "tags": ["Proof Surface"],
        "summary": "Return live chain status",
        "operationId": "getChainStatus",
        "responses": {
          "200": {
            "description": "Live chain status, head, genesis, and freshness metadata",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ChainStatus" }
              }
            }
          }
        }
      }
    },
    "/tools/a11_independent_chain_verifier.py": {
      "get": {
        "tags": ["Proof Surface"],
        "summary": "Download the independent CC0 chain verifier",
        "operationId": "downloadIndependentVerifier",
        "responses": {
          "200": {
            "description": "Python verifier script",
            "content": {
              "text/x-python": {
                "schema": { "type": "string" }
              },
              "text/plain": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/docs/AUDITOR_VERIFY_ARTICLE11_YOURSELF.md": {
      "get": {
        "tags": ["Proof Surface"],
        "summary": "Download the auditor verification guide",
        "operationId": "downloadAuditorVerifyGuide",
        "responses": {
          "200": {
            "description": "Markdown guide for independent verification",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              },
              "text/plain": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/irongate.html": {
      "get": {
        "tags": ["Capability Control Plane"],
        "summary": "Open the IRONGATE product page",
        "description": "Human-readable product surface for Bridge-signed authorization, orchestrator-invoked checkpointing, deny-by-default evaluation, tamper rejection, and the honest capability board.",
        "operationId": "getIrongateProductPage",
        "responses": {
          "200": {
            "description": "IRONGATE product page",
            "content": {
              "text/html": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/products/irongate/README.md": {
      "get": {
        "tags": ["Capability Control Plane"],
        "summary": "Download the IRONGATE public kit",
        "description": "Public kit with the authorization model, demo summary, and real-today versus roadmap maturity split.",
        "operationId": "downloadIrongateReadme",
        "responses": {
          "200": {
            "description": "IRONGATE public kit README",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              },
              "text/plain": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/products/irongate/PRODUCT_SHEET.md": {
      "get": {
        "tags": ["Capability Control Plane"],
        "summary": "Download the IRONGATE buyer one-pager",
        "description": "Buyer-facing one-pager for regulated teams evaluating IRONGATE as a verifiable authorization checkpoint for AI agents.",
        "operationId": "downloadIrongateProductSheet",
        "responses": {
          "200": {
            "description": "IRONGATE product sheet",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              },
              "text/plain": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/products/irongate/demo_output.txt": {
      "get": {
        "tags": ["Capability Control Plane"],
        "summary": "Download the IRONGATE demo transcript",
        "description": "Transcript from the local demo showing deny-by-default, allow-with-Bridge-auth, tamper rejection, and the honest capability board.",
        "operationId": "downloadIrongateDemoTranscript",
        "responses": {
          "200": {
            "description": "IRONGATE demo transcript",
            "content": {
              "text/plain": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    }
  },
  "x-article11-capability-control-plane": {
    "product_name": "IRONGATE",
    "maturity": "irongate_public_launch",
    "bridge_auth": "live_and_proven",
    "node_approval_quorum": "roadmap",
    "dissent_channel": "roadmap",
    "runtime_enforcement": "roadmap",
    "enforcement_model": "orchestrator_invoked_checkpoint_today",
    "publish_rule": "PUBLIC_CLAIM_CHANGE requires Bridge authorization before IRONGATE public claims or structural proof-surface changes go live",
    "honesty_note": "This OpenAPI file advertises live verification endpoints and IRONGATE discovery; it does not claim full multi-party cryptographic co-signing."
  },
  "components": {
    "schemas": {
      "IronledgerVerify": {
        "type": "object",
        "properties": {
          "status": { "type": "string" },
          "verdict": { "type": "string" },
          "canonical_spine_valid": { "type": "boolean" },
          "strict_table_valid": { "type": "boolean" },
          "strict_table_break_at_block": { "type": ["integer", "null"] },
          "warning": { "type": ["string", "null"] },
          "valid": { "type": "boolean", "deprecated": true },
          "valid_scope": { "type": ["string", "null"] },
          "valid_deprecated": { "type": ["boolean", "null"] }
        },
        "additionalProperties": true
      },
      "StrictTable": {
        "type": "object",
        "properties": {
          "ok": { "type": "boolean" },
          "canonical_spine_valid": { "type": ["boolean", "null"] },
          "strict_table_valid": { "type": ["boolean", "null"] },
          "breaks": {
            "type": "array",
            "items": { "type": "object", "additionalProperties": true }
          },
          "rows": {
            "type": "array",
            "items": { "type": "object", "additionalProperties": true }
          }
        },
        "additionalProperties": true
      },
      "ChainStatus": {
        "type": "object",
        "properties": {
          "status": { "type": "string" },
          "day": { "type": ["integer", "string", "null"] },
          "head": { "type": ["string", "object", "null"] },
          "genesis": { "type": ["string", "object", "null"] },
          "canonical_spine_valid": { "type": ["boolean", "null"] }
        },
        "additionalProperties": true
      }
    }
  }
}
