Skip to content
WorkRoad home
REST API

Answer a practice card

POST
/practice-sessions/{sessionId}/answers

Records the user's answer to one card from the session as an FSRS review, schedules the card's next due time, and counts toward the daily goal and the streak, exactly like an answer in the app. Show the term, let the user answer, reveal the definition, then send how well they recalled it. Answering the same itemId again with the same rating records nothing and returns replayed: true, so a retry is safe. remaining says how many cards from the last read are left; at 0, call getPracticeSession.

Required scopes: activity:create

Authorization

headerAuthorizationBearer <token>

Path Parameters

sessionId*string

Practice session id from startPracticeSession, scoped to the key's user.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid

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
  1. body
itemId*string

itemId of a card from getPracticeSession.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
rating*string

How well the user recalled the card: again (forgot), hard, good or easy. Ask the user, or judge their answer against the definition.

Value in"again""hard""good""easy"
durationMs*integer

Time the user spent on the card, 0-600000 ms. Stored in whole seconds, and counted by the daily minutes goal.

Range0 <= value <= 600000

Response Body

This item was already answered. The body has replayed: true.

application/json
  1. response
data*
Example Request
curl -X POST 'https://workroad.app/api/v1/practice-sessions/497f6eca-6276-4993-bfeb-53cbbbba6f08/answers' \  -H 'Authorization: Bearer $WORKROAD_API_KEY' \  -H 'Content-Type: application/json' \  -d '{  "itemId": "f11b669d-7201-4c21-88af-d85092f0c005",  "rating": "again",  "durationMs": 0}'
Example Response
{  "data": {    "itemId": "1e2d3c4b-5a69-4788-9a0b-1c2d3e4f5a6b",    "cardId": "3e2d1c0b-9a8f-4e7d-8c6b-5a4f3e2d1c0b",    "recorded": "review",    "replayed": false,    "queue": "review",    "due": "2026-02-05T12:00:00.000Z",    "suspended": false,    "remaining": 0  }}