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

# Create project

`POST /v1/projects`

Creates a project and provisions its initial consent instance.

## Request body

- CreateProjectRequest
  - `organizationId` string, required
  - `name` string, required — Project display name. The initial consent instance inherits it.
  - `region` string, required
  - `trustedOrigins` string[]
  - `consent` object — Optional consent instance configuration applied at creation, so no follow-up request is needed.
    - `branding` 'inth' | 'c15t' | 'none' — Consent banner branding. `none` requires a plan that includes remove-branding and otherwise fails with 402 before the project is created.

## Response `201`

Created project.

- object
  - `success` true, required
  - `data` Project, required
    - `projectId` string, required
    - `projectSlug` string, required
    - `projectName` string, required
    - `description` string, nullable, required
    - `organizationId` string, required
    - `organizationSlug` string, required
    - `dashboardURL` string, uri, required
    - `products` object, required
      - `consent` ConsentInstance, required
        - `instanceId` string, required
        - `instanceSlug` string, required
        - `instanceName` string, required
        - `trustedOrigins` string[], required
        - `branding` 'inth' | 'c15t' | 'none', required — Branding shown in the consent banner. Removing branding with 'none' requires an eligible paid plan.
        - `backendURL` string, uri, nullable, required
        - `dashboardURL` string, uri, required
        - `backendVersion` string, required

## Other responses

- `400` — Invalid payload, region, or trusted origin.
- `401` — Authentication is missing, invalid, or expired.
- `402` — The requested operation requires a paid plan. API access (organization API keys) requires the Starter plan or higher; a downgraded organization receives this error until its plan is restored.
- `403` — The authenticated principal cannot access the resource.
- `409` — The request conflicts with the current resource state.
- `413` — The request body exceeds the 1 MB limit.
- `429` — The rate limit was exceeded. API key limits are set by plan tier (Starter 600/min, Pro 1500/min, Enterprise 3000/min). Check the Retry-After header before retrying.
- `500` — An unexpected internal error occurred.

---

[API](https://skmtc.dev/inth/apis/inth-api.md) · [All operations](https://skmtc.dev/inth/apis/inth-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/inth/inth-api/revisions/97262bd49ddd/schema)
