Skip to content
POST
/v1/organizations/{organizationId}/projects

Create a Project in an Organization

Create a Project and optionally create its test, live, or both Environments in the same transaction. An Idempotency-Key makes an identical request safe to retry; reusing it with different input returns Conflict.

Authentication

Send an API key as a Bearer token in the Authorization header.

Parameters

NameLocationRequiredDescription
organizationIdpathYes
The Organization to address.
stringA Cantora Organization identifier, prefixed with `org_`.
  • maximum length 64
  • pattern ^org_[\s\S]+$
idempotency-keyheaderNo
The caller-chosen key that makes supported creation and issuance requests safe to retry; use 1–200 visible ASCII characters.

Request body

Required.

application/json
object
  • unknown properties allowed false
namerequired
stringThe Project name shown to its operators.
  • maximum length 200
  • minimum length 1
environments
arrayThe unique test, live, or both Environments to create with the Project.
  • at most items 2
  • unique items true
Create a Project with its Test Environment
{
  "name": "Customer support",
  "environments": [
    "test"
  ]
}

Responses

201ProjectCreated
application/json
Project created
{
  "projectId": "proj_00000000000000000000000000000001",
  "organizationId": "org_00000000000000000000000000000002",
  "name": "Customer support",
  "createdAt": "2026-01-15T18:30:00.000Z"
}
400The request path, headers, query, or JSON body did not satisfy the published schema
401Unauthorized
application/json
403Forbidden
application/json
404NotFound
application/json
409Conflict
application/json

Reusable schemas

IdempotencyKey

stringA caller-chosen key of 1–200 visible ASCII characters that makes an identical request safe to retry.
  • maximum length 200
  • minimum length 1
  • pattern ^[!-~]+$

ProjectCreatedEncoded

object
  • unknown properties allowed false
projectIdrequired
stringThe Project identifier.
  • maximum length 64
  • pattern ^proj_[\s\S]+$
organizationIdrequired
stringThe Organization identifier.
  • maximum length 64
  • pattern ^org_[\s\S]+$
namerequired
stringThe human-readable resource name.
createdAtrequired
stringWhen the resource was created, in UTC.
  • format date-time

UnauthorizedEncoded

object
  • unknown properties allowed false
_tagrequired
stringThe stable machine-readable error type.
  • allowed values "Unauthorized"
reasonrequired
stringA safe explanation of why the credential was rejected.

ForbiddenEncoded

object
  • unknown properties allowed false
_tagrequired
stringThe stable machine-readable error type.
  • allowed values "Forbidden"
permissionrequired
stringThe permission required by the refused operation.

NotFoundEncoded

object
  • unknown properties allowed false
_tagrequired
stringThe stable machine-readable error type.
  • allowed values "NotFound"
resourcerequired
stringThe resource type relevant to the error.
idrequired
stringThe identifier supplied for the resource that was not found.

ConflictEncoded

object
  • unknown properties allowed false
_tagrequired
stringThe stable machine-readable error type.
  • allowed values "Conflict"
resourcerequired
stringThe resource type relevant to the error.
reasonrequired
stringA safe explanation of the state conflict.

EnvironmentName

string
  • allowed values "test", "live"