Dedicated Clusters
Creating and managing projects on a dedicated, single-tenant cluster
An organization on an enterprise plan can have one or more dedicated clusters: Spice-managed, single-tenant infrastructure where an organization's projects run only alongside other projects from the same organization — never on shared infrastructure. Each cluster has its own cluster_name and isolated network.
Dedicated clusters are provisioned by Spice.ai and requested through support. Once a cluster is provisioned and registered to an organization, it is available to the Management API and in the Portal's project-creation picker.
Listing clusters
GET /v1/clusters returns the dedicated clusters registered to the organization bound to the access token. It requires the apps:read scope.
curl -H "Authorization: Bearer <token>" \
https://api.spice.ai/v1/clusters{
"clusters": [
{
"cluster_name": "acme-prod-sandbox",
"region": "us-west-2",
"cloud_provider": "aws",
"endpoint": "https://private-acme-prod-sandbox-us-west-2-prod-data.spiceai.io",
"created_at": "2026-06-11T00:00:00Z",
"updated_at": "2026-06-11T00:00:00Z"
}
]
}cluster_name— the cluster's identifier, used when creating or reassigning projects.endpoint— the cluster's data-plane endpoint (anhttps://URL); projects running on the cluster are reached at this URL. More than one cluster in the list can report the sameendpoint, so match a cluster oncluster_namerather than onendpoint.
Creating a project on a dedicated cluster
A create request specifies cluster_name instead of region, set to a cluster_name returned by GET /v1/clusters. Exactly one of the two is provided; the project's region is derived from the cluster. The request requires the apps:write scope.
curl -X POST https://api.spice.ai/v1/projects \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "my-project",
"cluster_name": "acme-prod-sandbox",
"description": "A project on a dedicated cluster"
}'The response includes the resolved assignment and the cluster's endpoint:
{
"id": 123,
"name": "my-project",
"cluster_name": "acme-prod-sandbox",
"endpoint": "https://private-acme-prod-sandbox-us-west-2-prod-data.spiceai.io",
"...": "..."
}A project created without cluster_name deploys to the shared regional infrastructure as usual; cluster_name: null is equivalent to omitting it.
Errors
| Status | Cause |
|---|---|
400 Cluster '<name>' not found | The cluster does not exist or is not registered to the organization |
400 '<name>' is not a deployable cluster | The name is not a deployable cluster — a cluster_name from GET /v1/clusters is required |
400 region '<r>' does not match cluster region '<r2>' | An explicit region was provided that differs from the cluster's region |
Moving an existing project to a dedicated cluster
PUT /v1/projects/{projectId} with cluster_name reassigns the project. Subsequent deployments land on the cluster, and the project's endpoint changes to the cluster's host.
curl -X PUT https://api.spice.ai/v1/projects/123 \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"cluster_name": "acme-prod-sandbox"}'Querying projects on a dedicated cluster
The project and GET /v1/clusters responses return the cluster's endpoint — the URL clients connect to.
It serves the same APIs (SQL, search, and LLM over HTTP, plus Apache Arrow Flight), and authentication is unchanged — the project's API key or platform credentials work exactly as on shared infrastructure. For Apache Arrow Flight, the endpoint's host is used with -data replaced by -flight, over grpc+tls://<host>:443.
With the SDKs, the endpoint replaces the data.spiceai.io / flight.spiceai.io defaults. For example, with the Python SDK over Flight:
from spicepy import Client
client = Client(
api_key="<project-api-key>",
url="grpc+tls://private-acme-prod-sandbox-us-west-2-prod-flight.spiceai.io:443",
)Everything else — deployments, secrets, API keys, spicepod configuration — works identically to projects on shared infrastructure. The Management APIs reference documents the full endpoint set.