---
title: "Create a project (with duplicate guard on tracker_team)"
method: POST
path: "/projects"
tags: ["projects"]
---

# Create a project (with duplicate guard on tracker_team)

`POST /projects`

## Request

- Base URL: `https://api.letsship.ai/v1`
- URL: `https://api.letsship.ai/v1/projects`
- Auth: none declared

## Request body

- CreateProjectRequest
  - `name` string, required
  - `tracker` 'linear' | 'github-issues' | 'none'
  - `linearTeamKey` string
  - `repoFullName` string, required
  - `issueCode` string

## Response `200`

Created

- Project
  - `id` string, required
  - `orgId` string, required
  - `slug` string, required
  - `name` string, required
  - `status` 'active' | 'paused' | 'archived', required
  - `tracker` 'linear' | 'github-issues' | 'none', required
  - `trackerConnectorId` string, nullable, required
  - `trackerTeamId` string, nullable, required
  - `trackerProjectId` string, nullable, required
  - `scmConnectorId` string, required
  - `scmOwner` string, required
  - `scmRepo` string, required
  - `llmConnectorId` string, required
  - `autoMerge` boolean, required
  - `issueCode` string, nullable, required
  - `defaultSandboxTemplateId` string, nullable, required
  - `createdAt` integer, required
  - `missingConnectorKinds` string[]

## Other responses

- `400`: Invalid or taken issue code, or no connected GitHub account can reach the repository (code repo_unreachable)
- `402`: Free project limit reached
- `403`: Role insufficient
- `404`: Org not visible
- `409`: Duplicate
- `502`: GitHub did not answer the repository access check (code github_unavailable, retryable)

---

[API](https://skmtc.dev/letsship/apis/ship-api.md) · [All operations](https://skmtc.dev/letsship/apis/ship-api/llms.txt) · [OpenAPI document](https://skmtc.dev/letsship/apis/ship-api/revisions/e6eac1bcadd4?raw)
