---
title: "List projects available for Cloud Connect attachment"
method: GET
path: "/v1/cloud-connect/attachable-projects"
tags: ["Cloud Connect"]
---

# List projects available for Cloud Connect attachment

`GET /v1/cloud-connect/attachable-projects`

## Request

- Base URL: `https://api.spice.ai`
- URL: `https://api.spice.ai/v1/cloud-connect/attachable-projects`
- Auth: HTTP bearer

Returns every project the authenticated caller may attach an enrolled Cloud Connect instance to. Policy is evaluated entirely by the server: today, results include only live, unattached standalone projects in the resolved organization, and user credentials require that organization's owner or admin role. Exactly one organization is searched per request and the response names it in `org`, so an empty `projects` states which organization has no eligible project rather than leaving a client to wonder whether the one it meant was searched at all; name another with `X-Org-Name`. Clients must render every returned project and instance without applying their own eligibility filters. The `instances` array is part of the stable contract and may be populated when server policy permits projects with existing attachments.

## Query parameters

- `limit` integer
- `cursor` string

## Headers

- `X-Org-Name` string

## Response `200`

A page of projects currently eligible for attachment.

- object
  - `org` string, required: Handle of the organization the page was scoped to, being the one `X-Org-Name` named or the credential's own when it named none. Always present, so an empty `projects` says which organization has no eligible project rather than leaving a client to guess whether its active organization was the one searched.
  - `projects` object[], required
    - `id` integer, required
    - `name` string, required
    - `org` string, required: Organization handle.
    - `region` string, nullable, required: Project control-plane region, if assigned.
    - `instances` object[], required
      - `id` string, required: Instance external identifier.
      - `location` string, nullable, required: Customer-declared instance location.
      - `enrolled_at` string, date-time, nullable, required
  - `next_cursor` string, nullable, required: Opaque cursor for the next page, or null at the end.

## Other responses

- `400`: Invalid organization assertion (`invalid_org_assertion`), none from a portal session (`org_assertion_required`), or invalid limit/cursor (`invalid_pagination`).
- `401`: Missing or invalid bearer token.
- `403`: Organization access (`org_forbidden`, `org_assertion_mismatch`, or `org_deleted`), apps:read scope (`insufficient_scope`), or owner/admin role (`forbidden`) was refused.
- `500`: Organization role, project, or organization-handle lookup failed.

---

[API](https://skmtc.dev/spice/apis/spice-cloud-control-plane-api.md) - [All operations](https://skmtc.dev/spice/apis/spice-cloud-control-plane-api/llms.txt) - [OpenAPI document](https://skmtc.dev/spice/apis/spice-cloud-control-plane-api/revisions/5f3b75dd847d?raw)
