Convex Management API

The Convex Management API is a REST API for provisioning and managing Convex projects and deployments programmatically. It enables developers and platform integrations to create projects, list deployments, manage deploy keys, configure custom domains, and perform team-level operations without using the Convex dashboard. The API uses Bearer token authentication, supporting both Team Access Tokens and OAuth Application Tokens for third-party integrations.

OpenAPI Specification

convex-management-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Convex Management API
  description: >-
    The Convex Management API is a REST API for provisioning and managing
    Convex projects, deployments, teams, and access credentials programmatically.
    It enables developers and platform integrations to create projects, manage
    deployments across cloud regions, configure custom domains, and handle
    team membership without using the Convex dashboard. The API supports two
    token types: Team Access Tokens (for managing your own team's resources)
    and OAuth Application Tokens (for third-party integrations acting on behalf
    of users). A JavaScript client wrapper is available via the
    @convex-dev/platform npm package. The API is currently in Beta.
  version: 'v1'
  contact:
    name: Convex Platform Support
    email: [email protected]
    url: https://www.convex.dev/community
  termsOfService: https://www.convex.dev/terms
externalDocs:
  description: Convex Management API Documentation
  url: https://docs.convex.dev/management-api
servers:
  - url: https://api.convex.dev/v1
    description: Convex Management API Production Server
tags:
  - name: AccessTokens
    description: >-
      Create and manage Team Access Tokens used for authenticating Management
      API requests on behalf of a team.
  - name: CustomDomains
    description: >-
      Configure custom domain names for Convex deployments. Supports both
      convexCloud (function API) and convexSite (HTTP actions) request
      destinations.
  - name: DeployKeys
    description: >-
      Create and manage deploy keys for CLI operations and CI/CD pipelines.
      Deploy keys authenticate the Convex CLI when pushing function code
      to a deployment.
  - name: Deployments
    description: >-
      Create, list, retrieve, update, and delete Convex cloud and local
      deployments. Deployments are the runtime environments where Convex
      backend functions execute.
  - name: Projects
    description: >-
      Create, list, retrieve, and delete Convex projects within a team.
      Projects group deployments and serve as the top-level organizational
      unit for Convex applications.
  - name: Teams
    description: >-
      Manage Convex teams, team members, and team-level access tokens.
      Teams are the billing and administrative unit that owns projects.
security:
  - teamToken: []
  - oauthTeamToken: []
paths:
  /teams/{team_id}/create_project:
    post:
      operationId: createProject
      summary: Create a new project
      description: >-
        Provisions a new Convex project within the specified team. Optionally
        creates an initial production deployment in the specified cloud region
        and deployment class. Returns the new project's ID and slug along with
        details of any provisioned deployment.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/teamId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProjectRequest'
      responses:
        '200':
          description: Project created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '400':
          description: Bad request — invalid parameters
        '401':
          description: Unauthorized — missing or invalid token

  /teams/{team_id}/list_projects:
    get:
      operationId: listProjects
      summary: List projects in a team
      description: >-
        Returns all Convex projects belonging to the specified team. Each
        project entry includes its ID, slug, name, and associated deployment
        information. Useful for enumerating resources available to the
        authenticated token holder.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/teamId'
      responses:
        '200':
          description: Projects listed successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Project'
        '401':
          description: Unauthorized — missing or invalid token

  /projects/{project_id}:
    get:
      operationId: getProject
      summary: Get a project by ID
      description: >-
        Retrieves details for a specific Convex project identified by its
        integer project ID. Returns the project's name, slug, team association,
        and deployment summary.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/projectId'
      responses:
        '200':
          description: Project retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '401':
          description: Unauthorized — missing or invalid token
        '404':
          description: Project not found

  /teams/{team_id_or_slug}/projects/{project_slug}:
    get:
      operationId: getProjectBySlug
      summary: Get a project by team and project slug
      description: >-
        Retrieves a project by its human-readable slug within a team identified
        by either team ID or team slug. This is useful when project identifiers
        are stored as slugs rather than integer IDs.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/teamIdOrSlug'
        - $ref: '#/components/parameters/projectSlug'
      responses:
        '200':
          description: Project retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '401':
          description: Unauthorized — missing or invalid token
        '404':
          description: Project not found

  /projects/{project_id}/delete:
    post:
      operationId: deleteProject
      summary: Delete a project
      description: >-
        Permanently deletes a Convex project and all associated deployments.
        This operation is irreversible. All deployments within the project are
        also deleted, and all associated resources (functions, data, files) are
        permanently removed.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/projectId'
      responses:
        '200':
          description: Project deleted successfully
        '401':
          description: Unauthorized — missing or invalid token
        '404':
          description: Project not found

  /projects/{project_id}/deployments/create_cloud:
    post:
      operationId: createCloudDeployment
      summary: Create a cloud deployment
      description: >-
        Creates a new cloud deployment within a project in the specified region
        and deployment class. Cloud deployments run on Convex-managed
        infrastructure and are accessible via a public URL. Supports dev, prod,
        preview, and custom deployment types.
      tags:
        - Deployments
      parameters:
        - $ref: '#/components/parameters/projectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCloudDeploymentRequest'
      responses:
        '200':
          description: Deployment created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deployment'
        '400':
          description: Bad request — invalid region or deployment class
        '401':
          description: Unauthorized — missing or invalid token

  /projects/{project_id}/deployments/list:
    get:
      operationId: listDeployments
      summary: List deployments in a project
      description: >-
        Returns all deployments associated with a Convex project. Each
        deployment entry includes its ID, name, deployment URL, type (dev,
        prod, preview, custom), status, region, and class.
      tags:
        - Deployments
      parameters:
        - $ref: '#/components/parameters/projectId'
      responses:
        '200':
          description: Deployments listed successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Deployment'
        '401':
          description: Unauthorized — missing or invalid token

  /deployments/{deployment_name}:
    get:
      operationId: getDeployment
      summary: Get a deployment by name
      description: >-
        Retrieves details for a specific deployment identified by its name
        (e.g. "happy-otter-123"). Returns the deployment URL, type, status,
        region, class, and associated project information.
      tags:
        - Deployments
      parameters:
        - $ref: '#/components/parameters/deploymentName'
      responses:
        '200':
          description: Deployment retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deployment'
        '401':
          description: Unauthorized — missing or invalid token
        '404':
          description: Deployment not found

  /deployments/{deployment_name}/delete:
    post:
      operationId: deleteDeployment
      summary: Delete a deployment
      description: >-
        Permanently deletes a Convex deployment. All deployed functions,
        database data, and file storage associated with the deployment are
        permanently removed. This operation is irreversible.
      tags:
        - Deployments
      parameters:
        - $ref: '#/components/parameters/deploymentName'
      responses:
        '200':
          description: Deployment deleted successfully
        '401':
          description: Unauthorized — missing or invalid token
        '404':
          description: Deployment not found

  /projects/{project_id}/deployment/default_prod:
    get:
      operationId: getDefaultProdDeployment
      summary: Get default production deployment
      description: >-
        Retrieves the default production deployment for a project. Most
        projects have a single production deployment designated as the default.
        Returns full deployment details including URL, region, class, and status.
      tags:
        - Deployments
      parameters:
        - $ref: '#/components/parameters/projectId'
      responses:
        '200':
          description: Default production deployment retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deployment'
        '401':
          description: Unauthorized — missing or invalid token
        '404':
          description: No default production deployment found

  /projects/{project_id}/deployments/create_deploy_key:
    post:
      operationId: createDeployKey
      summary: Create a deploy key
      description: >-
        Creates a new deploy key for a project, scoped to a specific deployment.
        Deploy keys are used by the Convex CLI and CI/CD pipelines to push
        function code to deployments. Keys can be standard or preview keys
        for Vercel-style preview deployments.
      tags:
        - DeployKeys
      parameters:
        - $ref: '#/components/parameters/projectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDeployKeyRequest'
      responses:
        '200':
          description: Deploy key created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeployKey'
        '401':
          description: Unauthorized — missing or invalid token

  /projects/{project_id}/deployment/deploy_key/list:
    get:
      operationId: listDeployKeys
      summary: List deploy keys for a project
      description: >-
        Returns all deploy keys associated with a Convex project. Includes
        key names, creation dates, and the deployment each key is scoped to.
        Key values are not returned after initial creation.
      tags:
        - DeployKeys
      parameters:
        - $ref: '#/components/parameters/projectId'
      responses:
        '200':
          description: Deploy keys listed successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DeployKey'
        '401':
          description: Unauthorized — missing or invalid token

  /deployments/{deployment_name}/custom_domains/create:
    post:
      operationId: createCustomDomain
      summary: Create a custom domain
      description: >-
        Associates a custom domain with a Convex deployment. Supports two
        request destination types: convexCloud for routing to the function API
        (queries, mutations, actions), and convexSite for routing to HTTP
        action endpoints. Domain verification and DNS configuration is handled
        separately.
      tags:
        - CustomDomains
      parameters:
        - $ref: '#/components/parameters/deploymentName'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCustomDomainRequest'
      responses:
        '200':
          description: Custom domain created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomDomain'
        '400':
          description: Bad request — invalid domain or destination type
        '401':
          description: Unauthorized — missing or invalid token

  /deployments/{deployment_name}/custom_domains/list:
    get:
      operationId: listCustomDomains
      summary: List custom domains for a deployment
      description: >-
        Returns all custom domains configured for a deployment. Each entry
        includes the domain name, request destination type, and verification
        status.
      tags:
        - CustomDomains
      parameters:
        - $ref: '#/components/parameters/deploymentName'
      responses:
        '200':
          description: Custom domains listed successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomDomain'
        '401':
          description: Unauthorized — missing or invalid token

  /deployments/{deployment_name}/custom_domains/delete:
    post:
      operationId: deleteCustomDomain
      summary: Delete a custom domain
      description: >-
        Removes a custom domain association from a Convex deployment. After
        deletion, traffic to the domain will no longer be routed to the
        deployment. DNS records should be removed separately.
      tags:
        - CustomDomains
      parameters:
        - $ref: '#/components/parameters/deploymentName'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - domain
              properties:
                domain:
                  type: string
                  description: The custom domain name to remove.
      responses:
        '200':
          description: Custom domain deleted successfully
        '401':
          description: Unauthorized — missing or invalid token
        '404':
          description: Custom domain not found

  /teams/{team_id}/members:
    get:
      operationId: listTeamMembers
      summary: List team members
      description: >-
        Returns all members of the specified team along with their roles.
        Roles include admin (full management access) and developer (standard
        access). Useful for auditing team membership and access levels.
      tags:
        - Teams
      parameters:
        - $ref: '#/components/parameters/teamId'
      responses:
        '200':
          description: Team members listed successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TeamMember'
        '401':
          description: Unauthorized — missing or invalid token

  /teams/{team_id}/create_access_token:
    post:
      operationId: createAccessToken
      summary: Create a team access token
      description: >-
        Creates a new Team Access Token for the specified team. Team Access
        Tokens are used to authenticate Management API requests and grant
        access to all projects and deployments within the team. The token
        value is only returned at creation time and should be stored securely.
      tags:
        - AccessTokens
      parameters:
        - $ref: '#/components/parameters/teamId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAccessTokenRequest'
      responses:
        '200':
          description: Access token created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessToken'
        '401':
          description: Unauthorized — missing or invalid token

components:
  securitySchemes:
    teamToken:
      type: http
      scheme: bearer
      description: >-
        Team Access Token created in the Convex dashboard team settings.
        Grants management access to all projects and deployments within
        the team.
    oauthTeamToken:
      type: http
      scheme: bearer
      description: >-
        OAuth Application Token issued by Convex for third-party integrations
        acting on behalf of a user's team. Obtained via the Convex OAuth flow.
    oauthProjectToken:
      type: http
      scheme: bearer
      description: >-
        OAuth Application Token scoped to a specific project, issued by
        Convex for third-party integrations.

  parameters:
    teamId:
      name: team_id
      in: path
      required: true
      description: >-
        The integer identifier of the Convex team. Available in the Convex
        dashboard when creating Team Access Tokens.
      schema:
        type: integer
        format: int64

    teamIdOrSlug:
      name: team_id_or_slug
      in: path
      required: true
      description: >-
        Either the integer team ID or the human-readable team slug.
      schema:
        type: string

    projectId:
      name: project_id
      in: path
      required: true
      description: >-
        The integer identifier of the Convex project. Obtainable via the
        List Projects endpoint or assigned during project creation.
      schema:
        type: integer
        format: int64

    projectSlug:
      name: project_slug
      in: path
      required: true
      description: >-
        The human-readable slug of the project within the team.
      schema:
        type: string

    deploymentName:
      name: deployment_name
      in: path
      required: true
      description: >-
        The unique name of the deployment (e.g. "happy-otter-123"). This
        is the subdomain portion of the deployment URL at convex.cloud.
      schema:
        type: string

  schemas:
    Project:
      type: object
      required:
        - id
        - slug
        - name
        - team_id
      properties:
        id:
          type: integer
          format: int64
          description: Unique integer identifier for the project.
        slug:
          type: string
          description: Human-readable URL-safe identifier for the project within the team.
        name:
          type: string
          description: Display name of the project.
        team_id:
          type: integer
          format: int64
          description: ID of the team that owns this project.

    Deployment:
      type: object
      required:
        - id
        - name
        - deployment_type
      properties:
        id:
          type: integer
          format: int64
          description: Unique integer identifier for the deployment.
        name:
          type: string
          description: >-
            Unique name of the deployment used as the subdomain of the
            deployment URL (e.g. "happy-otter-123").
        deployment_type:
          type: string
          description: The type of deployment environment.
          enum:
            - dev
            - prod
            - preview
            - custom
        deployment_class:
          type: string
          description: >-
            The compute class of the deployment, determining resource limits
            and pricing tier.
          enum:
            - s16
            - s256
            - d1024
        region:
          type: string
          description: The cloud region where the deployment runs.
          enum:
            - aws-us-east-1
            - aws-eu-west-1
        project_id:
          type: integer
          format: int64
          description: ID of the project that owns this deployment.
        url:
          type: string
          format: uri
          description: >-
            The base URL of the deployment in the format
            https://{name}.convex.cloud.

    CreateProjectRequest:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          description: Display name for the new project.
        team_id:
          type: integer
          format: int64
          description: ID of the team to create the project in.
        deployment_region:
          type: string
          description: >-
            Cloud region for the initial production deployment.
            If omitted, no initial deployment is created.
          enum:
            - aws-us-east-1
            - aws-eu-west-1
        deployment_class:
          type: string
          description: Compute class for the initial production deployment.
          enum:
            - s16
            - s256
            - d1024

    CreateCloudDeploymentRequest:
      type: object
      required:
        - deployment_type
        - region
      properties:
        deployment_type:
          type: string
          description: The type of deployment environment to create.
          enum:
            - dev
            - prod
            - preview
            - custom
        region:
          type: string
          description: The cloud region where the deployment should run.
          enum:
            - aws-us-east-1
            - aws-eu-west-1
        deployment_class:
          type: string
          description: Compute class for the deployment.
          enum:
            - s16
            - s256
            - d1024

    CreateDeployKeyRequest:
      type: object
      required:
        - deployment_name
      properties:
        deployment_name:
          type: string
          description: The name of the deployment this key should be scoped to.
        key_name:
          type: string
          description: Optional human-readable name for the deploy key.

    DeployKey:
      type: object
      required:
        - name
        - deployment_name
      properties:
        name:
          type: string
          description: Human-readable name of the deploy key.
        deployment_name:
          type: string
          description: The deployment this key is scoped to.
        key:
          type: string
          description: >-
            The deploy key value. Only present immediately after creation;
            not returned by list operations.
        created_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the key was created.

    CustomDomain:
      type: object
      required:
        - domain
        - request_destination
      properties:
        domain:
          type: string
          description: The custom domain name (e.g. "api.example.com").
        request_destination:
          type: string
          description: >-
            The routing destination for requests to this domain.
            convexCloud routes to the function API; convexSite routes
            to HTTP action endpoints.
          enum:
            - convexCloud
            - convexSite

    CreateCustomDomainRequest:
      type: object
      required:
        - domain
        - request_destination
      properties:
        domain:
          type: string
          description: The custom domain name to associate with the deployment.
        request_destination:
          type: string
          description: >-
            The routing destination for requests to this domain.
          enum:
            - convexCloud
            - convexSite

    TeamMember:
      type: object
      required:
        - id
        - role
      properties:
        id:
          type: integer
          format: int64
          description: Unique identifier of the team member.
        email:
          type: string
          format: email
          description: Email address of the team member.
        role:
          type: string
          description: The member's role within the team.
          enum:
            - admin
            - developer

    CreateAccessTokenRequest:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          description: Human-readable name for the access token.

    AccessToken:
      type: object
      required:
        - name
        - token
      properties:
        name:
          type: string
          description: Human-readable name of the access token.
        token:
          type: string
          description: >-
            The token value used for API authentication. Only returned at
            creation time; store it securely as it cannot be retrieved later.
        created_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the token was created.