Cursion DocsCursion Docs
Home
Dashboard
Home
Dashboard
  • Guides

    • Account
    • Billing
    • Selfhost
    • App
    • API
    • CLI
  • API

    • Site
    • Page
    • Scan
    • Test
    • Case
    • CaseRun
    • Flow
    • FlowRun
    • Issue
    • Schedule
    • Alert
    • Report
  • CLI

    • Site
    • Page
    • Scan
    • Test
    • Case
    • Flow

Schedule

A Schedule is an object that allows the user to execute Scans, Tests, or generate Reports at specified intervals. A Schedule can be associated with a single Site or Page and is comprised of multiple object id's and datetime & frequency specifications which are required to service the users scheduled task.

Tips

If a Schedule is created at the Site level, the associated task will run for all child Pages.

Schedule object


{
    "id":"aa6f5ba7-e83a-4ce0-a790-9a6706ed1482",        // uuid specific to Schedule
    "site":"46053956-761b-4ca6-8cec-3be796695d12",      // uuid specific to Site if not using Page
    "page":"53946056-4ca6-761b-82xc-3bm9918dbd12",      // uuid specific to Page if not using Site
    "time_created":"2021-11-19T19:33:33.912725Z",       // timestamp of Schedule creation
    "user":"example@gmail.com",                         // user denoted by email
    "task_type":"scan",                                 // one of "scan", "test", or "report"
    "timezone":"UTC",                                   // any of the accepted timezone strings --> https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
    "begin_date":"2021-11-19T19:33:33.893999Z",         // date to begin task. Format as "mm/dd/yyyy"
    "time":"03:00",                                     // time to begin task. Format in 24hr notation (e.g. 3:00 AM becomes "03:00") 
    "frequency":"weekly",                               // how often to run the task (either "daily", "weekly", or "monthly")
    "task":"api.tasks.create_scan_bg",                  // generated automatically via Schedule API
    "crontab_id":"34",                                  // generated automatically via Schedule API
    "periodic_task_id":"10",                            // generated automatically via Schedule API
    "status":"Active",                                  // Either "Active" or "Paused"
    "alert":null,                                  // uuid specific to associated Alert if user creates and alert.
    "extras": {                                         // object containing extra data needed by background tasks 
        "configs": {                                    // scan configs
            "browser":"chrome",                         
            "device": "desktop",
            "mask_ids": "example-id-1, example-id-2",   // element id's you wish to mask when taking a screenshot (seperated by comma)
            "interval": 5,
            "window_size": "1920,1080", 
            "max_wait_time": 60, 
            "min_wait_time": 10,
            "disable_animations": false,                // bool which, when true, will disable all animations and videos on the site during a Scan
            "timeout": 300                              // maximum time (seconds) the driver will run before completely timing out during an the VRT process
        },
        "test_type": [],                                // test type array
        "scan_type": []                                 // scan type array
    },
}
      

Create or Update Schedule

There are two use cases for this endpoint, Creating and Updating Schedules.

POST - /schedule

# import env vars
CURSION_API_BASE_URL = os.environ.get('CURSION_API_BASE_URL')
CURSION_API_TOKEN = os.environ.get('CURSION_API_TOKEN')

# setup configs
url = f'{CURSION_API_BASE_URL}/schedule'
headers = {
    "content-type": "application/json",
    "Authorization" : CURSION_API_TOKEN
}
data = {
    "begin_date": "MM/DD/YYYY",
    "frequency": "daily",
    "schedule_id": "",       # Insert <schedule:id> if updating schedule
    "site_id": "<site:id>",
    "task_type": "scan",
    "time": "00:00",
    "timezone": "UTC",
    "configs": {
        "browser": "chrome",
        "device": "desktop",
        "mask_ids": "example-id-1, example-id-2",
        "interval": 5,
        "window_size": "1920,1080", 
        "max_wait_time": 60, 
        "min_wait_time": 10,
        "disable_animations": False, 
        "timeout": 300
    },
    "test_type": None,  # only if scheduled task is a Test
    "scan_type": ["html", "logs", "lighthouse", "yellowlab", "vrt"], # collecting all data types available 
}

# send the request
res = requests.post(
    url=url,
    headers=headers,
    data=json.dumps(data)
)

# retrieve response data
json_response = res.json()
print(json_response)

View Full Output

{
   "id":"e10846cc-a8d2-442a-a79a-fe62f1479b16",
   "site":"188b882a-f644-4304-b2b9-def9d8c76b57",
   "page":"53946056-4ca6-761b-82xc-3bm9918dbd12",
   "time_created":"2021-11-22T20:07:22.196252Z",
   "user":"example@gmail.com",
   "task_type":"scan",
   "timezone":"UTC",
   "begin_date":"2021-11-22T20:07:22.179606Z",
   "time":"00:00",
   "frequency":"daily",
   "task":"api.tasks.create_scan_bg",
   "crontab_id":"7",
   "periodic_task_id":"11",
   "status":"Active",
   "alert":null,
   "extras": { 
        "configs": { 
            "driver": "selenium",
            "device": "desktop",
            "mask_ids": "example-id-1, example-id-2",
            "interval": 5,
            "window_size": "1920,1080", 
            "max_wait_time": 60, 
            "min_wait_time": 10,
            "disable_animations": false,  
            "timeout": 300
        },
        "test_type": [],
        "scan_type": ["html", "logs", "lighthouse", "yellowlab", "vrt"]
    },
}

Retrieve a Schedule

This endpoint returns a single Schedule object and is useful as a simple "detailed view" of the schedule.

GET - /schedule/<schedule:id>

import requests, os

# import env vars
CURSION_API_BASE_URL = os.environ.get('CURSION_API_BASE_URL')
CURSION_API_TOKEN = os.environ.get('CURSION_API_TOKEN')

# setup configs
url = f'{BASE_URL}/schedule/<schedule:id>'
headers = {
    "content-type": "application/json",
    "Authorization" : CURSION_API_TOKEN
}

# send the request
res = requests.get(
    url=url, 
    headers=headers, 
)

# retrieve response data
json_response = res.json()
print(json_response)

View Full Output
{
   "id":"e10846cc-a8d2-442a-a79a-fe62f1479b16",
   "site":"188b882a-f644-4304-b2b9-def9d8c76b57",
   "page":"53946056-4ca6-761b-82xc-3bm9918dbd12",
   "time_created":"2021-11-22T20:07:22.196252Z",
   "user":"example@gmail.com",
   "task_type":"scan",
   "timezone":"UTC",
   "begin_date":"2021-11-22T20:07:22.179606Z",
   "time":"00:00",
   "frequency":"daily",
   "task":"api.tasks.create_scan_bg",
   "crontab_id":"7",
   "periodic_task_id":"11",
   "status":"Active",
   "alert":null,
   "extras": { 
        "configs": { 
            "driver": "selenium",
            "device": "desktop",
            "mask_ids": "example-id-1, example-id-2",
            "interval": 5,
            "window_size": "1920,1080", 
            "max_wait_time": 60, 
            "min_wait_time": 10,
            "disable_animations": false, 
            "timeout": 300
        },
        "test_type": [],
        "scan_type": ["html", "logs", "lighthouse", "yellowlab", "vrt"], 
    },
}

Retrieve many Schedules

This endpoint returns a paginated response with all Schedule objects filtered by your account and ordered by time_created. This endpoint is useful when needing to displaying your schedules in a table view for example. The limit parameter specifies the total number of objects you want returned per "group" (we recommend keeping this under 10 for best performance). The offset parameter specfies which "group" to return. For example, limit=10&offset=10 in a total dataset of 30 objects would return 10 schedules in range schedule #10 - schedule #20.

Tips

Additionally, optional parameters are site_id=<site:id> which would limit the objects filtering to the associated Site and page_id=<page:id> which would limit the objects filtering to the associated Page.

GET - /schedule?limit=10&offset=0

import requests, os

# import env vars
CURSION_API_BASE_URL = os.environ.get('CURSION_API_BASE_URL')
CURSION_API_TOKEN = os.environ.get('CURSION_API_TOKEN')

# setup configs
url = f'{BASE_URL}/schedule?limit=10&offset=0'
headers = {
    "content-type": "application/json",
    "Authorization" : CURSION_API_TOKEN
}

# send the request
res = requests.get(
    url=url, 
    headers=headers, 
)

# retrieve response data
json_response = res.json()
print(json_response)

View Full Output
{
   "count":30,
   "next":"https://api.cursion.dev/v1/ops/schedule?limit=10&offset=20",
   "previous":"https://api.cursion.dev/v1/ops/schedule?limit=10&offset=10",
   "results":[
        {
            "id":"e10846cc-a8d5-442a-a79a-fe62f1473b16",
            "site":"188b882a-f644-4204-b2b9-def9c8c76b57",
            "page":"53946056-4ca6-761b-82xc-3bm9918dbd12",
            "time_created":"2021-10-22T20:05:22.1964322Z",
            "user":"example@gmail.com",
            "task_type":"scan",
            "timezone":"UTC",
            "begin_date":"2021-11-22T20:07:22.179606Z",
            "time":"00:00",
            "frequency":"weekly",
            "task":"api.scan.create_scan_bg",
            "crontab_id":"4",
            "periodic_task_id":"11",
            "status":"Active",
            "alert":null,
            "extras": { 
                "configs": { 
                    "driver": "selenium",
                    "device": "desktop",
                    "mask_ids": "example-id-1, example-id-2",
                    "interval": 5,
                    "window_size": "1920,1080", 
                    "max_wait_time": 60, 
                    "min_wait_time": 10,
                    "disable_animations": false,
                    "timeout": 300
                },
                "test_type": [],
                "scan_type": ["html", "logs", "lighthouse", "yellowlab", "vrt"],
            },
            
        },
        {
            "id":"e10846cc-a8d2-442a-a79a-fe62f1479b16",
            "site":"188b882a-f644-4304-b2b9-def9d8c76b57",
            "page":"53946056-4ca6-761b-82xc-3bm9918dbd12",
            "time_created":"2021-11-22T20:07:22.196252Z",
            "user":"example@gmail.com",
            "task_type":"scan",
            "timezone":"UTC",
            "begin_date":"2021-11-22T20:07:22.179606Z",
            "time":"00:00",
            "frequency":"daily",
            "task":"api.tasks.create_scan_bg",
            "crontab_id":"7",
            "periodic_task_id":"11",
            "status":"Active",
            "alert":null,
            "extras": { 
                "configs": {
                    "driver": "selenium",
                    "device": "desktop", 
                    "mask_ids": "example-id-1, example-id-2",
                    "interval": 5,
                    "window_size": "1920,1080", 
                    "max_wait_time": 60, 
                    "min_wait_time": 10
                    "disable_animations": false,
                    "timeout": 300
                },
                "test_type": [],
                "scan_type": ["html", "logs", "lighthouse", "yellowlab", "vrt"],
            },
        },
        {
            "id":"188b882a-f644-4304-b2b9-def9d8c76b57",
            "site":"e10846cc-a8d2-442a-a79a-fe62f1479b16",
            "page":"53946056-4ca6-761b-82xc-3bm9918dbd12",
            "time_created":"2021-11-14T20:04:23.1938252Z",
            "user":"example@gmail.com",
            "task_type":"test",
            "timezone":"UTC",
            "begin_date":"2021-11-22T20:07:22.179606Z",
            "time":"01:00",
            "frequency":"monthly",
            "task":"api.tasks.create_scan_bg",
            "crontab_id":"7",
            "periodic_task_id":"10",
            "status":"Paused",
            "alert":null,
            "extras": { 
                "configs": {
                    "driver": "selenium",
                    "device": "desktop", 
                    "mask_ids": "example-id-1, example-id-2",
                    "interval": 5,
                    "window_size": "1920,1080", 
                    "max_wait_time": 60, 
                    "min_wait_time": 10
                },
                "test_type": [],
                "scan_type": ["html", "logs", "lighthouse", "yellowlab", "vrt"],
            },
        },
      ### SHORTENED FOR DISPLAY PURPOSES ###
   ]
}

Delete a Schedule

Because Schedules are high-level objects within the Cursion API, once a Schedule is deleted a cascade effect ensues and all assocaited Alerts and periodic_tasks are subsequently deleted.

Caution

Please use caution with this endpoint as it is irreversible.

DELETE - /schedule/<schedule:id>

import requests, os

# import env vars
CURSION_API_BASE_URL = os.environ.get('CURSION_API_BASE_URL')
CURSION_API_TOKEN = os.environ.get('CURSION_API_TOKEN')

# setup configs
url = f'{BASE_URL}/schedule/<schedule:id>'
headers = {
    "content-type": "application/json",
    "Authorization" : CURSION_API_TOKEN
}

# send the request
res = requests.delete(
    url=url, 
    headers=headers, 
)

# retrieve response data
json_response = res.json()
print(json_response)

View Full Output
{
    "message": "schedule deleted successfully"
}
Last Updated:
Contributors: Landon, landon
Prev
Issue
Next
Alert