> Documentation index for AI agents: https://docs.pagerduty.com/llms.txt

# Create overrides

`POST https://api.pagerduty.com/v3/schedules/{id}/overrides`

<!-- 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 overrides for a schedule. An override temporarily
replaces a scheduled on-call member with a different member for a
specific time period.

Each override must reference either a `rotation_id` or a
`custom_shift_id` (not both). The overriding member must belong to
the account.

**Note:** The create response wraps the result in an `overrides` array.
Single-resource endpoints (get, update) wrap in `override` (singular).

## Authorization

- **api_key** (apiKey) — `Authorization` header. The API Key with format `Token token=<API_KEY>`

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes | The ID of the schedule. |

## Request body (`application/json`) — required

| Field | Type | Required | Description |
|---|---|---|---|
| `overrides` | array of object | yes | Min items: 1. |
| `overrides[].type` | string |  | Optional. One of: `override_shift`. |
| `overrides[].rotation_id` | string |  | Mutually exclusive with custom_shift_id. |
| `overrides[].custom_shift_id` | string |  | Mutually exclusive with rotation_id. |
| `overrides[].start_time` | string (date-time) | yes | Must be within one year from now. A value in the past is set to the current time. |
| `overrides[].end_time` | string (date-time) | yes |  |
| `overrides[].overridden_member` | object | yes | A member (user) assigned to a shift or rotation slot. |
| `overrides[].overridden_member.type` | string | yes | `user_member` — a specific user is assigned. `empty_member` — the slot is intentionally unassigned. One of: `user_member`, `empty_member`. |
| `overrides[].overridden_member.user_id` | string |  | The ID of the user. Required when type is `user_member`. |
| `overrides[].overriding_member` | object | yes | A member (user) assigned to a shift or rotation slot. Same fields as `overrides[].overridden_member` above. |

Example: default

```json
{
  "overrides": [
    {
      "type": "override_shift",
      "rotation_id": "ABCDEFGHIJKLMNOPQRSTUVWXY",
      "start_time": "2025-03-15T09:00:00Z",
      "end_time": "2025-03-15T17:00:00Z",
      "overridden_member": {
        "type": "user_member",
        "user_id": "PUSER123"
      },
      "overriding_member": {
        "type": "user_member",
        "user_id": "PUSER456"
      }
    }
  ]
}
```

## Response 201

Overrides created successfully

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `overrides` | array of object | yes |  |
| `overrides[].id` | string | yes |  |
| `overrides[].type` | string | yes | One of: `override_shift`. |
| `overrides[].rotation_id` | string |  | ID of the rotation whose shift is being overridden (mutually exclusive with custom_shift_id) |
| `overrides[].custom_shift_id` | string |  | ID of the custom shift being overridden (mutually exclusive with rotation_id) |
| `overrides[].start_time` | string (date-time) | yes |  |
| `overrides[].end_time` | string (date-time) | yes |  |
| `overrides[].overridden_member` | object | yes | A member (user) assigned to a shift or rotation slot. Same fields as `overrides[].overridden_member` above. |
| `overrides[].overriding_member` | object | yes | A member (user) assigned to a shift or rotation slot. Same fields as `overrides[].overridden_member` above. |
| `overrides[].self` | string (uri) |  |  |
| `overrides[].html_url` | string (uri) |  |  |

## Response 400

Bad Request — The request contains invalid parameters or data

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object | yes |  |
| `error.message` | string | yes |  |
| `error.code` | integer | yes |  |
| `error.errors` | object |  | Map of field path to list of validation messages for that field. Field paths use dot notation prefixed by the resource type (e.g. `event.effective_since`, `rotation.events`). |

Example: default

```json
{
  "error": {
    "message": "Invalid Request",
    "code": 2001,
    "errors": {
      "event.effective_since": [
        "Date cannot be more than 12 months in the future"
      ]
    }
  }
}
```

## Response 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.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object |  |  |
| `error.code` | integer |  | Read-only. |
| `error.message` | string |  | Error message string. Read-only. |
| `error.errors` | array of string |  | Read-only. |

## Response 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.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object |  |  |
| `error.code` | integer |  | Read-only. |
| `error.message` | string |  | Error message string. Read-only. |
| `error.errors` | array of string |  | Read-only. |

## Response 404

The requested resource was not found.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object |  |  |
| `error.code` | integer |  | Read-only. |
| `error.message` | string |  | Error message string. Read-only. |
| `error.errors` | array of string |  | Read-only. |

## Response 500

Internal Server Error the PagerDuty server experienced an error.

### `application/json`

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | object |  |  |
| `error.code` | integer |  | Read-only. |
| `error.message` | string |  | Error message string. Read-only. |
| `error.errors` | array of string |  | Read-only. |

## Developer Agreement

Your access to and use of the PagerDuty Developer Services is governed by the [PagerDuty Developer Agreement](https://docs.pagerduty.com/developer/pagerduty-developer-agreement).
