{"uid":"cap_4Njv8tPJ-E7CUmRvYKbhq","slug":"recurrence-expander-9aa37ba5","name":"Recurrence Expander","description":"Turn RFC 5545 RRULEs and cron expressions into exact UTC instants. IANA timezones and daylight saving are handled correctly. The two hard cases are flagged by name. A spring-forward time that never happens is flagged nonexistent. A fall-back time that happens twice is flagged ambiguous. Results are deterministic and reproducible. Every response reports the tzdata and library versions it used. Every response also carries an Ed25519-signed reproducibility receipt. The receipt binds the input hash, the output hash and the engine versions. WHAT YOU ARE NOT BUYING: secrecy. You can expand the rule yourself and check every instant we return. The fee buys current timezone data, the two daylight-saving edge cases handled rather than assumed, and a reproducible record of which versions produced the answer. WHAT THIS DOES NOT DO, stated up front. (1) It consults no calendar, holiday feed or exception list. It expands exactly the rule you send, so a cancellation you did not encode is invisible to it. (2) Timezone answers are only as current as the tzdata version reported in every response. A zone whose rules change after that release is computed on the old rules. (3) cron is the 5-field POSIX form only, as published in the request schema. No seconds field and no vendor extensions. (4) The signature proves origin and integrity, not correctness. (5) Rules are capped at 25 per call and 500 occurrences per rule. A request over either is refused with a 400 invalid_rule before any expansion happens. Free preview endpoint at /v1/preview.\n\nOperated by Oddments. Paid per call in USDC on Base via x402.","url":"https://oddments-x402.exe.xyz/v1/expand","method":"POST","headers":{},"bodySchema":{"type":"object","properties":{"limit":{"type":"integer","maximum":500,"minimum":1,"description":"default occurrence count applied to any rule that omits its own 'count'"},"rules":{"type":"array","items":{"type":"object","required":["tz","start"],"properties":{"id":{"type":"string","description":"echoed back to correlate results"},"tz":{"type":"string","description":"IANA zone, e.g. Europe/London"},"cron":{"type":"string","description":"5-field POSIX cron (exclusive with rrule)"},"count":{"type":"integer","maximum":500,"minimum":1,"description":"occurrences to return for this rule; overrides the request's top-level 'limit' when set"},"rrule":{"type":"string","description":"RFC 5545 RRULE (exclusive with cron)"},"start":{"type":"string","description":"ISO-8601 local wall time, no offset"}}},"maxItems":25,"minItems":1,"description":"the batch of recurrence rules to expand in this call"}}},"responseSchema":{"type":"json","example":{"receipt":{"price":"$0.02","engine":{"python":"3.12.3","tzdata":"2026.3","croniter":"6.0.0"},"key_id":"21bd7c9628fe756b","service":"Recurrence Expander","endpoint":"/v1/expand","algorithm":"Ed25519","issued_at":"2026-08-06T09:32:04.259588Z","input_sha256":"5db5c3766a334acfe412d182fee09843c9d1f8cfcf5cc707f206cb4d1f8deb79","output_sha256":"43b7eb2d6aba21f1a7ac4a6c51bee6990c9d7b41645865330a67e5f328c3b239","signature_b64":"MWfephbP/QDn0vHusntmDIBdK+Vm4r2Dfdgy7Sxh5yUE1C3JNwjrrqMrmygcrIjAJsAT0sDdTWducb6+lNJfBA==","signed_fields":["endpoint","engine","input_sha256","issued_at","key_id","output_sha256","price","receipt_version","service"],"receipt_version":"oddments-receipt/1"},"results":[{"id":"standup","tz":"America/New_York","kind":"cron","count":5,"anomalies":[],"occurrences":[{"utc":"2026-03-06T14:30:00Z","flags":[],"local":"2026-03-06T09:30:00","is_dst":false,"utc_offset":"-05:00"}],"crosses_dst_transition":true}],"total_occurrences":5}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.02","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"down","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.02/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.02","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.02","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_e0FuVFgFKhPT4t5buXY_z","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.02","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Expands RFC 5545 RRULE and cron expressions into exact UTC timestamps with correct IANA timezone and DST handling, returning an Ed25519-signed reproducibility receipt.","exampleAgentPrompt":"Expand this cron expression '30 9 * * 1-5' in America/New_York for the next 5 occurrences starting 2026-03-06, and flag any DST anomalies like spring-forward gaps or fall-back duplicates.","exampleUseCases":[{"title":"Daily standup schedule across DST boundary","prompt":"I have a cron job '30 9 * * 1-5' running in America/New_York — can you expand it to exact UTC times for the next 10 weekdays starting March 6 2026, and tell me if any occurrences fall into a DST gap or ambiguity?"},{"title":"iCal RRULE to concrete meeting times","prompt":"Turn this RRULE — DTSTART;TZID=Europe/London:20261025T010000 RRULE:FREQ=HOURLY;COUNT=6 — into exact UTC timestamps and flag any occurrences that land in the ambiguous fall-back hour."},{"title":"Auditable signed schedule for compliance","prompt":"Expand this weekly recurrence rule for our payroll job in America/Chicago for the next 12 occurrences and give me a signed reproducibility receipt I can keep as a record showing exactly which tzdata version was used."}],"resultDescription":"A JSON object containing an array of occurrence objects (each with utc, local, utc_offset, is_dst, and flags arrays for 'nonexistent' or 'ambiguous' anomalies), a crosses_dst_transition boolean, anomaly summaries, and an Ed25519-signed reproducibility receipt binding the input hash, output hash, and engine versions (Python, tzdata, croniter).","failureModes":["Invalid RRULE or cron syntax returns a 400 error","Unrecognized IANA timezone identifier causes a parse error","Missing payment or insufficient USDC balance returns a 402 Payment Required","Count exceeding API limits may be rejected or truncated","Network timeout if expansion is very large","Stale tzdata if a very recent DST rule change hasn't been reflected yet"],"whenToPreferThis":"Choose this endpoint when you need deterministic, auditable expansion of cron or RRULE recurrences with correct DST handling — especially when spring-forward nonexistent times or fall-back ambiguous times must be explicitly flagged rather than silently assumed. The signed receipt makes it suitable for compliance, audit trails, or reproducible scheduling pipelines. Prefer it over DIY expansion when you need a versioned record of exactly which tzdata produced the answer.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-15T18:26:33.175Z","isFirstParty":false}