# Create a project

`POST /v1/projects`

Required OAuth scopes: `projects:write`

## Parameters

- `Idempotency-Key` (header, string): Optional unique key. When supplied, retries with the same key and body replay the original response for 24 hours.

## Request body

- `name` (string, required)
- `description` (string)
- `visibility` ("private" | "team")
- `memoryScope` ("project" | "workspace")

```json
{
  "description": "Reduce mass while preserving the mounting envelope.",
  "name": "Gearbox redesign",
  "visibility": "private"
}
```

## Responses

- `201`
  - `project` (object, required)
    - `id` (string, required)
    - `name` (string, required)
    - `description` (string | null, required)
    - `visibility` ("private" | "team", required)
    - `memoryScope` ("project" | "workspace", required)
    - `taskCount` (number, required)
    - `createdAt` (string, required)
    - `updatedAt` (string, required)
- `400`: Invalid request
- `401`: Missing or invalid Bearer credential
- `402`: Payment or subscription required
- `403`: Credential is missing a required scope
- `404`: Resource not found
- `409`: Request conflict
- `429`: Rate limit exceeded
- `500`: Internal API error
