Skip to content
REST API

Grade a flashcard

POST
/reviews

Records one review of a card from the review queue and schedules its next due time. Only a card the queue would serve now can be graded. Sending the same reviewId again grades nothing and returns status 200 with replayed: true and the card's current schedule, even when the card is no longer due. Reviews count toward the user's streak like reviews in the app.

Required scopes: activity:create

Authorization

AuthorizationBearer <token>

In: header

Header Parameters

Idempotency-Key?string

A client-generated key (1 to 255 visible ASCII characters) that makes this POST safe to retry. A retry with the same key and body replays the original response; the same key with a different body returns 409 idempotency_conflict. Stored for 24 hours.

Match^[\x21-\x7E]{1,255}$
Length1 <= length <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/reviews" \  -H "Content-Type: application/json" \  -d '{    "reviewId": "341516c7-7748-4edf-830d-9d7fcae997b7",    "cardId": "f16ba382-eb42-481a-b08f-c57bdc9aae24",    "rating": "again",    "durationMs": 0  }'
{  "data": {    "reviewId": "9d8c7b6a-5f4e-4d3c-9b2a-1f0e9d8c7b6a",    "cardId": "3e2d1c0b-9a8f-4e7d-8c6b-5a4f3e2d1c0b",    "replayed": false,    "queue": "review",    "due": "2026-02-05T12:00:00.000Z",    "suspended": false  }}