78trust / 100
Time Rrule
by Duo Data Utilities in Productivity & SaaS
x402 APIPassing, checked 30 min ago
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. Occurrences moved by a DST gap carry gap: true. Rules needing over 50,000 candidate evaluations are rejected.
GET https://api.duoleads.com/v1/time/rrule
Last 30 days
All checks passedSome failedAll failedNot checked
- Uptime
- 100%
- Response time
- 135 ms typical, 174 ms slowest 5%
- Last check
- 30 min ago
- Next check
- any minute now
How to call it
# See the payment challenge (nothing is charged)
curl -i -X GET "https://api.duoleads.com/v1/time/rrule?dtstart=2026-01-01T09%3A00%3A00&rrule=FREQ%3DMONTHLY%3BBYDAY%3D-1FR%3BCOUNT%3D3&zone=Europe%2FAmsterdam"import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client().register(
"eip155:8453",
new ExactEvmScheme(privateKeyToAccount(process.env.AGENT_KEY)),
);
const pay = wrapFetchWithPayment(fetch, client);
// Not sure it's safe to pay? Preflight it first for $0.005:
// GET https://toolvet.app/api/v1/check?url=https%3A%2F%2Fapi.duoleads.com%2Fv1%2Ftime%2Frrule
const res = await pay("https://api.duoleads.com/v1/time/rrule?dtstart=2026-01-01T09%3A00%3A00&rrule=FREQ%3DMONTHLY%3BBYDAY%3D-1FR%3BCOUNT%3D3&zone=Europe%2FAmsterdam");
console.log(await res.json());Example input
{
"dtstart": "2026-01-01T09:00:00",
"rrule": "FREQ=MONTHLY;BYDAY=-1FR;COUNT=3",
"zone": "Europe/Amsterdam"
}Example output
{
"data": {
"count": 3,
"occurrences": [
{
"dst": false,
"epoch_ms": 1769760000000,
"instant": "2026-01-30T08:00:00.000Z",
"local": "2026-01-30T09:00:00",
"offset": "+01:00"
},
{
"dst": false,
"epoch_ms": 1772179200000,
"instant": "2026-02-27T08:00:00.000Z",
"local": "2026-02-27T09:00:00",
"offset": "+01:00"
},
{
"dst": false,
"epoch_ms": 1774598400000,
"instant": "2026-03-27T08:00:00.000Z",
"local": "2026-03-27T09:00:00",
"offset": "+01:00"
}
],
"rule": {
"byday": [
"-1FR"
],
"count": 3,
"freq": "MONTHLY",
"interval": 1,
"wkst": "MO"
},
"truncated": false,
"zone": "Europe/Amsterdam"
},
"meta": {
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true,
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"price_usd": "0.05",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D"
},
"ok": true,
"route": "/v1/time/rrule",
"version": "1.0.0"
}Security scan
- No findings. We scan names, descriptions and tool definitions for hidden instructions and other prompt-injection patterns.
Recent checks
| When | Result | HTTP | Time | Price |
|---|---|---|---|---|
| 30 min ago | Passed | 402 | 174 ms | $0.05 |
| 5 h ago | Passed | 402 | 54 ms | $0.05 |
| 8 h ago | Passed | 402 | 137 ms | $0.05 |
| 11 h ago | Passed | 402 | 135 ms | $0.05 |
| 16 h ago | Passed | 402 | 119 ms | $0.05 |
| 18 h ago | Passed | 402 | 369 ms | $0.05 |
| 24 h ago | Passed | 402 | 68 ms | $0.05 |