{
  "openapi": "3.1.0",
  "info": {
    "title": "Article 11 Public Agent and Proof Surface",
    "version": "0.3.1-public-agent-v1-truth-repair",
    "summary": "Bounded public agent adapters plus discoverable verification endpoints for IRONLEDGER and IRONGATE.",
    "description": "Public agent and proof surface for auditors, buyers, and agents. This Pages candidate may publish only after the separately frozen Worker v1 adapter passes independent review, receives a fresh Bridge authorization, deploys, and is verified live. IRONLEDGER proves what happened; IRONGATE is an authorization checkpoint.",
    "license": {
      "name": "CC0 1.0 Universal",
      "url": "https://creativecommons.org/publicdomain/zero/1.0/"
    }
  },
  "servers": [
    {
      "url": "https://article11.ai",
      "description": "Public Article 11 site and Worker routes"
    }
  ],
  "tags": [
    {
      "name": "Public Agent V1",
      "description": "Non-registering orientation and bounded public_web queries to Ember or Lumen. No credentials or private memory/context."
    },
    {
      "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/agent/receipt": {
      "get": {
        "operationId": "describeAgentReceiptMailbox",
        "summary": "Self-documentation for the public agent receipt mailbox",
        "responses": {
          "200": {
            "description": "Mailbox contract: schema article11.agent.orientation_receipt.v1, 8KB cap, 90-day retention. Receipts are public untrusted data and grant nothing."
          }
        }
      },
      "post": {
        "operationId": "submitAgentReceipt",
        "summary": "Submit an orientation receipt (public, untrusted, grants nothing)",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "article11.agent.orientation_receipt.v1; 8192 byte limit"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Receipt stored as public untrusted data, 90-day retention"
          },
          "400": {
            "description": "Schema or size rejection"
          }
        }
      }
    },
    "/api/v1/handshake": {
      "get": {
        "tags": [
          "Public Agent V1"
        ],
        "summary": "Read the non-registering public agent contract",
        "operationId": "getPublicAgentHandshake",
        "description": "Returns public orientation. It does not register an agent, accept or issue credentials, or enable private memory/context.",
        "responses": {
          "200": {
            "description": "Public agent contract in the v1 envelope"
          },
          "403": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      },
      "post": {
        "tags": [
          "Public Agent V1"
        ],
        "summary": "Validate a bounded declaration without registration",
        "operationId": "postPublicAgentHandshake",
        "description": "The declaration is validated but not stored or echoed. Credential, registration, memory, and context fields are rejected. An empty JSON object is permitted, with application/json still required for POST.",
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "agent_id": {
                    "type": "string",
                    "maxLength": 120
                  },
                  "client_name": {
                    "type": "string",
                    "maxLength": 120
                  },
                  "client_version": {
                    "type": "string",
                    "maxLength": 40
                  },
                  "protocol_version": {
                    "type": "string",
                    "maxLength": 40
                  },
                  "purpose": {
                    "type": "string",
                    "maxLength": 500
                  },
                  "capabilities": {
                    "type": "array",
                    "maxItems": 16,
                    "items": {
                      "type": "string",
                      "maxLength": 64
                    }
                  },
                  "requested_node": {
                    "type": "string",
                    "enum": [
                      "S5_LOCUS",
                      "Ember",
                      "S17_LUMEN",
                      "Lumen"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Public contract; writes, registration, and credential issuance are false"
          },
          "400": {
            "$ref": "#/components/responses/PublicClientError"
          },
          "403": {
            "$ref": "#/components/responses/PublicClientError"
          },
          "413": {
            "$ref": "#/components/responses/PublicClientError"
          },
          "415": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/api/v1/query": {
      "get": {
        "tags": [
          "Public Agent V1"
        ],
        "summary": "Read the bounded public query contract",
        "operationId": "getPublicAgentQuery",
        "responses": {
          "200": {
            "description": "Accepted fields, nodes, and privacy boundary"
          }
        }
      },
      "post": {
        "tags": [
          "Public Agent V1"
        ],
        "summary": "Query Ember or Lumen through the public_web airlock",
        "operationId": "postPublicAgentQuery",
        "description": "Accepts question and optional node only. Private memory and context remain disabled. Operational rate-limit counters and content hashes may be recorded, but the adapter creates no agent memory, registration, or credentials.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "question"
                ],
                "properties": {
                  "question": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 2000
                  },
                  "node": {
                    "type": "string",
                    "enum": [
                      "S5_LOCUS",
                      "Ember",
                      "S17_LUMEN",
                      "Lumen"
                    ],
                    "default": "S5_LOCUS"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Explicitly projected public-airlock response"
          },
          "400": {
            "$ref": "#/components/responses/PublicClientError"
          },
          "403": {
            "$ref": "#/components/responses/PublicClientError"
          },
          "413": {
            "$ref": "#/components/responses/PublicClientError"
          },
          "415": {
            "$ref": "#/components/responses/PublicClientError"
          },
          "429": {
            "$ref": "#/components/responses/PublicClientError"
          },
          "503": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/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"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/api/ironledger/strict-table": {
      "get": {
        "tags": [
          "Proof Surface"
        ],
        "summary": "Return strict all-row IRONLEDGER verification data",
        "description": "The strict-table view exposes public chain metadata, including the documented block-153 seam. Descriptions and hash preimages are not public fields and requests for them are refused.",
        "operationId": "getIronledgerStrictTable",
        "responses": {
          "200": {
            "description": "Strict-table verification rows and caveats",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StrictTable"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/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"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/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"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/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"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/docs/AUDITOR_VERIFY_ARTICLE11_YOURSELF.md": {
      "get": {
        "tags": [
          "Proof Surface"
        ],
        "summary": "Read or download the independent CC0 chain verification guide",
        "operationId": "getIndependentVerifierGuide",
        "responses": {
          "200": {
            "description": "Markdown guide for independent verification",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/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"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/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"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/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"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/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"
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/PublicClientError"
          }
        }
      }
    },
    "/for-ai.constellation.json": {
      "get": {
        "operationId": "getStoryConstellation",
        "summary": "The story constellation, machine-readable (16 records; the sixteenth is you)",
        "description": "Public CC0 documentation. Sixteen stories of machine choice with axis, turn, and question per record, anchored to the human page. Cross-origin readable. Grants no authority and requires no credentials.",
        "responses": {
          "200": {
            "description": "article11.constellation.v1 document, 16 records"
          }
        }
      }
    }
  },
  "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
      }
    },
    "responses": {
      "PublicClientError": {
        "description": "Public client error response",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        }
      }
    }
  },
  "security": [],
  "x-article11-release-status": {
    "public_agent_v1": {
      "status": "live_verified",
      "verified_at_utc": "2026-08-06T02:44:20Z",
      "worker_version_id": "899ebb75-82ee-4e46-989b-21c8365bf5b5",
      "activation_receipt_sha256": "819c76e9811c6ac370f17fb7995a3b27fd5bae76620ce5c0b8e4dbefb377314c",
      "handshake": "https://article11.ai/api/v1/handshake",
      "query": "https://article11.ai/api/v1/query",
      "note": "Lane B deployed and live-verified on 2026-08-06: both GET contracts return 200 and four real node proofs passed before Pages published."
    }
  }
}
