---
title: "Record a review"
method: POST
path: "/reviews"
---

# Record a review

`POST /reviews`

## Request

- Base URL: `https://fluidrecall.com/api/v1`
- URL: `https://fluidrecall.com/api/v1/reviews`
- Auth: one of:
  - HTTP bearer
  - HTTP dpop

Write. Persist again, hard, good, or easy. The response dueAt is the next time to drill this card. A delay of minutes is normal for a new or missed card. Do not invent an interval. Reuse idempotencyKey if the call is retried. A retired card is 404, except a replay of a review stored before the retire.

## Request body

- object
  - `cardId` string, uuid, required
  - `rating` 'again' | 'hard' | 'good' | 'easy', required
  - `reviewedAt` string: UTC ISO-8601 timestamp ending in Z
  - `idempotencyKey` string, required

## Response `200`

Stored review and the next due time.

- object

## Other responses

- `400`: Invalid body.
- `401`: Missing or wrong token.
- `404`: Card not found.
- `409`: Idempotency key reused with a different body.
- `429`: Rate limited. Retry after Retry-After.

---

[API](https://skmtc.dev/fluidrecall/apis/fluid-recall.md) · [All operations](https://skmtc.dev/fluidrecall/apis/fluid-recall/llms.txt) · [OpenAPI document](https://skmtc.dev/fluidrecall/apis/fluid-recall/revisions/7bf2563c3d2a?raw)
