Skip to main content
POST /api/v1/projects Requires projects.write permission. The slug is automatically generated from the provided name.

Request body

name
string
required
Display name for the project. Example: My Project.
description
string | null
Optional description for the project. Pass null to leave it unset.

Response

project
object
required
The newly created project.

Errors

StatusWhen
400Request body is invalid or missing required fields
401Missing or invalid Bearer token
403Caller lacks projects.write permission
409A project with the generated slug already exists

Example

curl -X POST http://localhost:8080/api/v1/projects \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"name": "My Project", "description": "Main product feature flags"}'
{
  "project": {
    "id": "p1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "organization_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "slug": "my-project",
    "name": "My Project",
    "description": "Main product feature flags",
    "created_at": "2026-03-21T10:00:00Z",
    "updated_at": "2026-03-21T10:00:00Z"
  }
}

Build docs developers (and LLMs) love