---
title: "Restore a card from the trash"
method: POST
path: "/api/cards/{cardId}/restore"
tags: ["Cards"]
---

# Restore a card from the trash

`POST /api/cards/{cardId}/restore`

## Request

- Base URL: `https://tre-app.com`
- URL: `https://tre-app.com/api/cards/{cardId}/restore`
- Auth: HTTP bearer

Returns the card to its original list if that list still exists, otherwise the leftmost list of the board, at the bottom. A second call on a live card is a no-op. `409 CONFLICT` means the lists the restore chose were deleted before it could write, 3 attempts in a row: the card is still in the trash, and the same call can be sent again.

## Response `200`

Success

- Card
  - `id` string, uuid, required
  - `boardId` string, uuid, required
  - `listId` string, uuid, required
  - `cardNumber` integer, required
  - `cardKey` string, required
  - `title` string, required
  - `description` string, required
  - `color` string, required
  - `order` integer, required
  - `startDate` string, date, nullable, required
  - `endDate` string, date, nullable, required
  - `scheduleState` 'unclassified' | 'planned' | 'suspended' | 'cancelled', required: Meaning of the retained schedule. Unclassified means its intent has not been reviewed; suspended/cancelled retain the plan for retrospective comparison.
  - `actualStartDate` string, date, nullable, required: Observed start, explicitly recorded from evidence. Independent of the schedule; null means unknown, never not started.
  - `actualEndDate` string, date, nullable, required: Observed end, explicitly recorded from evidence. May fall outside the plan. Null means unknown, never incomplete.
  - `verifiedOn` string, date, nullable, required: Day the named source was actually checked, never later than the server UTC day. Independent of updatedAt and the status date in the description; never advance for editorial work.
  - `verificationSource` string, nullable, required: Source reference and scope of the last factual verification (document, record, URL or cardKey). Set or clear together with verifiedOn.
  - `links` object[], required
    - `label` string, required
    - `url` string, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `createdByUserId` string, uuid, nullable, required
  - `assigneeUserIds` string[], required
  - `kind` 'control' | 'work' | 'reference' | 'decision' | 'digest' | 'guidance', nullable, required

## Other responses

- `400`: Invalid request
- `401`: Unauthenticated
- `403`: Forbidden: insufficient role or token scope; scope denials name the held scope and the operation
- `404`: Not found
- `409`: Conflict
- `429`: Rate limited
- `500`: Internal server error
- `503`: Temporarily unavailable

---

[API](https://skmtc.dev/tre-app/apis/tre-rest-api.md) · [All operations](https://skmtc.dev/tre-app/apis/tre-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tre-app/apis/tre-rest-api/revisions/26a7187a05fc?raw)
