ToolAssay

Expand an RFC 5545 recurrence rule into concrete occurrence timestamps

Expand an RFC 5545 recurrence rule into concrete occurrence timestamps. Accepts an RRULE string with DTSTART, an IANA time zone, and optional EXDATE and RDATE lists, and returns up to 200 occurrences as both local wall-clock times and UTC instants. Supports FREQ, INTERVAL, COUNT, UNTIL, BYDAY, BYMONTHDAY, BYMONTH, BYSETPOS and WKST. Reports DST-shifted occurrences explicitly.

Answeringour last check, 2026-09-29
1 of 1checks answered this week
26 msmedian answer time
$0.05listed price per call
$0.05price it asked us

Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.

Endpoint

GET https://api.duoleads.com/v1/time/rrule

CategoryEverything else
Provider hostapi.duoleads.com
Networkseip155:8453
Payment schemesexact
Self-reported calls, 30 days1 from 1 payers (the provider's figure, not ours)

Our checks, last 30 days

DayResultHTTPAskedTime
2026-09-29 valid payment request 402$0.05 26 ms

Example input (from the provider)

{
  "method": "GET",
  "queryParams": {
    "dtstart": "2026-01-01T09:00:00",
    "rrule": "FREQ=MONTHLY;BYDAY=-1FR;COUNT=3",
    "zone": "Europe/Amsterdam"
  },
  "type": "http"
}

Promised output schema (from the provider)

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "input": {
      "additionalProperties": false,
      "properties": {
        "method": {
          "enum": [
            "GET"
          ],
          "type": "string"
        },
        "queryParams": {
          "properties": {
            "after": {
              "description": "RFC 3339 instant; skip occurrences before it.",
              "maxLength": 64,
              "type": "string"
            },
            "count": {
              "default": "20",
              "description": "Maximum occurrences to return, 1-200. Default 20.",
              "maxLength": 64,
              "pattern": "^[+-]?\\d+$",
              "type": "string"
            },
            "dtstart": {
              "description": "First occurrence, YYYY-MM-DDTHH:MM:SS local to zone.",
              "maxLength": 32,
              "type": "string"
            },
            "exdate": {
              "description": "Comma-separated local datetimes to exclude.",
              "maxLength": 1024,
              "type": "string"
            },
            "rdate": {
              "description": "Comma-separated local datetimes to add.",
              "maxLength": 1024,
              "type": "string"
            },
            "rrule": {
              "description": "RFC 5545 RRULE, e.g. FREQ=MONTHLY;BYDAY=-1FR;COUNT=6.",
              "maxLength": 512,
              "type": "string"
            },
            "zone": {
              "description": "IANA time zone id.",
              "maxLength": 64,
              "type": "string"
            }
          },
          "required": [
            "rrule",
            "dtstart",
            "zone"
          ],
          "type": "object"
        },
        "type": {
          "const": "http",
          "type": "string"
        }
      },
      "required": [
        "type",
        "method"
      ],
      "type": "object"
    },
    "output": {
      "properties": {
        "example": {
          "properties": {
            "data": {
              "type": "object"
            },
            "meta": {
              "properties": {
                "computed_at": {
                  "type": "string"
                },
                "deterministic": {
                  "type": "boolean"
                },
                "disclaimer": {
                  "type": "string"
                },
                "price_usd": {
                  "type": "string"
                },
                "request_id": {
                  "type": "string"
                },
                "sources": {
                  "type": "array"
                }
              },
              "required": [
                "request_id",
                "computed_at",
                "price_usd",
                "deterministic",
                "disclaimer"
              ],
              "type": "object"
            },
            "ok": {
              "const": true,
              "type": "boolean"
            },
            "route": {
              "type": "string"
            },
            "version": {
              "type": "string"
            }
          },
          "required": [
            "ok",
            "route",
            "version",
            "data",
            "meta"
          ],
          "type": "object"
        },
        "type": {
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "type": "object"
    }
  },
  "required": [
    "input"
  ],
  "type": "object"
}

This page as JSON