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

# Create a project

`POST /api/users/me/projects`

## Request

- Base URL: `https://api.sendly.now`
- URL: `https://api.sendly.now/api/users/me/projects`
- Auth: one of:
  - API key in cookie `better-auth.session_token`
  - OAuth 2 (authorization code, authorization URL `https://app.sendly.now/api/auth/oauth2/authorize`, token URL `https://app.sendly.now/api/auth/oauth2/token`, scopes: `projects:write`)

Create a new project owned by the authenticated user. Answers the raw project row directly — no `{ success, data }` envelope — with status 201.

Preconditions the route enforces before writing: the caller's email must be verified, the caller must be under their cap on active (non-disabled) owned projects, and the call is rate-limited per user.

Requires the `projects:write` scope — Create new projects on your account.

## Request body

- object
  - `name` string, required
  - `sesRegion` 'us-east-1' | 'us-west-2' | 'eu-west-1': AWS SES region for the project. Once a domain is added the region is locked and cannot be changed.

## Response `201`

Project created

- ProjectRecord
  - `billingLimitCampaigns` integer, nullable, required
  - `billingLimitInbound` integer, nullable, required
  - `billingLimitTransactional` integer, nullable, required
  - `billingLimitWorkflows` integer, nullable, required
  - `createdAt` string, date-time, required: ISO 8601 datetime string
  - `disabled` boolean, required
  - `disabledReason` string, nullable, required
  - `id` string, uuid, required
  - `language` string, required: ISO 639-1 code for customer-facing content.
  - `name` string, required
  - `organizationId` string, nullable, required
  - `sandboxHandle` string, nullable, required: Local-part of the sandbox quick-start sender; null until first derived.
  - `sesRegion` string, nullable, required
  - `stripeCustomerId` string, nullable, required
  - `stripeSubscriptionId` string, nullable, required
  - `tracking` 'ENABLED' | 'DISABLED' | 'MARKETING_ONLY', required
  - `updatedAt` string, date-time, required: ISO 8601 datetime string

## Other responses

- `400`: Validation error
- `401`: Unauthorized — missing or invalid auth
- `403`: Forbidden — insufficient permissions or project disabled
- `422`: Validation failed — request body or query parameters did not match the schema
- `429`: Rate limit or billing limit exceeded
- `500`: Internal server error

---

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