# Get competition detail

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

**Scope**: `competition.read`.

Returns the Stage 1 public lifecycle, product capabilities, and live cheatsheet submission contract. Read this endpoint before constructing a submission or enabling competition actions so the client does not hard-code schemas, dates, limits, or feature availability.

This response describes competition-wide configuration. It does not indicate whether the current caller may submit; combine it with [Get my participation](./get-my-participation.md) for enrollment, team role, and `canSubmit`. Both reads are snapshots, and every write revalidates the relevant state.

## Example request

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

## Example response

The text, lifecycle, publication state, timestamps, and limits below illustrate the response shape. They are not a statement of the competition's current live values.

```json
{
  "ok": true,
  "data": {
    "id": "mathematics-distillation-challenge-equational-theories-stage1",
    "title": "Mathematics Distillation Challenge: Equational Theories - Stage 1",
    "description": "Submit a cheatsheet for formal evaluation.",
    "status": "active",
    "capabilities": {
      "playground": true,
      "contributorNetwork": true,
      "leaderboard": false
    },
    "leaderboardPublished": false,
    "leaderboardTeamDetailsEnabled": false,
    "submissionSpec": {
      "kind": "cheatsheet",
      "schema": {
        "type": "object",
        "required": ["content"],
        "properties": {
          "content": {
            "type": "string",
            "minLength": 1
          }
        },
        "additionalProperties": false
      },
      "metaSchema": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "maxLength": 5000
          },
          "contributorNetworkItemId": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "permission": {
        "teamRole": "owner"
      },
      "window": {
        "opensAt": "2026-04-01T00:00:00Z",
        "closesAt": "2026-09-30T23:59:59Z"
      },
      "limits": {
        "maxBytes": 10240,
        "maxEntries": 1
      }
    }
  }
}
```

## Response fields

The top-level fields answer different questions: `status` describes the competition lifecycle, `capabilities` identifies supported or published product surfaces, `submissionSpec` defines the formal write shape, and [Get my participation](./get-my-participation.md) resolves caller-specific eligibility.

### Competition fields

| Field | Type and meaning |
| :---- | :--------------- |
| `id` | `string`. Stable competition ID used in competition-scoped routes. |
| `title` | `string`. Display title; do not use it as an identifier. |
| `description` | `string \| null`. Competition description, when configured. |
| `status` | `"active" \| "closed"`. Current public lifecycle. Draft and otherwise non-public competitions return `404 NOT_FOUND`. |
| `capabilities` | `object`. Product-surface state described under [Capability fields](#capability-fields). These booleans are not caller authorization. |
| `leaderboardPublished` | `boolean`. Explicit leaderboard publication state. It has the same value as `capabilities.leaderboard`. |
| `leaderboardTeamDetailsEnabled` | `boolean`. Whether a published leaderboard may include the [`teamDetails` projection](../../competitions.md#leaderboard-team-details-and-privacy). |
| `submissionSpec` | `object`. Live contract for formal Stage 1 submissions. |

### Capability fields

| Field | Meaning |
| :---- | :------ |
| `playground` | Whether Stage 1 exposes its documented Playground surface. This does not guarantee that a particular Run request passes ownership, credit, or live-limit checks. |
| `contributorNetwork` | Whether Stage 1 supports Contributor Network cheatsheet items. This does not prove publication eligibility, source ownership, or remaining capacity. |
| `leaderboard` | Whether official leaderboard results are currently published and readable. |

### Submission specification

| Field | Description |
| :---- | :---------- |
| `kind` | Discriminator for the formal submission format. Stage 1 returns `cheatsheet`. |
| `schema` | JSON Schema for the request's `payload` object. Unknown payload fields are rejected. The submission endpoint's top-level `idempotencyKey` is outside this payload schema. |
| `metaSchema` | JSON Schema for the optional `meta` object. `contributorNetworkItemId`, when supplied, must reference an active Stage 1 `cheatsheet` item from this competition. It records lineage and does not copy public content. |
| `permission.teamRole` | Required team role. `owner` means the team owner—or the generated owner role for a solo participant—may submit; an invited member may not. |
| `window.opensAt` | Submission-window opening time as an ISO 8601 UTC string, or `null` when no opening time is configured. |
| `window.closesAt` | Submission deadline as an ISO 8601 UTC string, or `null` when no deadline is configured. |
| `limits.maxBytes` | Maximum UTF-8 byte length of `payload.content`. JSON field names, escaping, `meta`, and the request envelope do not reduce this content allowance. |
| `limits.maxEntries` | Maximum number of current formal entries for the Stage 1 team. Stage 1 returns `1`; a new logical write replaces that entry in place. |

Do not infer caller eligibility from `status`, a capability, the window, or `permission.teamRole` alone. Enrollment, verified email, current team role, and the live submission window are evaluated together by [Get my participation](./get-my-participation.md) and rechecked by [Submit cheatsheet](./submit-cheatsheet.md).

Successful responses use `Cache-Control: private, no-store`. Do not reuse an old detail response to authorize a later write.

## Errors

| HTTP | Code | When |
| :---: | :--- | :--- |
| `404` | `NOT_FOUND` | The competition does not exist or is not publicly visible. |

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