## Update

**put** `/projects/{projectId}`

Update the name of a Project

### Path Parameters

- `projectId: string`

### Body Parameters

- `avatarAssetId: optional string`

  The project's avatar asset ID (must be kind image)

- `description: optional string`

  High-level markdown description of the project
  Set to null to clear the description

- `disableIpDetection: optional boolean`

  Switch IP detection off for this project only.
  The team's posture (see PUT /teams/{teamId}) applies to every project by
  default; set this to true to opt this project out of it, false to opt it
  back in. A project cannot choose a posture of its own. Team-admin only.

- `maxConsumption: optional number`

  Max consumption (CU) for this project over the billing period.
  Set to null to remove the cap. Team admins only, or a team API key holding
  `team.members.manage`, which may then send this field alone.

- `name: optional string`

  The project name (example: "Default Project")

- `privacyMode: optional boolean`

  Toggle the privacyMode mode
  When enabled, users can only see their own generated assets (except admins)

- `qualityGateAutoDetect: optional boolean`

  Quality Gate auto-detection override for this project (wins over the team
  default). Set to null to clear the override.

- `settings: optional object { homepage }`

  Project settings. Set `homepage` to a layout object to publish it, or to
  `null` to unpublish it. Team admins and project admins only.

  - `homepage: optional unknown`

    Homepage layout. An object publishes it; `null` unpublishes it.

### Returns

- `project: object { id, createdAt, keys, 13 more }`

  - `id: string`

    The project ID (example: "project_eyVcnFJcR92BxBkz7N6g5w")

  - `createdAt: string`

  - `keys: array of object { id, apiKeyId, apiKeyStatus, 11 more }`

    The keys of the project (get from the ProjectRoles table)

    - `id: string`

      The key's member id (its API user id, `apiu_...`), taken by the member and
      usage routes (example: "apiu_eyVcnFJcR92BxBkz7N6g5w")

    - `apiKeyId: string`

      The API key id (`api_...`), taken by the api-keys routes (example:
      "api_eyVcnFJcR92BxBkz7N6g5w")

    - `apiKeyStatus: "active" or "inactive"`

      The status of the API key

      - `"active"`

      - `"inactive"`

    - `createdAt: string`

      The API key creation date as an ISO string (example: "2023-02-03T11:19:41.579Z")

    - `name: string`

      The API key name (example: "eurv-scenario")

    - `role: string`

      A project role value. Accepted values are:

      - a built-in role: `"admin"`, `"editor"` or `"reader"` (see `ProjectRoles`);
      - a custom inline role: a `;`-separated scope list, e.g.
        `"assets.write;workflows.run"`.

      Resolved to capabilities by `ProjectRole.scopesFromRole()`.

    - `scope: "project" or "team"`

      The scope of the API key: 'project' for project-scoped keys, 'team' for team-scoped keys

      - `"project"`

      - `"team"`

    - `updatedAt: string`

      The API key last update date as an ISO string (example: "2023-02-03T11:19:41.579Z")

    - `authorId: optional string`

      The member who created the key: a human, or the member id (`apiu_...`) of
      the team API key that created it.

    - `consumption: optional number`

      Consumption (CU) used by this key over the current billing period.

    - `lastUsedAt: optional string`

      The date the API key was last used to authenticate a request, as an ISO
      string (example: "2023-02-03T11:19:41.579Z"). Absent if the key has never
      been used.

    - `maxConsumption: optional number`

      The key's effective consumption (CU) cap for the period (per-key override,
      else the team-wide default). Absent when the key is uncapped.

    - `ownerId: optional string`

      For a PROJECT key: the project it was created on (the team id on some
      legacy keys). Absent for team keys.

    - `projects: optional array of object { projectId, role }`

      For a PROJECT key: the projects it has access to and its role on each.
      Empty when the key is currently not a member of any (live) project.
      Absent for team keys.

      - `projectId: string`

        The project the key has a role on

      - `role: string`

        The key's role on this project: a built-in role (`admin`/`editor`/`reader`)
        or a custom `;`-separated scope list (example: `"asset.read;model.read"`).

  - `name: string`

    The project name (example: "Default Project")

  - `privacyMode: boolean`

    Whether the project is privacyMode
    In a privacyMode project, users can only see their own generated assets (except admins)

  - `teamId: string`

    The team ID (example: "team_eyVcnFJcR92BxBkz7N6g5w")

  - `updatedAt: string`

  - `users: array of object { id, createdAt, email, 5 more }`

    The users of the project (get from the ProjectRoles table)

    - `id: string`

      The user ID (example: "eyVcnFJcR92BxBkz7N6g5w")

    - `createdAt: string`

      The user creation date as an ISO string (example: "2023-02-03T11:19:41.579Z")

    - `email: string`

      The user email (example: "herve@scenario.com")

    - `role: string`

      A project role value. Accepted values are:

      - a built-in role: `"admin"`, `"editor"` or `"reader"` (see `ProjectRoles`);
      - a custom inline role: a `;`-separated scope list, e.g.
        `"assets.write;workflows.run"`.

      Resolved to capabilities by `ProjectRole.scopesFromRole()`.

    - `updatedAt: string`

      The user last update date as an ISO string (example: "2023-02-03T11:19:41.579Z")

    - `avatar: optional object { assetId, url }`

      The user's avatar

      - `assetId: optional string`

        ID of the asset used as thumbnail if provided, otherwise undefined

      - `url: optional string`

        Signed URL of the assetId or free url if assetId is undefined

    - `consumption: optional number`

      Consumption (CU) used by this member over the current billing period.

    - `maxConsumption: optional number`

      The member's effective consumption (CU) cap for the period (per-user
      override, else the team-wide default). Absent when the member is uncapped.

  - `avatar: optional object { assetId, url }`

    The project's avatar

    - `assetId: optional string`

      ID of the asset used as thumbnail if provided, otherwise undefined

    - `url: optional string`

      Signed URL of the assetId or free url if assetId is undefined

  - `consumption: optional number`

    Consumption (CU) used by this project over the current billing period.

  - `description: optional string`

    High-level markdown description of the project
    Only returned on single project GET, not on list

  - `descriptionDate: optional string`

    ISO string date when the description was last updated
    Only returned on single project GET, not on list

  - `disableIpDetection: optional boolean`

    When true, IP detection is switched off for this project even if the team
    has an active posture. Absent means the team posture applies.
    The posture itself (disabled / active-fail-open / active-fail-closed) is a
    team-level setting, see the team's ipDetectionEnforcement.

  - `maxConsumption: optional number`

    The project's consumption (CU) cap for the period. Absent when uncapped.

  - `qualityGateAutoDetect: optional boolean`

    Whether Quality Gate auto-detection runs on generation for this project.

  - `settings: optional object { homepage }`

    Project settings. Returned on `GET` and `PUT /projects/{projectId}`,
    absent from the projects list.

    - `homepage: optional map[unknown]`

      Published homepage layout.

### Example

```http
curl https://api.cloud.scenario.com/v1/projects/$PROJECT_ID \
    -X PUT \
    -H 'Content-Type: application/json' \
    -u "$SCENARIO_SDK_API_KEY:SCENARIO_SDK_API_SECRET" \
    -d '{}'
```

#### Response

```json
{
  "project": {
    "id": "id",
    "createdAt": "createdAt",
    "keys": [
      {
        "id": "id",
        "apiKeyId": "apiKeyId",
        "apiKeyStatus": "active",
        "createdAt": "createdAt",
        "name": "name",
        "role": "role",
        "scope": "project",
        "updatedAt": "updatedAt",
        "authorId": "authorId",
        "consumption": 0,
        "lastUsedAt": "lastUsedAt",
        "maxConsumption": 0,
        "ownerId": "ownerId",
        "projects": [
          {
            "projectId": "projectId",
            "role": "role"
          }
        ]
      }
    ],
    "name": "name",
    "privacyMode": true,
    "teamId": "teamId",
    "updatedAt": "updatedAt",
    "users": [
      {
        "id": "id",
        "createdAt": "createdAt",
        "email": "email",
        "role": "role",
        "updatedAt": "updatedAt",
        "avatar": {
          "assetId": "assetId",
          "url": "url"
        },
        "consumption": 0,
        "maxConsumption": 0
      }
    ],
    "avatar": {
      "assetId": "assetId",
      "url": "url"
    },
    "consumption": 0,
    "description": "description",
    "descriptionDate": "descriptionDate",
    "disableIpDetection": true,
    "maxConsumption": 0,
    "qualityGateAutoDetect": true,
    "settings": {
      "homepage": {
        "foo": "bar"
      }
    }
  }
}
```
