---
title: "Create a project"
method: POST
path: "/api/v2/projects"
tags: ["Projects"]
---

# Create a project

`POST /api/v2/projects`

## Request

- Base URL: `https://davinci-app.com`
- URL: `https://davinci-app.com/api/v2/projects`
- Auth: HTTP bearer

Creates a project owned by the caller, or by `orgId` when supplied. Either
`name` or `initialPrompt` is required. When `autoName` is set with an
`initialPrompt`, the name is derived from the prompt.

Send an `Idempotency-Key` header to make a retry safe. Creating a project
writes a repository and an initial commit, and a duplicate is not reclaimed,
so a request that times out after the server completed it would otherwise
leave you choosing between a leaked project and a lost one. A repeat of the
same key returns the project the first call created, with the same `201`.

## Headers

- `Idempotency-Key` string

## Request body

- CreateProjectRequest
  - `name` string: Required unless initialPrompt is supplied.
  - `initialPrompt` string: Staged as the creator's first agent message when a client connects.
  - `description` string
  - `orgId` string, nullable: Create the project under an organization instead of the calling user.
  - `visibility` 'private' | 'internal' | 'public'
  - `autoName` boolean: Derive the project name from initialPrompt.
  - `skipInitialCommit` boolean

## Response `201`

Project created.

- CreateProjectResponse
  - `id` string, required
  - `projectSlug` string, nullable
  - `ownerSlug` string, nullable

## Other responses

- `400`: Malformed request parameters or body. Agile requests may return `INVALID_PAGINATION` or `INVALID_IDEMPOTENCY_KEY`.
- `401`: No credential was supplied, or the supplied credential is malformed, expired, or revoked. A credential that is present but unusable is never downgraded to an anonymous request.
- `403`: Scope missing, project limit reached (`PROJECT_LIMIT_REACHED`), or no permission to create in the requested organization.
- `404`: The resource does not exist in the parent named by the path, or is hidden from the caller. Absence and privacy denial are deliberately indistinguishable so project, organization, and private-team existence cannot be probed.
- `409`: The Idempotency-Key is currently initializing a project, was reused with different create settings, or points to a result that is no longer available. Error code is `PROJECT_CREATE_IN_PROGRESS`, `IDEMPOTENCY_KEY_REUSED`, or `IDEMPOTENCY_RESULT_UNAVAILABLE`.
- `429`: Request rate exceeded, either globally or for this key.
- `500`: Unexpected server error.

## Changes

- **2026-09-15** (v2) `13704a1fbd9a`: 1 warning
  - removed the optional property `projectList` from the response with the `201` status
- **2026-09-15** (v2) `67c8b8616dbb`: 7 info
  - the `success` response property const value `false` was added for the status `400`
  - the `success` response property const value `false` was added for the status `401`
  - the `success` response property const value `false` was added for the status `403`
  - the `success` response property const value `false` was added for the status `404`
  - …3 more
- **2026-09-15** (v2) `48948af37797`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/celedon-solutions/apis/davinci-public-api/changes/api/v2/projects/post.md)

---

[API](https://skmtc.dev/celedon-solutions/apis/davinci-public-api.md) - [All operations](https://skmtc.dev/celedon-solutions/apis/davinci-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/celedon-solutions/apis/davinci-public-api/revisions/279218ca2e8d?raw)
