---
title: "Restore a project"
method: POST
path: "/v1/projects/{project}/restore"
tags: ["Projects"]
---

# Restore a project

`POST /v1/projects/{project}/restore`

## Request

- Base URL: `https://api.subscriby.net`
- URL: `https://api.subscriby.net/v1/projects/{project}/restore`
- Auth: HTTP bearer

Switches an archived project back on. Answers `200` with the project and emits `project.restored`.

## Path parameters

- `project` string, uuid, required

## Headers

- `Idempotency-Key` string, uuid, required

## Response `200`

The project, active.

- object
  - `data` ProjectResource, required: A project: the top-level container for a membership business. Every plan, subscriber, payment method and resource lives under one.
    - `id` string, required: The project's id, the value every project-scoped endpoint takes in its path.
    - `team_id` string, nullable, required: The team the project belongs to.
    - `user_id` string, required: The creator who owns the project.
    - `name` string, required: The project's name, 5 to 255 characters.
    - `handle` string, nullable, required: The project's handle: lowercase letters, digits and dashes, unique across Subscriby, the last segment of the portal URL. Null until one is chosen; choosing one needs a tier with the custom-handle capability.
    - `description` string, nullable, required: What the project offers, up to 1,000 characters of HTML filtered to a safe subset; null when none.
    - `terms` string, nullable, required: The URL of the terms members are asked to accept; null when none.
    - `privacy` string, nullable, required: The URL of the privacy policy members are asked to accept; null when none.
    - `banner_url` string, nullable, required: The hosted banner artwork; null until uploaded and processed.
    - `photo_url` string, nullable, required: The hosted photo artwork; null until uploaded and processed.
    - `metrics` boolean, required: The **Enable Public Metrics** switch: whether the portal shows the project's member counts.
    - `outage_compensations` boolean, required: The **Outage Compensation** switch: when a platform refuses the project's connector for an hour or more and later answers again, every member whose paid access overlapped the gap gets the lost time added to the end of their access automatically. True on every new project.
    - `active` boolean, required: Whether the project is live. Archiving flips it to false and keeps everything; restoring flips it back.
    - `created_at` string, nullable, required: When the project was created, ISO 8601.
    - `updated_at` string, nullable, required: When the project last changed, ISO 8601.

## Other responses

- `400`: `IDEMPOTENCY_KEY_MISSING`: every write needs an `Idempotency-Key` header. Send a fresh UUID per distinct operation.
- `401`: `AUTHENTICATION_REQUIRED`: the request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an `sbt_test_` token on production).
- `403`: `TOKEN_MISSING_ABILITY`: the token is valid but does not carry the ability this endpoint requires; `error.context.required_ability` names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers `FORBIDDEN`, `TEAM_TIER_REQUIRED` or `CONNECTOR_TIER_REQUIRED` with the same status, and says so in its own description.
- `404`: `RESOURCE_NOT_FOUND`: an id in the path names nothing the token can see. `TENANT_MISMATCH`: the project sits outside the token's `scope:project:` allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
- `409`: `IDEMPOTENCY_KEY_REUSED`: the key was already used in the last 24 hours with a different request body.
- `425`: `IDEMPOTENCY_REPLAY_IN_PROGRESS`: the first request with this key is still running; retry in a few seconds and the original response is replayed.
- `429`: `RATE_LIMITED`: the token has spent its 300 requests a minute or 10,000 an hour; `Retry-After` says when the next one is accepted.

---

[API](https://skmtc.dev/memberpass/apis/subscriby-rest-api.md) · [All operations](https://skmtc.dev/memberpass/apis/subscriby-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/memberpass/apis/subscriby-rest-api/revisions/59c4df91d764?raw)
