# List Playground problem sets

```http
GET /api/public/v1/competitions/mathematics-distillation-challenge-equational-theories-stage2/playground/problem-sets
```

**Scope**: `playground.read`.

Returns the curated public equational problem sets currently available for Mathematics Distillation Stage 2 practice Runs.

These are catalog groupings, not private custom-problem collections. A problem set contains complete Equation 1/Equation 2 implication problems; it does not contain Lean source. Caller-owned [custom problems](./custom-problems.md) never appear in this catalog.

## Using a problem set in a Run

A problem-set ID identifies the catalog entry but is not itself a valid `problemIds` value. To run some or all of a set:

1. Call [Get a Playground problem set](./get-playground-problem-set.md).
2. Follow `nextCursor` until the detail traversal is complete.
3. Select the collected `items[].id` values.
4. Send those problem IDs in [Create a Playground Run](./create-playground-run.md).

Problem-set contents can change after this response. Fetch the detail shortly before creating a Run. Run creation revalidates each problem ID and snapshots the accepted problem inputs, so later catalog edits do not change an existing Run.

Problem sets are returned in the competition-defined display order, with problem-set ID as the stable tie-breaker. Follow the shared [cursor traversal rules](../../../pagination.md).

## Query parameters

| Parameter | Type | Required | Default | Description |
| :--- | :--- | :---: | :--- | :--- |
| `cursor` | string | No | — | Opaque cursor from the previous `nextCursor`. |
| `limit` | integer | No | `25` | Page size from `1` through `100`. |

## Response fields

| Field | Type | Description |
| :--- | :--- | :--- |
| `items` | [ProblemSetSummary](#problem-set-summary-fields)[] | Problem-set summaries on this page. |
| `nextCursor` | string \| null | Cursor for the next page, or `null` after the final page. |

### Problem-set summary fields

| Field | Type | Description |
| :--- | :--- | :--- |
| `id` | string | Stable problem-set ID used by the detail endpoint. |
| `title` | string | Human-readable title. |
| `description` | string \| null | Short catalog description, or `null` when none is configured. |
| `count` | integer | Total number of public problems across all pages of the corresponding detail endpoint. |
| `updatedAt` | string | ISO 8601 UTC time of the latest metadata, ordering, or content change. |

## Example request

```bash
curl "https://api.sair.foundation/api/public/v1/competitions/mathematics-distillation-challenge-equational-theories-stage2/playground/problem-sets?limit=25" \
  -H "Authorization: Bearer $SAIR_API_KEY"
```

## Example response

```json
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "pset_easy",
        "title": "Easy implications",
        "description": "Introductory equational implication problems.",
        "count": 24,
        "updatedAt": "2026-08-31T07:45:12Z"
      }
    ],
    "nextCursor": null
  }
}
```

If no public sets are available, the endpoint returns `200 OK` with `items: []` and `nextCursor: null`.

## Errors

See [Errors](../../../errors.md). An invalid `cursor` or `limit` returns `400 MALFORMED_BODY`. An unavailable competition returns `404 NOT_FOUND`.
