> ## Documentation Index
> Fetch the complete documentation index at: https://unkey.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Unkey is two separate products. Compute builds, deploys, and runs apps behind a gateway. API Management issues API keys, enforces rate limits, manages identities and permissions, and reports usage. Say which product a page belongs to; a reader can use either without the other.
> Every Unkey API endpoint is an HTTP POST to https://api.unkey.com/v2/{service}.{procedure} with a root key in the Authorization: Bearer header. Root keys are workspace scoped.
> Error codes have the form err:{system}:{category}:{specific} and each has a page at /errors/{system}/{category}/{specific}.
> The word environment means production or preview in Compute. Rate limiting has four meanings on this site; the glossary lists them.

# unkey api projects update-project

> Rename a project or change its slug or delete protection.

<Note>
  You need a root key with the permissions listed on this page. Create one in the dashboard under **Settings > Root Keys**. See [Permission reference](/docs/platform/root-keys/permissions-legacy) for every permission.
</Note>

Update a project's name, slug, or delete protection. Flags you omit leave the stored value unchanged.

Changing the slug changes the hostnames of the project's deployments, which breaks anything that uses the old ones. Delete protection blocks `delete-project` until you turn it off again; see [Delete protection](/docs/platform/security/delete-protection).

## Usage

```bash theme={"system"}
unkey api projects update-project --project=<project> [--name=<name>] [--slug=<slug>] [--delete-protection[=false]]
```

## Flags

<ParamField body="--delete-protection" type="boolean">
  Enable (`--delete-protection`) or disable (`--delete-protection=false`) delete protection. Omit the flag to leave the current setting unchanged.
</ParamField>

<ParamField body="--name" type="string">
  New human-readable name, 1 to 256 characters.
</ParamField>

<ParamField body="--project" type="string" required>
  Project ID or slug. Both forms resolve to the same project.
</ParamField>

<ParamField body="--slug" type="string">
  New project slug. Must stay unique in the workspace, and must be 3 to 255 characters matching `^[a-zA-Z0-9_-]+$`.
</ParamField>

### Shared flags

Every `unkey api` command accepts these; [CLI output and shared flags](/docs/platform/cli/output-and-flags) describes them in full.

<ParamField body="--body" type="string">
  A JSON document sent as the request body instead of building it from the flags above. It is mutually exclusive with the request-building flags, and unknown fields are rejected locally. See [Send a raw body](/docs/platform/cli/output-and-flags#send-a-raw-body).
</ParamField>

<ParamField body="--root-key" type="string">
  Root key for the request. Falls back to `UNKEY_ROOT_KEY`, then to the config file written by `unkey auth login`. See [CLI authentication](/docs/platform/cli/authentication).
</ParamField>

<ParamField body="--api-url" type="string" default="https://api.unkey.com">
  Base URL of the API. Falls back to `UNKEY_API_BASE_URL`. You don't normally need to set it.
</ParamField>

<ParamField body="--config" type="string" default="~/.unkey/config.toml">
  Path of the TOML file that `unkey auth login` writes. Falls back to `UNKEY_CONFIG`.
</ParamField>

<ParamField body="--output" type="string">
  Output format. Falls back to `UNKEY_OUTPUT`. Set `json` to print the full response envelope (`meta` and `data`) for piping; any other value prints the request ID followed by `data`.
</ParamField>

## Required permissions

Your root key needs one of:

* `project.*.update_project` (any project)
* `project.<project_id>.update_project` (a specific project)

Without a matching permission the API answers 403 and the CLI prints `Permission denied:` followed by the detail. See [Root key permissions](/docs/platform/root-keys/permissions) for the full catalog.

## Examples

Rename a project:

```bash theme={"system"}
unkey api projects update-project --project=proj_1234abcd --name='Payments API'
```

Protect a project from deletion:

```bash theme={"system"}
unkey api projects update-project --project=payments --delete-protection
```

Send the request body as JSON:

```bash theme={"system"}
unkey api projects update-project --body='{"project":"payments","deleteProtection":false}'
```

## API endpoint

The command calls [`POST /v2/projects.updateProject`](/docs/compute/api-reference/projects/update-project) and prints its response. The request fields carry the same names as the flags in camelCase, which is the shape `--body` expects.
