Skip to navigation

Restore Project

Walk back a purge. A purged project is recoverable for 30 days: its row and its contents are kept, hidden from every list and read, and permanently deleted only once the window expires.

What comes back: the project and exactly the resources the purge removed. A resource you had deleted yourself before the purge stays deleted.

What does NOT come back, on purpose: every credential the purge revoked stays revoked, and every grant it cleared stays cleared. API keys and service accounts pinned to the project are not re-issued, vault credentials and webhook endpoints scoped to it are not undeleted, and member grants and pending-invite scopes are not restored. Bringing a credential or a grant back would re-grant access somebody deliberately ended, so the restore reports them under still_revoked instead. Re-create the credentials and re-grant the members the project still needs.

The project returns ARCHIVED, the state it was purged from, so nothing dispatches or bills inside it until you unarchive it.

Refused with 409 project_not_purged when the project was never purged, 409 project_restore_window_expired once the 30 days have passed, and 409 project_name_taken when another project has taken this one’s name since the purge (a purge frees the name immediately

  • rename the project holding it, then restore).

Authentication

AuthorizationBearer

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

Path parameters

project_idstringRequiredformat: "^proj_[0-9a-hjkmnp-tv-z]{26}$"

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

Headers

Speechify-VersionstringOptional

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 project is restored, archived, and holds its resources again.
idstringOptionalformat: "^proj_[0-9a-hjkmnp-tv-z]{26}$"
namestringOptional
purged_atdatetimeOptional
When the purge this call walked back happened.
archived_atdatetime or nullOptional

When the project was archived. Always set on a restore: a project comes back suspended, never live.

still_revokedobjectOptional

What the restore deliberately left revoked: the credentials the purge killed. Every field is a real count, including zero.

not_restored_notestringOptional

A plain-language statement of what a restore does not bring back. Constant text, meant to be shown to a person; branch on still_revoked rather than parsing it.

Errors

401
Unauthorized Error
403
Forbidden Error
404
Not Found Error
409
Conflict Error
429
Too Many Requests Error
500
Internal Server Error