# Project detail (branches + live resources)

`GET https://api.instacloud.com/projects/{projectId}`

**Token scope:** `account` · `org` · `project` — read-only tokens allowed.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `projectId` | path | `string` | yes |  |

## Response 200

Default Response

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `project` | `object` | no |  |
| `project.id` | `string` | no |  |
| `project.org_id` | `string` | no |  |
| `project.owner_user_id` | `string` | no | Better Auth user id (opaque string, not a UUID) |
| `project.name` | `string` | no |  |
| `project.status` | `"active" \| "error" \| "deleting" \| "deleted"` | no |  |
| `project.created_at` | `string` | no |  |
| `branches` | `object[]` | no |  |
| `branches.id` | `string` | no |  |
| `branches.project_id` | `string` | no |  |
| `branches.name` | `string` | no |  |
| `branches.parent_branch_id` | `string \| null` | no |  |
| `branches.is_default` | `boolean` | no |  |
| `branches.status` | `"creating" \| "active" \| "error" \| "deleting"` | no |  |
| `branches.created_at` | `string` | no |  |
| `resources` | `object[]` | no |  |
| `resources.id` | `string` | no |  |
| `resources.kind` | `"neon" \| "insta-db" \| "s3" \| "fly" \| "insta-compute"` | no |  |
| `resources.provider` | `"fly" \| "insta-compute"` | no | Compute plane actually backing a compute resource, derived from its provider_ref rather than its kind. Absent when it cannot be determined from the row — clients must then assert no provider rather than assume one from `kind`. |
| `resources.name` | `string \| null` | no | compute group label for a compute resource (kind=fly \| insta-compute) |
| `resources.branchId` | `string \| null` | no |  |
| `resources.status` | `string` | no |  |
| `resources.ref` | `object` | no | Non-credential identifiers (e.g. service url, bucket name, database project id) |
| `nextActions` | `object[]` | no |  |
| `nextActions.op` | `string` | yes | Neutral logical action id, e.g. "service.add" — NOT an operationId or a CLI/MCP tool name; each client maps it to its own surface. |
| `nextActions.reason` | `string` | yes | Natural-language, human/LLM-facing "why do this now". |
| `nextActions.args` | `object` | no | Suggested, flat named arguments; "<placeholder>"s where a value is unknown. |
| `nextActions.gated` | `boolean` | no | True if the action passes a governance gate. |

## Response 404

Default Response

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `error` | `string` | yes |  |
