# Get my submission (legacy)

```http
GET /api/public/v1/competitions/{competitionId}/submissions/me
```

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

Compatibility endpoint retained for existing clients. New integrations should use [List my submissions](./list-my-submissions.md), which always returns a collection.

## Parameters

| Parameter | Location | Type | Required | Description |
| :--- | :--- | :--- | :---: | :--- |
| `competitionId` | path | string | Yes | Competition ID. |
| `track` | query | Stage 2 track ID | Stage 2 only | Selects one solver-participation track. |
| `cursor` | query | string | IGP24 only | Opaque history cursor. |
| `limit` | query | integer | IGP24 only | History page size. Default `25`, maximum `100`. |

## Response DTO

The legacy response is intentionally kind-specific:

```ts
type LegacyMySubmissionResponse =
  | { ok: true; data: CheatsheetSubmission }
  | { ok: true; data: ModelReferenceSubmission }
  | { ok: true; data: SolverParticipationSubmission }
  | { ok: true; data: { items: Igp24PolynomialSubmission[]; nextCursor: string | null } };
```

The concrete responses are expanded below. New clients should prefer the uniform collection DTO returned by `/submissions/mine`.

## Modular Arithmetic Challenge

The legacy endpoint always reads slot `1`, even when slots `2` and `3` exist.

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

```json
{
  "ok": true,
  "data": {
    "submissionId": "sub_01JMAC00000000000000000001",
    "competitionId": "modular-arithmetic-challenge",
    "kind": "model-reference",
    "slot": 1,
    "payload": {
      "modelName": "your-team/model-a",
      "commitHash": "0123456789abcdef0123456789abcdef01234567"
    },
    "meta": {
      "description": "Primary model."
    },
    "createdAt": "2026-05-18T12:34:56Z",
    "updatedAt": "2026-05-20T08:11:02Z"
  }
}
```

If slot `1` is empty, the endpoint returns `404` even when another slot is populated.

## Mathematics Distillation Stage 1

Returns the single current cheatsheet.

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

```json
{
  "ok": true,
  "data": {
    "submissionId": "sub_01JSTAGE100000000000000001",
    "competitionId": "mathematics-distillation-challenge-equational-theories-stage1",
    "kind": "cheatsheet",
    "payload": {
      "content": "When the equation has a neutral element, test substitutions that preserve it before expanding the search."
    },
    "meta": {
      "description": "Playground-tested cheatsheet.",
      "contributorNetworkItemId": "cn_01JSTAGE100000000000000001"
    },
    "createdAt": "2026-05-18T12:34:56Z",
    "updatedAt": "2026-05-18T12:34:56Z"
  }
}
```

## Mathematics Distillation Stage 2

`track` is required and selects one current entry.

```bash
curl "https://api.sair.foundation/api/public/v1/competitions/mathematics-distillation-challenge-equational-theories-stage2/submissions/me?track=solo" \
  -H "Authorization: Bearer $SAIR_API_KEY"
```

```json
{
  "ok": true,
  "data": {
    "submissionId": "sub_01JSTAGE200000000000000001",
    "competitionId": "mathematics-distillation-challenge-equational-theories-stage2",
    "kind": "solver-participation",
    "payload": {
      "track": "solo",
      "modelId": "openai-gpt-oss-120b",
      "solverCode": "import Mathlib\n\nexample (n : Nat) : n = n := by\n  rfl"
    },
    "meta": {
      "description": "Solo solver.",
      "contributorNetworkItemId": "cn_01JSTAGE200000000000000001"
    },
    "createdAt": "2026-05-18T12:34:56Z",
    "updatedAt": "2026-05-18T12:34:56Z"
  }
}
```

## Inverse Galois Problem (IGP24)

IGP24 keeps its historical paginated collection response on the legacy path.

```bash
curl "https://api.sair.foundation/api/public/v1/competitions/igp24/submissions/me?limit=25" \
  -H "Authorization: Bearer $SAIR_API_KEY"
```

```json
{
  "ok": true,
  "data": {
    "items": [
      {
        "submissionId": "sub_01JIGP24000000000000000001",
        "competitionId": "igp24",
        "kind": "igp24-polynomial",
        "payload": {
          "queuedPolynomials": []
        },
        "meta": {
          "description": "Search batch 12."
        },
        "verifiedPolynomials": [
          {
            "polynomialIndex": 0,
            "status": "accepted",
            "label": "24T25000",
            "t": 25000,
            "r": 1,
            "scoreable": true
          }
        ],
        "failedPolynomials": [],
        "createdAt": "2026-05-18T12:34:56Z",
        "updatedAt": "2026-05-18T12:40:03Z"
      }
    ],
    "nextCursor": null
  }
}
```

## Errors

| HTTP | Code | When |
| :---: | :--- | :--- |
| `404` | `NOT_FOUND` | No matching current submission exists. |
| `422` | `RESOURCE_FIELD_INVALID` | `track` is missing, unexpected, or invalid. |
| `400` | `MALFORMED_BODY` | An IGP24 cursor is invalid. |
| `422` | `RESOURCE_FIELD_INVALID` | An IGP24 `limit` is not an integer from `1` through `100`. |

See [Errors](../../../errors.md) for the common error envelope.
