{"openapi":"3.1.0","info":{"title":"Recurrence Rules (RRULE)","version":"1.0.0","description":"Expand, parse, build and describe iCalendar RRULE recurrences, plus weekday and business-day patterns. One call, one computed answer, no accounts or API keys. Machine-payable over x402.","x-guidance":"Recurrence Rules (RRULE): Expand, parse, build and describe iCalendar RRULE recurrences, plus weekday and business-day patterns. Use /rrule-expand for the next N occurrences of an RRULE, /rrule-parse to validate and explain a rule, /rrule-build to assemble a rule from fields, /next-occurrence for the first date after an instant, /occurrences-between for a date range, /rrule-describe for an English sentence, /nth-weekday-of-month for patterns like the second Tuesday, and /business-recurrence for every N business days or the last business day of each month with a holiday list. Each paid GET returns a computed verdict with the reasons, the source and what was NOT checked. A verdict of UNVERIFIED means a lookup failed: treat it as unknown. No account or key: pay per call in USDC over x402."},"servers":[{"url":"https://recurrence-rules.x402tookit.com"}],"paths":{"/business-recurrence":{"get":{"operationId":"business_recurrence","summary":"Dates for every N business days, or the last or Nth business day of each month, skipping weekends and your holiday list.","description":"Dates for every N business days, or the last or Nth business day of each month, skipping weekends and your holiday list.","tags":["business-days","recurrence","calendar","schedule"],"parameters":[{"name":"mode","in":"query","required":true,"description":"every-n-business-days, last-business-day-of-month or nth-business-day-of-month","schema":{"type":"string"}},{"name":"start","in":"query","required":true,"description":"Start date, YYYY-MM-DD","schema":{"type":"string"}},{"name":"n","in":"query","required":false,"description":"N for every-n (1-250) or nth-of-month (1-20); default 1","schema":{"type":"integer"}},{"name":"count","in":"query","required":false,"description":"How many dates, 1 to 120 (default 12)","schema":{"type":"integer"}},{"name":"holidays","in":"query","required":false,"description":"Comma list of non-business dates YYYY-MM-DD (max 400)","schema":{"type":"string"}},{"name":"weekend","in":"query","required":false,"description":"Weekend days, default SA,SU (e.g. FR,SA); at most 5 days","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"mode":{"type":["null","string"]},"n":{},"dates":{"type":["array","null"],"items":{"type":"object","properties":{"date":{"type":["null","string"]},"weekday":{"type":["null","string"]}}}},"startWasBusinessDay":{"type":["boolean","null"]},"weekendDays":{"type":["array","null"],"items":{"type":"string"}},"holidaysSupplied":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"6 date(s) from 2026-01-30 to 2026-06-30 (last business day of month).","reasons":["Weekend days: SA, SU. 1 holiday date(s) supplied, 1 of them fall on weekdays inside the result span."],"mode":"last-business-day-of-month","n":null,"dates":[{"date":"2026-01-30","weekday":"Friday"},{"date":"2026-02-27","weekday":"Friday"}],"startWasBusinessDay":true,"weekendDays":["SA","SU"],"holidaysSupplied":1,"degraded":false,"notChecked":["whether your holiday list is complete or correct: only the dates you supply are skipped (no holiday data is bundled)","bank or exchange cut-off times, half days and regional observed-holiday rules","…1 more"],"source":"RFC 5545 (iCalendar) section 3.3.10 and 3.8.5.3, computed locally","asOf":"2026-10-21T01:31:05.923Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0300"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/business-recurrence"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/business-recurrence"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/business-recurrence"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/business-recurrence"}}]}}},"/next-occurrence":{"get":{"operationId":"next_occurrence","summary":"First occurrence of an iCalendar RRULE strictly after a given date-time, honoring EXDATE and a fixed UTC offset.","description":"First occurrence of an iCalendar RRULE strictly after a given date-time, honoring EXDATE and a fixed UTC offset.","tags":["rrule","icalendar","next","recurrence"],"parameters":[{"name":"rrule","in":"query","required":true,"description":"RRULE value, e.g. FREQ=MONTHLY;BYDAY=2TU","schema":{"type":"string"}},{"name":"dtstart","in":"query","required":true,"description":"First instance, local time: 2027-01-12T09:00:00","schema":{"type":"string"}},{"name":"after","in":"query","required":true,"description":"Find the first occurrence after this local date-time (Z or +hh:mm converts via offsetMinutes)","schema":{"type":"string"}},{"name":"offsetMinutes","in":"query","required":false,"description":"Fixed UTC offset in minutes, -840 to 840 (default 0)","schema":{"type":"integer"}},{"name":"exdate","in":"query","required":false,"description":"Comma list of dates or date-times to exclude","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"]},"rule":{"type":["null","string"]},"next":{"type":["null","object"],"properties":{"local":{"type":["null","string"]},"iso":{"type":["null","string"]},"utc":{"type":["null","string"]},"weekday":{"type":["null","string"]}}},"utcOffsetMinutes":{"type":["null","number"]},"dtstartMatchesRule":{"type":["boolean","null"]},"scanned":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"FOUND","summary":"Next occurrence after the given time: 2027-04-13T09:00:00 (Tuesday).","reasons":[],"rule":"FREQ=MONTHLY;BYDAY=2TU","next":{"local":"2027-04-13T09:00:00","iso":"2027-04-13T09:00:00+00:00","utc":"2027-04-13T09:00:00Z","weekday":"Tuesday"},"utcOffsetMinutes":0,"dtstartMatchesRule":true,"scanned":4,"degraded":false,"notChecked":["time zones and daylight saving: arithmetic is floating local time with the fixed offset you gave; no time zone database is applied","HOURLY, MINUTELY and SECONDLY frequencies and BYHOUR, BYMINUTE, BYSECOND (not supported)","…2 more"],"source":"RFC 5545 (iCalendar) section 3.3.10 and 3.8.5.3, computed locally","asOf":"2026-10-21T01:31:06.189Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/next-occurrence"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/next-occurrence"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/next-occurrence"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/next-occurrence"}}]}}},"/nth-weekday-of-month":{"get":{"operationId":"nth_weekday_of_month","summary":"Dates of the Nth weekday (or last) of each month in a year, e.g. second Tuesday of 2027; months without one are listed.","description":"Dates of the Nth weekday (or last) of each month in a year, e.g. second Tuesday of 2027; months without one are listed.","tags":["calendar","weekday","recurrence","dates"],"parameters":[{"name":"weekday","in":"query","required":true,"description":"Day name or code: Tuesday, Tue, TU","schema":{"type":"string"}},{"name":"nth","in":"query","required":true,"description":"1 to 5 for first..fifth, or -1 to -5 for last, second-to-last...","schema":{"type":"integer"}},{"name":"year","in":"query","required":true,"description":"Year, 1000 to 9999","schema":{"type":"integer"}},{"name":"month","in":"query","required":false,"description":"Only this month, 1 to 12 (default all twelve)","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"]},"year":{"type":["null","number"]},"weekday":{"type":["null","string"]},"nth":{"type":["null","number"]},"dates":{"type":["array","null"],"items":{"type":"object","properties":{"month":{"type":["null","string"]},"date":{"type":["null","string"]},"dayOfMonth":{"type":["null","number"]},"weekday":{"type":["null","string"]}}}},"skippedMonths":{"type":["array","null"]},"rruleEquivalent":{"type":["null","string"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"The second Tuesday of each month in 2027: 12 date(s), from 2027-01-12 to 2027-12-14.","reasons":[],"year":2027,"weekday":"Tuesday","nth":2,"dates":[{"month":"January","date":"2027-01-12","dayOfMonth":12,"weekday":"Tuesday"},{"month":"February","date":"2027-02-09","dayOfMonth":9,"weekday":"Tuesday"}],"skippedMonths":[],"rruleEquivalent":"FREQ=MONTHLY;BYDAY=2TU","degraded":false,"notChecked":["public holidays or whether a date is a business day (use /business-recurrence)","any rule other than 'Nth weekday of the month' (use /rrule-expand for the general case)"],"source":"RFC 5545 (iCalendar) section 3.3.10 and 3.8.5.3, computed locally","asOf":"2026-10-21T01:31:06.450Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/nth-weekday-of-month"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/nth-weekday-of-month"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/nth-weekday-of-month"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/nth-weekday-of-month"}}]}}},"/occurrences-between":{"get":{"operationId":"occurrences_between","summary":"List every occurrence of an iCalendar RRULE inside a date range (from and to inclusive), capped at 366 per call.","description":"List every occurrence of an iCalendar RRULE inside a date range (from and to inclusive), capped at 366 per call.","tags":["rrule","icalendar","range","recurrence"],"parameters":[{"name":"rrule","in":"query","required":true,"description":"RRULE value, e.g. FREQ=WEEKLY;BYDAY=MO","schema":{"type":"string"}},{"name":"dtstart","in":"query","required":true,"description":"First instance, local time: 2026-01-05T08:00:00","schema":{"type":"string"}},{"name":"from","in":"query","required":true,"description":"Range start (inclusive). A date alone means the start of that day","schema":{"type":"string"}},{"name":"to","in":"query","required":true,"description":"Range end (inclusive). A date alone means the end of that day","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum occurrences returned, 1 to 366 (default 100)","schema":{"type":"integer"}},{"name":"offsetMinutes","in":"query","required":false,"description":"Fixed UTC offset in minutes, -840 to 840 (default 0)","schema":{"type":"integer"}},{"name":"exdate","in":"query","required":false,"description":"Comma list of dates or date-times to exclude","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"]},"rule":{"type":["null","string"]},"occurrences":{"type":["array","null"],"items":{"type":"object","properties":{"local":{"type":["null","string"]},"iso":{"type":["null","string"]},"utc":{"type":["null","string"]},"weekday":{"type":["null","string"]}}}},"returned":{"type":["null","number"]},"truncated":{"type":["boolean","null"]},"utcOffsetMinutes":{"type":["null","number"]},"excludedCount":{"type":["null","number"]},"dtstartMatchesRule":{"type":["boolean","null"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"FOUND","summary":"4 occurrence(s) in range, first 2026-02-02T08:00:00, last 2026-02-23T08:00:00.","reasons":[],"rule":"FREQ=WEEKLY;BYDAY=MO","occurrences":[{"local":"2026-02-02T08:00:00","iso":"2026-02-02T08:00:00+00:00","utc":"2026-02-02T08:00:00Z","weekday":"Monday"},{"local":"2026-02-09T08:00:00","iso":"2026-02-09T08:00:00+00:00","utc":"2026-02-09T08:00:00Z","weekday":"Monday"}],"returned":4,"truncated":false,"utcOffsetMinutes":0,"excludedCount":0,"dtstartMatchesRule":true,"degraded":false,"notChecked":["time zones and daylight saving: arithmetic is floating local time with the fixed offset you gave; no time zone database is applied","HOURLY, MINUTELY and SECONDLY frequencies and BYHOUR, BYMINUTE, BYSECOND (not supported)","…3 more"],"source":"RFC 5545 (iCalendar) section 3.3.10 and 3.8.5.3, computed locally","asOf":"2026-10-21T01:31:06.714Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/occurrences-between"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/occurrences-between"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/occurrences-between"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/occurrences-between"}}]}}},"/rrule-build":{"get":{"operationId":"rrule_build","summary":"Build a validated RRULE string from fields (freq, interval, byday, bymonthday, bysetpos, count or until) with a check.","description":"Build a validated RRULE string from fields (freq, interval, byday, bymonthday, bysetpos, count or until) with a check.","tags":["rrule","icalendar","builder","recurrence"],"parameters":[{"name":"freq","in":"query","required":true,"description":"YEARLY, MONTHLY, WEEKLY or DAILY","schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"description":"Repeat every N periods (default 1)","schema":{"type":"integer"}},{"name":"count","in":"query","required":false,"description":"Total occurrences (not with until)","schema":{"type":"integer"}},{"name":"until","in":"query","required":false,"description":"Last date or date-time, e.g. 2026-12-31 or 2026-12-31T23:59:59Z","schema":{"type":"string"}},{"name":"byday","in":"query","required":false,"description":"Weekdays with optional ordinals: MO,WE or 1FR,-1FR","schema":{"type":"string"}},{"name":"bymonth","in":"query","required":false,"description":"Months 1-12, comma list","schema":{"type":"string"}},{"name":"bymonthday","in":"query","required":false,"description":"Days of month, -31..-1 or 1..31, comma list","schema":{"type":"string"}},{"name":"byyearday","in":"query","required":false,"description":"Days of year, -366..-1 or 1..366, comma list","schema":{"type":"string"}},{"name":"byweekno","in":"query","required":false,"description":"ISO-style week numbers, YEARLY only","schema":{"type":"string"}},{"name":"bysetpos","in":"query","required":false,"description":"Pick positions from each period's set: 1 or -1, comma list","schema":{"type":"string"}},{"name":"wkst","in":"query","required":false,"description":"Week start day: MO to SU (default MO)","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"]},"rrule":{"type":["null","string"]},"valid":{"type":["boolean","null"]},"errors":{"type":["array","null"]},"warnings":{"type":["array","null"]},"explanation":{"type":["null","string"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"BUILT","summary":"FREQ=MONTHLY;COUNT=12;BYDAY=-1FR means: Every month, on the last Friday of the month, 12 times in total.","reasons":[],"rrule":"FREQ=MONTHLY;COUNT=12;BYDAY=-1FR","valid":true,"errors":[],"warnings":[],"explanation":"Every month, on the last Friday of the month, 12 times in total.","degraded":false,"notChecked":["time zones and daylight saving: arithmetic is floating local time with the fixed offset you gave; no time zone database is applied","HOURLY, MINUTELY and SECONDLY frequencies and BYHOUR, BYMINUTE, BYSECOND (not supported)","…2 more"],"source":"RFC 5545 (iCalendar) section 3.3.10 and 3.8.5.3, computed locally","asOf":"2026-10-21T01:31:06.978Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-build"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-build"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-build"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-build"}}]}}},"/rrule-describe":{"get":{"operationId":"rrule_describe","summary":"Turn an iCalendar RRULE into one plain English sentence (every other week on Tuesday and Thursday, 8 times).","description":"Turn an iCalendar RRULE into one plain English sentence (every other week on Tuesday and Thursday, 8 times).","tags":["rrule","icalendar","describe","recurrence"],"parameters":[{"name":"rrule","in":"query","required":true,"description":"RRULE value, e.g. FREQ=MONTHLY;BYDAY=TU,WE,TH;BYSETPOS=-1","schema":{"type":"string"}},{"name":"dtstart","in":"query","required":false,"description":"Optional start, adds 'starting Tuesday 1997-09-02 at 09:00'","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"]},"rule":{"type":["null","string"]},"sentence":{"type":["null","string"]},"warnings":{"type":["array","null"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"DESCRIBED","summary":"Every month, on Tuesday, Wednesday and Thursday, keeping only the last matching date in each month, 6 times in total, starting Thursday 2026-01-29 at 09:00.","reasons":[],"rule":"FREQ=MONTHLY;BYDAY=TU,WE,TH;BYSETPOS=-1;COUNT=6","sentence":"Every month, on Tuesday, Wednesday and Thursday, keeping only the last matching date in each month, 6 times in total, starting Thursday 2026-01-29 at 09:00.","warnings":[],"degraded":false,"notChecked":["time zones and daylight saving: arithmetic is floating local time with the fixed offset you gave; no time zone database is applied","HOURLY, MINUTELY and SECONDLY frequencies and BYHOUR, BYMINUTE, BYSECOND (not supported)","…2 more"],"source":"RFC 5545 (iCalendar) section 3.3.10 and 3.8.5.3, computed locally","asOf":"2026-10-21T01:31:07.239Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-describe"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-describe"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-describe"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-describe"}}]}}},"/rrule-expand":{"get":{"operationId":"rrule_expand","summary":"Expand an iCalendar RRULE from DTSTART into the next N dates (max 366), with EXDATE, BYDAY ordinals, BYSETPOS and WKST.","description":"Expand an iCalendar RRULE from DTSTART into the next N dates (max 366), with EXDATE, BYDAY ordinals, BYSETPOS and WKST.","tags":["rrule","icalendar","recurrence","calendar"],"parameters":[{"name":"rrule","in":"query","required":true,"description":"RRULE value, e.g. FREQ=MONTHLY;BYDAY=-1FR (RRULE: prefix optional)","schema":{"type":"string"}},{"name":"dtstart","in":"query","required":true,"description":"First instance, local time: 1997-09-02T09:00:00 or 19970902T090000","schema":{"type":"string"}},{"name":"count","in":"query","required":false,"description":"How many occurrences to return, 1 to 366 (default 10)","schema":{"type":"integer"}},{"name":"offsetMinutes","in":"query","required":false,"description":"Fixed UTC offset in minutes for the UTC output, -840 to 840 (default 0)","schema":{"type":"integer"}},{"name":"exdate","in":"query","required":false,"description":"Comma list of dates or date-times to exclude","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"rule":{"type":["null","string"]},"occurrences":{"type":["array","null"],"items":{"type":"object","properties":{"local":{"type":["null","string"]},"iso":{"type":["null","string"]},"utc":{"type":["null","string"]},"weekday":{"type":["null","string"]}}}},"returned":{"type":["null","number"]},"ended":{"type":["null","string"]},"dtstartMatchesRule":{"type":["boolean","null"]},"excludedCount":{"type":["null","number"]},"utcOffsetMinutes":{"type":["null","number"]},"warnings":{"type":["array","null"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"EXPANDED","summary":"6 occurrence(s), first 2026-01-30T09:00:00, last 2026-06-26T09:00:00 (Every month, on the last Friday of the month, with no end date).","reasons":["Stopped at the number of occurrences you asked for; the rule continues."],"rule":"FREQ=MONTHLY;BYDAY=-1FR","occurrences":[{"local":"2026-01-30T09:00:00","iso":"2026-01-30T09:00:00-05:00","utc":"2026-01-30T14:00:00Z","weekday":"Friday"},{"local":"2026-02-27T09:00:00","iso":"2026-02-27T09:00:00-05:00","utc":"2026-02-27T14:00:00Z","weekday":"Friday"}],"returned":6,"ended":"take","dtstartMatchesRule":true,"excludedCount":0,"utcOffsetMinutes":-300,"warnings":[],"degraded":false,"notChecked":["time zones and daylight saving: arithmetic is floating local time with the fixed offset you gave; no time zone database is applied","HOURLY, MINUTELY and SECONDLY frequencies and BYHOUR, BYMINUTE, BYSECOND (not supported)","…2 more"],"source":"RFC 5545 (iCalendar) section 3.3.10 and 3.8.5.3, computed locally","asOf":"2026-10-21T01:31:07.502Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0300"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-expand"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-expand"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-expand"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-expand"}}]}}},"/rrule-parse":{"get":{"operationId":"rrule_parse","summary":"Validate an RRULE string against RFC 5545 section 3.3.10, list every error and warning, and explain it in English.","description":"Validate an RRULE string against RFC 5545 section 3.3.10, list every error and warning, and explain it in English.","tags":["rrule","icalendar","validate","recurrence"],"parameters":[{"name":"rrule","in":"query","required":true,"description":"RRULE value, e.g. FREQ=WEEKLY;INTERVAL=2;BYDAY=TU,TH;COUNT=8","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"]},"rule":{"type":["null","string"]},"valid":{"type":["boolean","null"]},"errors":{"type":["array","null"]},"warnings":{"type":["array","null"]},"parts":{"type":["null","object"],"properties":{"freq":{"type":["null","string"]},"interval":{"type":["null","number"]},"count":{"type":["null","number"]},"until":{},"bymonth":{},"byweekno":{},"byyearday":{},"bymonthday":{},"byday":{"type":["array","null"],"items":{"type":"string"}},"bysetpos":{},"wkst":{"type":["null","string"]}}},"explanation":{"type":["null","string"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"VALID","summary":"Every other week, on Tuesday and Thursday (weeks start on Sunday), 8 times in total.","reasons":[],"rule":"FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH","valid":true,"errors":[],"warnings":[],"parts":{"freq":"WEEKLY","interval":2,"count":8,"until":null,"bymonth":null,"byweekno":null,"byyearday":null,"bymonthday":null,"byday":["TU","TH"],"bysetpos":null,"wkst":"SU"},"explanation":"Every other week, on Tuesday and Thursday (weeks start on Sunday), 8 times in total.","degraded":false,"notChecked":["time zones and daylight saving: arithmetic is floating local time with the fixed offset you gave; no time zone database is applied","HOURLY, MINUTELY and SECONDLY frequencies and BYHOUR, BYMINUTE, BYSECOND (not supported)","…2 more"],"source":"RFC 5545 (iCalendar) section 3.3.10 and 3.8.5.3, computed locally","asOf":"2026-10-21T01:31:07.765Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-parse"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-parse"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-parse"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://recurrence-rules.x402tookit.com/rrule-parse"}}]}}}}}