# Get a submission by ID

```http
GET /api/public/v1/competitions/modular-arithmetic-challenge/submissions/{submissionId}
```

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

Returns one current model-reference submission belonging to the caller's active competition team. Any active team member may read it; the owner role is required only to create, replace, or delete the slot.

Obtain the opaque `submissionId` from [List my submissions](./list-my-submissions.md). Do not construct an ID from the slot number.

## Path parameters

| Parameter | Type | Required | Description |
| :-------- | :--- | :------: | :---------- |
| `submissionId` | string | Yes | Stable public ID of an occupied team slot. |

## Example request

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

## Response

```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 revision."
    },
    "createdAt": "2026-05-18T12:34:56Z",
    "updatedAt": "2026-05-20T08:11:02Z"
  }
}
```

The response uses the same [model-reference submission fields](./list-my-submissions.md#model-reference-submission) as `/submissions/mine`.

## Resource behavior

- `submissionId` identifies the team's current slot entry, not an immutable history record. Replacing the slot keeps the ID, and this endpoint then returns the newly accepted `payload`, `meta`, and `updatedAt`.
- Deleting the slot invalidates this ID. A later submission to the empty slot receives a new `submissionId`.
- `payload.modelName` and `payload.commitHash` identify the exact public Hugging Face revision currently stored in the slot. SAIR stores the reference, not a downloadable copy of the model.
- Calling `/submissions/{submissionId}/download` therefore returns `404 NO_DOWNLOAD_FOR_KIND`.
- An official evaluation entry is a separate immutable resource with its own `entryId`. Replacing or deleting this current slot does not modify an already frozen official entry; use [Get a leaderboard entry](./get-leaderboard-entry.md) when a published leaderboard supplies that ID.

## Access and privacy

Team membership is evaluated when the request is made. A participant who has left the team can no longer read its slot, even with a previously known `submissionId`.

The endpoint returns the same `404 NOT_FOUND` error code when the ID is missing, deleted, belongs to another competition or team, or the caller has no active team. This prevents clients from using status or code differences to probe another team's submissions.

## Errors

| HTTP | Code | When |
| :---: | :--- | :--- |
| `404` | `NOT_FOUND` | The competition is not publicly visible, or the submission is not visible to the caller's active team. |

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