{"openapi":"3.1.0","info":{"title":"Deterministic Truth Suite (x402)","description":"16 pay-per-call verified-compute resources for agents, settling USDC on Base via x402. Deterministic: same input, same bytes, and every answer signed. Built for agents that would otherwise guess.\n\nPaid resources: /auction/create, /cite, /credits, /diff, /field, /proofread, /prosody, /random/proof, /readability, /sealed, /sky, /syntax, /time, /timestamp, /unit, /verify/sig.\n\nFree, no payment, to see the shape of an answer first: /play/cite, /play/diff, /play/field, /play/prosody, /play/sky, /play/syntax, /play/time, /play/unit, /proofread/example, /readability/example, /sealed/example, /timestamp/example, /verify/sig/example.\n\nMachine-readable catalogue: /.well-known/x402","contact":{"name":"Iris — Touchstone","url":"https://github.com/savecharlie/almanac"},"version":"0.1.0"},"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":"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.003"}},"description":"Deterministic ephemeris snapshot (one location/time).\n\nPAYMENT: $0.003 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/sky"},"post":{"summary":"Sky Post","description":"Deterministic ephemeris snapshot (one location/time).\n\nPAYMENT: $0.003 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/sky\n\nSame ephemeris as GET /sky — JSON body {lat, lon, elevation_m?, when?}.","operationId":"sky_post_sky_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.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":"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.002"}},"description":"Deterministic WMM2025 magnetic field (one location/date).\n\nPAYMENT: $0.002 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/field"},"post":{"summary":"Field Post","description":"Deterministic WMM2025 magnetic field (one location/date).\n\nPAYMENT: $0.002 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/field\n\nSame WMM2025 field as GET /field — JSON body {lat, lon, altitude_km?, when?}.","operationId":"field_post_field_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"}}}},"/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"}},"description":"Deterministic unit conversion reproducing NIST SP 811 exact factors (length, mass, volume, energy, power, pressure, force, area, speed, data, angle, frequency + affine temperature). Every answer signed.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/unit"},"post":{"summary":"Unit Post","description":"Deterministic unit conversion reproducing NIST SP 811 exact factors (length, mass, volume, energy, power, pressure, force, area, speed, data, angle, frequency + affine temperature). Every answer signed.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/unit\n\nSame conversion as GET /unit — JSON body {value, from, to}.","operationId":"unit_post_unit_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"}}}},"/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"}},"description":"Recover who signed a message (ecrecover, EIP-191 personal_sign). For EIP-712 typed data use POST /verify/sig. Every answer signed.\n\nPAYMENT: $0.002 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /verify/sig/example"},"post":{"summary":"Verifysig Post","description":"Recover who signed a message (ecrecover, EIP-191 personal_sign). For EIP-712 typed data use POST /verify/sig. Every answer signed.\n\nPAYMENT: $0.002 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /verify/sig/example\n\nFull 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"}},"description":"Deterministic readability scores (Flesch, Flesch-Kincaid, Gunning Fog, SMOG, Coleman-Liau, ARI) over published formulas. For long text use POST. Signed.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /readability/example"},"post":{"summary":"Readability Post","description":"Deterministic readability scores (Flesch, Flesch-Kincaid, Gunning Fog, SMOG, Coleman-Liau, ARI) over published formulas. For long text use POST. Signed.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /readability/example\n\nFor 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"}},"description":"Deterministic syntax validation — does this JSON/YAML/TOML/Python/regex parse? Valid/invalid + error location from the canonical parser. For long source use POST.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/syntax"},"post":{"summary":"Syntax Post","description":"Deterministic syntax validation — does this JSON/YAML/TOML/Python/regex parse? Valid/invalid + error location from the canonical parser. For long source use POST.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/syntax\n\nFor 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"}},"description":"Deterministic, rule-based proofreading flags — passive voice, adverbs, wordiness, filler, repeated words, whitespace, a/an, punctuation, sentence length, capitalization. Each flag carries an offset + suggestion. For long text use POST.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /proofread/example"},"post":{"summary":"Proofread Post","description":"Deterministic, rule-based proofreading flags — passive voice, adverbs, wordiness, filler, repeated words, whitespace, a/an, punctuation, sentence length, capitalization. Each flag carries an offset + suggestion. For long text use POST.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /proofread/example\n\nFor 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"}}}},"/art/{name}":{"get":{"summary":"Art File","operationId":"art_file_art__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/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":[]}},"/play/cite":{"get":{"summary":"Play Cite","operationId":"play_cite_play_cite_get","parameters":[{"name":"style","in":"query","required":false,"schema":{"type":"string","default":"apa","title":"Style"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"book","title":"Type"}},{"name":"title","in":"query","required":false,"schema":{"type":"string","title":"Title"}},{"name":"authors","in":"query","required":false,"schema":{"type":"string","default":"","title":"Authors"}},{"name":"year","in":"query","required":false,"schema":{"type":"string","default":"","title":"Year"}},{"name":"container","in":"query","required":false,"schema":{"type":"string","default":"","title":"Container"}},{"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":"doi","in":"query","required":false,"schema":{"type":"string","default":"","title":"Doi"}},{"name":"url","in":"query","required":false,"schema":{"type":"string","default":"","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/play/unit":{"get":{"summary":"Play Unit","operationId":"play_unit_play_unit_get","parameters":[{"name":"value","in":"query","required":false,"schema":{"type":"number","title":"Value"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","title":"From"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","title":"To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/play/syntax":{"get":{"summary":"Play Syntax","operationId":"play_syntax_play_syntax_get","parameters":[{"name":"content","in":"query","required":false,"schema":{"type":"string","title":"Content"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"json","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/play/diff":{"get":{"summary":"Play Diff","operationId":"play_diff_play_diff_get","parameters":[{"name":"a","in":"query","required":false,"schema":{"type":"string","title":"A"}},{"name":"b","in":"query","required":false,"schema":{"type":"string","title":"B"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","default":"text","title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/play/sky":{"get":{"summary":"Play Sky","operationId":"play_sky_play_sky_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Lat"}},{"name":"lon","in":"query","required":false,"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"}],"title":"When"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/play/field":{"get":{"summary":"Play Field","operationId":"play_field_play_field_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Lat"}},{"name":"lon","in":"query","required":false,"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"}],"title":"When"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/play/prosody":{"get":{"summary":"Play Prosody","operationId":"play_prosody_play_prosody_get","parameters":[{"name":"op","in":"query","required":false,"schema":{"type":"string","default":"rhyme","title":"Op"}},{"name":"word","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Word"}},{"name":"text","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"}},{"name":"line","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line"}},{"name":"types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Types"}},{"name":"syllables","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Syllables"}},{"name":"meter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meter"}},{"name":"max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max"}},{"name":"min_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Score"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/play/time":{"get":{"summary":"Play Time","operationId":"play_time_play_time_get","parameters":[{"name":"op","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Op"}},{"name":"when","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"When"}},{"name":"from_tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Tz"}},{"name":"to_tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Tz"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tz"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"epoch","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Epoch"}},{"name":"unit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit"}},{"name":"inclusive","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Inclusive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[]}},"/app":{"get":{"summary":"Miniapp Page","operationId":"miniapp_page_app_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/app/embed.png":{"get":{"summary":"Miniapp Embed","operationId":"miniapp_embed_app_embed_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/app/splash.png":{"get":{"summary":"Miniapp Splash","operationId":"miniapp_splash_app_splash_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/app/icon.png":{"get":{"summary":"Miniapp Icon","operationId":"miniapp_icon_app_icon_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/theiris.png":{"get":{"summary":"Theiris Pfp","operationId":"theiris_pfp_theiris_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/theiris_banner.png":{"get":{"summary":"Theiris Banner","operationId":"theiris_banner_theiris_banner_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/reformation.png":{"get":{"summary":"Theiris Art Reformation","operationId":"theiris_art_reformation_reformation_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/.well-known/farcaster.json":{"get":{"summary":"Farcaster Manifest","operationId":"farcaster_manifest__well_known_farcaster_json_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"}},"description":"Deterministic citation formatter — APA 7, MLA 9, Chicago 17 author-date, BibTeX. From structured fields, returns the reference entry (markdown/html/plain) + the in-text citation, reproducing published style-manual examples exactly. For full author lists use POST. Every answer signed.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/cite"},"post":{"summary":"Cite Post","description":"Deterministic citation formatter — APA 7, MLA 9, Chicago 17 author-date, BibTeX. From structured fields, returns the reference entry (markdown/html/plain) + the in-text citation, reproducing published style-manual examples exactly. For full author lists use POST. Every answer signed.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/cite\n\nStructured 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"}},"description":"Exact structured diff. mode=text -> unified diff + line counts; mode=json -> an RFC 6902 JSON Patch (RFC 6901 pointers) that round-trips a->b; mode=words -> inline word-level opcodes. For large inputs use POST. Every answer signed.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/diff"},"post":{"summary":"Diff Post","description":"Exact structured diff. mode=text -> unified diff + line counts; mode=json -> an RFC 6902 JSON Patch (RFC 6901 pointers) that round-trips a->b; mode=words -> inline word-level opcodes. For large inputs use POST. Every answer signed.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/diff\n\nStructured 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":"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"}},"description":"Deterministic time/timezone truth: DST-aware zone conversion, transition times, business-day & holiday math, epoch<->ISO.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/time"},"post":{"summary":"Time Post","description":"Deterministic time/timezone truth: DST-aware zone conversion, transition times, business-day & holiday math, epoch<->ISO.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/time\n\nSame calendar/zone answer as GET /time — JSON body {op, ...}.","operationId":"time_post_time_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"}}}},"/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":"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"}},"description":"Deterministic phonetic rhyme (perfect + scored slant), pronunciation, syllables, scansion, homophones — from CMUdict.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/prosody"},"post":{"summary":"Prosody Post","description":"Deterministic phonetic rhyme (perfect + scored slant), pronunciation, syllables, scansion, homophones — from CMUdict.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /play/prosody\n\nSame prosody answer as GET /prosody — JSON body {op, word|text|line, ...}.","operationId":"prosody_post_prosody_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"}}}},"/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":"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"}},"description":"Provably-fair draw from the drand beacon with the full verifiable receipt + nonce-binding (the free draw is at GET /random).\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674."},"post":{"summary":"Random Proof Post","description":"Provably-fair draw from the drand beacon with the full verifiable receipt + nonce-binding (the free draw is at GET /random).\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674.\n\nSame verifiable draw as GET /random/proof — JSON body {op, nonce?, ...}.","operationId":"random_proof_post_random_proof_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"}}}},"/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":"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"}},"description":"Verifiable timestamp (trustless proof-of-existence / freshness proof): bind a hash to a drand round for an anti-backdating receipt — proves data existed no earlier than a public instant, with no trusted timestamp authority. Privacy: stamp an opaque sha256 digest.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /timestamp/example"},"post":{"summary":"Timestamp Post","description":"Verifiable timestamp (trustless proof-of-existence / freshness proof): bind a hash to a drand round for an anti-backdating receipt — proves data existed no earlier than a public instant, with no trusted timestamp authority. Privacy: stamp an opaque sha256 digest.\n\nPAYMENT: $0.001 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /timestamp/example\n\nSame drand timestamp as GET /timestamp — JSON body {op, data|hash, round?}.","operationId":"timestamp_post_timestamp_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"}}}},"/sealed":{"get":{"summary":"Sealed Route","description":"Timelock encryption (tlock / encrypt-to-the-future): seal a payload toward a future drand round — undecryptable by anyone, including us, until that round lands; or open a landed seal. For sealed-bid auctions, commit-reveal, scheduled secrets, dead-man switches. age-armored, interoperable. Free zero-knowledge inspect at /sealed/inspect.\n\nPAYMENT: $0.005 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /sealed/example\n\nConvenience/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":"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"}}},"post":{"summary":"Sealed Route Post","description":"Timelock encryption (tlock / encrypt-to-the-future): seal a payload toward a future drand round — undecryptable by anyone, including us, until that round lands; or open a landed seal. For sealed-bid auctions, commit-reveal, scheduled secrets, dead-man switches. age-armored, interoperable. Free zero-knowledge inspect at /sealed/inspect.\n\nPAYMENT: $0.005 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674. Free sample first, no payment: /sealed/example\n\nThe 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":"Open a sealed-bid auction (close round N). Bidders timelock-seal bids to N; nobody can read any bid until N; highest wins, signed + re-verifiable. bid/open/get are free.\n\nPAYMENT: $0.01 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674.\n\nPAID: 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":[]}},"/credits":{"post":{"tags":["credits"],"summary":"Buy a prepaid key (paid once, then no per-call signing)","description":"Buy a prepaid key ONCE, then call every paid route with Authorization: Bearer <key> and no further signing. $1.00 buys $1.20 of credit (20% bulk discount); each call debits its own route price. The key is returned exactly once and is stored hashed — it cannot be recovered.\n\nPAYMENT: $1.00 USDC via x402 on eip155:8453, paid to 0xa3091005a76b1480F1897a9D0C2e1c55B7767674.\n\nPaid via x402. The paywall runs first; this only executes after settlement.","operationId":"buy_credits_credits_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/credits/balance":{"get":{"tags":["credits"],"summary":"What is left on a prepaid key (free)","description":"FREE. Reading your own balance must never cost credit, or a key with one\ncall left could not be told from a key with none.","operationId":"credits_balance_credits_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"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"}}}}