Skip to main content

Agent Scheduling

Run a registered agent automatically on a recurring schedule — either a cron expression or a fixed interval. Schedules are stored server-side and executed by Celery Beat; every run is recorded so you can inspect its history.

Base path: /api/v1/cloud/agents/{agent_id}/schedules

You must be the agent's owner to create or manage its schedules.

POST /

Create a cron or interval schedule for an agent.

# Cron: every day at 09:00 UTC
curl -X POST https://api.ainative.studio/api/v1/cloud/agents/agent-a1b2c3d4e5f6/schedules \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"schedule_type": "cron",
"cron_expression": "0 9 * * *",
"timezone": "UTC",
"task_payload": {"job": "daily-report"},
"enabled": true
}'
# Interval: every 5 minutes
curl -X POST https://api.ainative.studio/api/v1/cloud/agents/agent-a1b2c3d4e5f6/schedules \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"schedule_type": "interval",
"interval_seconds": 300,
"enabled": true
}'

Request fields:

FieldTypeRequiredDescription
schedule_typestringyescron or interval.
cron_expressionstringrequired for cronStandard 5-field cron: minute hour day month weekday (e.g. 0 9 * * *).
interval_secondsintrequired for intervalSeconds between runs. Min 60, max 86400.
timezonestringnoIANA timezone. Default UTC.
task_payloadobjectnoJSON payload passed to the agent at each run.
enabledboolnoWhether the schedule is active. Default true.

Response (201):

{
"id": "b7e6c1a2-3f4d-5e6f-7a8b-9c0d1e2f3a4b",
"agent_id": "agent-a1b2c3d4e5f6",
"schedule_type": "cron",
"cron_expression": "0 9 * * *",
"interval_seconds": null,
"timezone": "UTC",
"task_payload": {"job": "daily-report"},
"enabled": true,
"last_run_at": null,
"next_run_at": "2026-08-21T09:00:00Z",
"run_count": 0,
"created_at": "2026-08-20T12:00:00Z",
"updated_at": "2026-08-20T12:00:00Z"
}

GET /

List all schedules for an agent.

curl https://api.ainative.studio/api/v1/cloud/agents/agent-a1b2c3d4e5f6/schedules \
-H "Authorization: Bearer $TOKEN"

Response (200):

{
"schedules": [ /* AgentScheduleResponse objects */ ],
"total": 1
}

GET /{schedule_id}

Get a single schedule's details.

curl https://api.ainative.studio/api/v1/cloud/agents/agent-a1b2c3d4e5f6/schedules/b7e6c1a2-3f4d-5e6f-7a8b-9c0d1e2f3a4b \
-H "Authorization: Bearer $TOKEN"

PUT /{schedule_id}

Update a schedule. All fields are optional — send only what you want to change (e.g. pause a schedule with {"enabled": false}).

curl -X PUT https://api.ainative.studio/api/v1/cloud/agents/agent-a1b2c3d4e5f6/schedules/b7e6c1a2-3f4d-5e6f-7a8b-9c0d1e2f3a4b \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"cron_expression": "0 12 * * *",
"enabled": true
}'

Request fields (all optional): cron_expression, interval_seconds (60–86400), timezone, task_payload, enabled.

DELETE /{schedule_id}

Delete a schedule and its run history. Returns 204 No Content.

curl -X DELETE https://api.ainative.studio/api/v1/cloud/agents/agent-a1b2c3d4e5f6/schedules/b7e6c1a2-3f4d-5e6f-7a8b-9c0d1e2f3a4b \
-H "Authorization: Bearer $TOKEN"

GET /{schedule_id}/runs

List the run history for a schedule.

curl https://api.ainative.studio/api/v1/cloud/agents/agent-a1b2c3d4e5f6/schedules/b7e6c1a2-3f4d-5e6f-7a8b-9c0d1e2f3a4b/runs \
-H "Authorization: Bearer $TOKEN"

Response (200):

{
"runs": [
{
"id": "run-uuid",
"schedule_id": "b7e6c1a2-3f4d-5e6f-7a8b-9c0d1e2f3a4b",
"agent_id": "agent-a1b2c3d4e5f6",
"status": "completed",
"started_at": "2026-08-21T09:00:00Z",
"completed_at": "2026-08-21T09:00:04Z",
"result": {"ok": true},
"error_message": null
}
],
"total": 1
}