---
source: CrewKit documentation
url: https://crewkit.io/docs/api-projects.md
title: "Projects API"
description: "Manage projects and repositories."
---


import { Callout } from 'fumadocs-ui/components/callout';

Projects are the organizational unit for sessions, resources, and analytics. Repositories link git repos to projects.

All endpoints are organization-scoped: `/:org_id/projects`.

---

## Projects

### List projects

```
GET /:org_id/projects
```

### Create project

```
POST /:org_id/projects
Content-Type: application/json

{
  "name": "Customer Portal",
  "slug": "customer-portal",
  "project_type": "repository"
}
```

**project_type values:** `repository` (single-repo, default) or `workspace` (multi-repo).

### Show project

```
GET /:org_id/projects/:id
```

Returns the project with linked repositories (for multi-repo projects).

### Update project

```
PATCH /:org_id/projects/:id
Content-Type: application/json

{
  "name": "Customer Portal v2"
}
```

### Delete project

```
DELETE /:org_id/projects/:id
```

### Check slug availability

```
GET /:org_id/projects/slug-available?slug=customer-portal
```

---

## Resolve project from git remote

```
POST /api/v1/projects/resolve
Content-Type: application/json

{
  "remote_url": "git@github.com:acme/backend.git"
}
```

Resolves a git remote URL to the matching project and organization. Used by the CLI during project detection.

---

## Repositories

### List repositories (nested under project)

```
GET /:org_id/projects/:project_id/repos
```

### Create repository

```
POST /:org_id/projects/:project_id/repos
Content-Type: application/json

{
  "remote_url": "git@github.com:acme/backend.git",
  "name": "backend"
}
```

### Show repository

```
GET /:org_id/repos/:id
```

### Delete repository

```
DELETE /:org_id/repos/:id
```

### Lookup by remote URL

```
GET /:org_id/repos/lookup?remote_url=git@github.com:acme/backend.git
```

Returns the repository if it exists in this organization, or `null` if not found. Used by the CLI during session creation.

<Callout>
The lookup endpoint returns an identical response structure whether the repo exists in another organization or doesn't exist at all. This prevents organization enumeration.
</Callout>

---

## Next steps

- [Organizations API](/docs/api-organizations)
- [Sessions API](/docs/api-sessions)
