---
title: "Create a switchover"
method: POST
path: "/organizations/{organization}/databases/{database}/branches/{branch}/switchovers"
tags: ["Switchovers"]
---

# Create a switchover

`POST /organizations/{organization}/databases/{database}/branches/{branch}/switchovers`

Moves the primary of a Postgres branch.

        On a branch with replicas the primary steps down and a replica is
        promoted in its place. A branch running a single instance has nothing to
        promote, so that instance is restarted where it stands and the branch is
        unreachable while it comes back. Read `method` on the response to see
        which one the branch got.

        A branch accepts one switchover at a time. A switchover that ends in the
        `failed` state has an unconfirmed outcome: the primary may still have
        moved, and nothing is rolled back.

### Authorization
A service token or OAuth token must have at least one of the following access or scopes in order to use this API endpoint:

**Service Token Accesses**
 `write_database`

**OAuth Scopes**

 | Resource | Scopes |
| :------- | :---------- |
| Organization | `write_databases` |
| Database | `write_database` |

## Path parameters

- `organization` string, required
- `database` string, required
- `branch` string, required

## Request body

- object
  - `candidate` string — The exact `name` of the replica returned by the branch's Postgres infrastructure endpoint to promote. Omit to let the operator select an eligible replica. Only applies to branches with replicas.

## Response `201`

Returns the new switchover

- object
  - `id` string, required — The ID of the switchover
  - `state` 'pending' | 'running' | 'succeeded' | 'failed' | 'canceled', required — The state of the switchover
  - `method` 'switchover' | 'restart', nullable — How the primary was moved. `switchover` promotes a replica on a highly available branch; `restart` restarts the single instance of a branch that has no replicas. Absent until the operator selects one.
  - `error` string, nullable — Why the switchover failed. A failed switchover has an unconfirmed outcome and does not imply the primary stayed put.
  - `started_at` string, nullable, required — When the switchover was requested
  - `completed_at` string, nullable, required — When the switchover finished
  - `created_at` string, required — When the switchover was created
  - `updated_at` string, required — When the switchover was last updated
  - `actor` object, required
    - `id` string, required — The ID of the actor
    - `display_name` string, required — The name of the actor
    - `avatar_url` string, required — The URL of the actor's avatar

## Other responses

- `400` — bad request: candidate must be a string
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — unprocessable: the branch cannot accept a switchover right now
- `500` — Internal Server Error

## Changes

- **2026-08-26** `0b43a2011e53` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/planetscale/apis/planetscale-api/changes/organizations/:organization/databases/:database/branches/:branch/switchovers/post.md)

---

[API](https://skmtc.dev/planetscale/apis/planetscale-api.md) · [All operations](https://skmtc.dev/planetscale/apis/planetscale-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/planetscale/planetscale-api/revisions/6d28c038c4fd/schema)
