# List Playground models

```http
GET /api/public/v1/competitions/mathematics-distillation-challenge-equational-theories-stage1/playground/models
```

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

Returns the models currently selectable for Stage 1 practice Runs, together with the pricing metadata needed to interpret credit usage.

Fetch the catalog shortly before [creating a Run](./create-playground-run.md). A model ID is accepted only while it remains in this response; do not hard-code an ID copied from an example.

## Availability and credit pricing

Every returned model is enabled and available for new Stage 1 Runs when the response is generated. Availability can change after the response, so Run creation still validates every `models[]` value.

`meta.creditRate` is the number of US dollars represented by one credit. It is not a fixed price per cell. For each completed execution, the billed credits are the actual model cost converted at this rate and rounded up to one decimal place:

```text
credits = ceil((actualUsdCost / creditRate) × 10) / 10
```

`pricing.estimatedCreditsPerExecution` is advisory. It uses a recent historical average when one is available; otherwise it uses a configured upper-bound estimate. Actual usage may differ. Read `summary.groups[].totalCredits` from [Get a Playground Run](./get-playground-run.md) for the settled grouped charge and `credits.available` from [Get Playground Usage](./get-playground-usage.md) for the remaining spendable balance.

## 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`. |

Models are returned in the service-defined display order, with model ID as the stable tie-breaker. Follow the shared [cursor traversal rules](../../../pagination.md).

## Response fields

| Field | Type | Description |
| :--- | :--- | :--- |
| `items` | [PlaygroundModel](#playground-model-fields)[] | Models currently accepted in Stage 1 Run requests. |
| `nextCursor` | string \| null | Cursor for the next page, or `null` after the final page. |
| `meta.creditRate` | number | Positive USD-per-credit conversion rate used by the Playground billing system. |

### Playground model fields

| Field | Type | Description |
| :--- | :--- | :--- |
| `id` | string | Model ID to send in a Run request's `models[]`. |
| `name` | string | Human-readable model name. |
| `pricing.inputUsdPer1kTokens` | number | Input-token price in USD per 1,000 tokens. |
| `pricing.outputUsdPer1kTokens` | number | Output-token price in USD per 1,000 tokens. |
| `pricing.maxOutputTokens` | integer | Effective configured maximum output tokens per execution. |
| `pricing.estimatedCreditsPerExecution` | number | Current non-binding credit estimate for one model execution. |
| `pricing.estimateBasis` | string | `historical-average` or `configured-upper-bound`. |

## Example request

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

## Example response

```json
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "qwen3",
        "name": "Qwen3",
        "pricing": {
          "inputUsdPer1kTokens": 0.0005,
          "outputUsdPer1kTokens": 0.0015,
          "maxOutputTokens": 4096,
          "estimatedCreditsPerExecution": 0.7,
          "estimateBasis": "historical-average"
        }
      }
    ],
    "nextCursor": null,
    "meta": {
      "creditRate": 0.01
    }
  }
}
```

## Errors

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