Deck progress

The deck progress object captures how well you know a deck at a point in time. It includes its retention and the number of cards in each learning stage.

Recall records one snapshot per day, so you can retrieve the latest snapshot or a history of snapshots over time.

To know when the next review is and how many cards are currently due, see due_cards_count and next_review_at on the deck object instead.

Endpoints

GET /v1/decks/:id/progress # Get the latest deck progress
GET /v1/decks/:id/progress/history # List deck progress over time

The deck progress object

A deck progress object is a daily snapshot of a deck's learning state. Numbers are updated several times per day.

retention is available on all plans. The card stage counts (learning_cards_count, mature_cards_count, relearning_cards_count, suspended_cards_count, unscheduled_cards_count, and young_cards_count) require the Pro plan. On the free plan, each card stage count returns null.

{
"object": "deck_progress",
"deck": "deck_5gvuzRdHW2ac",
"date": "2025-12-01",
"retention": 45,
"learning_cards_count": 10,
"mature_cards_count": 43,
"relearning_cards_count": 3,
"suspended_cards_count": 5,
"unscheduled_cards_count": 82,
"young_cards_count": 34,
}
object string, value is "deck_progress"

The type of the object.

deck stringExpandable

The ID of the deck the progress is for. When deck is included in expand, this is a deck object instead.

date string

The calendar day the snapshot represents, formatted as YYYY-MM-DD in the deck owner's time zone.

retention integer

The average of all cards' estimated probability that you will remember them on this date. Expressed in percentage.

learning_cards_count nullable integer

The number of cards that are in the learning stage.

mature_cards_count nullable integer

The number of cards that are in the review stage and mature.

relearning_cards_count nullable integer

The number of cards that are in the relearning stage.

suspended_cards_count nullable integer

The number of cards that are suspended and excluded from reviews.

unscheduled_cards_count nullable integer

The number of cards that don't have a next review date.

young_cards_count nullable integer

The number of cards that are in the review stage and young.


Get the latest deck progress

curl https://api.recall.cards/v1/decks/deck_5gvuzRdHW2ac/progress \
-u YOUR_API_KEY:

There are no parameters for this endpoint.

You can also retrieve the latest progress alongside a deck by expanding progress on any deck endpoint:

curl "https://api.recall.cards/v1/decks/deck_5gvuzRdHW2ac?expand=progress" \
-u YOUR_API_KEY:

Returns

Returns the most recent deck progress object, or null if the deck has no progress data yet (for example, a deck whose cards have never been reviewed).


List deck progress over time

curl https://api.recall.cards/v1/decks/deck_5gvuzRdHW2ac/progress/history \
-u YOUR_API_KEY:

Returns deck progress snapshots ordered by date, oldest first. When no range is given, the last 90 days are returned. Use start_date and end_date to request a specific range.

Recall records one snapshot per day once a deck starts accruing stats, carrying the previous values forward on days without reviews, so the series is continuous by default. Days before a deck's first snapshot are not present.

start_date optional

The first day to include, formatted as YYYY-MM-DD in the deck owner's time zone. Defaults to 90 days before end_date.

end_date optional

The last day to include, formatted as YYYY-MM-DD in the deck owner's time zone. Defaults to today.

Returns

{
"object": "list",
"has_more": false,
"data": [
// Deck progress objects, oldest first
],
}
object string, value is "list"

The type of object returned.

data array

An array containing the deck progress objects, oldest first.

has_more boolean

Always false for this endpoint: the full requested range is returned in a single response.