{"openapi":"3.1.0","info":{"title":"Proof of Reality Verify API","version":"1.0.0","description":"Public, unauthenticated verification API for hash-first physical-world proof records. Responses are disclosure-filtered by the proof owner."},"servers":[{"url":"https://verify.realityproof.app"}],"tags":[{"name":"Proofs","description":"Public proof lookup and explorer endpoints"},{"name":"Assets","description":"Disclosure-gated retained scan assets"},{"name":"Metadata","description":"Token metadata compatibility endpoints"}],"paths":{"/health":{"get":{"tags":["Proofs"],"summary":"Health check","responses":{"200":{"description":"API is reachable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/v1/proofs":{"get":{"tags":["Proofs"],"summary":"List latest public proofs","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Latest disclosure-filtered proof list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProofListResponse"}}}}}}},"/v1/verify/{verifyId}":{"get":{"tags":["Proofs"],"summary":"Verify by public proof id","parameters":[{"$ref":"#/components/parameters/VerifyId"}],"responses":{"200":{"description":"Disclosure-filtered public proof","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProof"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/verify/hash/{bundleHash}":{"get":{"tags":["Proofs"],"summary":"Verify by bundle hash","parameters":[{"$ref":"#/components/parameters/BundleHash"}],"responses":{"200":{"description":"Disclosure-filtered public proof","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProof"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/token/{chainId}/{contract}/{tokenId}":{"get":{"tags":["Proofs"],"summary":"Verify by token reference","parameters":[{"$ref":"#/components/parameters/ChainId"},{"$ref":"#/components/parameters/Contract"},{"$ref":"#/components/parameters/TokenId"}],"responses":{"200":{"description":"Disclosure-filtered public proof with optional chain check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProof"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/assets/{verifyId}/{kind}":{"get":{"tags":["Assets"],"summary":"Redirect to a retained asset when disclosure allows it","parameters":[{"$ref":"#/components/parameters/VerifyId"},{"$ref":"#/components/parameters/AssetKind"}],"responses":{"302":{"description":"Redirects to the retained R2/custom-domain asset"},"403":{"description":"Proof owner did not expose this asset"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/metadata/{chainId}/{contract}/{tokenId}":{"get":{"tags":["Metadata"],"summary":"NFT metadata compatibility response","parameters":[{"$ref":"#/components/parameters/ChainId"},{"$ref":"#/components/parameters/Contract"},{"$ref":"#/components/parameters/TokenId"}],"responses":{"200":{"description":"Token metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenMetadata"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}}},"components":{"parameters":{"VerifyId":{"name":"verifyId","in":"path","required":true,"schema":{"type":"string","minLength":8,"maxLength":128}},"BundleHash":{"name":"bundleHash","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}},"ChainId":{"name":"chainId","in":"path","required":true,"schema":{"type":"integer","minimum":1}},"Contract":{"name":"contract","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"TokenId":{"name":"tokenId","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"}},"AssetKind":{"name":"kind","in":"path","required":true,"schema":{"type":"string","enum":["scene","audio","sensors","bundle"]}}},"responses":{"NotFound":{"description":"Proof, token, or asset was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"Health":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean","example":true}}},"ProofListResponse":{"type":"object","required":["stats","items"],"properties":{"stats":{"$ref":"#/components/schemas/ProofStats"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ProofListItem"}}}},"ProofStats":{"type":"object","required":["total","finalized","minted","chainAnchored","fullWitnesses"],"properties":{"total":{"type":"integer"},"finalized":{"type":"integer"},"minted":{"type":"integer"},"chainAnchored":{"type":"integer"},"fullWitnesses":{"type":"integer"}}},"ProofListItem":{"type":"object","required":["verifyId","status","verificationLevel","disclosure","bundleHash","checks"],"properties":{"verifyId":{"type":"string"},"status":{"type":"string","enum":["finalized","minted","failed"]},"verificationLevel":{"$ref":"#/components/schemas/VerificationLevel"},"disclosure":{"$ref":"#/components/schemas/DisclosureLevel"},"bundleHash":{"type":["string","null"],"pattern":"^0x[0-9a-fA-F]{64}$"},"mode":{"type":["string","null"]},"capture":{"$ref":"#/components/schemas/CaptureWindow"},"chain":{"$ref":"#/components/schemas/ChainReference"},"checks":{"$ref":"#/components/schemas/CheckSummary"},"assets":{"type":"array","items":{"$ref":"#/components/schemas/PublicAsset"}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"PublicProof":{"type":"object","required":["verifyId","status","verificationLevel","disclosure","bundleHash","mode","capture","chain","checks"],"properties":{"verifyId":{"type":"string"},"status":{"type":"string","enum":["finalized","minted","failed"]},"verificationLevel":{"$ref":"#/components/schemas/VerificationLevel"},"disclosure":{"$ref":"#/components/schemas/DisclosureLevel"},"bundleHash":{"type":["string","null"],"pattern":"^0x[0-9a-fA-F]{64}$"},"mode":{"type":["string","null"]},"capture":{"$ref":"#/components/schemas/CaptureWindow"},"location":{"$ref":"#/components/schemas/Location"},"chain":{"$ref":"#/components/schemas/ChainReference"},"checks":{"type":"array","items":{"$ref":"#/components/schemas/ProofCheck"}},"artifacts":{"type":"array","items":{"$ref":"#/components/schemas/ArtifactHash"}},"assets":{"type":"array","items":{"$ref":"#/components/schemas/PublicAsset"}}}},"VerificationLevel":{"type":"string","enum":["L0_HASHED","L1_SERVER_VERIFIED","L2_COSIGNED","L3_CHAIN_ANCHORED","L4_FULL_WITNESSES"]},"DisclosureLevel":{"type":"string","enum":["hashOnly","timeOnly","timeLocation","fullProof"]},"CaptureWindow":{"type":"object","required":["startedAt","endedAt"],"properties":{"startedAt":{"type":["integer","null"]},"endedAt":{"type":["integer","null"]}}},"Location":{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"alt":{"type":"number"},"hAcc":{"type":"number"}}},"ChainReference":{"type":"object","required":["chainId","contract","tokenId","txHash"],"properties":{"chainId":{"type":["integer","null"]},"contract":{"type":["string","null"]},"tokenId":{"type":["string","null"]},"txHash":{"type":["string","null"]}}},"CheckSummary":{"type":"object","required":["ok","total"],"properties":{"ok":{"type":"integer"},"total":{"type":"integer"}}},"ProofCheck":{"type":"object","required":["name","ok","level","detail"],"properties":{"name":{"type":"string"},"ok":{"type":"boolean"},"level":{"$ref":"#/components/schemas/VerificationLevel"},"detail":{"type":"string"}}},"ArtifactHash":{"type":"object","required":["kind","contentType","bytes","sha256"],"properties":{"kind":{"type":"string","enum":["scene","audio","sensors","bundle"]},"contentType":{"type":"string"},"bytes":{"type":"integer"},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$"}}},"PublicAsset":{"allOf":[{"$ref":"#/components/schemas/ArtifactHash"},{"type":"object","required":["href"],"properties":{"href":{"type":"string","format":"uri"}}}]},"TokenMetadata":{"type":"object","required":["name","description","external_url","attributes"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"external_url":{"type":"string","format":"uri"},"attributes":{"type":"array","items":{"type":"object","required":["trait_type","value"],"properties":{"trait_type":{"type":"string"},"value":{}}}}}},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}