Create Project
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.
Request
- Base URL: https://api.speechify.ai
- URL: https://api.speechify.ai/v1/projects
- Auth: HTTP bearer
Headers
Request body
Project name; unique per workspace (case-insensitive), surrounding whitespace is trimmed.
Response
The created project.
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.
When this project was purged, present only on the rows returned by include_purged=true. A purged project is kept for 30 days from this stamp and permanently deleted after that, so the restore deadline is this value plus the window; it is absent on every project that still exists. Restore it with POST /v1/projects/{project_id}/restore.
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.
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 work by a resource in a project counts against that project. The implicit Default project cannot carry a limit, since it has no project record, so spend there is bounded by the workspace's monthly_budget instead.
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.
Where monthly_spend stands against monthly_budget, present only when both are: warning from 80% of the budget, reached once the spend has reached it and new billable work attributed to the project is refused with 402 project_spend_limit_exceeded, ok below 80%. These are the thresholds the project.spend_budget.warning and project.spend_budget.reached webhook events fire at, so polling this field and subscribing to the events give the same answer.
monthly_budget minus monthly_spend in US dollars, present only when both are. Negative once the spend has passed the budget, by the amount it overshot: enforcement trails billed usage by a couple of minutes, so work already under way can carry a project past its budget.
Workspace-scoped project identifier (prefixed external id).
Human-readable label, unique per workspace (case-insensitive).
How many resources this project holds. Records of work that happened are not counted, and never hold a project open.
It is the count the unqualified delete refuses on, so a project reading 0 is one DELETE /v1/projects/{project_id} accepts with no body. That is what makes an application's own cleanup a single list call rather than a read per project.
Changes
No recorded changes to this operation across all 1 revision of this API.