---
title: "Update project"
method: PATCH
path: "/v1/projects/{project_id}"
tags: ["projects"]
---

# Update project

`PATCH /v1/projects/{project_id}`

**Plan:** `All plans`

Updates supported project fields such as visibility and display_name.

## Path parameters

- `project_id` string, required — Project ID

## Request body

- PublicV1PatchProjectBody
  - `description` string — Project description. Does not affect generated_description, which the agent maintains on its own.
  - `display_name` string — Project display name
  - `visibility` 'draft' | 'private' | 'public' | 'workspace_view' — Project visibility

## Response `200`

OK

- V1ProjectResponse
  - `created_at` string, date-time — When the project was created.
  - `description` string — Description supplied by the caller on create or update.
  - `display_name` string — Human-readable project name.
  - `folder_id` string — Folder the project belongs to, if any.
  - `generated_description` string — AI-written summary of what the project does. Absent until the agent has completed a response for the project.
  - `id` string, required — Project ID.
  - `is_published` boolean — Whether the project is published.
  - `last_edited_at` string, date-time — When the project was last edited.
  - `latest_commit_sha` string — SHA of the latest commit
  - `latest_screenshot_url` string — URL of the latest screenshot.
  - `name` string — Project slug.
  - `og_image_url` string — Open Graph image URL.
  - `preview_url` string — Static-preview URL for the project, on the workspace's branded host when it has one. Resolves once the first build completes. Opening it requires a Lovable login unless the project is publicly remixable; to frame it from a third-party origin without one, mint an origin-bound token via POST /v1/projects/{project_id}/embed-url.
  - `project_type` string — Project type. One of: project, library. Absent on older projects. More values may be added; clients must tolerate unknown values.
  - `publish_visibility` string — Published visibility. One of: public, private. More values may be added; clients must tolerate unknown values.
  - `status` string — Provisioning status of the project, not agent build progress. 'completed' means the project scaffold was created, and is set before the agent has finished the initial message, so the code at that point is often an empty starter page. To check whether the agent finished building, poll GET /v1/messages/{message_id}. One of: in_progress, completed, failed. More values may be added; clients must tolerate unknown values.
  - `tech_stack` string — Project tech stack.
  - `updated_at` string, date-time — When the project was last updated.
  - `url` string — Published project URL.
  - `user_id` string — Project owner user ID.
  - `visibility` string — Project visibility: draft, private, workspace_view, or public.
  - `workspace_id` string, required — Workspace the project belongs to.

## Other responses

- `401` — Missing or invalid API key.
- `402` — This operation or requested configuration requires a workspace plan that includes this feature.
- `403` — The key or caller lacks the required scope or permission.
- `406` — The Accept header excludes every media type this endpoint produces.
- `429` — Too many requests. Retry after the interval in Retry-After when present.
- `default` — Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

---

[API](https://skmtc.net/lovable/apis/lovable-api.md) · [All operations](https://skmtc.net/lovable/apis/lovable-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lovable/lovable-api/revisions/aa8d44585147/schema)
