---
title: "Create a project"
method: POST
path: "/projects"
tags: ["Projects"]
---

# Create a project

`POST /projects`

## Request

- Base URL: `https://api.grapesjs.com/v1`
- URL: `https://api.grapesjs.com/v1/projects`
- Auth: HTTP bearer

Creates a new project.

If `projectData` is not provided, an empty project is created based on the provided `type`.

## Request body

- CreateProjectRequest
  - `name` string: Project name.
  - `description` string, nullable: Short project description.
  - `type` 'web' | 'email', required
  - `isTemplate` boolean: Whether the project should be treated as a template.
  - `projectData` ProjectData: JSON payload produced by the editor that contains the full project structure and content.

## Response `201`

Project created successfully

- ProjectResponse
  - `project` ProjectSummary, required
    - `id` string, required: Project ID.
    - `name` string, required: Project name.
    - `description` string, nullable, required: Short project description.
    - `type` 'web' | 'email', required
    - `isTemplate` boolean, required: Whether the project is marked as a template.
    - `createdAt` string, date-time, required: Project creation date and time.
    - `updatedAt` string, date-time, required: Last project update date and time.
    - `previewUrl` string, nullable: URL of the project preview image.
    - `publishedUrl` string, nullable: Published project URL. `null` means the project is not published.
    - `lastPublishedAt` string, date-time, nullable, required: Last publish date and time.
  - `projectData` ProjectData: JSON payload produced by the editor that contains the full project structure and content.

## Other responses

- `400`: Invalid request
- `401`: Unauthorized
- `500`: Server error

---

[API](https://skmtc.dev/grapesjs/apis/studio-platform-api.md) - [All operations](https://skmtc.dev/grapesjs/apis/studio-platform-api/llms.txt) - [OpenAPI document](https://skmtc.dev/grapesjs/apis/studio-platform-api/revisions/acc4ffe35e2d?raw)
