# Get my participation

```http
GET /api/public/v1/competitions/modular-arithmetic-challenge/me
```

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

Returns the caller's Modular Arithmetic Challenge 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/modular-arithmetic-challenge/me" \
  -H "Authorization: Bearer $SAIR_API_KEY"
```

## Example response

The team identity and quota counts below illustrate the response shape. Use the values returned by the live endpoint.

```json
{
  "ok": true,
  "data": {
    "competitionId": "modular-arithmetic-challenge",
    "enrolled": true,
    "team": {
      "teamId": "teamv2_0e52064c5e864ffd9f4e7532f4de63d0",
      "teamName": "Example Team",
      "teamNumber": "MAC-T00001",
      "role": "owner"
    },
    "canSubmit": true,
    "submitBlockedReason": null,
    "contributorNetwork": {
      "publishCap": 50,
      "activeCount": 4,
      "capRemaining": 46
    }
  }
}
```

## Response fields

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

### 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. |

All active team members may read the team's occupied formal slots. Only the owner may create, replace, or delete a formal model-reference slot. Enrollment and active team membership are separate states: an enrolled caller can still have `team: null` after leaving or losing access to a team.

### 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` | Competition enrollment is incomplete. |
| `TEAM_REQUIRED` | Enrollment exists, but the caller does not currently have an active competition 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. |

Treat `canSubmit` as authoritative for the state observed by this request. It does not reserve a slot or submission-window state. 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 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. |

Contributor Network capacity is account-scoped and independent of the active competition team and its formal slots. It does not affect `canSubmit`, and a positive `capRemaining` does not guarantee that a publication request will pass its own source, enrollment, artifact, 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 competition is not publicly visible. |

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