---
title: "Create Schedule"
method: POST
path: "/worker/{worker_id}/schedules"
tags: ["worker-schedules"]
---

# Create Schedule

`POST /worker/{worker_id}/schedules`

## Path parameters

- `worker_id` string, required

## Request body

- CreateWorkerScheduleRequest
  - `name` string, nullable
  - `directive` string, required
  - `timing` union, required
    - OneShotScheduleTiming
      - `kind` 'one_shot', required
      - `datetime` string, date-time, required
      - `timezone` string, required
    - RecurringScheduleTiming
      - `kind` 'recurring', required
      - `cron_expression` string, required
      - `timezone` string, required

## Response `201`

Successful Response

- WorkerScheduleResponse
  - `id` string, uuid, required
  - `worker_id` string, required
  - `name` string, required
  - `directive` string, required
  - `timing` union, required
    - OneShotScheduleTiming
      - `kind` 'one_shot', required
      - `datetime` string, date-time, required
      - `timezone` string, required
    - RecurringScheduleTiming
      - `kind` 'recurring', required
      - `cron_expression` string, required
      - `timezone` string, required
  - `created_by_user` WorkerScheduleUserResponse, required — Schedule creator: a Traversal user or a resolved Slack/Teams identity.
    - `id` string, required
    - `email` string, nullable, required
    - `name` string, nullable, required
    - `profile_photo_url` string, nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `completed_at` string, date-time, nullable, required

## Other responses

- `422` — Validation Error

## Changes

> 28 revisions in range; 7 not diffed.

- **2026-08-28** `6bbc7dd4088c` — 2 breaking
  - response property `created_by_user/anyOf[subschema #1: WorkerScheduleUserResponse]/email` list-of-types was widened by adding types `null` to media type `application/json` of response `201`
  - the `created_by_user/anyOf[subschema #1: WorkerScheduleUserResponse]/id` response's property format changed from `uuid` to no format for status `201`
- **2026-08-26** `6ee9e975dda2` — 5 info
  - the request property `name` became optional
  - request property `name` list-of-types was widened by adding types `null` to media type `application/json`
  - the `name` request property's minLength was decreased from `1` to `0`
  - added the required property `completed_at` to the response with the `201` status
  - …1 more

[Change history](https://skmtc.dev/traversal/apis/fastapi/changes/worker/:worker_id/schedules/post.md)

---

[API](https://skmtc.dev/traversal/apis/fastapi.md) · [All operations](https://skmtc.dev/traversal/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/traversal/fastapi/revisions/b68d9bf4b28f/schema)
