Create Project

Beta

Create a project in the caller’s workspace. Names are unique per workspace (case-insensitive). A workspace holds at most 100 live projects; at the cap the create refuses with 409 project_limit_reached until one is deleted.

Authentication

AuthorizationBearer

Enter your API key with the Bearer prefix, e.g. ‘Bearer sk_…’.

Headers

Speechify-VersionstringOptional

Request

This endpoint expects an object.
namestringRequired<=120 characters

Project name; unique per workspace (case-insensitive), surrounding whitespace is trimmed.

Response headers

Speechify-Request-IdstringOptional
Unique identifier for this request, present on every response (2xx and non-2xx alike). If the caller sends a `Speechify-Request-Id` request header the server echoes it back (sanitized and length-capped) so one logical request can be traced end-to-end; otherwise the server generates a fresh value. Log it on every response and quote it in support requests - it is the stable handle that ties your observation to Speechify's server-side logs, and it matches the `request_id` field in the error envelope. The legacy alias `X-Request-ID` carries the same value and is still accepted on requests, until 2027-07-24. Prefer the un-prefixed name (RFC 6648).

Response

The created project.
idstringformat: "^proj_[0-9a-hjkmnp-tv-z]{26}$"

Workspace-scoped project identifier (prefixed external id).

namestring

Human-readable label, unique per workspace (case-insensitive).

created_atdatetime
updated_atdatetime
archived_atdatetime or nullOptional

When the project was archived; null while it is live. While set, nothing new starts or bills inside the project and every such attempt answers 409 project_archived.

Absent rather than null while a console runs ahead of an API that predates archiving, which is why it is not required: read absent and null alike.

max_concurrent_callsintegerOptional>=1

The most voice-agent calls this project may have active at once, present only when set. Checked after the workspace’s own active-call cap on every call start (web session, outbound call, batch dial, inbound SIP), keyed on the project the call’s agent lives in: a call over the ceiling is refused with the same 429 concurrency_limit_reached the workspace cap answers (an inbound caller hears the busy message), while sibling projects keep their headroom. Never higher than the workspace’s cap: a project can narrow the workspace’s capacity, not raise it.

max_requests_per_minuteintegerOptional>=1

The most API requests per minute credentials pinned to this project may make across every surface, present only when set. Checked after the workspace’s own request-rate limit, in one bucket per project: a request over the ceiling is refused with the same 429 rate_limited the workspace limit answers, while other projects and unpinned credentials are untouched. Never higher than the workspace’s widest per-surface rate over a minute: a project can narrow the workspace’s capacity, not raise it. Console sessions and unpinned keys carry no project and are never subject to it.

monthly_budgetdoubleOptional<=1000000000

The project’s monthly spend limit in US dollars, present only when one is set. New billable work attributed to this project is refused with the coded 402 project_spend_limit_exceeded once monthly_spend reaches it; the limit resets at the calendar-month boundary (UTC).

Spend is attributed the same way it is billed: work from a project-pinned API key counts against that key’s project, and a voice-agent conversation counts against its agent’s project. The implicit Default project cannot carry a limit — it has no project record — so spend there is bounded by the workspace’s monthly_budget instead.

monthly_spenddoubleOptional>=0

The project’s billed month-to-date spend in US dollars, present whenever the billing plane answered - regardless of whether a spend limit is set.

Errors

400
Bad Request Error
401
Unauthorized Error
409
Conflict Error