Skip to main content
POST https://api.craftkit.dev/v1/projects
Create a new project owned by the authenticated account. Use this to provision a project programmatically instead of clicking through the dashboard — for example, one project per customer org in a multi-tenant integration.
This endpoint authenticates with an account key (ck_acct_…), not a project key (ck_live_…). A project key is rejected with 401. See Authentication and Account-key auth for how the two credential types differ.

Authorization

Authorization
string
required
Bearer ck_acct_… — the project is created under this account.

Body

name
string
required
Display name (1–120 chars).

Response

201:
id
string
UUID of the new project.
slug
string
Derived from name (kebab-case). On collision with a slug already used by this account — including a soft-deleted project’s slug — a numeric suffix (-1, -2, …) is appended until it is unique.
name
string
Echoed back.

Errors

StatuscodeMeaning
400invalid_jsonBody is not valid JSON.
401unauthorizedMissing, invalid, or wrong-type (ck_live_…) bearer token.
422invalid_requestname missing, empty, or over 120 chars (issues included).
cURL
curl -X POST https://api.craftkit.dev/v1/projects \
  -H "Authorization: Bearer $CRAFTKIT_ACCOUNT_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Acme Corp" }'
201
{
  "id": "3f9b6c2e-1a2b-4c3d-9e8f-7a6b5c4d3e2f",
  "slug": "acme-corp",
  "name": "Acme Corp"
}
Right after creating a project you almost always want a project key for it — see Mint a project API key.