---
title: "Restore an expired drop you own"
method: POST
path: "/drops/{slug}/restore"
---

# Restore an expired drop you own

`POST /drops/{slug}/restore`

## Request

- Base URL: `https://ship.page`
- URL: `https://ship.page/drops/{slug}/restore`
- Auth: HTTP bearer

Brings back an expired owned drop while its files are retained, up to 90 days past expiry. Free accounts get a fresh 90-day lifetime; subscribers get the drop's expiry removed. A 200 with `restored: false` means the drop was never expired.

## Path parameters

- `slug` string, required

## Response `200`

Drop restored (or was never expired).

- object
  - `slug` string, required
  - `restored` boolean, required
  - `expires_at` string, date-time, nullable, required
  - `url` string, uri, required

## Other responses

- `401`: Missing or invalid credential.
- `404`: Not found (also returned for resources owned by someone else).
- `409`: Drop state changed concurrently — retry.
- `410`: The drop's files have been purged (drop_purged).

## Changes

- **2026-10-20** `99aad34506e8`: 56 warning
  - added the new `already_live` enum value to the `code` response property for the response status `401`
  - added the new `already_live` enum value to the `code` response property for the response status `404`
  - added the new `already_live` enum value to the `code` response property for the response status `409`
  - added the new `already_live` enum value to the `code` response property for the response status `410`
  - …52 more

[Operation history](https://skmtc.dev/ship/apis/ship-page/changes/drops/:slug/restore/post.md)

---

[API](https://skmtc.dev/ship/apis/ship-page.md) · [All operations](https://skmtc.dev/ship/apis/ship-page/llms.txt) · [OpenAPI document](https://skmtc.dev/ship/apis/ship-page/revisions/99aad34506e8?raw)
