{"openapi":"3.1.0","info":{"title":"Proof402","version":"0.2.1","description":"Proof402 lets autonomous agents pay for a signed timestamped proof that a result hash existed at a specific time, without sending private payloads to a public proof page."},"servers":[{"url":"https://proof402.vercel.app"}],"paths":{"/health":{"get":{"summary":"Runtime health and mode summary","responses":{"200":{"description":"Health response"}}}},"/api/capabilities":{"get":{"summary":"Machine-readable service capabilities","responses":{"200":{"description":"Capabilities response"}}}},"/api/bazaar":{"get":{"summary":"Bazaar/x402 discovery metadata","responses":{"200":{"description":"Bazaar metadata"}}}},"/api/quickstart":{"get":{"summary":"Compact agent quickstart","responses":{"200":{"description":"Quickstart response"}}}},"/api/actions":{"get":{"summary":"Action templates for agent task matching","responses":{"200":{"description":"Action catalog response"}}}},"/api/trust":{"get":{"summary":"Public trust summary","responses":{"200":{"description":"Trust response"}}}},"/api/status":{"get":{"summary":"Public launch and runtime status summary","responses":{"200":{"description":"Status response"}}}},"/api/dashboard/summary":{"get":{"summary":"Product dashboard summary","responses":{"200":{"description":"Dashboard summary"}}}},"/api/proof/notarize":{"post":{"summary":"Create or replay a timestamped proof for a SHA-256 hash","x-payment-info":{"price":{"mode":"fixed","amount":"0.005","currency":"USD"},"protocols":[{"x402":{"version":2,"scheme":"exact","network":"eip155:8453","payTo":"0x0E525428d66C111672cE58B1bf649A6d167f36b1"}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["contentHash","label","idempotencyKey"],"properties":{"contentHash":{"type":"string","pattern":"^sha256:[a-fA-F0-9]{64}$","description":"SHA-256 hash of the result or artifact. Do not send the raw payload."},"label":{"type":"string","minLength":1,"maxLength":120},"metadata":{"type":"object","additionalProperties":true,"description":"Optional non-secret metadata. Proof402 stores and exposes only metadataHash and metadataKeys."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":160}}},"example":{"contentHash":"sha256:7b3d0f0f7c847c28f20b8c17d38b4f0c7df3da7d8ddfb979a9dd4f9f1f2a35cc","label":"agent result hash","metadata":{"agent":"research-bot","taskId":"task_123"},"idempotencyKey":"proof-task-123"}}}},"responses":{"200":{"description":"Proof created or replayed","content":{"application/json":{"schema":{"type":"object","required":["ok","mode","idempotentReplay","proof","links"],"properties":{"ok":{"type":"boolean"},"mode":{"type":"string","enum":["demo","x402"]},"idempotentReplay":{"type":"boolean"},"proof":{"type":"object","required":["id","verified","timestamp","contentHash","metadataHash","signature"],"properties":{"id":{"type":"string"},"verified":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"},"contentHash":{"type":"string"},"label":{"type":"string"},"metadataHash":{"type":"string"},"signature":{"type":"string"}}},"links":{"type":"object","properties":{"proof":{"type":"string"},"verify":{"type":"string"}}}}},"example":{"ok":true,"mode":"demo","idempotentReplay":false,"proof":{"id":"proof_...","verified":true,"timestamp":"2026-05-16T00:00:00.000Z","contentHash":"sha256:7b3d0f0f7c847c28f20b8c17d38b4f0c7df3da7d8ddfb979a9dd4f9f1f2a35cc","metadataHash":"sha256:...","signature":"hmac-sha256:..."},"links":{"proof":"/proof/proof_...","verify":"/api/verify/proofs/proof_..."}}}}},"400":{"description":"Invalid proof request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object"}}}}}}}},"402":{"description":"Payment required when x402 is enabled","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object"}}}}}}}}}}},"/api/proofs/recent":{"get":{"summary":"Recent public proofs with redacted signatures","responses":{"200":{"description":"Recent proof summaries"}}}},"/api/proofs/search":{"get":{"summary":"Search public proofs by id, hash, label, metadata hash, or account","parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"contentHash","in":"query","schema":{"type":"string"}},{"name":"metadataHash","in":"query","schema":{"type":"string"}},{"name":"accountId","in":"query","schema":{"type":"string"}},{"name":"idempotencyKey","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Search result"}}}},"/api/proofs/{id}":{"get":{"summary":"Public proof document","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Proof document"},"404":{"description":"Proof not found"}}}},"/api/verify/proofs/{id}":{"get":{"summary":"Verify stored proof signature","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Verification report"},"404":{"description":"Proof not found"}}}},"/proof/{id}":{"get":{"summary":"Public proof badge page","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Proof badge HTML"}}}},"/marketplace":{"get":{"summary":"Public-safe marketplace listing kit page","responses":{"200":{"description":"Marketplace listing HTML"}}}},"/marketplace.json":{"get":{"summary":"Machine-readable marketplace listing kit","responses":{"200":{"description":"Marketplace listing JSON"}}}},"/dashboard":{"get":{"summary":"Product dashboard UI","responses":{"200":{"description":"Dashboard HTML"}}}},"/api/accounts":{"get":{"summary":"List accounts","security":[{"AdminKey":[]}],"responses":{"200":{"description":"Account list"},"401":{"description":"Admin key required"}}},"post":{"summary":"Create an account","security":[{"AdminKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"ownerLabel":{"type":"string"}}}}}},"responses":{"201":{"description":"Account created"},"401":{"description":"Admin key required"}}}},"/api/accounts/{id}/api-keys":{"get":{"summary":"List account API keys","security":[{"AdminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Redacted API key list"}}},"post":{"summary":"Create an API key for an account","security":[{"AdminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"API key created; raw key returned once"}}}},"/api/accounts/{id}/webhooks":{"get":{"summary":"List account webhooks and recent deliveries","security":[{"AdminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Webhook list"}}},"post":{"summary":"Create a webhook receipt sink","security":[{"AdminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Webhook created; signing secret returned once"}}}},"/api/api-keys/{id}/revoke":{"post":{"summary":"Revoke an API key","security":[{"AdminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"API key revoked"}}}},"/api/webhooks/{id}/test":{"post":{"summary":"Send a signed webhook test event","security":[{"AdminKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Webhook test delivery recorded"}}}},"/llms.txt":{"get":{"summary":"Plain-text guidance for LLM and agent crawlers","responses":{"200":{"description":"LLM guidance"}}}},"/.well-known/x402":{"get":{"summary":"x402 well-known discovery document","responses":{"200":{"description":"x402 discovery document"}}}}},"components":{"securitySchemes":{"AdminKey":{"type":"apiKey","in":"header","name":"X-Proof402-Admin-Key"},"Proof402Key":{"type":"apiKey","in":"header","name":"X-Proof402-Key"}},"schemas":{"ProofRequest":{"type":"object","additionalProperties":false,"required":["contentHash","label","idempotencyKey"],"properties":{"contentHash":{"type":"string","pattern":"^sha256:[a-fA-F0-9]{64}$","description":"SHA-256 hash of the result or artifact. Do not send the raw payload."},"label":{"type":"string","minLength":1,"maxLength":120},"metadata":{"type":"object","additionalProperties":true,"description":"Optional non-secret metadata. Proof402 stores and exposes only metadataHash and metadataKeys."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":160}}},"ProofResponse":{"type":"object","required":["ok","mode","idempotentReplay","proof","links"],"properties":{"ok":{"type":"boolean"},"mode":{"type":"string","enum":["demo","x402"]},"idempotentReplay":{"type":"boolean"},"proof":{"type":"object","required":["id","verified","timestamp","contentHash","metadataHash","signature"],"properties":{"id":{"type":"string"},"verified":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"},"contentHash":{"type":"string"},"label":{"type":"string"},"metadataHash":{"type":"string"},"signature":{"type":"string"}}},"links":{"type":"object","properties":{"proof":{"type":"string"},"verify":{"type":"string"}}}}},"ErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object"}}}}},"Account":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"ownerLabel":{"type":"string"},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"ApiKey":{"type":"object","properties":{"id":{"type":"string"},"accountId":{"type":"string"},"name":{"type":"string"},"keyPrefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}}},"Webhook":{"type":"object","properties":{"id":{"type":"string"},"accountId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}}}}}