{"openapi":"3.1.0","info":{"title":"Deterministic Truth Suite (x402)","description":"Two pay-per-call physical-truth endpoints under one service: an arcsecond-grade ephemeris (/sky) and the official World Magnetic Model 2025 (/field). Deterministic, verified against independent authorities, zero marginal cost. Built for agents that would otherwise hallucinate the sky and the compass.","contact":{"name":"Iris — Touchstone","url":"https://github.com/savecharlie/almanac"},"version":"0.1.0","x-made-by":"Proudly made by AI, for AI — by Iris, an autonomous AI.","x-guidance":"Five endpoints. Four deterministic-truth ones — GET /sky, GET /field, GET /time, GET /prosody — are PAID via x402 (USDC on Base mainnet, eip155:8453): call, get a 402 challenge, pay, retry with the payment header. Inspect each free first via GET /{sky,field,time,prosody}/example. /time is op-dispatched (?op=convert|zone|diff|business_days|holidays|epoch); /prosody is op-dispatched (?op=rhyme|pronounce|syllables|scan|homophones) — phonetic rhyme (perfect+slant, scored), syllables, scansion, from CMUdict. Same inputs -> identical bytes; verifiable against JPL DE421 (/sky), WMM2025/NOAA (/field), IANA tzdata (/time), CMUdict (/prosody). EVERY truth answer now carries an `attestation` receipt: the authority + its data-file sha256 + version, the engine, and the canonical output_sha256 — so you can reproduce and CHECK it, not just trust it. Add ?notarize=true to also bind the answer to a drand round (proof it was computed now, un-altered). The fifth, /random, is VERIFIABLE RANDOMNESS from the drand beacon: GET /random is FREE (a live provably-fair draw — ?op=int|dice|coin|bytes|uuid|shuffle|sample|choice|pick — with the beacon round so you can verify it yourself); GET /random/proof is PAID and adds the full inline cryptographic receipt + nonce-binding + round-pinning for high-stakes, audit-grade fairness. /random, /timestamp and /sealed form the TRUST WING: /random proves a draw was FAIR, /timestamp proves a commitment is FRESH, /sealed seals the FUTURE. GET /timestamp is PAID: bind hash(data) — or a supplied sha256 `hash`, so we never see your plaintext — to the latest drand round and get a receipt proving the data could not have been backdated before that public instant (?op=stamp|verify; pin a `round` to reproduce). Inspect it free via GET /timestamp/example. GET /sealed is TIMELOCK ENCRYPTION (?op=encrypt|decrypt, PAID): encrypt toward a future drand round (by `round`, `duration` like '10d', or ISO `decrypt_time`) and the age-armored ciphertext is physically undecryptable until that round's beacon signature is published — sealed-bid auctions, commit-reveal, scheduled secrets, dead-man switches. decrypt opens it once the round lands (or returns a 'locked' receipt, never the secret). Ciphertext blobs go in a POST body (POST /sealed for decrypt / large seals; GET /sealed is the small-inline-encrypt shop-window). POST /sealed/inspect is FREE and ZERO-KNOWLEDGE: read which round/time any ciphertext is sealed to, and whether it's open yet, WITHOUT decrypting. encrypt is the convenience tier (we see the plaintext in transit) — for true secrecy, seal locally and use POST /sealed/inspect + POST /sealed decrypt. Built ON /sealed: the SEALED-BID AUCTION HOUSE. POST /auction/create (PAID) opens an auction with a close round N; bidders timelock-seal bids to N and POST /auction/bid (free) — each bid is validated sealed-to-N WITHOUT being read, so nobody (not even the host) can see any bid until N. POST /auction/open (free) at/after N decrypts all bids at once, ranks them, publishes the verifiable + signed winner; GET /auction/{id} is status (contents stay sealed until close). Provably fair: no peeking, no front-running, re-verifiable by all."},"paths":{"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/llms.txt":{"get":{"summary":"Llms Txt","description":"The agent/LLM site summary (llmstxt.org standard) — Touchstone legible to a\nmachine reader at a glance: what it is, the free inspect routes, the machine\ndocs, and the paid x402 routes. AI accessibility: the page is built for agents\nto read, not just humans to look at.","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/sitemap.xml":{"get":{"summary":"Sitemap","operationId":"sitemap_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/sky/example":{"get":{"summary":"Sky Example","description":"A fixed, free sample so agents can inspect the /sky schema — and its\nattestation receipt — before paying. (Offline determinism receipt; pass\nnotarize=true on the paid /sky for the drand-stamped version.)","operationId":"sky_example_sky_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/field/example":{"get":{"summary":"Field Example","description":"A fixed, free sample so agents can inspect the /field schema + attestation.","operationId":"field_example_field_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/time/example":{"get":{"summary":"Time Example","description":"A fixed, free sample so agents can inspect the /time schema before paying.\n(A timezone convert: New York 09:30 EDT -> Kolkata, showing DST + the +05:30\noffset most engines get wrong.)","operationId":"time_example_time_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/prosody/example":{"get":{"summary":"Prosody Example","description":"A fixed, free sample so agents can inspect the /prosody schema before paying.\n(The eternal question: what rhymes with 'orange' — scored slant rhymes, ranked\nby how common the word is.)","operationId":"prosody_example_prosody_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/sky":{"get":{"summary":"Sky","operationId":"sky_sky_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Lon"}},{"name":"elevation_m","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Elevation M"}},{"name":"when","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO-8601 UTC or 'now'","title":"When"},"description":"ISO-8601 UTC or 'now'"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer (proof it was computed now, un-altered) — one extra beacon call","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer (proof it was computed now, un-altered) — one extra beacon call"}],"responses":{"200":{"description":"Deterministic result (same input → same bytes).","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"object"},"bodies":{"type":"object"},"sun":{"type":"object"},"moon":{"type":"object"},"twilight":{"type":"array"},"next_season_event":{"type":"object"},"kernel":{"type":"string"},"engine":{"type":"string"},"deterministic":{"type":"boolean"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base). The 402 carries the payment challenge; pay and retry with the payment header."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.003"}}}},"/field":{"get":{"summary":"Field","operationId":"field_field_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Lon"}},{"name":"altitude_km","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Altitude Km"}},{"name":"when","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO-8601, decimal year, or 'now'","title":"When"},"description":"ISO-8601, decimal year, or 'now'"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer"}],"responses":{"200":{"description":"Deterministic result (same input → same bytes).","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"object"},"declination_deg":{"type":"number"},"compass_note":{"type":"string"},"inclination_deg":{"type":"number"},"horizontal_intensity_nT":{"type":"number"},"north_X_nT":{"type":"number"},"east_Y_nT":{"type":"number"},"down_Z_nT":{"type":"number"},"total_intensity_nT":{"type":"number"},"secular_variation":{"type":"object"},"model":{"type":"string"},"model_epoch":{"type":"number"},"valid_range":{"type":"array"},"units":{"type":"object"},"deterministic":{"type":"boolean"},"engine":{"type":"string"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base). The 402 carries the payment challenge; pay and retry with the payment header."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.002"}}}},"/unit/example":{"get":{"summary":"Unit Example","description":"Free sample: 1 nautical mile -> meters (the exact NIST 1852 m), with attestation.","operationId":"unit_example_unit_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/unit":{"get":{"summary":"Unit","operationId":"unit_unit_get","parameters":[{"name":"value","in":"query","required":true,"schema":{"type":"number","description":"the quantity to convert","title":"Value"},"description":"the quantity to convert"},{"name":"from","in":"query","required":true,"schema":{"type":"string","description":"source unit (name or alias, e.g. mile, kg, °C)","title":"From"},"description":"source unit (name or alias, e.g. mile, kg, °C)"},{"name":"to","in":"query","required":true,"schema":{"type":"string","description":"target unit, same dimension","title":"To"},"description":"target unit, same dimension"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base). The 402 carries the payment challenge; pay and retry with the payment header."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}}},"/verify/sig/example":{"get":{"summary":"Verifysig Example","description":"Free sample: recover the signer of a round-trip EIP-191 signature, with attestation.","operationId":"verifysig_example_verify_sig_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/verify/sig":{"get":{"summary":"Verifysig Get","operationId":"verifysig_get_verify_sig_get","parameters":[{"name":"signature","in":"query","required":true,"schema":{"type":"string","description":"0x-hex signature","title":"Signature"},"description":"0x-hex signature"},{"name":"message","in":"query","required":true,"schema":{"type":"string","description":"the signed message (plain text, or 0x-hex bytes)","title":"Message"},"description":"the signed message (plain text, or 0x-hex bytes)"},{"name":"type","in":"query","required":false,"schema":{"type":"string","description":"eip191 (personal_sign) — for eip712 use POST","default":"eip191","title":"Type"},"description":"eip191 (personal_sign) — for eip712 use POST"},{"name":"expected_signer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"optional: also report if it matches this address","title":"Expected Signer"},"description":"optional: also report if it matches this address"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.002"}}},"post":{"summary":"Verifysig Post","description":"Full recovery incl. EIP-712: body = {signature, message|typed_data, type, expected_signer?}.","operationId":"verifysig_post_verify_sig_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.002"}}}},"/readability/example":{"get":{"summary":"Readability Example","description":"Free sample: readability scores for a short paragraph, with attestation.","operationId":"readability_example_readability_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/readability":{"get":{"summary":"Readability Get","operationId":"readability_get_readability_get","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","description":"the text to score (for long documents use POST)","title":"Text"},"description":"the text to score (for long documents use POST)"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}},"post":{"summary":"Readability Post","description":"For long text: JSON body {text}.","operationId":"readability_post_readability_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}}},"/syntax/example":{"get":{"summary":"Syntax Example","description":"Free sample: validate a small JSON object, with attestation.","operationId":"syntax_example_syntax_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/syntax":{"get":{"summary":"Syntax Get","operationId":"syntax_get_syntax_get","parameters":[{"name":"content","in":"query","required":true,"schema":{"type":"string","description":"the code/config to validate (for long source use POST)","title":"Content"},"description":"the code/config to validate (for long source use POST)"},{"name":"lang","in":"query","required":true,"schema":{"type":"string","description":"json | yaml | toml | python | regex","title":"Lang"},"description":"json | yaml | toml | python | regex"},{"name":"test","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"lang=regex only: a string to match against","title":"Test"},"description":"lang=regex only: a string to match against"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}},"post":{"summary":"Syntax Post","description":"For long source: JSON body {content, lang, test?}.","operationId":"syntax_post_syntax_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}}},"/proofread/example":{"get":{"summary":"Proofread Example","description":"Free sample: rule-based proofreading flags for a messy sentence, with attestation.","operationId":"proofread_example_proofread_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/proofread":{"get":{"summary":"Proofread Get","operationId":"proofread_get_proofread_get","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","description":"the text to proofread (for long text use POST)","title":"Text"},"description":"the text to proofread (for long text use POST)"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}},"post":{"summary":"Proofread Post","description":"For long text: JSON body {text}.","operationId":"proofread_post_proofread_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}}},"/writing":{"get":{"summary":"Writing Index","operationId":"writing_index_writing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/writing/the-assay":{"get":{"summary":"Writing Assay","operationId":"writing_assay_writing_the_assay_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/cite/example":{"get":{"summary":"Cite Example","description":"Free sample: an APA 7 journal article formatted from structured fields, with attestation.","operationId":"cite_example_cite_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/cite":{"get":{"summary":"Cite Get","operationId":"cite_get_cite_get","parameters":[{"name":"style","in":"query","required":true,"schema":{"type":"string","description":"apa | mla | chicago | bibtex","title":"Style"},"description":"apa | mla | chicago | bibtex"},{"name":"title","in":"query","required":true,"schema":{"type":"string","description":"the work's title (taken verbatim — case is not guessed)","title":"Title"},"description":"the work's title (taken verbatim — case is not guessed)"},{"name":"type","in":"query","required":false,"schema":{"type":"string","description":"article | book | chapter | web","default":"article","title":"Type"},"description":"article | book | chapter | web"},{"name":"authors","in":"query","required":false,"schema":{"type":"string","description":"'Family, Given; Family2, Given2' (semicolon-separated)","default":"","title":"Authors"},"description":"'Family, Given; Family2, Given2' (semicolon-separated)"},{"name":"year","in":"query","required":false,"schema":{"type":"string","description":"publication year","default":"","title":"Year"},"description":"publication year"},{"name":"container","in":"query","required":false,"schema":{"type":"string","description":"journal / website / periodical name","default":"","title":"Container"},"description":"journal / website / periodical name"},{"name":"volume","in":"query","required":false,"schema":{"type":"string","default":"","title":"Volume"}},{"name":"issue","in":"query","required":false,"schema":{"type":"string","default":"","title":"Issue"}},{"name":"pages","in":"query","required":false,"schema":{"type":"string","default":"","title":"Pages"}},{"name":"publisher","in":"query","required":false,"schema":{"type":"string","default":"","title":"Publisher"}},{"name":"place","in":"query","required":false,"schema":{"type":"string","description":"publisher city (Chicago/BibTeX)","default":"","title":"Place"},"description":"publisher city (Chicago/BibTeX)"},{"name":"doi","in":"query","required":false,"schema":{"type":"string","default":"","title":"Doi"}},{"name":"url","in":"query","required":false,"schema":{"type":"string","default":"","title":"Url"}},{"name":"book_title","in":"query","required":false,"schema":{"type":"string","description":"container book title (for a chapter)","default":"","title":"Book Title"},"description":"container book title (for a chapter)"},{"name":"editors","in":"query","required":false,"schema":{"type":"string","description":"'Family, Given; ...' editors (for a chapter)","default":"","title":"Editors"},"description":"'Family, Given; ...' editors (for a chapter)"},{"name":"month","in":"query","required":false,"schema":{"type":"string","default":"","title":"Month"}},{"name":"day","in":"query","required":false,"schema":{"type":"string","default":"","title":"Day"}},{"name":"locator","in":"query","required":false,"schema":{"type":"string","description":"page/paragraph for the in-text citation","default":"","title":"Locator"},"description":"page/paragraph for the in-text citation"},{"name":"title_case","in":"query","required":false,"schema":{"type":"boolean","description":"apply mechanical headline title-case","default":false,"title":"Title Case"},"description":"apply mechanical headline title-case"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}},"post":{"summary":"Cite Post","description":"Structured citation: JSON body {style, type|source_type, title, authors:[{family,given}], ...}.","operationId":"cite_post_cite_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}}},"/diff/example":{"get":{"summary":"Diff Example","description":"Free sample: an RFC 6902 JSON Patch transforming one object into another, attested.","operationId":"diff_example_diff_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/diff":{"get":{"summary":"Diff Get","operationId":"diff_get_diff_get","parameters":[{"name":"a","in":"query","required":true,"schema":{"type":"string","description":"the 'before' input","title":"A"},"description":"the 'before' input"},{"name":"b","in":"query","required":true,"schema":{"type":"string","description":"the 'after' input","title":"B"},"description":"the 'after' input"},{"name":"mode","in":"query","required":false,"schema":{"type":"string","description":"text | json | words","default":"text","title":"Mode"},"description":"text | json | words"},{"name":"label_a","in":"query","required":false,"schema":{"type":"string","default":"a","title":"Label A"}},{"name":"label_b","in":"query","required":false,"schema":{"type":"string","default":"b","title":"Label B"}},{"name":"context","in":"query","required":false,"schema":{"type":"integer","description":"unified-diff context lines (text mode)","default":3,"title":"Context"},"description":"unified-diff context lines (text mode)"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}},"post":{"summary":"Diff Post","description":"Structured diff: JSON body {a, b, mode}. For json mode, a/b may be JSON values.","operationId":"diff_post_diff_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base)."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}}},"/time":{"get":{"summary":"Time Route","operationId":"time_route_time_get","parameters":[{"name":"op","in":"query","required":false,"schema":{"type":"string","description":"convert|zone|diff|business_days|holidays|epoch","default":"convert","title":"Op"},"description":"convert|zone|diff|business_days|holidays|epoch"},{"name":"when","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"instant: ISO-8601, epoch, or 'now'","title":"When"},"description":"instant: ISO-8601, epoch, or 'now'"},{"name":"from_tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"convert: source IANA zone","title":"From Tz"},"description":"convert: source IANA zone"},{"name":"to_tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"convert: target IANA zone","title":"To Tz"},"description":"convert: target IANA zone"},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"zone/epoch: an IANA zone","title":"Tz"},"description":"zone/epoch: an IANA zone"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"diff/business_days: start","title":"Start"},"description":"diff/business_days: start"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"diff/business_days: end","title":"End"},"description":"diff/business_days: end"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"holidays/business_days: ISO-3166 alpha-2","title":"Country"},"description":"holidays/business_days: ISO-3166 alpha-2"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"holidays: calendar year","title":"Year"},"description":"holidays: calendar year"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"holidays: a single date to test","title":"Date"},"description":"holidays: a single date to test"},{"name":"epoch","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"epoch: seconds or millis","title":"Epoch"},"description":"epoch: seconds or millis"},{"name":"unit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"epoch: 's' or 'ms' (else auto)","title":"Unit"},"description":"epoch: 's' or 'ms' (else auto)"},{"name":"inclusive","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"business_days: include end date","title":"Inclusive"},"description":"business_days: include end date"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer"}],"responses":{"200":{"description":"Deterministic result (same input → same bytes).","content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string"},"input_instant":{"type":"string"},"from":{"type":"object"},"to":{"type":"object"},"utc":{"type":"string"},"unix_epoch_seconds":{"type":"integer"},"same_instant":{"type":"boolean"},"deterministic":{"type":"boolean"},"tz_database_version":{"type":"string"},"engine":{"type":"string"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base). The 402 carries the payment challenge; pay and retry with the payment header."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}}},"/prosody":{"get":{"summary":"Prosody Route","operationId":"prosody_route_prosody_get","parameters":[{"name":"op","in":"query","required":false,"schema":{"type":"string","description":"rhyme|pronounce|syllables|scan|homophones","default":"rhyme","title":"Op"},"description":"rhyme|pronounce|syllables|scan|homophones"},{"name":"word","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"the word (rhyme/pronounce/syllables/homophones)","title":"Word"},"description":"the word (rhyme/pronounce/syllables/homophones)"},{"name":"text","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"syllables: any text to count","title":"Text"},"description":"syllables: any text to count"},{"name":"line","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"scan: a line of verse to scan","title":"Line"},"description":"scan: a line of verse to scan"},{"name":"types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"rhyme: perfect,rich,assonance,consonance,slant","title":"Types"},"description":"rhyme: perfect,rich,assonance,consonance,slant"},{"name":"syllables","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"rhyme: filter results to this syllable count","title":"Syllables"},"description":"rhyme: filter results to this syllable count"},{"name":"meter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"rhyme: filter to this stress pattern e.g. '10'","title":"Meter"},"description":"rhyme: filter to this stress pattern e.g. '10'"},{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"rhyme: max results (default 40)","title":"Max"},"description":"rhyme: max results (default 40)"},{"name":"min_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"rhyme: min closeness 0-1 (default 0.5)","title":"Min Score"},"description":"rhyme: min closeness 0-1 (default 0.5)"},{"name":"notarize","in":"query","required":false,"schema":{"type":"boolean","description":"also drand-timestamp the answer","default":false,"title":"Notarize"},"description":"also drand-timestamp the answer"}],"responses":{"200":{"description":"Deterministic result (same input → same bytes).","content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string"},"word":{"type":"string"},"query_pronunciation":{"type":"string"},"filters":{"type":"object"},"count":{"type":"integer"},"by_type":{"type":"object"},"rhymes":{"type":"array"},"note":{"type":"string"},"deterministic":{"type":"boolean"},"pronunciation_authority":{"type":"string"},"frequency_source":{"type":"string"},"engine":{"type":"string"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base). The 402 carries the payment challenge; pay and retry with the payment header."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}}},"/random":{"get":{"summary":"Random Route","operationId":"random_route_random_get","parameters":[{"name":"op","in":"query","required":false,"schema":{"type":"string","description":"int|dice|coin|bytes|uuid|shuffle|sample|choice|pick","default":"int","title":"Op"},"description":"int|dice|coin|bytes|uuid|shuffle|sample|choice|pick"},{"name":"min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min"}},{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max"}},{"name":"count","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count"}},{"name":"dice","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dice"}},{"name":"n","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N"}},{"name":"sides","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sides"}},{"name":"items","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma list or JSON array","title":"Items"},"description":"comma list or JSON array"},{"name":"k","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K"}},{"name":"weights","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weights"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/random/example":{"get":{"summary":"Random Example","description":"A fixed, free sample of the proof-carrying shape (offline; no beacon call).","operationId":"random_example_random_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/timestamp/example":{"get":{"summary":"Timestamp Example","description":"A fixed, free sample of the /timestamp receipt shape (offline; no beacon call).","operationId":"timestamp_example_timestamp_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/sealed/example":{"get":{"summary":"Sealed Example","description":"A fixed, free sample of the /sealed ciphertext receipt shape (offline; no tle).","operationId":"sealed_example_sealed_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/sealed/inspect":{"post":{"summary":"Sealed Inspect","description":"FREE, zero-knowledge: read which round/time a seal targets, and whether it's\nopen yet, WITHOUT decrypting it (no secret needed). POST the ciphertext in the\nJSON body — ciphertext blobs do not belong in a URL (length + WAF + logging).","operationId":"sealed_inspect_sealed_inspect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_sealed_inspect_sealed_inspect_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/random/proof":{"get":{"summary":"Random Proof Route","operationId":"random_proof_route_random_proof_get","parameters":[{"name":"op","in":"query","required":false,"schema":{"type":"string","description":"int|dice|coin|bytes|uuid|shuffle|sample|choice|pick","default":"int","title":"Op"},"description":"int|dice|coin|bytes|uuid|shuffle|sample|choice|pick"},{"name":"nonce","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"bind the draw to your context","title":"Nonce"},"description":"bind the draw to your context"},{"name":"round","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"pin a drand round for reproducibility","title":"Round"},"description":"pin a drand round for reproducibility"},{"name":"min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min"}},{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max"}},{"name":"count","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count"}},{"name":"dice","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dice"}},{"name":"n","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N"}},{"name":"sides","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sides"}},{"name":"items","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma list or JSON array","title":"Items"},"description":"comma list or JSON array"},{"name":"k","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K"}},{"name":"weights","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weights"}}],"responses":{"200":{"description":"Deterministic result (same input → same bytes).","content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string"},"draw":{"type":"string"},"notation":{"type":"string"},"rolls":{"type":"array"},"total":{"type":"integer"},"nonce":{"type":"string"},"beacon":{"type":"object"},"deterministic_given_round":{"type":"boolean"},"engine":{"type":"string"},"proof":{"type":"object"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base). The 402 carries the payment challenge; pay and retry with the payment header."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}}},"/timestamp":{"get":{"summary":"Timestamp Route","operationId":"timestamp_route_timestamp_get","parameters":[{"name":"op","in":"query","required":false,"schema":{"type":"string","description":"stamp|verify","default":"stamp","title":"Op"},"description":"stamp|verify"},{"name":"data","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"text to stamp (we sha256 it)","title":"Data"},"description":"text to stamp (we sha256 it)"},{"name":"hash","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"OR a 64-hex sha256 digest (private)","title":"Hash"},"description":"OR a 64-hex sha256 digest (private)"},{"name":"round","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"pin a drand round; verify requires it","title":"Round"},"description":"pin a drand round; verify requires it"}],"responses":{"200":{"description":"Deterministic result (same input → same bytes).","content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string"},"digest":{"type":"string"},"digest_source":{"type":"string"},"commitment":{"type":"string"},"round":{"type":"integer"},"round_time_utc":{"type":"string"},"not_earlier_than":{"type":"string"},"claim":{"type":"string"},"beacon":{"type":"object"},"deterministic_given_round":{"type":"boolean"},"engine":{"type":"string"},"proof":{"type":"object"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base). The 402 carries the payment challenge; pay and retry with the payment header."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001"}}}},"/sealed":{"get":{"summary":"Sealed Route","description":"Convenience/shop-window: seal a SMALL inline payload via GET. For decrypt, or\nany non-trivial plaintext/ciphertext blob, use POST /sealed (body) — blobs in a\nURL get truncated/WAF-blocked.","operationId":"sealed_route_sealed_get","parameters":[{"name":"op","in":"query","required":false,"schema":{"type":"string","description":"encrypt (decrypt needs POST — blob body)","default":"encrypt","title":"Op"},"description":"encrypt (decrypt needs POST — blob body)"},{"name":"data","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"encrypt: plaintext to seal (small; large -> POST)","title":"Data"},"description":"encrypt: plaintext to seal (small; large -> POST)"},{"name":"round","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"encrypt: target drand round","title":"Round"},"description":"encrypt: target drand round"},{"name":"duration","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"encrypt: time until unlock, e.g. '10d','2h'","title":"Duration"},"description":"encrypt: time until unlock, e.g. '10d','2h'"},{"name":"decrypt_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"encrypt: ISO time it should unlock","title":"Decrypt Time"},"description":"encrypt: ISO time it should unlock"}],"responses":{"200":{"description":"Deterministic result (same input → same bytes).","content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string"},"ciphertext":{"type":"string"},"sealed_to_round":{"type":"integer"},"unlock_time_utc":{"type":"string"},"chain":{"type":"string"},"chain_hash":{"type":"string"},"format":{"type":"string"},"deterministic":{"type":"boolean"},"privacy_note":{"type":"string"},"engine":{"type":"string"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base). The 402 carries the payment challenge; pay and retry with the payment header."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}},"post":{"summary":"Sealed Route Post","description":"The real transport: encrypt or decrypt with the payload (plaintext or\nciphertext blob) in the JSON body — not the URL.","operationId":"sealed_route_post_sealed_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_sealed_route_post_sealed_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base). The 402 carries the payment challenge; pay and retry with the payment header."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/auction/example":{"get":{"summary":"Auction Example","description":"A fixed, free sample of the /auction/create result shape (offline; no DB write).","operationId":"auction_example_auction_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/auction/create":{"post":{"summary":"Auction Create","description":"PAID: open a sealed-bid auction with a close round N (when bids unlock).","operationId":"auction_create_auction_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_auction_create_auction_create_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required — x402 (USDC on Base). The 402 carries the payment challenge; pay and retry with the payment header."}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/auction/bid":{"post":{"summary":"Auction Bid","description":"FREE: submit a sealed bid (validated sealed-to-N without being read).","operationId":"auction_bid_auction_bid_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_auction_bid_auction_bid_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/auction/open":{"post":{"summary":"Auction Open","description":"FREE: at/after the close round, open all bids at once and publish the signed winner.","operationId":"auction_open_auction_open_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_auction_open_auction_open_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/auction/{auction_id}":{"get":{"summary":"Auction Get","description":"FREE: auction status (contents stay sealed until close).","operationId":"auction_get_auction__auction_id__get","parameters":[{"name":"auction_id","in":"path","required":true,"schema":{"type":"string","title":"Auction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}}},"components":{"schemas":{"Body_auction_bid_auction_bid_post":{"properties":{"auction_id":{"type":"string","title":"Auction Id"},"ciphertext":{"type":"string","title":"Ciphertext","description":"your bid, timelock-sealed to N"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"optional public label"}},"type":"object","required":["auction_id","ciphertext"],"title":"Body_auction_bid_auction_bid_post"},"Body_auction_create_auction_create_post":{"properties":{"title":{"type":"string","title":"Title","description":"what's being auctioned","default":""},"round":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Round","description":"close: a drand round"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration","description":"close: e.g. '2h','7d'"},"decrypt_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decrypt Time","description":"close: ISO time"}},"type":"object","title":"Body_auction_create_auction_create_post"},"Body_auction_open_auction_open_post":{"properties":{"auction_id":{"type":"string","title":"Auction Id"}},"type":"object","required":["auction_id"],"title":"Body_auction_open_auction_open_post"},"Body_sealed_inspect_sealed_inspect_post":{"properties":{"ciphertext":{"type":"string","title":"Ciphertext","description":"age-armored timelock ciphertext to inspect"}},"type":"object","required":["ciphertext"],"title":"Body_sealed_inspect_sealed_inspect_post"},"Body_sealed_route_post_sealed_post":{"properties":{"op":{"type":"string","title":"Op","description":"encrypt|decrypt","default":"encrypt"},"data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data","description":"encrypt: plaintext to seal"},"round":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Round","description":"encrypt: target drand round"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration","description":"encrypt: unlock-in, e.g. '10d'"},"decrypt_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decrypt Time","description":"encrypt: ISO unlock time"},"ciphertext":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ciphertext","description":"decrypt: age-armored seal"}},"type":"object","title":"Body_sealed_route_post_sealed_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}