# Get my participation

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

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

Returns the caller's Stage 1 enrollment, team context, current 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-stage1/me" \
  -H "Authorization: Bearer $SAIR_API_KEY"
```

## Example response

```json
{
  "ok": true,
  "data": {
    "competitionId": "mathematics-distillation-challenge-equational-theories-stage1",
    "enrolled": true,
    "team": {
      "teamId": "sair_01HUSER",
      "teamName": "Ada Example",
      "teamNumber": "MDC1-T00001",
      "role": "owner"
    },
    "canSubmit": true,
    "submitBlockedReason": null,
    "contributorNetwork": {
      "publishCap": 50,
      "activeCount": 2,
      "capRemaining": 48
    }
  }
}
```

## Response fields

| Field | Type | Description |
| :---- | :--- | :---------- |
| `competitionId` | string | Competition ID from the request path. |
| `enrolled` | boolean | Whether the caller completed enrollment. |
| `team` | [Team context](#team-context) \| null | Caller-visible team context. It is `null` when the caller is not enrolled. |
| `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 1. |

### Team context

| Field | Type | Description |
| :---- | :--- | :---------- |
| `teamId` | string | Opaque identifier for the caller's Stage 1 team. |
| `teamName` | string \| null | Current team display name. |
| `teamNumber` | string \| null | Public competition team number, when assigned. |
| `role` | `owner` \| `member` | Caller role. Only `owner` may replace the team's formal cheatsheet. |

A solo participant is represented as a one-person team with `role: "owner"`. An accepted invitee sees the joined team with `role: "member"`; that member can use shared competition resources but cannot submit the formal cheatsheet.

### Submission eligibility

For Stage 1, `submitBlockedReason` uses the following preflight values:

| Value | Meaning |
| :---- | :------ |
| `EMAIL_NOT_VERIFIED` | The account email is not verified. |
| `NOT_ENROLLED` | Competition enrollment is incomplete. |
| `NOT_TEAM_OWNER` | The caller is a team member rather than its owner. |
| `BEFORE_WINDOW` | The formal submission window has not opened. |
| `AFTER_WINDOW` | The formal submission window has closed. |

Treat `canSubmit` as authoritative for the state observed by this request. It does not reserve submission capacity: the write can still fail if the account, team, competition window, or rate limit changes before the submission arrives. [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 the 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. |

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.
