Project API Migration Guide for TiDB Cloud Starter and Essential
Starting from April 15, 2026, TiDB Cloud introduces separate project types for different resource types. For TiDB Cloud Starter and Essential instances, you can now manage them either in TiDB X projects or at the organization level. For more information, see Project Migration FAQ for TiDB X Instances.
This guide is intended for API callers who want to keep most existing v1beta calls working and make only the minimum changes to project lookup and cluster creation for TiDB Cloud Starter and Essential instances.
Because of these project model changes, note the following API changes:
project_idvalues for TiDB Cloud Starter and Essential instances can change because these instances can be moved between projects in the TiDB Cloud console. Do not hardcodeproject_idvalues.- Project responses now include a
typefield. For possible values, see Project type values.
Project API changes
GET /api/v1beta/projects
GET /api/v1beta/projects now returns a type field for each project.
Project type values
If your application only reads the id and name fields from project responses, no changes are required.
If your application needs to distinguish between project types (for example, to filter dedicated projects, TiDB X projects, or the TiDB X virtual project), start reading the type field.
POST /api/v1beta/projects
If you create projects using POST /api/v1beta/projects, note the following:
- Only
dedicatedandtidbxare validtypevalues when creating a project. - If
typeis omitted, the API creates adedicatedproject by default.
How to get a project ID for an existing instance
If you already have a TiDB Cloud Starter or Essential instance and only need its current project_id, use the following approach instead of hardcoding the value.
Call the cluster details endpoint:
GET https://serverless.tidbapi.com/v1beta1/clusters/{clusterId}Read
labels["tidb.cloud/project"]from the response:{ "clusterId": "1048576", "labels": { "tidb.cloud/project": "2293484" } }Use the retrieved
project_idwith your existingv1betaendpoints. For example:GET /api/v1beta/projects/{project_id}/clusters/{cluster_id}DELETE /api/v1beta/projects/{project_id}/clusters/{cluster_id}GET /api/v1beta/projects/{project_id}/clusters/{cluster_id}/importsPOST /api/v1beta/projects/{project_id}/clusters/{cluster_id}/imports