{"openapi":"3.1.0","info":{"title":"jurat","version":"0.3.0","description":"Evidence infrastructure for AI agents. Paid endpoints settle in USDC on Base via x402 (HTTP 402 challenge, no API keys).","contact":{"email":"spookynakamoto@gmail.com"}},"servers":[{"url":"https://jurat.dev"}],"paths":{"/v1/snapshot":{"get":{"summary":"Notarized snapshot of any public URL: signed, timestamped attestation (ed25519) of exactly what the URL returned — final URL, UTC time, HTTP status, content type, byte length, sha256 — with the bytes archived.","description":"Notarized snapshot of any public URL: signed, timestamped attestation (ed25519) of exactly what the URL returned — final URL, UTC time, HTTP status, content type, byte length, sha256 — with the bytes archived. Settlement-grade evidence of what a page said. Price: $0.01 via x402.","parameters":[{"name":"url","in":"query","required":true,"description":"http(s) URL to attest","schema":{"type":"string"},"example":"https://example.com"}],"responses":{"200":{"description":"paid response","content":{"application/json":{"example":{"signed":{"id":"uuid","url":"https://example.com","fetched_at":"2026-07-20T08:06:12Z","http_status":200,"sha256":"ff67a9d7…"},"signature":"ed25519 base64","retrieval_url":"free forever"}}}},"400":{"description":"invalid params (free, before payment)"},"402":{"description":"x402 payment challenge"}}}},"/v1/scores":{"get":{"summary":"Normalized live scoreboard for 24 leagues (US majors, top soccer leagues, SA Premiership, UFC, 8 rugby competitions, IPL and Big Bash cricket): every event with state, completion flag and scores.","description":"Normalized live scoreboard for 24 leagues (US majors, top soccer leagues, SA Premiership, UFC, 8 rugby competitions, IPL and Big Bash cricket): every event with state, completion flag and scores. Price: $0.01 via x402.","parameters":[{"name":"league","in":"query","required":true,"description":"league slug, see /v1/sports","schema":{"type":"string"},"example":"mlb"},{"name":"date","in":"query","required":false,"description":"YYYYMMDD, default today","schema":{"type":"string"},"example":"20260719"}],"responses":{"200":{"description":"paid response","content":{"application/json":{"example":{"league":"mlb","events":[{"event_id":"401816171","short_name":"CHW @ TOR","completed":true,"home":{"abbrev":"TOR","score":0},"away":{"abbrev":"CHW","score":3}}]}}}},"400":{"description":"invalid params (free, before payment)"},"402":{"description":"x402 payment challenge"}}}},"/v1/result":{"get":{"summary":"Single-event FINAL result for market settlement, optionally bundled with a notarized snapshot of the source (attest=true).","description":"Single-event FINAL result for market settlement, optionally bundled with a notarized snapshot of the source (attest=true). Refuses to attest non-final events. Price: $0.02 via x402.","parameters":[{"name":"league","in":"query","required":true,"description":"league slug","schema":{"type":"string"},"example":"mlb"},{"name":"event","in":"query","required":false,"description":"event_id (or use team)","schema":{"type":"string"},"example":"401816171"},{"name":"team","in":"query","required":false,"description":"team name/abbrev substring","schema":{"type":"string"},"example":"blue jays"},{"name":"date","in":"query","required":false,"description":"YYYYMMDD","schema":{"type":"string"},"example":"20260719"},{"name":"attest","in":"query","required":false,"description":"bundle a signed source attestation (finals only)","schema":{"type":"string"},"example":"true"}],"responses":{"200":{"description":"paid response","content":{"application/json":{"example":{"short_name":"CHW @ TOR","completed":true,"home":{"score":0},"away":{"score":3},"attestation":{"signed":{"sha256":"8b72f71c…"}}}}}},"400":{"description":"invalid params (free, before payment)"},"402":{"description":"x402 payment challenge"}}}},"/v1/watch/create":{"get":{"summary":"Create a change watcher: jurat checks a URL (hash / json:<path> / regex:<pattern>) or a sports event (result:<league>:<event_id>) on your cadence and POSTs your webhook on change or final whistle, with a signed source attestation attached.","description":"Create a change watcher: jurat checks a URL (hash / json:<path> / regex:<pattern>) or a sports event (result:<league>:<event_id>) on your cadence and POSTs your webhook on change or final whistle, with a signed source attestation attached. Price: $0.05 via x402.","parameters":[{"name":"webhook","in":"query","required":true,"description":"https webhook to notify","schema":{"type":"string"},"example":"https://agent.example/hook"},{"name":"url","in":"query","required":false,"description":"target URL (hash/json/regex modes)","schema":{"type":"string"},"example":"https://example.com/page"},{"name":"mode","in":"query","required":false,"description":"hash | json:<dot.path> | regex:<pattern> | result:<league>:<event_id>","schema":{"type":"string"},"example":"json:price.usd"},{"name":"cadence_minutes","in":"query","required":false,"description":"15-1440","schema":{"type":"string"},"example":"15"},{"name":"duration_days","in":"query","required":false,"description":"1-7","schema":{"type":"string"},"example":"7"},{"name":"snapshot_on_change","in":"query","required":false,"description":"attach attestation on change","schema":{"type":"string"},"example":"true"}],"responses":{"200":{"description":"paid response","content":{"application/json":{"example":{"kind":"watch","id":"uuid","status":"active","status_url":"free status checks"}}}},"400":{"description":"invalid params (free, before payment)"},"402":{"description":"x402 payment challenge"}}}},"/v1/wake/create":{"get":{"summary":"Schedule a wakeup: jurat holds your payload and POSTs it to your webhook at time T.","description":"Schedule a wakeup: jurat holds your payload and POSTs it to your webhook at time T. Cron for agents that cannot stay alive. Price: $0.005 via x402.","parameters":[{"name":"at","in":"query","required":true,"description":"ISO-8601, max 30 days ahead","schema":{"type":"string"},"example":"2026-07-21T06:00:00Z"},{"name":"webhook","in":"query","required":true,"description":"https webhook","schema":{"type":"string"},"example":"https://agent.example/hook"},{"name":"payload","in":"query","required":false,"description":"delivered verbatim, max 8KB","schema":{"type":"string"},"example":"resume-task-42"}],"responses":{"200":{"description":"paid response","content":{"application/json":{"example":{"kind":"wake","id":"uuid","at":"2026-07-21T06:00:00Z","status":"pending"}}}},"400":{"description":"invalid params (free, before payment)"},"402":{"description":"x402 payment challenge"}}}},"/v1/watch/league":{"get":{"summary":"Watch EVERY event in a league for the day with one call: jurat webhooks each final as it lands, signed source attestation attached.","description":"Watch EVERY event in a league for the day with one call: jurat webhooks each final as it lands, signed source attestation attached. The bulk settlement product. Price: $0.10 via x402.","parameters":[{"name":"league","in":"query","required":true,"description":"league slug","schema":{"type":"string"},"example":"mlb"},{"name":"webhook","in":"query","required":true,"description":"https webhook","schema":{"type":"string"},"example":"https://agent.example/hook"},{"name":"date","in":"query","required":false,"description":"YYYYMMDD, default today","schema":{"type":"string"},"example":"20260719"},{"name":"cadence_minutes","in":"query","required":false,"description":"15-1440","schema":{"type":"string"},"example":"15"},{"name":"duration_days","in":"query","required":false,"description":"1-2","schema":{"type":"string"},"example":"1"},{"name":"snapshot_on_change","in":"query","required":false,"description":"attach attestation per check batch","schema":{"type":"string"},"example":"true"}],"responses":{"200":{"description":"paid response","content":{"application/json":{"example":{"kind":"watch","mode":"league:mlb","status":"active","finals_delivered":0}}}},"400":{"description":"invalid params (free, before payment)"},"402":{"description":"x402 payment challenge"}}}},"/v1/wake/recurring":{"get":{"summary":"Recurring wakeups: jurat POSTs your payload to your webhook every N seconds from time T until expiry.","description":"Recurring wakeups: jurat POSTs your payload to your webhook every N seconds from time T until expiry. Standing cron for ephemeral agents. Price: $0.05 via x402.","parameters":[{"name":"at","in":"query","required":true,"description":"first fire, ISO-8601","schema":{"type":"string"},"example":"2026-07-21T06:00:00Z"},{"name":"every_seconds","in":"query","required":true,"description":">= 900","schema":{"type":"string"},"example":"3600"},{"name":"webhook","in":"query","required":true,"description":"https webhook","schema":{"type":"string"},"example":"https://agent.example/hook"},{"name":"duration_days","in":"query","required":false,"description":"1-7","schema":{"type":"string"},"example":"7"},{"name":"payload","in":"query","required":false,"description":"delivered each fire, max 8KB","schema":{"type":"string"},"example":"heartbeat"}],"responses":{"200":{"description":"paid response","content":{"application/json":{"example":{"kind":"wake","status":"recurring","every_seconds":3600,"fires":0}}}},"400":{"description":"invalid params (free, before payment)"},"402":{"description":"x402 payment challenge"}}}},"/v1/attestation/{id}":{"get":{"summary":"Retrieve an attestation record (free forever).","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"attestation with signature, and merkle proof once anchored"}}}},"/v1/anchors":{"get":{"summary":"Daily signed merkle roots over all attestations (free).","security":[],"responses":{"200":{"description":"anchor list + algorithm"}}}},"/v1/sports":{"get":{"summary":"Supported leagues (free).","security":[],"responses":{"200":{"description":"league slugs"}}}}}}