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_TOKENGet your API token from your dashboard.
Base URL
https://api.rrule.net/v1Input 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.