projects

Update Project

Edit a project in place - its name, its monthly spend limit, or its capacity ceilings - keeping the same id so every grouped resource follows the edit with no re-pointing. Names are unique per workspace (case-insensitive). The limit fields require billing.manage; a capacity ceiling above the workspace's own is refused, since it could never apply.

patch/v1/projects/{project_id}

Request

  • Base URL: https://api.speechify.ai
  • URL: https://api.speechify.ai/v1/projects/{project_id}
  • Auth: HTTP bearer

Path parameters

project_idstring required

Project id (prefixed external id, proj_...).

Headers

Speechify-Versionstring

Request body

max_requests_per_minuteinteger nullable

Sets the project's request-rate ceiling in requests per minute; null removes it. Must be a positive integer at or below the workspace's widest per-surface request rate over a minute, otherwise the request is refused with 400 validation_failed naming the field and the ceiling. Requires the billing.manage permission. Takes effect on the next request from a credential pinned to the project.

namestring

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

monthly_budgetnumber double

Edits the project's MONTHLY spend limit in US dollars: omit to leave it unchanged, send a positive value to set or change it, or an explicit 0 to remove it. Amounts are whole cents written as a plain decimal; a finer value, or exponent notation, is refused rather than rounded. Requires the billing.manage permission (owners/admins), like the workspace budget — a spend ceiling is a billing control, not a grouping edit. Once the project's billed spend within the current calendar month (UTC) reaches the limit, new billable work attributed to that project is refused with the coded 402 project_spend_limit_exceeded until the month resets or the limit is raised.

Response

The updated project.

archived_atstring date-time nullable

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.

purged_atstring date-time

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.

max_requests_per_minuteinteger

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_budgetnumber double

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.

monthly_spendnumber double

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.

monthly_budget_status'ok' | 'warning' | 'reached'

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_remainingnumber double

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.

idstring required

Workspace-scoped project identifier (prefixed external id).

namestring required

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

resource_countinteger required

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.

created_atstring date-time required
updated_atstring date-time required

Changes

No recorded changes to this operation across all 1 revision of this API.