> ## Documentation Index
> Fetch the complete documentation index at: https://docs.archetypeai.app/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Start with /introduction/getting-started. Use the Direct Query API (POST /api/lens/query) with the Newton Fusion model (text, image, and video reasoning) or the Newton Omega encoder (time-series embeddings). ATAI_API_ENDPOINT is the base URL https://platform.u1.archetypeai.app with no version path; every endpoint path begins with /api. Pages whose descriptions are marked (Archived) document the legacy Lens runtime — do not use them for new projects.

# Create Project

> Create an empty project to group blueprints and everything derived from them

Requires [version 2.0.0](https://docs.archetypeai.app/release-notes/2.0.x.md#v2-0-0) or later of the Archetype platform.

## Overview

This endpoint creates a project. The project starts empty and is visible to its creator and to the
organization's admins. A project created with a service-account API key is visible to every
service-account key of the organization instead of a single user.

Put blueprints in the project by registering them with `project_id` in [Create
Blueprint](https://docs.archetypeai.app/api-reference/agents/blueprints/create-blueprint.md), or by copying them into the
project with [Copy Blueprint](https://docs.archetypeai.app/api-reference/agents/blueprints/copy-blueprint.md). See [About the
Projects API](https://docs.archetypeai.app/api-reference/projects/about) for what a project holds.

## Request

**name** `string` *required*

Display name, at most 128 characters once leading and trailing whitespace is dropped. Must not be
blank, and must differ, ignoring case, from the names of the other projects you created.

**description** `string`

Description, at most 512 characters. Defaults to an empty string.

## Response

Returns `201 Created` with the project.

**id** `string` *required*

The project's `prj_` ID.

**name** `string` *required*

Display name, as specified.

**description** `string` *required*

Description; empty when none was given.

**created\_by** `string` *required*

Who created the project: a user's `usr_` id, or the `key_` id of the service-account API key it
was created with. Never changes.

**created\_at** `string` *required*

When the project was created (date-time).

**updated\_at** `string` *required*

When the project's name or description last changed (date-time); its creation time until then.

```bash cURL theme={"system"}
curl -X POST "$ATAI_API_URL/api/projects" \
  -H "Authorization: Bearer $ATAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Line 3 pump monitoring",
    "description": "Rare-event detection for the line 3 pumps."
  }'
```

```python Python theme={"system"}
import os
import requests

base_url = os.environ["ATAI_API_URL"]
api_key = os.environ["ATAI_API_KEY"]

response = requests.post(
    f"{base_url}/api/projects",
    headers={"Authorization": f"Bearer {api_key}"},
    json={
        "name": "Line 3 pump monitoring",
        "description": "Rare-event detection for the line 3 pumps.",
    },
)

if response.status_code == 201:
    project = response.json()
    print(f"Created {project['name']} ({project['id']})")
else:
    print(f"Error: {response.json()['errors']}")
```

```javascript JavaScript theme={"system"}
const response = await fetch(`${process.env.ATAI_API_URL}/api/projects`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.ATAI_API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'Line 3 pump monitoring',
    description: 'Rare-event detection for the line 3 pumps.'
  })
});

const body = await response.json();

if (response.status === 201) {
  console.log(`Created ${body.name} (${body.id})`);
} else {
  console.error('Error:', body.errors);
}
```

```json 201 - Project created theme={"system"}
{
  "id": "prj_01jcd4m8t2vq6xn3r7k5hbzw9e",
  "name": "Line 3 pump monitoring",
  "description": "Rare-event detection for the line 3 pumps.",
  "created_by": "usr_01jc7x2n5k8vq3m6t9r4hdzb1s",
  "created_at": "2026-10-28T09:12:44Z",
  "updated_at": "2026-10-28T09:12:44Z"
}
```

```json 400 - Invalid name or description theme={"system"}
{
  "errors": [
    {
      "code": "<error_code>",
      "message": "Invalid name or description.",
      "suggestion": null,
      "error_uid": "err-xxxxxxxx"
    }
  ]
}
```

```json 403 - The caller is read-only theme={"system"}
{
  "errors": [
    {
      "code": "<error_code>",
      "message": "The caller is read-only.",
      "suggestion": null,
      "error_uid": "err-xxxxxxxx"
    }
  ]
}
```

```json 409 - A project of that name already exists theme={"system"}
{
  "errors": [
    {
      "code": "<error_code>",
      "message": "A project of that name already exists.",
      "suggestion": null,
      "error_uid": "err-xxxxxxxx"
    }
  ]
}
```

## Important Notes

> [!NOTE]
>
> * `400` means `name` is blank or too long, or `description` is too long.
> * `403` means the caller has the read-only `viewer` role.
> * `409` means you already created a project of that name, ignoring case. Names are unique per
>   creator, so two users can each have a project with the same name. Service-account API keys share
>   one set of names.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.