Overview
Schedules enable automatic execution of job templates and workflow templates at specified times using recurrence rules (rrules).
Endpoints
| Method | Endpoint | Description |
|---|
| GET | /api/v2/schedules/ | List all schedules |
| POST | /api/v2/schedules/ | Create schedule |
| GET | /api/v2/schedules/{id}/ | Retrieve schedule |
| PATCH | /api/v2/schedules/{id}/ | Update schedule |
| DELETE | /api/v2/schedules/{id}/ | Delete schedule |
| GET | /api/v2/schedules/preview/ | Preview rrule occurrences |
| GET | /api/v2/schedules/zoneinfo/ | Get available timezones |
List Schedules
curl -X GET \
https://awx.example.com/api/v2/schedules/ \
-H "Authorization: Bearer YOUR_TOKEN"
Create Schedule
curl -X POST \
https://awx.example.com/api/v2/schedules/ \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Daily Backup",
"description": "Run backup every day at 2 AM",
"unified_job_template": 10,
"rrule": "DTSTART:20240101T020000Z RRULE:FREQ=DAILY;INTERVAL=1",
"enabled": true
}'
Job template or workflow template ID
iCal recurrence rule (RFC 5545)
Whether schedule is active
Additional variables for job launch
Job type override: run or check
Execution environment override
Retrieve Schedule
curl -X GET \
https://awx.example.com/api/v2/schedules/15/ \
-H "Authorization: Bearer YOUR_TOKEN"
Whether schedule is enabled
Start datetime from rrule
Links to related resources:
unified_job_template - Template details
jobs - Jobs created by this schedule
credentials - Credential overrides
labels - Associated labels
instance_groups - Instance group overrides
Update Schedule
curl -X PATCH \
https://awx.example.com/api/v2/schedules/15/ \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"enabled": false,
"description": "Disabled temporarily"
}'
Delete Schedule
curl -X DELETE \
https://awx.example.com/api/v2/schedules/15/ \
-H "Authorization: Bearer YOUR_TOKEN"
Recurrence Rules (rrule)
Schedules use iCalendar recurrence rules (RFC 5545).
Daily Schedule
DTSTART:20240101T020000Z RRULE:FREQ=DAILY;INTERVAL=1
Runs every day at 2:00 AM UTC.
Weekly Schedule
DTSTART:20240101T100000Z RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR
Runs every Monday, Wednesday, and Friday at 10:00 AM UTC.
Monthly Schedule
DTSTART:20240101T000000Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1
Runs on the 1st of each month at midnight UTC.
With End Date
DTSTART:20240101T120000Z RRULE:FREQ=DAILY;UNTIL=20241231T235959Z
Runs daily until December 31, 2024.
Limited Occurrences
DTSTART:20240101T150000Z RRULE:FREQ=HOURLY;INTERVAL=6;COUNT=10
Runs every 6 hours for 10 occurrences.
Preview Schedule
Preview when a schedule will run:
curl -X GET \
"https://awx.example.com/api/v2/schedules/preview/?rrule=DTSTART:20240101T020000Z%20RRULE:FREQ=DAILY;INTERVAL=1" \
-H "Authorization: Bearer YOUR_TOKEN"
Recurrence rule to preview
Returns array of next execution times.
Available Timezones
curl -X GET \
https://awx.example.com/api/v2/schedules/zoneinfo/ \
-H "Authorization: Bearer YOUR_TOKEN"
Returns list of valid timezone names (e.g., America/New_York, Europe/London).
Jobs from Schedule
List jobs created by a schedule:
curl -X GET \
https://awx.example.com/api/v2/schedules/15/jobs/ \
-H "Authorization: Bearer YOUR_TOKEN"
Credentials
Override credentials for scheduled runs:
curl -X GET \
https://awx.example.com/api/v2/schedules/15/credentials/ \
-H "Authorization: Bearer YOUR_TOKEN"
Labels
curl -X GET \
https://awx.example.com/api/v2/schedules/15/labels/ \
-H "Authorization: Bearer YOUR_TOKEN"
Instance Groups
curl -X GET \
https://awx.example.com/api/v2/schedules/15/instance_groups/ \
-H "Authorization: Bearer YOUR_TOKEN"
Filtering
# By name
?name__icontains=backup
# By template
?unified_job_template=10
# Enabled only
?enabled=true
# By next run time
?next_run__gte=2024-01-01T00:00:00Z
Ordering
# By next run
?order_by=next_run
# By name
?order_by=name
# By creation date
?order_by=-created
Complete Example
import requests
import json
from datetime import datetime, timedelta
base_url = "https://awx.example.com/api/v2"
token = "YOUR_TOKEN"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
# Create daily schedule at 3 AM UTC
start_date = datetime.utcnow().replace(hour=3, minute=0, second=0)
rrule = f"DTSTART:{start_date.strftime('%Y%m%dT%H%M%SZ')} RRULE:FREQ=DAILY;INTERVAL=1"
schedule_data = {
"name": "Daily Database Backup",
"description": "Automated daily backup at 3 AM",
"unified_job_template": 10,
"rrule": rrule,
"enabled": True,
"extra_data": {
"backup_type": "full"
}
}
# Preview schedule
preview_response = requests.get(
f"{base_url}/schedules/preview/",
params={"rrule": rrule},
headers=headers
)
print("Next 5 runs:")
for run_time in preview_response.json()[:5]:
print(f" {run_time}")
# Create schedule
response = requests.post(
f"{base_url}/schedules/",
headers=headers,
data=json.dumps(schedule_data)
)
if response.status_code == 201:
schedule = response.json()
print(f"\nCreated schedule {schedule['id']}")
print(f"Next run: {schedule['next_run']}")
else:
print(f"Error: {response.status_code}")
print(response.json())