# Get my participation

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

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

Returns the caller's Stage 2 enrollment, active team context, current formal-submission eligibility, and Contributor Network publication quota. Check this state before submitting; eligibility is rechecked when the submission is processed.

## Example request

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

## Example response

```json
{
  "ok": true,
  "data": {
    "competitionId": "mathematics-distillation-challenge-equational-theories-stage2",
    "enrolled": true,
    "team": {
      "teamId": "teamv2_19ac4fb862d64502ae7837852e18fb4a",
      "teamName": "Lean Explorers",
      "teamNumber": "MDC2-T00003",
      "role": "owner"
    },
    "canSubmit": true,
    "submitBlockedReason": null,
    "contributorNetwork": {
      "publishCap": 50,
      "activeCount": 6,
      "capRemaining": 44
    }
  }
}
```

## Response fields

| Field | Type | Description |
| :---- | :--- | :---------- |
| `competitionId` | string | Competition ID from the request path. |
| `enrolled` | boolean | Whether the caller completed Stage 2 enrollment. |
| `team` | [Team context](#team-context) \| null | Caller's active Stage 2 team, or `null` when no active team is available. |
| `canSubmit` | boolean | Whether the caller currently passes the formal-submission preflight. |
| `submitBlockedReason` | string \| null | The first unmet prerequisite when `canSubmit` is `false`; otherwise `null`. |
| `contributorNetwork` | [Contributor Network quota](#contributor-network-quota) | Current active-publication allowance for this account in Stage 2. |

### Team context

| Field | Type | Description |
| :---- | :--- | :---------- |
| `teamId` | string | Opaque identifier for the active competition team. |
| `teamName` | string \| null | Current team display name. |
| `teamNumber` | string \| null | Public competition team number, when assigned. |
| `role` | `owner` \| `member` | Caller's current role in the team. |

Enrollment initially creates a one-person team whose participant has `role: "owner"`. Joining another team changes the active team context. All active members may read the team's current entries, but only the owner may create or replace a formal solver.

### Submission eligibility

`submitBlockedReason` is the first applicable value in the order shown below:

| Value | Meaning |
| :---- | :------ |
| `EMAIL_NOT_VERIFIED` | The account email is not verified. |
| `NOT_ENROLLED` | Stage 2 enrollment is incomplete. |
| `TEAM_REQUIRED` | Enrollment exists, but the caller does not currently have an active Stage 2 team. |
| `NOT_TEAM_OWNER` | The caller is an active team member rather than its owner. |
| `BEFORE_WINDOW` | The formal submission window has not opened. |
| `AFTER_WINDOW` | The formal submission window has closed. |
| `NO_TRACKS_AVAILABLE` | The competition currently exposes no track that can accept a solver. |
| `NO_MODELS_AVAILABLE` | The competition currently exposes no enabled model for a solver entry. |

Treat `canSubmit` as authoritative for the state observed by this request. It does not reserve a track, model, submission window, or rate-limit slot. The submission endpoint revalidates every prerequisite and may still reject the write if state changes after this response. [Errors](../../../errors.md#submitblockedreason-and-submission-errors) maps each preflight reason to the corresponding submission error.

### Contributor Network quota

| Field | Type | Description |
| :---- | :--- | :---------- |
| `publishCap` | integer | Maximum number of active Contributor Network items this account may have in this competition. |
| `activeCount` | integer | Current number of active items published by the account in this competition. |
| `capRemaining` | integer | Remaining active-item capacity, never less than zero. |

Contributor Network capacity is account-scoped and independent of the active team. It does not affect `canSubmit`, and `canSubmit: true` does not guarantee that a publication request will pass its own source, enrollment, catalog, lineage, or daily-quota checks.

This is an active-publication cap, not the daily resource-creation limit described in [Rate limiting](../../../rate-limiting.md#daily-resource-creation). Withdrawing an active item releases capacity.

## Errors

| HTTP | Code | When |
| :---: | :--- | :--- |
| `404` | `NOT_FOUND` | The Stage 2 competition is not publicly visible. |

Enrollment, team-role, window, and catalog blockers are returned in a successful `200 OK` response rather than as endpoint errors.
