planetscale Branches API

Manage database branches for schema development and safe migrations, including creating, listing, updating, and deleting branches.

OpenAPI Specification

planetscale-branches-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: PlanetScale Platform Backups Branches API
  description: The PlanetScale Platform API provides programmatic access to manage PlanetScale serverless MySQL-compatible databases. It allows developers to create and manage databases, branches, deploy requests, passwords, backups, service tokens, organization members, teams, bouncers, and billing data. The API supports authentication via service tokens and OAuth, enabling integration into CI/CD pipelines and infrastructure-as-code workflows.
  version: 1.0.0
  contact:
    name: PlanetScale Support
    url: https://support.planetscale.com
  termsOfService: https://planetscale.com/legal/tos
  license:
    name: Proprietary
    url: https://planetscale.com/legal/tos
servers:
- url: https://api.planetscale.com/v1
  description: PlanetScale Production API
security:
- serviceToken: []
tags:
- name: Branches
  description: Manage database branches for schema development and safe migrations, including creating, listing, updating, and deleting branches.
paths:
  /organizations/{organization}/databases/{database}/branches:
    get:
      operationId: listBranches
      summary: List branches
      description: Returns a list of all branches for a specific database.
      tags:
      - Branches
      parameters:
      - $ref: '#/components/parameters/OrganizationParam'
      - $ref: '#/components/parameters/DatabaseParam'
      - $ref: '#/components/parameters/PageParam'
      - $ref: '#/components/parameters/PerPageParam'
      responses:
        '200':
          description: Successful response with list of branches
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Branch'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      operationId: createBranch
      summary: Create a branch
      description: Creates a new branch for the specified database. Branches are isolated copies of the database schema used for development and testing.
      tags:
      - Branches
      parameters:
      - $ref: '#/components/parameters/OrganizationParam'
      - $ref: '#/components/parameters/DatabaseParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              properties:
                name:
                  type: string
                  description: The name of the branch.
                parent_branch:
                  type: string
                  description: The name of the parent branch to fork from.
                backup_id:
                  type: string
                  description: The ID of a backup to restore the branch from.
                seed_data:
                  type: string
                  description: The seed data configuration for the branch.
                cluster_size:
                  type: string
                  description: The cluster size for the branch.
                region:
                  type: string
                  description: The region where the branch will be created.
      responses:
        '201':
          description: Branch created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Branch'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /organizations/{organization}/databases/{database}/branches/{branch}:
    get:
      operationId: getBranch
      summary: Get a branch
      description: Returns details about a specific branch, including its schema status, cluster configuration, and readiness state.
      tags:
      - Branches
      parameters:
      - $ref: '#/components/parameters/OrganizationParam'
      - $ref: '#/components/parameters/DatabaseParam'
      - $ref: '#/components/parameters/BranchParam'
      responses:
        '200':
          description: Successful response with branch details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Branch'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateBranch
      summary: Update a branch
      description: Updates properties of a specific branch, such as its cluster configuration.
      tags:
      - Branches
      parameters:
      - $ref: '#/components/parameters/OrganizationParam'
      - $ref: '#/components/parameters/DatabaseParam'
      - $ref: '#/components/parameters/BranchParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                cluster_size:
                  type: string
                  description: The new cluster size for the branch.
      responses:
        '200':
          description: Branch updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Branch'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteBranch
      summary: Delete a branch
      description: Deletes a database branch. Production branches cannot be deleted.
      tags:
      - Branches
      parameters:
      - $ref: '#/components/parameters/OrganizationParam'
      - $ref: '#/components/parameters/DatabaseParam'
      - $ref: '#/components/parameters/BranchParam'
      responses:
        '204':
          description: Branch deleted successfully
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /organizations/{organization}/databases/{database}/branches/{branch}/schema-lint:
    get:
      operationId: lintBranchSchema
      summary: Lint a branch schema
      description: Returns schema lint results for the specified branch, identifying potential issues and recommendations.
      tags:
      - Branches
      parameters:
      - $ref: '#/components/parameters/OrganizationParam'
      - $ref: '#/components/parameters/DatabaseParam'
      - $ref: '#/components/parameters/BranchParam'
      responses:
        '200':
          description: Successful response with lint results
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/SchemaLintError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  responses:
    Unauthorized:
      description: Authentication failed. The service token or OAuth token is missing, invalid, or lacks the required permissions.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnprocessableEntity:
      description: The request was well-formed but contains invalid parameters or violates business rules.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    PageParam:
      name: page
      in: query
      required: false
      description: The page number for pagination.
      schema:
        type: integer
        minimum: 1
        default: 1
    BranchParam:
      name: branch
      in: path
      required: true
      description: The name of the branch.
      schema:
        type: string
    PerPageParam:
      name: per_page
      in: query
      required: false
      description: The number of results per page.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
    OrganizationParam:
      name: organization
      in: path
      required: true
      description: The name of the organization.
      schema:
        type: string
    DatabaseParam:
      name: database
      in: path
      required: true
      description: The name of the database.
      schema:
        type: string
  schemas:
    Branch:
      type: object
      description: A database branch representing an isolated copy of the schema for development, testing, or production use.
      properties:
        id:
          type: string
          description: The unique identifier of the branch.
        name:
          type: string
          description: The name of the branch.
        production:
          type: boolean
          description: Whether this is a production branch.
        ready:
          type: boolean
          description: Whether the branch is ready for connections.
        shard_count:
          type: integer
          description: The number of shards in the branch.
        sharded:
          type: boolean
          description: Whether the branch is sharded.
        cluster_rate_name:
          type: string
          description: The cluster size identifier for the branch.
        region:
          type: object
          description: The region where the branch is hosted.
          properties:
            slug:
              type: string
              description: The region slug identifier.
            display_name:
              type: string
              description: The human-readable region name.
        parent_branch:
          type: string
          description: The name of the parent branch this was forked from.
        schema_last_updated_at:
          type: string
          format: date-time
          description: The timestamp when the schema was last modified.
        created_at:
          type: string
          format: date-time
          description: The timestamp when the branch was created.
        updated_at:
          type: string
          format: date-time
          description: The timestamp when the branch was last updated.
        html_url:
          type: string
          format: uri
          description: The URL to the branch in the PlanetScale dashboard.
    Error:
      type: object
      description: An error response from the PlanetScale API.
      properties:
        code:
          type: string
          description: A machine-readable error code.
        message:
          type: string
          description: A human-readable error message.
    SchemaLintError:
      type: object
      description: A schema lint error or warning for a database branch.
      properties:
        lint_error:
          type: string
          description: The lint error identifier.
        subject_type:
          type: string
          description: The type of schema element with the error.
        table_name:
          type: string
          description: The table name associated with the error.
        column_name:
          type: string
          description: The column name associated with the error, if applicable.
        error_description:
          type: string
          description: A human-readable description of the lint error.
        docs_url:
          type: string
          format: uri
          description: A URL to documentation about the lint error.
  securitySchemes:
    serviceToken:
      type: apiKey
      in: header
      name: Authorization
      description: Service token authentication. Use the format 'ServiceToken {token_id}:{token_value}' in the Authorization header.
    bearerAuth:
      type: http
      scheme: bearer
      description: OAuth 2.0 bearer token authentication. Obtain tokens via the PlanetScale OAuth authorization code flow.
externalDocs:
  description: PlanetScale API Documentation
  url: https://planetscale.com/docs/api/reference/getting-started-with-planetscale-api