<!-- Source: https://docs.geopera.com/api-reference/operations/projects · Markdown for LLMs -->

<!-- AUTO-GENERATED by scripts/generate-api-reference.cjs from the committed OpenAPI spec. Do not edit by hand. -->

# Projects operations

Organize work into projects.

Each operation below is reachable at `POST /v1/op/{operation_id}` or the resource path `POST /v1/{resource}/{action}`, with a Bearer token (a `gpra_` API key or a session token). Back to the [Operations Reference](/api-reference/operations) index.

## `projects.add_member`

Add a member to a workspace (project admin/owner).

| | |
|---|---|
| **Scope** | `projects:write` |
| **Side-effect** | compute |
| **HTTP** | `POST /v1/op/projects.add_member`  ·  `POST /v1/projects/add_member` |
| **Python / TypeScript** | `client.projects.add_member(…)` |
| **CLI** | `geopera projects add-member …` |

**Request** — `AddMemberInput`

| Field | Type | Required | Description |
|---|---|---|---|
| `project_id` | string | yes |  |
| `user_id` | string | yes | UUID of the user to add |
| `role` | string | — | Role: admin, editor, or viewer |

**Response** — `MemberOutput`.

## `projects.archive`

Archive a workspace, hiding it from the default list (project admin/owner).

| | |
|---|---|
| **Scope** | `projects:write` |
| **Side-effect** | compute |
| **HTTP** | `POST /v1/op/projects.archive`  ·  `POST /v1/projects/archive` |
| **Python / TypeScript** | `client.projects.archive(…)` |
| **CLI** | `geopera projects archive …` |

**Request** — `ProjectArchiveInput`

| Field | Type | Required | Description |
|---|---|---|---|
| `name` | string | — |  |
| `description` | string | — |  |
| `is_archived` | boolean | — |  |
| `project_id` | string | yes |  |

**Response** — `ProjectResponse`.

## `projects.create`

Create a workspace in the caller's organization.

| | |
|---|---|
| **Scope** | `projects:write` |
| **Side-effect** | compute |
| **HTTP** | `POST /v1/op/projects.create`  ·  `POST /v1/projects/create` |
| **Python / TypeScript** | `client.projects.create(…)` |
| **CLI** | `geopera projects create …` |

**Request** — `ProjectCreate`

| Field | Type | Required | Description |
|---|---|---|---|
| `name` | string | yes |  |
| `description` | string | — |  |
| `gcs_region` | GcsRegion | — |  |

**Response** — `ProjectResponse`.

## `projects.delete`

Permanently delete a workspace and all its data (project admin/owner).

| | |
|---|---|
| **Scope** | `projects:write` |
| **Side-effect** | destructive |
| **HTTP** | `POST /v1/op/projects.delete`  ·  `POST /v1/projects/delete` |
| **Python / TypeScript** | `client.projects.delete(…)` |
| **CLI** | `geopera projects delete …` |

**Request** — `ProjectDeleteInput`

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

**Response** — `ProjectDeleteOutput`.

## `projects.remove_member`

Remove a member from a workspace (project admin/owner).

| | |
|---|---|
| **Scope** | `projects:write` |
| **Side-effect** | destructive |
| **HTTP** | `POST /v1/op/projects.remove_member`  ·  `POST /v1/projects/remove_member` |
| **Python / TypeScript** | `client.projects.remove_member(…)` |
| **CLI** | `geopera projects remove-member …` |

**Request** — `RemoveMemberInput`

| Field | Type | Required | Description |
|---|---|---|---|
| `project_id` | string | yes |  |
| `user_id` | string | yes |  |

**Response** — `RemoveMemberOutput`.

## `projects.update`

Update a workspace's metadata (project admin/owner).

| | |
|---|---|
| **Scope** | `projects:write` |
| **Side-effect** | compute |
| **HTTP** | `POST /v1/op/projects.update`  ·  `POST /v1/projects/update` |
| **Python / TypeScript** | `client.projects.update(…)` |
| **CLI** | `geopera projects update …` |

**Request** — `ProjectUpdateInput`

| Field | Type | Required | Description |
|---|---|---|---|
| `name` | string | — |  |
| `description` | string | — |  |
| `is_archived` | boolean | — |  |
| `project_id` | string | yes |  |

**Response** — `ProjectResponse`.

## `projects.update_member`

Change a member's role in a workspace (project admin/owner).

| | |
|---|---|
| **Scope** | `projects:write` |
| **Side-effect** | compute |
| **HTTP** | `POST /v1/op/projects.update_member`  ·  `POST /v1/projects/update_member` |
| **Python / TypeScript** | `client.projects.update_member(…)` |
| **CLI** | `geopera projects update-member …` |

**Request** — `UpdateMemberInput`

| Field | Type | Required | Description |
|---|---|---|---|
| `project_id` | string | yes |  |
| `user_id` | string | yes |  |
| `role` | string | yes | New role: admin, editor, or viewer |

**Response** — `MemberOutput`.
