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

# Create or Update Project

> Create a new project or update an existing one

If `id` is provided, updates the existing project. Otherwise creates a new project.

## Authentication

<ParamField header="Authorization" type="string">
  Bearer token. `Bearer <supabase-jwt>`.
</ParamField>

## Body

<ParamField body="id" type="string">
  Project ID to update. Omit to create a new project.
</ParamField>

<ParamField body="name" type="string" required>
  Display name for the project.
</ParamField>

<ParamField body="type" type="string" required>
  Project type, e.g. `"slideshow"`.
</ParamField>

<ParamField body="data" type="object" required>
  The full project data (slides, texts, images, etc.). Schema is type-dependent.
</ParamField>

<ParamField body="thumbnail_url" type="string">
  URL for the project thumbnail.
</ParamField>

<ParamField body="status" type="string" default="draft">
  Project status. Defaults to `"draft"`.
</ParamField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "uuid-1234",
    "team_id": "team-uuid",
    "name": "Morning Routine Carousel",
    "type": "slideshow",
    "data": { },
    "thumbnail_url": "https://cdn.supapost.so/assets/team/thumb.jpg",
    "status": "draft",
    "created_by": "user-uuid",
    "created_at": "2026-04-01T12:00:00Z",
    "updated_at": "2026-04-08T10:00:00Z"
  }
  ```
</ResponseExample>
