List projects
GEThttps://api.spice.ai/v1/projects
Returns projects belonging to the authenticated organization. Page with limit (default 1000, max 1000). Prefer after_id for a stable keyset (descending id). offset is accepted for compatibility. PostgREST also caps a page at 1000 rows.
Authorizations
AuthorizationstringRequiredBearer <token>. Authentication lists the tokens it accepts.
Query parameters
limitintegerMaximum number of projects to return
- Default:
1000 - Minimum:
1 - Maximum:
1000
- Default:
offsetintegerNumber of projects to skip when a cursor is not supplied
- Default:
0 - Minimum:
0
- Default:
after_idintegerReturn projects with a strictly smaller id than this value.
- Minimum:
1
- Minimum:
Header parameters
X-Org-NamestringThe organization to act on, by handle. Omit it to act on the organization the credential is bound to; sending it blank is a 400, not the same as omitting it. A user credential may name any organization its owner belongs to; a machine credential is pinned to its own. A portal session token is bound to none, so it must send this header on every route but
GET /v1/orgs(400org_assertion_requiredotherwise).- Pattern:
^[A-Za-z0-9._-]{1,255}$
- Pattern:
Responses
200List of projectsapplication/json
projectsarray of object10 properties
idintegerUnique identifier for the project
namestringName of the project
kindstringResolved project hosting model
- Allowed values:
managed,standalone,byoc
- Allowed values:
descriptionstring | nullDescription of the project
visibilitystringVisibility setting for the project
- Allowed values:
public,private
- Allowed values:
created_atstring (date-time)Timestamp when the project was created
cnamestring | nullRegion identifier
cluster_namestring | nullResolved dedicated cluster name; null for projects not assigned to a dedicated cluster.
endpointstring | nullThe data-plane endpoint the project connects to, or null before a standalone instance is attached.
tagsmap of string | nullKey-value tags for the project
400Invalid limit, offset, or after_id
401Unauthorized
403Insufficient scope
curl "https://api.spice.ai/v1/projects" \
-H "Authorization: Bearer <token>"GET /v1/projects HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>{
"projects": [
{
"id": 0,
"name": "string",
"kind": "managed",
"description": "string",
"visibility": "public",
"created_at": "2026-01-01T00:00:00Z",
"cname": "string",
"cluster_name": "string",
"endpoint": "string",
"tags": {}
}
]
}application/json
No response body
No response body
No response body
GEThttps://api.spice.ai/v1/orgs/{orgId}/projects
The org is orgId in the path. Returns projects belonging to the authenticated organization. Page with limit (default 1000, max 1000). Prefer after_id for a stable keyset (descending id). offset is accepted for compatibility. PostgREST also caps a page at 1000 rows.
Authorizations
AuthorizationstringRequiredBearer <token>. Authentication lists the tokens it accepts.
Path parameters
orgIdintegerRequiredThe org id from GET /v1/orgs
- Minimum:
1
- Minimum:
Query parameters
limitintegerMaximum number of projects to return
- Default:
1000 - Minimum:
1 - Maximum:
1000
- Default:
offsetintegerNumber of projects to skip when a cursor is not supplied
- Default:
0 - Minimum:
0
- Default:
after_idintegerReturn projects with a strictly smaller id than this value.
- Minimum:
1
- Minimum:
Header parameters
X-Org-NamestringWhen present, X-Org-Name must name the same org as orgId. Otherwise the request returns org_path_mismatch (400).
- Pattern:
^[A-Za-z0-9._-]{1,255}$
- Pattern:
Responses
200List of projectsapplication/json
projectsarray of object10 properties
idintegerUnique identifier for the project
namestringName of the project
kindstringResolved project hosting model
- Allowed values:
managed,standalone,byoc
- Allowed values:
descriptionstring | nullDescription of the project
visibilitystringVisibility setting for the project
- Allowed values:
public,private
- Allowed values:
created_atstring (date-time)Timestamp when the project was created
cnamestring | nullRegion identifier
cluster_namestring | nullResolved dedicated cluster name; null for projects not assigned to a dedicated cluster.
endpointstring | nullThe data-plane endpoint the project connects to, or null before a standalone instance is attached.
tagsmap of string | nullKey-value tags for the project
400Bad Request
Invalid limit, offset, or after_id. orgId is not a valid org id (invalid_org_id), or X-Org-Name does not name that org (org_path_mismatch).
401Unauthorized
403Forbidden
Insufficient scope. The caller is not a member of the org (org_forbidden). A machine credential named a different org (org_assertion_mismatch). The org is deleted (org_deleted).
curl "https://api.spice.ai/v1/orgs/<orgId>/projects" \
-H "Authorization: Bearer <token>"GET /v1/orgs/<orgId>/projects HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>{
"projects": [
{
"id": 0,
"name": "string",
"kind": "managed",
"description": "string",
"visibility": "public",
"created_at": "2026-01-01T00:00:00Z",
"cname": "string",
"cluster_name": "string",
"endpoint": "string",
"tags": {}
}
]
}application/json
No response body
No response body
No response body
GEThttps://api.spice.ai/v1/appsDeprecated
Legacy alias of /v1/projects — projects were previously called apps. Returns projects belonging to the authenticated organization. Page with limit (default 1000, max 1000). Prefer after_id for a stable keyset (descending id). offset is accepted for compatibility. PostgREST also caps a page at 1000 rows.
Authorizations
AuthorizationstringRequiredBearer <token>. Authentication lists the tokens it accepts.
Query parameters
limitintegerMaximum number of projects to return
- Default:
1000 - Minimum:
1 - Maximum:
1000
- Default:
offsetintegerNumber of projects to skip when a cursor is not supplied
- Default:
0 - Minimum:
0
- Default:
after_idintegerReturn projects with a strictly smaller id than this value.
- Minimum:
1
- Minimum:
Header parameters
X-Org-NamestringThe organization to act on, by handle. Omit it to act on the organization the credential is bound to; sending it blank is a 400, not the same as omitting it. A user credential may name any organization its owner belongs to; a machine credential is pinned to its own. A portal session token is bound to none, so it must send this header on every route but
GET /v1/orgs(400org_assertion_requiredotherwise).- Pattern:
^[A-Za-z0-9._-]{1,255}$
- Pattern:
Responses
200List of projectsapplication/json
appsarray of object10 properties
idintegerUnique identifier for the project
namestringName of the project
kindstringResolved project hosting model
- Allowed values:
managed,standalone,byoc
- Allowed values:
descriptionstring | nullDescription of the project
visibilitystringVisibility setting for the project
- Allowed values:
public,private
- Allowed values:
created_atstring (date-time)Timestamp when the project was created
cnamestring | nullRegion identifier
cluster_namestring | nullResolved dedicated cluster name; null for projects not assigned to a dedicated cluster.
endpointstring | nullThe data-plane endpoint the project connects to, or null before a standalone instance is attached.
tagsmap of string | nullKey-value tags for the project
400Invalid limit, offset, or after_id
401Unauthorized
403Insufficient scope
OpenAPIapi.spice.ai/openapi.json
curl "https://api.spice.ai/v1/apps" \
-H "Authorization: Bearer <token>"GET /v1/apps HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>{
"apps": [
{
"id": 0,
"name": "string",
"kind": "managed",
"description": "string",
"visibility": "public",
"created_at": "2026-01-01T00:00:00Z",
"cname": "string",
"cluster_name": "string",
"endpoint": "string",
"tags": {}
}
]
}application/json
No response body
No response body
No response body