# Update review settings

Source: https://workroad.app/docs/api/update-review-settings

`PATCH https://workroad.app/api/v1/settings/review`

Changes the limits, retention, daily goal or leech handling the review queue and practice sessions use.

- MCP tool: `updateReviewSettings` on `https://workroad.app/api/mcp`
- Required scopes: settings:update
- Test mode: `PATCH https://workroad.app/api/test/v1/settings/review` checks the request and returns the example response without changing anything.

## Request body

JSON.

- `newPerDay`: integer, 0 to 2000. 0 to 2000.
- `reviewsPerDay`: integer or null, 0 to 10000. 0 to 10000, or null for no limit.
- `retention`: number, 0.7 to 0.99. 0.7 to 0.99. Higher means more reviews and fewer forgotten cards.
- `goalKind`: one of `"cards"`, `"minutes"`
- `goalTarget`: integer, 1 to 2000. 1 to 2000.
- `leechThreshold`: integer, 2 to 100. 2 to 100.
- `suspendLeeches`: boolean
- `subjectOverrides`: array of objects, up to 200 items. Replaces every override when sent. Send an empty list to remove them all.
  - `subjectId`: string (uuid), required. One of the user's subjects.
  - `newPerDay`: integer, 0 to 2000
  - `reviewsPerDay`: integer or null, 0 to 10000
  - `retention`: number, 0.7 to 0.99

## Response

`200` OK

- `data`: object, required
  - `newPerDay`: integer, required. New cards introduced a day.
  - `reviewsPerDay`: integer or null, required. Reviews a day. Null: no limit.
  - `retention`: number, required. FSRS desired retention, the chance of recalling a card when it comes due, from 0.7 to 0.99.
  - `goalKind`: one of `"cards"`, `"minutes"`, required. Whether the daily goal counts cards reviewed or minutes studied.
  - `goalTarget`: integer, required. The daily goal, in `goalKind` units.
  - `leechThreshold`: integer, required. Lapses after which a card is marked a leech.
  - `suspendLeeches`: boolean, required. Leeches are suspended automatically.
  - `subjectOverrides`: array of objects, required. Limits and retention that differ for one subject.
    - `subjectId`: string (uuid), required
    - `newPerDay`: integer or null, required. New cards a day for this subject, within the global limit. Null: no limit.
    - `reviewsPerDay`: integer or null, required. Reviews a day for this subject. Null: no limit.
    - `retention`: number or null, required. Desired retention for this subject. Null: the global value.
  - `optimizedAt`: string (date-time) or null, required. When the FSRS optimizer last fitted this user's weights, or null.

### Example

```json
{
  "data": {
    "newPerDay": 20,
    "reviewsPerDay": null,
    "retention": 0.9,
    "goalKind": "cards",
    "goalTarget": 30,
    "leechThreshold": 8,
    "suspendLeeches": true,
    "subjectOverrides": [
      {
        "subjectId": "5f0c1d2e-3a4b-4c5d-8e6f-7a8b9c0d1e2f",
        "newPerDay": 10,
        "reviewsPerDay": null,
        "retention": 0.95
      }
    ],
    "optimizedAt": null
  }
}
```

## Errors

Every error has the body `{ "error": { "code", "message", "details" } }`.

- `400`: Invalid body, no field to update, or an override names a subject the user doesn't own.
- `401`: Missing, invalid, disabled or expired API key
- `403`: The API key lacks the required scope
- `404`: No endpoint exists at this path.
- `405`: Method not allowed. Use a method from the Allow header.
- `429`: Rate limit exceeded. Wait for Retry-After before retrying. The rate-limit headers are absent when the key's own limiter rejected the request before the per-endpoint bucket check ran.
- `500`: Internal server error
