---
title: "Create custom shifts"
method: POST
path: "/v3/schedules/{id}/custom_shifts"
tags: ["Schedules_v3"]
---

# Create custom shifts

`POST /v3/schedules/{id}/custom_shifts`

<!-- theme: info -->

> **Important note:** Shift-based schedules use the V3 API and are not compatible with V2 automations. **To create automations for Shift-Based Schedules, you need to:**
>
> 1. **Update your automations** to use the V3 API for all new shift-based schedules
> 2. **Keep the V2 endpoint** for your existing schedules
>
> An upgrade tool for existing schedules is coming soon; your legacy schedules will keep working in the meantime. [Learn more](https://support.pagerduty.com/main/docs/shift-based-schedules-api-upgrade-examples).

Create one or more custom shifts for a schedule. Custom shifts are
ad-hoc one-off coverage periods that exist outside of rotation events.

Each custom shift requires exactly one assignment.

## Path parameters

- `id` string, required

## Request body

- CreateCustomShiftsRequest
  - `custom_shifts` object[], required
    - `type` 'custom_shift', required
    - `start_time` string, date-time, required
    - `end_time` string, date-time, required
    - `assignments` object[], required
      - `type` 'shift_assignment', required
      - `member` ShiftMember, required — A member (user) assigned to a shift or rotation slot
        - `type` 'user_member' | 'empty_member', required — `user_member` — a specific user is assigned. `empty_member` — the slot is intentionally unassigned.
        - `user_id` string — The ID of the user. Required when type is `user_member`.

## Response `201`

Custom shifts created successfully

- object
  - `custom_shifts` CustomShift[], required
    - `id` string, required
    - `type` 'custom_shift', required
    - `start_time` string, date-time, required
    - `end_time` string, date-time, required
    - `assignments` ShiftAssignment[], required — Exactly one assignment per custom shift
      - `id` string, required — Assignment ID
      - `type` 'shift_assignment', required
      - `member` ShiftMember, required — A member (user) assigned to a shift or rotation slot
        - `type` 'user_member' | 'empty_member', required — `user_member` — a specific user is assigned. `empty_member` — the slot is intentionally unassigned.
        - `user_id` string — The ID of the user. Required when type is `user_member`.
    - `self` string, uri
    - `html_url` string, uri

## Other responses

- `400` — Bad Request — The request contains invalid parameters or data
- `401` — Caller did not supply credentials or did not provide the correct credentials. If you are using an API key, it may be invalid or your Authorization header may be malformed.
- `403` — Caller is not authorized to view the requested resource. While your authentication is valid, the authenticated user or token does not have permission to perform this action.
- `404` — The requested resource was not found.
- `500` — Internal Server Error the PagerDuty server experienced an error.

---

[API](https://skmtc.net/pagerduty/apis/rest-api.md) · [All operations](https://skmtc.net/pagerduty/apis/rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/pagerduty/rest-api/versions/b679a8f3f02c/schema)
