Docs examples target https://api.scrapy.infralyon.com (not production https://api.scrapy.io).
Skip to main content

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

FieldDescription
publisherPublisher slug
slugTool slug
runNameDisplay name (unique per user/tool rules)
timezoneIANA timezone, e.g. UTC, America/New_York
frequencyone-time or repeatedly
dateYYYY-MM-DD (first / next calendar date)
timeHH:MM (24h)
inputsNon-empty string array of inputs for the tool

When frequency is repeatedly

Also send repeatFrequency:

ValueMeaning
every_10_minsHigh-frequency (use carefully)
hourlyEvery hour
dailyEvery day
weeklyEvery week
monthlyEvery 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