# List Playground tiers

```http
GET /api/public/v1/competitions/modular-arithmetic-challenge/playground/tiers
```

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

Returns the current deterministic practice-tier catalog in ascending `tierId` order. Read this endpoint before presenting tier choices or calling [Generate Playground sample cases](./generate-playground-sample.md); do not hard-code tier labels or size metadata.

This read consumes no Playground credits and is independent of the formal-submission window.

## Catalog behavior

- The response contains exactly eleven items with stable `tierId` values from `0` through `10`, ordered ascending. It is not paginated.
- T0 is a diagnostic multiplication tier: generated cases use `operation: "multiply"`, have no modulus, and are excluded from official ranking metrics.
- T1–T10 generate `operation: "modular_multiply"` cases of increasing configured size. These are the tiers used by the official `highestTierAbove90` and `overallAccuracy` metrics.
- The catalog describes the live practice generator. It does not expose official evaluation cases, answers, seeds, per-tier official case counts, or an official batch's frozen problem-set and scoring versions.
- The endpoint is available for a publicly visible active or closed competition only while `capabilities.playground` is `true`. A draft or disabled Playground returns `404 NOT_FOUND`.

## Response fields

The response `data` is an array of `ModularArithmeticPracticeTier` objects.

| Field | Type | Always present | Description |
| :--- | :--- | :---: | :--- |
| `tierId` | integer | Yes | Stable tier ID from `0` through `10`. Use this value in sample-generation requests. |
| `title` | string | Yes | Human-readable display name. Do not use it as a machine identifier. |
| `primeBits` | [integer, integer] \| null | Yes | Inclusive `[minimum, maximum]` bit-length range used when generating the prime modulus. Exactly `null` for T0. |
| `operandBits` | integer | Yes | Maximum random operand width in bits. Individual cases may use fewer bits and deliberately include values such as `0` and `1`. |
| `decimalDigits` | string | Yes | Human-readable operand-length guidance. This is display text, not a parseable limit or validation rule. |
| `diagnostic` | boolean | Yes | `true` exactly for T0; `false` for T1–T10. |

For T0, the generator cycles through diagnostic operand widths from 4 through 4,096 bits; `operandBits: 4096` is the maximum, not the size of every case. For T1–T10, `primeBits` describes the modulus while `operandBits` describes the maximum width of each operand.

## Example request

```bash
curl "https://api.sair.foundation/api/public/v1/competitions/modular-arithmetic-challenge/playground/tiers" \
  -H "Authorization: Bearer $SAIR_API_KEY"
```

## Example response

```json
{
  "ok": true,
  "data": [
    {
      "tierId": 0,
      "title": "Diagnostic multiplication",
      "primeBits": null,
      "operandBits": 4096,
      "decimalDigits": "1-1233",
      "diagnostic": true
    },
    {
      "tierId": 1,
      "title": "Tiny primes",
      "primeBits": [1, 3],
      "operandBits": 32,
      "decimalDigits": "up to 10",
      "diagnostic": false
    },
    {
      "tierId": 2,
      "title": "Small primes",
      "primeBits": [4, 8],
      "operandBits": 48,
      "decimalDigits": "up to 15",
      "diagnostic": false
    },
    {
      "tierId": 3,
      "title": "Short arithmetic",
      "primeBits": [9, 16],
      "operandBits": 64,
      "decimalDigits": "up to 19",
      "diagnostic": false
    },
    {
      "tierId": 4,
      "title": "Word-size reduction",
      "primeBits": [17, 32],
      "operandBits": 96,
      "decimalDigits": "up to 29",
      "diagnostic": false
    },
    {
      "tierId": 5,
      "title": "Medium reduction",
      "primeBits": [33, 64],
      "operandBits": 128,
      "decimalDigits": "up to 39",
      "diagnostic": false
    },
    {
      "tierId": 6,
      "title": "Long operands",
      "primeBits": [65, 128],
      "operandBits": 256,
      "decimalDigits": "up to 77",
      "diagnostic": false
    },
    {
      "tierId": 7,
      "title": "Large operands",
      "primeBits": [129, 256],
      "operandBits": 512,
      "decimalDigits": "up to 154",
      "diagnostic": false
    },
    {
      "tierId": 8,
      "title": "Thousand-bit operands",
      "primeBits": [257, 512],
      "operandBits": 1024,
      "decimalDigits": "up to 309",
      "diagnostic": false
    },
    {
      "tierId": 9,
      "title": "Multi-page operands",
      "primeBits": [513, 1024],
      "operandBits": 2048,
      "decimalDigits": "up to 617",
      "diagnostic": false
    },
    {
      "tierId": 10,
      "title": "Frontier tier",
      "primeBits": [1025, 2048],
      "operandBits": 4096,
      "decimalDigits": "up to 1233",
      "diagnostic": false
    }
  ]
}
```

## Errors

| Status | Code | When |
| :---: | :--- | :--- |
| `404` | `NOT_FOUND` | The competition does not exist, is a draft, or does not currently expose the Modular Arithmetic Playground. |

See [Errors](../../../errors.md) for authentication, scope, rate-limit, and standard error-envelope behavior.
