API Documentation

Complete reference for the rrule.net REST API

Authentication

Most endpoints require authentication via Bearer token in the Authorization header:

Authorization: Bearer YOUR_API_TOKEN

Get your API token from your dashboard.

Base URL

https://api.rrule.net/v1

Input Auto-Detection

The API automatically detects the input type. You don't need to specify it:

  • RRule: FREQ=DAILY;INTERVAL=1
  • Cron: 0 9 * * MON
  • Natural language: Every Monday at 9am

Endpoints

POST /schedules/parse

Parse natural language into RRule (public, no auth required)

This endpoint uses AI to convert natural language descriptions into RRule format. It returns the parsed rrule, confidence score, and any ambiguities detected.

curl -X POST https://api.rrule.net/v1/schedules/parse \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Every Monday at 9am",
    "timezone": "UTC",
    "language": "en"
  }'

POST /schedules/validate

Validate and normalize a scheduling rule (public, no auth required)

This endpoint validates any input (RRule, cron, or natural language) and returns the normalized rrule with the next occurrence. Use this before creating a schedule.

curl -X POST https://api.rrule.net/v1/schedules/validate \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Every Monday at 9am",
    "timezone": "UTC",
    "language": "en"
  }'

POST /schedules/simulate

Simulate future occurrences (public, no auth required)

curl -X POST https://api.rrule.net/v1/schedules/simulate \
  -H "Content-Type: application/json" \
  -d '{
    "rrule": {
      "dtstart": "2025-01-01T09:00:00Z",
      "rule": "FREQ=WEEKLY;BYDAY=MO"
    },
    "count": 5
  }'

POST /schedules

Create a persistent schedule (requires auth)

curl -X POST https://api.rrule.net/v1/schedules \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Every Monday at 9am",
    "timezone": "UTC",
    "webhook": {
      "url": "https://example.com/webhook"
    }
  }'

GET /schedules

List your schedules (requires auth)

curl https://api.rrule.net/v1/schedules \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Query parameters: limit (default: 50), offset (default: 0), status (active | paused)

GET /schedules/:id

Get schedule details (requires auth)

curl https://api.rrule.net/v1/schedules/SCHEDULE_ID \
  -H "Authorization: Bearer YOUR_API_TOKEN"

PATCH /schedules/:id

Update schedule webhook (requires auth)

Note: The rrule, input, and timezone fields are immutable and cannot be changed.

curl -X PATCH https://api.rrule.net/v1/schedules/SCHEDULE_ID \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "webhook": {
      "url": "https://example.com/new-webhook",
      "headers": {
        "X-Custom-Header": "value"
      }
    }
  }'

DELETE /schedules/:id

Delete a schedule (requires auth)

curl -X DELETE https://api.rrule.net/v1/schedules/SCHEDULE_ID \
  -H "Authorization: Bearer YOUR_API_TOKEN"

POST /schedules/:id/pause

Pause a schedule (requires auth)

A paused schedule will not trigger webhooks. This operation is idempotent.

curl -X POST https://api.rrule.net/v1/schedules/SCHEDULE_ID/pause \
  -H "Authorization: Bearer YOUR_API_TOKEN"

POST /schedules/:id/resume

Resume a paused schedule (requires auth)

Resume webhook execution for a paused schedule. This operation is idempotent.

curl -X POST https://api.rrule.net/v1/schedules/SCHEDULE_ID/resume \
  -H "Authorization: Bearer YOUR_API_TOKEN"

GET /schedules/:id/executions

Get execution history for a schedule (requires auth)

curl https://api.rrule.net/v1/schedules/SCHEDULE_ID/executions \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Query parameters: limit (default: 50, max: 100), offset (default: 0)

Based on RFC 5545 RRule specification.