# List study blocks

Source: https://workroad.app/docs/api/list-study-blocks

`GET https://workroad.app/api/v1/study-blocks`

Study time the user planned on their calendar, by start time, for a range of days in their time zone (today and the next 6 by default, at most 62 days).

- MCP tool: `listStudyBlocks` on `https://workroad.app/api/mcp`
- Required scopes: schedule:view
- Test mode: `GET https://workroad.app/api/test/v1/study-blocks` checks the request and returns the example response without changing anything.

## Query parameters

- `from`: string (date). First day (YYYY-MM-DD) in the user's time zone. Defaults to today. At most 62 days before `to`.
- `to`: string (date). Last day (YYYY-MM-DD), inclusive. Defaults to 6 days after `from`.

## Response

`200` OK

- `data`: array of objects, required
  - `id`: string (uuid), required
  - `title`: string, required
  - `startsAt`: string (date-time), required. Start, in UTC.
  - `endsAt`: string (date-time), required. End, in UTC.
  - `date`: string, required. The day (YYYY-MM-DD) in the user's time zone.
  - `timeZone`: string, required. The time zone the block was planned in.
  - `subjectId`: string or null, required. The subject studied, when set.
  - `taskId`: string or null, required. The task worked on, when set.
  - `setId`: string or null, required. The study set practised, when set.
  - `createdAt`: string (date-time), required. Creation timestamp.
  - `updatedAt`: string (date-time), required. Last update timestamp.

### Example

```json
{
  "data": [
    {
      "id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
      "title": "Spanish verbs",
      "startsAt": "2026-02-02T17:00:00.000Z",
      "endsAt": "2026-02-02T17:45:00.000Z",
      "date": "2026-02-02",
      "timeZone": "Europe/London",
      "subjectId": "5f0c1d2e-3a4b-4c5d-8e6f-7a8b9c0d1e2f",
      "taskId": null,
      "setId": "7e6d5c4b-3a2f-4e1d-8c0b-9a8f7e6d5c4b",
      "createdAt": "2026-01-15T09:30:00.000Z",
      "updatedAt": "2026-02-01T12:00:00.000Z"
    }
  ]
}
```

## Errors

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

- `400`: `invalid_query`: `to` is before `from`, or the range is longer than 62 days.
- `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
