---
title: "Restore a workspace"
description: "Reopen a closed workspace within 30 days. `POST /api/v1/organizations/{id}/workspaces/{workspace_id}/restore`"
url: https://www.unitpost.com/docs/platform/post-organizations-id-workspaces-workspace-id-restore
section: "Platform API reference"
updated: 2026-11-02
---
# Restore a workspace

`POST /api/v1/organizations/{id}/workspaces/{workspace_id}/restore`

Reopen a closed workspace within 30 days. Its old keys stay revoked: mint new ones. Takes an organization key (`ok_live_…`) with `organizations:write`.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | The organization's id (`org_…`), from `GET /whoami` or Organization → API. |
| `workspace_id` | path | string | yes | The workspace's id (`ws_…`). |

## Response fields (200)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | enum | yes | One of: `workspace`. |
| `id` | string | yes | `ws_…` |
| `name` | string | yes | — |
| `slug` | string | yes | — |
| `external_id` | string | yes | Your own id for it, unique in the organization. |
| `plan` | string | yes | `free`, or the paid plan's key. |
| `paid_by` | enum | yes | One of: `workspace`, `organization`. |
| `requires_paid_plan` | boolean | yes | No free allowance: the Owner already has a free workspace, so it sends once a plan is bought. |
| `closed_at` | string | yes | — |
| `restorable_until` | string | yes | — |
| `created_at` | string | yes | — |
| `hosted_invoice_url` | string | no | On create only: the card asked for authentication; paying here starts the plan. |

## Responses

| Status | Description |
| --- | --- |
| 200 | The workspace. |
| 401 | Missing or invalid organization key (a workspace key is refused). |
| 403 | API access not approved for the organization, the key lacks the capability, or no User-Agent. |
| 404 | Not this key's organization, or not one of its workspaces. |
| 409 | Not closed, or closed more than 30 days ago. |
| 429 | The organization's rate limit. |

## Example request

```bash
# API: no generated example for POST https://www.unitpost.com/api/v1/organizations/:id/workspaces/:workspace_id/restore
```

## Example response (200)

```json
{
  "object": "workspace",
  "id": "id_123",
  "name": "Example",
  "slug": "string",
  "external_id": "external_123",
  "plan": "string",
  "paid_by": "workspace",
  "requires_paid_plan": false,
  "closed_at": "2026-01-01T00:00:00.000Z",
  "restorable_until": "2026-01-01T00:00:00.000Z",
  "created_at": "2026-01-01T00:00:00.000Z",
  "hosted_invoice_url": "https://example.com"
}
```

## Links

- HTML reference (with Node.js, Python, Ruby, PHP, Laravel, Go, Java, Rust, .NET and CLI examples): https://www.unitpost.com/docs/platform/post-organizations-id-workspaces-workspace-id-restore
- OpenAPI 3.1 (full schemas): https://www.unitpost.com/api/v1/openapi.json
