Schedules
Schedules run a tool automatically on a one-time or repeating calendar. They live on the Platform API (api.scrapy.infralyon.com). When a schedule fires, Scrapy.io starts a run using the same billing and execution machinery as a manual scraper job.
Create a schedule
Public identity uses publisher + slug (not internal tool UUIDs).
curl -s -X POST "https://api.scrapy.infralyon.com/v1/schedules" \
-H "Authorization: Bearer $SCRAPY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: nasa-daily-ig-2026-09-07" \
-d '{
"publisher": "datadoping",
"slug": "instagram-profile-scraper",
"runName": "nasa-daily",
"timezone": "UTC",
"frequency": "repeatedly",
"date": "2026-09-08",
"time": "09:00",
"repeatFrequency": "daily",
"inputs": ["nasa"]
}' | jq .
Required fields
| Field | Description |
|---|---|
publisher | Publisher slug |
slug | Tool slug |
runName | Display name (unique per user/tool rules) |
timezone | IANA timezone, e.g. UTC, America/New_York |
frequency | one-time or repeatedly |
date | YYYY-MM-DD (first / next calendar date) |
time | HH:MM (24h) |
inputs | Non-empty string array of inputs for the tool |
When frequency is repeatedly
Also send repeatFrequency:
| Value | Meaning |
|---|---|
every_10_mins | High-frequency (use carefully) |
hourly | Every hour |
daily | Every day |
weekly | Every week |
monthly | Every month |
Idempotency
Send Idempotency-Key on POST to safely retry network failures without creating duplicate schedules. The same authenticated user + key returns the original create response when the first request completed.
List and get
curl -s "https://api.scrapy.infralyon.com/v1/schedules?limit=20" \
-H "Authorization: Bearer $SCRAPY_API_KEY" | jq '.data'
curl -s "https://api.scrapy.infralyon.com/v1/schedules/$SCHEDULE_ID" \
-H "Authorization: Bearer $SCRAPY_API_KEY" | jq .data
Pause / resume
PATCH accepts exactly one of isActive or notificationsEnabled.
# Pause
curl -s -X PATCH "https://api.scrapy.infralyon.com/v1/schedules/$SCHEDULE_ID" \
-H "Authorization: Bearer $SCRAPY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"isActive": false}' | jq .data
# Resume
curl -s -X PATCH "https://api.scrapy.infralyon.com/v1/schedules/$SCHEDULE_ID" \
-H "Authorization: Bearer $SCRAPY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"isActive": true}' | jq .data
Delete
Soft-delete (schedule is deactivated and marked deleted):
curl -s -X DELETE "https://api.scrapy.infralyon.com/v1/schedules/$SCHEDULE_ID" \
-H "Authorization: Bearer $SCRAPY_API_KEY" | jq .
Billing
Creating a schedule validates that you can afford a run of the given inputs (assertCanStartRun / credits). When the schedule fires, each resulting run is billed according to the same pay-per-result rules as manual runs.
Workflow
Identify publisher + slug
↓
POST /v1/schedules
↓
Inspect with GET
↓
PATCH isActive to pause/resume
↓
Runs appear in GET /v1/runs
↓
Fetch dataset items