# Get my participation

```http
GET /api/public/v1/competitions/igp24/me
```

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

Returns the caller's official IGP24 enrollment, immutable deadline-team context, and current post-event submission preflight. Check this state before submitting; eligibility is rechecked at admission.

The response is caller-specific. `canSubmit` and `submitBlockedReason` are also time-sensitive; do not cache them across API keys or treat a previous response as a reservation.

## Example request

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

## Example response

The team identity below illustrates the response shape. Use the values returned by the live endpoint.

```json
{
  "ok": true,
  "data": {
    "competitionId": "igp24",
    "enrolled": true,
    "team": {
      "teamId": "teamv2_a7a863ce80e6447881ad068bab82498e",
      "teamName": "Galois Wranglers",
      "teamNumber": "IGP24-T00007",
      "role": "member"
    },
    "canSubmit": true,
    "submitBlockedReason": null,
    "contributorNetwork": null
  }
}
```

## Response fields

| Field | Type | Description |
| :--- | :--- | :--- |
| `competitionId` | `"igp24"` | Competition ID from the request path. |
| `enrolled` | boolean | Whether the caller completed official IGP24 enrollment. Enrollment alone does not prove post-event eligibility. |
| `team` | [Deadline-team context](#deadline-team-context) \| null | Immutable team recorded for the caller at the official competition deadline, or `null` when the caller has no eligible deadline team. |
| `canSubmit` | boolean | Whether the caller passes the current persistent post-event submission preflight. Eligibility is checked again when a new batch is submitted. |
| `submitBlockedReason` | string \| null | Stable reason when `canSubmit` is `false`; values are listed below. |
| `contributorNetwork` | null | Always `null`; IGP24 does not support Contributor Network items. |

### Deadline-team context

| Field | Type | Description |
| :--- | :--- | :--- |
| `teamId` | string | Opaque ID of the immutable team used for post-event admission, shared daily quota, and submission-history ownership. |
| `teamName` | string \| null | Team display name, when available. |
| `teamNumber` | string \| null | Public IGP24 team number, when assigned. |
| `role` | `"owner"` \| `"member"` | Caller's role recorded for the deadline team. It is informational: every eligible deadline-team member uses the same team identity and shared quota. |

Joining, leaving, or switching an active team after the deadline does not change this context. Do not use a current active-team ID to authorize IGP24 post-event reads or writes.

### Submission eligibility

For IGP24's post-event mode, `submitBlockedReason` uses the following values:

| Value | Meaning |
| :--- | :--- |
| `EMAIL_NOT_VERIFIED` | The account email is not verified. |
| `OFFICIAL_STORE_FROZEN` | This service instance exposes the frozen official store and does not accept writes. |
| `DISCOVERY_ONLY_CLOSED` | Post-event validation is disabled or has ended. |
| `DISCOVERY_ONLY_NOT_ELIGIBLE` | The caller has no eligible deadline-team participation. |
| `DISCOVERY_ONLY_TEAM_DISQUALIFIED` | The caller's deadline team is not permitted to submit post-event batches. |
| `TEAM_DAILY_LIMIT` | The deadline team has used its current UTC-day persistent batch budget. |

`canSubmit` is a preflight result, not a reservation. Eligibility, disqualification, mode, shared usage, or service health can change before the write reaches admission. Treat the response from [Submit polynomials](./submit-polynomials.md) as authoritative.

For the full admission mode, per-team usage, remaining quota, and reset time, read `submissionSpec.submissionStatus` from [Get competition detail](./get-competition-detail.md).

## Errors

| HTTP | Code | When |
| :---: | :--- | :--- |
| `404` | `NOT_FOUND` | IGP24 does not exist or is not publicly visible. |
| `503` | `IGP24_SERVICE_UNAVAILABLE` | The current IGP24 admission status cannot be evaluated. Do not infer eligibility from the official window or cached state. |

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