---
title: "Upsert Project"
method: PUT
path: "/api/v1/projects/{project_id}"
tags: ["Projects"]
---

# Upsert Project

`PUT /api/v1/projects/{project_id}`

Create or update a project with a specific ID (upsert).

Returns 201 for creation, 200 for update. Returns 404 if owned by another user (avoids
leaking existence). A name collision fails loud as 409 on both the create and update paths
(unlike POST, which auto-renames).

``workspace_id`` is out of scope: ``FolderCreate`` cannot express it, so a synced project
inherits ``NULL`` exactly like one created via POST. Workspace assignment is not part of the
upsert contract.

## Path parameters

- `project_id` string, uuid, required

## Request body

- FolderCreate
  - `auth_settings` object, nullable — Authentication settings for the folder/project
  - `components_list` string[], nullable
  - `description` string, nullable
  - `flows_list` string[], nullable
  - `name` string, required

## Response `200`

Successful Response

- FolderRead
  - `auth_settings` object, nullable — Authentication settings for the folder/project
  - `description` string, nullable
  - `id` string, uuid, required
  - `name` string, required
  - `parent_id` string, uuid, nullable, required

## Other responses

- `201` — Project created.
- `422` — Validation Error

## Changes

- **2026-09-01** `088c1fc24528` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/langflow-ai/apis/langflow/changes/api/v1/projects/:project_id/put.md)

---

[API](https://skmtc.dev/langflow-ai/apis/langflow.md) · [All operations](https://skmtc.dev/langflow-ai/apis/langflow/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/langflow-ai/langflow/revisions/088c1fc24528/schema)
