---
title: "Create Project"
method: POST
path: "/projects"
tags: ["projects"]
---

# Create Project

`POST /projects`

Create a new project for the authenticated user.

Delegates to ``ProjectService`` for business logic, example generation,
activity recording, and failure analytics.

Args:
    request: Validated project creation payload.
    auth: Authentication result.

Returns:
    ProjectResponse for the newly created project.

Raises:
    HTTPException: 409 on duplicate name, 500 on unexpected errors.

## Request body

- ProjectCreate — Request model for creating a project.
  - `name` string, required — Name for the project
  - `icon` string — Icon identifier for the project
  - `repo` string, nullable — Optional repository reference or URL
  - `description` string, nullable — Optional project description
  - `active_model_id` string, nullable — Active model ID for inference
  - `selected_model_id` string, nullable — [Deprecated] Use active_model_id instead.
  - `tag` string, nullable — Short kebab-case label set by clustering agent
  - `observations` string, nullable — Free-text agent notes about patterns observed
  - `example` object, nullable — Generated API example for the project
  - `team_id` string, nullable — Team ID to assign this project to. Defaults to the user's personal team when omitted.
  - `visibility` 'private' | 'team' — Who can see this project: private (creator only) or team (all team members).
  - `adaptive_cadence` 'off' | 'daily' | 'weekly' | 'monthly' — User-facing cadence preset for autonomous adaptive finetuning runs.
  - `router_type` string, nullable — When set, makes this project a router that selects a model per request. Must be a registered router id.
  - `routing_params` object, nullable — Router policy configuration; validated against the router_type schema.

## Response `200`

Successful Response

- ProjectResponse — Response model for a single project.
  - `id` string, required
  - `user_id` string, required
  - `name` string, required
  - `icon` string
  - `repo` string, nullable
  - `description` string, nullable
  - `active_model_id` string, nullable
  - `tag` string, nullable
  - `observations` string, nullable
  - `example` object, nullable
  - `team_id` string, required
  - `visibility` string
  - `adaptive_cadence` 'off' | 'daily' | 'weekly' | 'monthly' — User-facing cadence preset for autonomous adaptive finetuning runs.
  - `autonomy_enabled` boolean
  - `router_type` string, nullable
  - `routing_params` object
  - `created_at` string, required
  - `updated_at` string, required
  - `selected_model_id` string, nullable, required — Deprecated alias for active_model_id -- kept for backward compat.

## Other responses

- `422` — Validation Error

---

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