{"openapi":"3.1.0","info":{"title":"Recurrence Expander","description":"Expand RFC 5545 RRULEs and cron expressions into exact UTC instants, with correct IANA timezone and daylight-saving handling. Flags spring-forward nonexistent times and fall-back ambiguous times explicitly. Deterministic and reproducible: every response reports the tzdata and library versions used. Free preview endpoint at /v1/preview.\n\nOperated by Oddments. Paid per call in USDC on Base via x402.","version":"1.0.0","x-guidance":"POST /v1/expand expands RFC 5545 RRULEs and cron expressions into exact UTC instants for an IANA timezone, flagging DST-nonexistent and ambiguous wall times. Try /v1/preview free first: same response shape, 1 rule, 3 occurrences."},"paths":{"/":{"get":{"summary":"Index","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/preview":{"post":{"summary":"Free preview: same shape, 1 rule, 3 occurrences","description":"Free sample. Same response shape as the paid endpoint, small limits.","operationId":"preview_v1_preview_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rules":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"object","properties":{"id":{"type":"string","description":"echoed back to correlate results"},"cron":{"type":"string","description":"5-field POSIX cron (exclusive with rrule)"},"rrule":{"type":"string","description":"RFC 5545 RRULE (exclusive with cron)"},"tz":{"type":"string","description":"IANA zone, e.g. Europe/London"},"start":{"type":"string","description":"ISO-8601 local wall time, no offset"},"count":{"type":"integer","minimum":1,"maximum":500}},"required":["tz","start"]}},"limit":{"type":"integer","minimum":1,"maximum":500}},"required":["rules"]},"example":{"rules":[{"id":"standup","cron":"30 9 * * 1-5","tz":"America/New_York","start":"2026-03-06T00:00:00","count":5}]}}}}}},"/v1/expand":{"post":{"summary":"Expand recurrence rules to exact UTC instants (paid)","description":"Paid endpoint. Payment is enforced by the x402 middleware ahead of this.","operationId":"expand_paid_v1_expand_post","responses":{"200":{"description":"Expanded occurrences","content":{"application/json":{"example":{"results":[{"id":"standup","tz":"America/New_York","kind":"cron","count":5,"crosses_dst_transition":true,"anomalies":[],"occurrences":[{"local":"2026-03-06T09:30:00","utc":"2026-03-06T14:30:00Z","utc_offset":"-05:00","is_dst":false,"flags":[]}]}],"total_occurrences":5}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rules":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"object","properties":{"id":{"type":"string","description":"echoed back to correlate results"},"cron":{"type":"string","description":"5-field POSIX cron (exclusive with rrule)"},"rrule":{"type":"string","description":"RFC 5545 RRULE (exclusive with cron)"},"tz":{"type":"string","description":"IANA zone, e.g. Europe/London"},"start":{"type":"string","description":"ISO-8601 local wall time, no offset"},"count":{"type":"integer","minimum":1,"maximum":500}},"required":["tz","start"]}},"limit":{"type":"integer","minimum":1,"maximum":500}},"required":["rules"]},"example":{"rules":[{"id":"standup","cron":"30 9 * * 1-5","tz":"America/New_York","start":"2026-03-06T00:00:00","count":5}]}}}}}},"/.well-known/x402":{"get":{"summary":"Well Known X402","description":"Compatibility discovery document (x402scan spec section B).","operationId":"well_known_x402__well_known_x402_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/metrics":{"get":{"summary":"Metrics","description":"Live probe/settlement counters, straight off the event log.","operationId":"metrics_v1_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"servers":[{"url":"https://oddments-x402.exe.xyz"}]}