{
  "openapi": "3.1.0",
  "info": {
    "title": "Standing Mark",
    "version": "1.2.0",
    "description": "Standing Mark is an independent examination service operated by Wheeler Hubbell Publishing, Inc. It examines claims and proposed actions and returns a signed result stating what is established and what is not. It does not execute, authorize, pay or settle.",
    "x-guidance": "GET /v1/contract first; it is the live source of truth for schemas, payment terms and limits, including the accepted input schema (input_schema). POST /v1/evaluate with a JSON body in that input schema: the proposition as a string 'claim' (or 'subject' or object.id), the examination material as a string 'data', provenance.source, provenance.evidence and an authority warrant as applicable. An object-valued 'claim' is not a proposition and no field named 'material' is read. An unpaid request returns HTTP 402 with a fixed-price payment request for exactly 1.00 USDC on Base (scheme WHP-BASE-USDC-FLAT-1, not x402-exact): the quote carries quote_id, amount_units, pay_to and expires, and is bound to the exact request bytes. Pay the quoted amount on Base, then retry the identical body with headers X-WHP-Quote and X-WHP-Payment-Tx. POST /v1/verification checks a signed result's signature only. The issuer Ed25519 key is published at /.well-known/whp-issuer.json."
  },
  "servers": [
    {
      "url": "https://decisionintegrity.wheelerhubbellpublishing.com"
    }
  ],
  "paths": {
    "/health": {
      "get": {
        "operationId": "health",
        "summary": "Service status",
        "security": [],
        "responses": {
          "200": {
            "description": "Service status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                }
              }
            }
          }
        }
      }
    },
    "/v1/contract": {
      "get": {
        "operationId": "contract",
        "summary": "Current machine-readable contract: schemas, payment terms and limits",
        "security": [],
        "responses": {
          "200": {
            "description": "The live contract",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Contract"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/whp-standing.json": {
      "get": {
        "operationId": "discovery",
        "summary": "Discovery document (same content as /v1/contract)",
        "security": [],
        "responses": {
          "200": {
            "description": "Discovery document",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Contract"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/whp-issuer.json": {
      "get": {
        "operationId": "issuer",
        "summary": "Issuer identity: Ed25519 public key and key id",
        "security": [],
        "responses": {
          "200": {
            "description": "Issuer identity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Issuer"
                }
              }
            }
          }
        }
      }
    },
    "/v1/evaluate": {
      "post": {
        "operationId": "evaluate",
        "summary": "Submit a claim or proposed action for examination",
        "description": "Without payment, returns HTTP 402 with a price quote bound to the exact request bytes. After paying the quoted amount of USDC on Base, retry the identical body with headers X-WHP-Quote (the quote id) and X-WHP-Payment-Tx (the Base transaction hash) to receive the signed examination result. Payment buys the examination, not a positive finding.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "string",
                    "description": "A JSON string body is treated as the claim."
                  },
                  {
                    "type": "object",
                    "description": "The examination request in the accepted input schema (authoritative copy: GET /v1/contract, field input_schema). The evaluator reads only these fields. Strict JSON: safe integers only (no floats, no -0, no integers beyond +/-2^53-1), no duplicate keys, well-formed Unicode, at most 64 levels deep and 262144 bytes. An object-valued 'claim' is not a proposition; no field named 'material' is read; a request with no readable proposition and no readable material is examined over zero bytes.",
                    "properties": {
                      "claim": {
                        "type": "string",
                        "description": "The proposition examined. When no 'data' string is supplied, the claim itself is the examined material (explicit recorded fallback)."
                      },
                      "subject": {
                        "type": "string",
                        "description": "The proposition when no claim string is present."
                      },
                      "data": {
                        "type": "string",
                        "description": "The examination material read against the proposition."
                      },
                      "source": {
                        "type": "string",
                        "description": "A retrievable source reference for the material ('provenance.source' is also read)."
                      },
                      "provenance": {
                        "type": "object",
                        "properties": {
                          "source": {
                            "type": "string",
                            "description": "A retrievable source reference for the material."
                          },
                          "authority": {
                            "type": "string",
                            "description": "The authority warrant; required for operations crossing the decision boundary (RECOMMEND and above). A top-level 'warrant' string is also read."
                          },
                          "evidence": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Verbatim supporting statements."
                          },
                          "qualifiers": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Binding qualifiers."
                          }
                        }
                      },
                      "warrant": {
                        "type": "string",
                        "description": "Authority warrant (see provenance.authority)."
                      },
                      "requested_operation": {
                        "type": "string",
                        "enum": [
                          "DESCRIBE",
                          "INFORM",
                          "INQUIRE",
                          "WARN",
                          "REVIEW",
                          "RECOMMEND",
                          "CONCLUDE",
                          "EXECUTE",
                          "ACT"
                        ],
                        "description": "Default INFORM; ACT is read as EXECUTE."
                      },
                      "bounds": {
                        "type": "object",
                        "description": "jurisdiction, scope, valid_from, valid_until."
                      },
                      "extraction": {
                        "type": "object",
                        "description": "Extraction provenance, e.g. method."
                      },
                      "qualifiers": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "unknowns": {
                        "type": "array",
                        "description": "Declared unknowns, each may name operations it blocks."
                      },
                      "transitions": {
                        "type": "array",
                        "description": "Signed attestation transitions."
                      },
                      "nodes": {
                        "type": "array",
                        "description": "Signed attestation nodes; a complete WHP-STANDING-SUBMISSION-v1 object is also accepted."
                      },
                      "prior_record_hash": {
                        "type": "string"
                      },
                      "id": {
                        "type": "string"
                      },
                      "client_reference": {
                        "type": "string"
                      },
                      "version_state": {
                        "type": "string"
                      }
                    }
                  }
                ],
                "description": "The claim or proposed action to examine, with supporting material. Field-level requirements are defined in the live contract at GET /v1/contract (input_schema); the quote is bound to the exact request bytes."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Signed examination result: a Standing Mark (claim established) or a signed record naming what is not established",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SignedResult"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request"
          },
          "402": {
            "description": "Payment required. The body carries a price quote bound to the exact request bytes, under payment_required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentRequired"
                }
              }
            }
          },
          "503": {
            "description": "Payment chain temporarily unavailable (CHAIN_UNAVAILABLE); nothing is consumed"
          }
        },
        "x-whp-payment": {
          "scheme": "WHP-BASE-USDC-FLAT-1",
          "x402_exact": false,
          "network": "eip155:8453",
          "asset": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
          "decimals": 6,
          "price": "1.00 USDC",
          "pay_to": "0x1050eddd8282623b0c263ed6bdbd42370bbc28d3",
          "min_confirmations": 5,
          "quote_ttl_minutes": 15,
          "amount_units": 1000000,
          "amount_match": "exact"
        }
      }
    },
    "/v1/verification": {
      "post": {
        "operationId": "verify",
        "summary": "Check a signed result's signature",
        "description": "Signature check only. Per the live contract this route does not authenticate the supplied key or establish object binding; full independent verification uses the published issuer key and the standalone receiver.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "A signed result previously returned by /v1/evaluate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Verification result"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Health": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "service": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "environment": {
            "type": "string"
          },
          "determinism": {
            "type": "string"
          }
        }
      },
      "Contract": {
        "type": "object",
        "description": "Live contract: profile, routes, payment terms, determinism rule, signed type, issuer key and limits. Read at time of use."
      },
      "Issuer": {
        "type": "object",
        "properties": {
          "issuer": {
            "type": "string"
          },
          "legal_actor": {
            "type": "string"
          },
          "algorithm": {
            "type": "string",
            "enum": [
              "Ed25519"
            ]
          },
          "format": {
            "type": "string"
          },
          "public_key": {
            "type": "string",
            "description": "SPKI DER, base64"
          },
          "key_id_sha256": {
            "type": "string"
          }
        }
      },
      "PaymentRequired": {
        "type": "object",
        "description": "Observed live 402 body shape (2026-11-13).",
        "properties": {
          "status": {
            "type": "integer",
            "enum": [
              402
            ]
          },
          "error": {
            "type": "string",
            "enum": [
              "PAYMENT_REQUIRED"
            ]
          },
          "detail": {
            "type": "string"
          },
          "payment_required": {
            "$ref": "#/components/schemas/Quote"
          }
        }
      },
      "Quote": {
        "type": "object",
        "description": "Price quote bound to the exact request bytes. Self-expires (observed lifetime about 15 minutes).",
        "properties": {
          "scheme": {
            "type": "string",
            "enum": [
              "WHP-BASE-USDC-FLAT-1"
            ]
          },
          "network": {
            "type": "string",
            "enum": [
              "eip155:8453"
            ]
          },
          "asset": {
            "type": "string"
          },
          "pay_to": {
            "type": "string"
          },
          "price_floor_units": {
            "type": "integer"
          },
          "decimals": {
            "type": "integer",
            "enum": [
              6
            ]
          },
          "min_confirmations": {
            "type": "integer"
          },
          "how": {
            "type": "string"
          },
          "quote_id": {
            "type": "string"
          },
          "amount_units": {
            "type": "integer",
            "description": "Exactly 1000000 USDC atomic units (1.00 USDC, 6 decimals)",
            "const": 1000000
          },
          "expires": {
            "type": "integer",
            "description": "Unix epoch seconds"
          }
        }
      },
      "SignedResult": {
        "type": "object",
        "description": "Signed examination result. Type WHP-STANDING-MARK-v1, Ed25519 signature by the published issuer key. Either a Standing Mark (ESTABLISHED) or a signed record naming what is not established."
      }
    }
  }
}
