Periodic Jobs API¶
The periodic jobs API lets you list, create, update, and delete scheduled spider or script runs for a project. Each periodic job defines one or more tasks to run on a cron schedule.
Note
Most of the features provided by the API are also available through the python-scrapinghub client library.
Periodic job object¶
Field |
Description |
|---|---|
id |
Periodic job ID. |
disabled |
If |
project |
Project ID. |
tasks |
List of task objects to run. See Task object. |
addtags |
Tags to attach to every job run triggered by this schedule. |
type |
Job type. Either |
description |
Human-readable description of the periodic job. |
cron |
Cron expression that controls the run schedule. |
Task object¶
Field |
Description |
|---|---|
name |
Spider or script name. |
priority |
Job priority. Supported values: 0 (lowest) to 4 (highest). Default: 2. |
spider_args |
Spider arguments as a JSON object. |
script_args |
Script arguments string. |
jobq_id |
Spider or script ID in the |
Cron format¶
Cron expressions follow the standard five-field format:
minute hour day-of-month month day-of-week
Note
Only simple cron expressions are supported. Ranges (1-5), steps
(*/2), and lists (1,3,5) are not supported. Each field must be
either a specific value or *.
Valid example: 0 9 * * 1 (every Monday at 09:00)
Invalid examples: */15 * * * *, 0 9,17 * * *, 0 9 1-5 * *
projects/:project_id/periodicjobs¶
Lists or creates periodic jobs for a project.
Parameter |
Description |
Required |
|---|---|---|
project_id |
Project ID. |
Yes |
Method |
Description |
Supported parameters |
|---|---|---|
GET |
List periodic jobs. |
project_id |
POST |
Create a periodic job. |
project_id |
GET example:
$ curl -u YOUR_SCRAPY_CLOUD_API_KEY: \
"https://app.zyte.com/api/projects/123/periodicjobs"
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 3,
"disabled": true,
"project": 123,
"tasks": [
{
"name": "example",
"priority": 2,
"spider_args": {},
"script_args": "",
"jobq_id": 1
}
],
"addtags": [
"periodic",
"test"
],
"type": "spider",
"description": "",
"cron": "0 9 * * 1"
}
],
"meta": {
"suggested_hour": "0"
}
}
The meta.suggested_hour field returns a recommended UTC hour to schedule
jobs in order to distribute load across projects.
POST example:
$ curl -u YOUR_SCRAPY_CLOUD_API_KEY: -X POST \
"https://app.zyte.com/api/projects/123/periodicjobs" \
-H "Content-Type: application/json" \
-d '{
"cron": "0 14 * * 1",
"tasks": [{"name": "example", "priority": 2, "spider_args": {}}],
"addtags": ["periodic"],
"disabled": false,
"description": "My new job"
}'
{
"id": 6619,
"disabled": false,
"project": 123,
"tasks": [
{
"name": "example",
"priority": 2,
"spider_args": {},
"script_args": "",
"jobq_id": 1
}
],
"addtags": ["periodic"],
"type": "spider",
"description": "My new job",
"cron": "0 14 * * 1"
}
projects/:project_id/periodicjobs/:periodic_job_id¶
Retrieves, updates, or deletes a single periodic job.
Parameter |
Description |
Required |
|---|---|---|
project_id |
Project ID. |
Yes |
periodic_job_id |
Periodic job ID. |
Yes |
For PATCH, all body fields are optional. Only the fields included in the request body are updated; omitted fields retain their current values.
Method |
Description |
Supported parameters |
|---|---|---|
GET |
Retrieve a periodic job. |
project_id, periodic_job_id |
PATCH |
Update a periodic job. |
project_id, periodic_job_id |
DELETE |
Delete a periodic job. |
project_id, periodic_job_id |
PATCH example that updates the cron schedule:
$ curl -u YOUR_SCRAPY_CLOUD_API_KEY: -X PATCH \
"https://app.zyte.com/api/projects/123/periodicjobs/3" \
-H "Content-Type: application/json" \
-d '{"cron": "30 18 * * 2"}'
{
"id": 3,
"disabled": true,
"project": 123,
"tasks": [
{
"name": "example",
"priority": 2,
"spider_args": {},
"script_args": "",
"jobq_id": 1
}
],
"addtags": ["periodic", "test"],
"type": "spider",
"description": "",
"cron": "30 18 * * 2"
}
For script periodic jobs the same structure applies, with type set to
"script" and name containing the script filename prefixed with "py:":
$ curl -u YOUR_SCRAPY_CLOUD_API_KEY: \
"https://app.zyte.com/api/projects/123/periodicjobs/7"
{
"id": 7,
"disabled": false,
"project": 123,
"tasks": [
{
"name": "py:environ.py",
"priority": 2,
"spider_args": {},
"script_args": "",
"jobq_id": 5
}
],
"addtags": [],
"type": "script",
"description": "nightly env check",
"cron": "0 1 * * *"
}
DELETE example:
$ curl -u YOUR_SCRAPY_CLOUD_API_KEY: -X DELETE \
"https://app.zyte.com/api/projects/123/periodicjobs/3"
A successful delete returns HTTP 204 with an empty response body.