---
title: "Provision a new project"
method: POST
path: "/projects/v1"
tags: ["Projects"]
---

# Provision a new project

`POST /projects/v1`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/projects/v1`
- Auth: API key in header `SIGN-IN-WITH-X`

Creates a new database project. Requires wallet auth (EIP-4361 signature). Free within your active tier. The wallet must have an active tier.

## Headers

- `SIGN-IN-WITH-X` string, required

## Request body

- object
  - `name` string: Optional project name
  - `org_id` string, uuid: Optional owning org. Caller must hold developer+ membership. Omit for the wallet's own org.

## Response `201`

Project created

- ProjectCreated
  - `project_id` string: Run402 project ID. Public IDs are not UUIDs.
  - `org_id` string, uuid: Owning org for the created project. Use this for member management and org-scoped follow-up calls.
  - `anon_key` string: JWT for client-side access (apikey header)
  - `service_key` string: JWT for admin access (Authorization: Bearer)
  - `schema_slot` string
  - `tier` 'prototype' | 'hobby' | 'team'
  - `lease_expires_at` string, date-time

## Other responses

- `401`: Missing or invalid authentication. Run402-originated JSON bodies use the canonical ErrorEnvelope.

---

[API](https://skmtc.dev/run402/apis/run402-api.md) · [All operations](https://skmtc.dev/run402/apis/run402-api/llms.txt) · [OpenAPI document](https://skmtc.dev/run402/apis/run402-api/revisions/893607557f50?raw)
