{
  "components": {
    "securitySchemes": {
      "ClientProof": {
        "description": "Base64 WHP-CLIENT-PROOF-v1 Ed25519 signature binding method, exact path/query, body SHA256, issued_at, expires_at and random nonce. See wire contract.",
        "in": "header",
        "name": "WHP-Client-Proof",
        "type": "apiKey"
      },
      "prepaidCredits": {
        "type": "http",
        "scheme": "bearer",
        "description": "Existing prepaid WHP credit token. Same exact submission replay does not debit again."
      }
    }
  },
  "info": {
    "description": "Wheeler Hubbell Publishing. Ordinary paid doors return canonical Standing Marks or Standing Assessments, using x402 USDC on Base or existing prepaid credits at unchanged published prices. The structured submission and EPT asset routes remain separate.",
    "title": "WHP Standing",
    "version": "ordinary-intake-1.0.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/.well-known/api-catalog": {
      "get": {
        "operationId": "getApiCatalog",
        "responses": {
          "200": {
            "description": "RFC 9727 API catalog."
          },
          "503": {
            "description": "Service/authority unavailable."
          }
        }
      }
    },
    "/.well-known/standing-capability.json": {
      "get": {
        "responses": {
          "200": {
            "description": "Fresh separately signed current capability resolution; DISCOVERY authority required."
          }
        },
        "summary": "Fresh separately signed current capability resolution; DISCOVERY authority required."
      }
    },
    "/.well-known/whp-standing.json": {
      "get": {
        "operationId": "discoverStanding",
        "responses": {
          "200": {
            "description": "Durable signed result or requested public contract."
          },
          "503": {
            "description": "Service/authority/provider unavailable; no optimistic success."
          }
        }
      }
    },
    "/discovery/capability.json": {
      "get": {
        "responses": {
          "200": {
            "description": "Provider capability description, not epistemic standing."
          }
        },
        "summary": "Provider capability description, not epistemic standing."
      }
    },
    "/discovery/provider-index.json": {
      "get": {
        "responses": {
          "200": {
            "description": "Self-published capability index, not an external registration."
          }
        },
        "summary": "Self-published capability index, not an external registration."
      }
    },
    "/llms.txt": {
      "get": {
        "operationId": "getMachineDocumentation",
        "responses": {
          "200": {
            "description": "Indexable capability, bounds, contract and payment documentation."
          },
          "503": {
            "description": "Service/authority unavailable."
          }
        }
      }
    },
    "/mcp": {
      "post": {
        "operationId": "callStandingMcp",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {},
                  "jsonrpc": {
                    "const": "2.0"
                  },
                  "method": {
                    "type": "string"
                  },
                  "params": {
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "JSON-RPC response; 402 terms are carried by tool structuredContent.http_status."
          },
          "202": {
            "description": "Accepted notification."
          },
          "400": {
            "description": "Invalid message."
          },
          "403": {
            "description": "Invalid Origin."
          },
          "405": {
            "description": "Unsupported transport method."
          }
        },
        "summary": "Stateless Streamable HTTP MCP; no wallet credentials accepted."
      }
    },
    "/robots.txt": {
      "get": {
        "operationId": "getRobotsPolicy",
        "responses": {
          "200": {
            "description": "Crawler policy."
          },
          "503": {
            "description": "Service/authority unavailable."
          }
        }
      }
    },
    "/server.json": {
      "get": {
        "operationId": "getMcpServerMetadata",
        "responses": {
          "200": {
            "description": "Remote MCP metadata; not evidence of registry acceptance."
          },
          "503": {
            "description": "Service/authority unavailable."
          }
        }
      }
    },
    "/sitemap.xml": {
      "get": {
        "operationId": "getCanonicalSitemap",
        "responses": {
          "200": {
            "description": "Canonical documentation URLs."
          },
          "503": {
            "description": "Service/authority unavailable."
          }
        }
      }
    },
    "/v1/contract": {
      "get": {
        "operationId": "getStandingPurchaseContract",
        "responses": {
          "200": {
            "description": "Complete schema, authority, authentication, quote binding and independent buyer payment requirements."
          },
          "503": {
            "description": "Service/authority unavailable."
          }
        }
      }
    },
    "/v1/contracts/mark-v1.json": {
      "get": {
        "responses": {
          "200": {
            "description": "Immutable first-public historical contract manifest."
          }
        },
        "summary": "Immutable first-public historical contract manifest."
      }
    },
    "/v1/evaluations": {
      "post": {
        "operationId": "purchaseEvaluation",
        "parameters": [
          {
            "description": "Base64 x402-v2 exact-EVM authorization with mandatory WHP quote-bound nonce.",
            "in": "header",
            "name": "PAYMENT-SIGNATURE",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "/schemas/submission.schema.json"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Durable signed result or requested public contract."
          },
          "202": {
            "description": "Still pending; use the same purchase recovery identity."
          },
          "400": {
            "description": "Malformed request or unsupported structure."
          },
          "401": {
            "description": "Buyer authentication failed."
          },
          "402": {
            "description": "x402-v2 payment required or invalid authorization."
          },
          "409": {
            "description": "Identity conflict, expired quote or denied state transition."
          },
          "413": {
            "description": "Request capacity exceeded."
          },
          "415": {
            "description": "JSON content type required."
          },
          "503": {
            "description": "Service/authority/provider unavailable; no optimistic success."
          }
        },
        "security": [
          {
            "ClientProof": []
          }
        ]
      }
    },
    "/v1/immutable/{sha256}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "sha256",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-f]{64}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Immutable profile, schema or semantic contract by SHA-256."
          }
        },
        "summary": "Immutable profile, schema or semantic contract by SHA-256."
      }
    },
    "/v1/profile": {
      "get": {
        "operationId": "getProfile",
        "responses": {
          "200": {
            "description": "Durable signed result or requested public contract."
          },
          "503": {
            "description": "Service/authority/provider unavailable; no optimistic success."
          }
        }
      }
    },
    "/v1/profiles": {
      "get": {
        "responses": {
          "200": {
            "description": "Current published profile index; historical Marks bind exact embedded content."
          }
        },
        "summary": "Current published profile index; historical Marks bind exact embedded content."
      }
    },
    "/v1/profiles/{profile_id}/{version}": {
      "get": {
        "operationId": "getStandingProfileVersion",
        "parameters": [
          {
            "in": "path",
            "name": "profile_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Exact hash-addressed WHP Standing Profile and authorization."
          },
          "503": {
            "description": "Service/authority unavailable."
          }
        }
      }
    },
    "/v1/purchases/{purchase_id}/recover": {
      "post": {
        "operationId": "recoverOriginalPurchase",
        "parameters": [
          {
            "in": "path",
            "name": "purchase_id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-f]{64}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Durable signed result or requested public contract."
          },
          "202": {
            "description": "Still pending; use the same purchase recovery identity."
          },
          "400": {
            "description": "Malformed request or unsupported structure."
          },
          "401": {
            "description": "Buyer authentication failed."
          },
          "404": {
            "description": "No such resource."
          },
          "409": {
            "description": "Identity conflict, expired quote or denied state transition."
          },
          "503": {
            "description": "Service/authority/provider unavailable; no optimistic success."
          }
        },
        "security": [
          {
            "ClientProof": []
          }
        ]
      }
    },
    "/v1/purchases/{purchase_id}/result": {
      "get": {
        "operationId": "retrieveResult",
        "parameters": [
          {
            "in": "path",
            "name": "purchase_id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-f]{64}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Durable signed result or requested public contract."
          },
          "202": {
            "description": "Still pending; use the same purchase recovery identity."
          },
          "401": {
            "description": "Buyer authentication failed."
          },
          "404": {
            "description": "No such resource."
          },
          "503": {
            "description": "Service/authority/provider unavailable; no optimistic success."
          }
        },
        "security": [
          {
            "ClientProof": []
          }
        ]
      }
    },
    "/v1/registry/{purchase_id}": {
      "get": {
        "operationId": "readRegistry",
        "parameters": [
          {
            "in": "path",
            "name": "purchase_id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-f]{64}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Durable signed result or requested public contract."
          },
          "404": {
            "description": "No such resource."
          },
          "503": {
            "description": "Service/authority/provider unavailable; no optimistic success."
          }
        }
      }
    },
    "/v1/reviews": {
      "post": {
        "description": "Signed reviewer request; durable receipt does not change standing. Fields: client_reference, reviewer_key, purchase_id, reason, evidence_hashes.",
        "operationId": "submitReview",
        "responses": {
          "201": {
            "description": "Signed durable review receipt, not an adjudication."
          },
          "400": {
            "description": "Malformed request or unsupported structure."
          },
          "401": {
            "description": "Buyer authentication failed."
          },
          "404": {
            "description": "No such resource."
          },
          "409": {
            "description": "Identity conflict, expired quote or denied state transition."
          },
          "503": {
            "description": "Service/authority/provider unavailable; no optimistic success."
          }
        },
        "security": [
          {
            "ClientProof": []
          }
        ]
      }
    },
    "/v1/verification": {
      "get": {
        "operationId": "getStandingVerification",
        "responses": {
          "200": {
            "description": "Content-addressed independent verifier and invocation recipe."
          },
          "503": {
            "description": "Service/authority unavailable."
          }
        }
      }
    },
    "/v1/evaluate": {
      "post": {
        "summary": "Canonical Standing Mark or Assessment",
        "requestBody": {
          "required": true,
          "description": "text/plain sentence, JSON string, or object with claim, statement, or question. Optional included attestation may establish bounded INFORM standing; it is not an intake requirement.",
          "content": {
            "text/plain": {
              "schema": {
                "type": "string",
                "minLength": 1
              }
            },
            "application/json": {
              "schema": {
                "$ref": "/v1/ordinary/intake.schema.json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Signed canonical Mark or Assessment. This response alone does not independently prove settlement.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "/v1/ordinary/result.schema.json"
                }
              }
            }
          },
          "402": {
            "description": "Payment required."
          }
        },
        "description": "The complete submitted payload is both claim and evidence. No separate evidence form, external discovery, or client proof header is required. ESTABLISHED returns a root-admitted WHP-STANDING-MARK-v2; NOT_ESTABLISHED returns WHP-STANDING-ASSESSMENT-v2 with null mark_id and explicit grounds. Records are immutable, with no expiry or supersession. Exact x402 authorization/body replay or exact prepaid token/body/content-type/path replay restores the original result without another payment.",
        "security": [
          {
            "x402": []
          },
          {
            "prepaidCredits": []
          }
        ],
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "required": false,
            "description": "Existing prepaid credit token: Bearer whp_<token>",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/v1/patch": {
      "post": {
        "summary": "Canonical Standing Mark or Assessment",
        "requestBody": {
          "required": true,
          "description": "text/plain sentence, JSON string, or object with claim, statement, or question. Optional included attestation may establish bounded INFORM standing; it is not an intake requirement.",
          "content": {
            "text/plain": {
              "schema": {
                "type": "string",
                "minLength": 1
              }
            },
            "application/json": {
              "schema": {
                "$ref": "/v1/ordinary/intake.schema.json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Signed canonical Mark or Assessment. This response alone does not independently prove settlement.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "/v1/ordinary/result.schema.json"
                }
              }
            }
          },
          "402": {
            "description": "Payment required."
          }
        },
        "description": "The complete submitted payload is both claim and evidence. No separate evidence form, external discovery, or client proof header is required. ESTABLISHED returns a root-admitted WHP-STANDING-MARK-v2; NOT_ESTABLISHED returns WHP-STANDING-ASSESSMENT-v2 with null mark_id and explicit grounds. Records are immutable, with no expiry or supersession. Exact x402 authorization/body replay or exact prepaid token/body/content-type/path replay restores the original result without another payment.",
        "security": [
          {
            "x402": []
          },
          {
            "prepaidCredits": []
          }
        ],
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "required": false,
            "description": "Existing prepaid credit token: Bearer whp_<token>",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/v1/ept/core": {
      "post": {
        "summary": "The Elemental Properties of True: core axiomatic schema (Wheeler Hubbell Publishing), signed machine-canonical JSON. No input needed. 1 USDC on Base.",
        "responses": {
          "200": {
            "description": "Signed asset after payment."
          },
          "402": {
            "description": "Payment required."
          }
        }
      }
    },
    "/v1/evaluate/priority": {
      "post": {
        "summary": "Canonical Standing Mark or Assessment",
        "requestBody": {
          "required": true,
          "description": "text/plain sentence, JSON string, or object with claim, statement, or question. Optional included attestation may establish bounded INFORM standing; it is not an intake requirement.",
          "content": {
            "text/plain": {
              "schema": {
                "type": "string",
                "minLength": 1
              }
            },
            "application/json": {
              "schema": {
                "$ref": "/v1/ordinary/intake.schema.json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Signed canonical Mark or Assessment. This response alone does not independently prove settlement.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "/v1/ordinary/result.schema.json"
                }
              }
            }
          },
          "402": {
            "description": "Payment required."
          }
        },
        "description": "The complete submitted payload is both claim and evidence. No separate evidence form, external discovery, or client proof header is required. ESTABLISHED returns a root-admitted WHP-STANDING-MARK-v2; NOT_ESTABLISHED returns WHP-STANDING-ASSESSMENT-v2 with null mark_id and explicit grounds. Records are immutable, with no expiry or supersession. Exact x402 authorization/body replay or exact prepaid token/body/content-type/path replay restores the original result without another payment.",
        "security": [
          {
            "x402": []
          },
          {
            "prepaidCredits": []
          }
        ],
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "required": false,
            "description": "Existing prepaid credit token: Bearer whp_<token>",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/v1/audit": {
      "post": {
        "summary": "Canonical Standing Mark or Assessment",
        "responses": {
          "200": {
            "description": "Signed canonical Mark or Assessment. This response alone does not independently prove settlement.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "/v1/ordinary/result.schema.json"
                }
              }
            }
          },
          "402": {
            "description": "Payment required."
          }
        },
        "description": "The complete submitted payload is both claim and evidence. No separate evidence form, external discovery, or client proof header is required. ESTABLISHED returns a root-admitted WHP-STANDING-MARK-v2; NOT_ESTABLISHED returns WHP-STANDING-ASSESSMENT-v2 with null mark_id and explicit grounds. Records are immutable, with no expiry or supersession. Exact x402 authorization/body replay or exact prepaid token/body/content-type/path replay restores the original result without another payment.",
        "requestBody": {
          "required": true,
          "description": "text/plain sentence, JSON string, or object with claim, statement, or question. Optional included attestation may establish bounded INFORM standing; it is not an intake requirement.",
          "content": {
            "text/plain": {
              "schema": {
                "type": "string",
                "minLength": 1
              }
            },
            "application/json": {
              "schema": {
                "$ref": "/v1/ordinary/intake.schema.json"
              }
            }
          }
        },
        "security": [
          {
            "x402": []
          },
          {
            "prepaidCredits": []
          }
        ],
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "required": false,
            "description": "Existing prepaid credit token: Bearer whp_<token>",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/v1/ping": {
      "post": {
        "summary": "Canonical Standing Mark or Assessment",
        "requestBody": {
          "required": true,
          "description": "text/plain sentence, JSON string, or object with claim, statement, or question. Optional included attestation may establish bounded INFORM standing; it is not an intake requirement.",
          "content": {
            "text/plain": {
              "schema": {
                "type": "string",
                "minLength": 1
              }
            },
            "application/json": {
              "schema": {
                "$ref": "/v1/ordinary/intake.schema.json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Signed canonical Mark or Assessment. This response alone does not independently prove settlement.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "/v1/ordinary/result.schema.json"
                }
              }
            }
          },
          "402": {
            "description": "Payment required."
          }
        },
        "description": "The complete submitted payload is both claim and evidence. No separate evidence form, external discovery, or client proof header is required. ESTABLISHED returns a root-admitted WHP-STANDING-MARK-v2; NOT_ESTABLISHED returns WHP-STANDING-ASSESSMENT-v2 with null mark_id and explicit grounds. Records are immutable, with no expiry or supersession. Exact x402 authorization/body replay or exact prepaid token/body/content-type/path replay restores the original result without another payment.",
        "security": [
          {
            "x402": []
          },
          {
            "prepaidCredits": []
          }
        ],
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "required": false,
            "description": "Existing prepaid credit token: Bearer whp_<token>",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/v1/credits": {
      "get": {
        "summary": "Prepaid credit balance. Credits are bought by card at /credits ($25/$100/$500) and spent with Authorization: Bearer whp_<token> on paid doors instead of x402.",
        "responses": {
          "200": {
            "description": "Balance in USDC atomic units."
          },
          "401": {
            "description": "Missing or invalid token."
          }
        }
      }
    },
    "/v1/mock": {
      "post": {
        "summary": "Free dry run (no payment): unsigned structural completeness checks for a door's payload. Query door=<path>. Equivalent: header X-Mock: true on any paid door. Not a determination; no record issued.",
        "parameters": [
          {
            "name": "door",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "/v1/evaluate"
            }
          },
          {
            "name": "X-Mock",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "subject",
                  "claim"
                ],
                "properties": {
                  "subject": {
                    "type": "string"
                  },
                  "claim": {
                    "type": "string"
                  },
                  "provenance": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "WHP-MOCK-DRY-RUN-v1 (unsigned)."
          },
          "400": {
            "description": "Invalid JSON or unknown door."
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://api.wheelerhubbellpublishing.com"
    }
  ],
  "x-whp-purchase-contract": "/v1/contract",
  "x-whp-verification": "/v1/verification"
}
