# Get a shared cheatsheet

```http
GET /api/public/v1/contributor-network/items/{itemId}
```

**Scope**: `contributor-network.read`.

Returns one active Stage 1 Contributor Network cheatsheet with its exact published content and lineage references. Use an `itemId` returned by [List Shared Cheatsheets](./list-contributor-cheatsheets.md).

Send both optional type assertions when the client expects a Stage 1 cheatsheet. They prevent an ID from another competition or Contributor Network kind from being accepted as the requested type.

## Path parameters

| Parameter | Type | Required | Description |
| :--- | :--- | :---: | :--- |
| `itemId` | string | Yes | Stable Contributor Network item ID. |

## Query parameters

| Parameter | Type | Required | Description |
| :--- | :--- | :---: | :--- |
| `competitionId` | string | No | When present, use the Stage 1 competition ID shown in the request and also send `kind`. |
| `kind` | string | No | When present, must be `cheatsheet` and must be sent with `competitionId`. |

## Example request

```bash
curl --get "https://api.sair.foundation/api/public/v1/contributor-network/items/$ITEM_ID" \
  -H "Authorization: Bearer $SAIR_API_KEY" \
  --data-urlencode "competitionId=mathematics-distillation-challenge-equational-theories-stage1" \
  --data-urlencode "kind=cheatsheet"
```

## Response fields

The response contains every [ContributorCheatsheetSummary](./list-contributor-cheatsheets.md#summary-fields) field, plus:

| Field | Type | Description |
| :--- | :--- | :--- |
| `content` | string | Exact immutable published cheatsheet content. |
| `lineage.depth` | integer | Number of parent edges from the root; `0` for an original item. |
| `lineage.parent` | [ContributorItemReference](#lineage-reference-fields) \| null | Direct parent, or `null` for an original item. |
| `lineage.root` | [ContributorItemReference](#lineage-reference-fields) | Root of this lineage; points to this item when `depth` is `0`. |

`contentBytes` and `contentSha256` from the summary describe the returned `content` exactly.

### Lineage reference fields

| Field | Type | Description |
| :--- | :--- | :--- |
| `id` | string | Referenced Contributor Network item ID. |
| `publicCode` | string | Immutable public code of the referenced publication. |
| `available` | boolean | Whether the referenced item is still active and can be retrieved. |

An inactive ancestor remains as a structural reference with `available: false`; its content and other redacted metadata are not returned by this endpoint.

## Example response

```json
{
  "ok": true,
  "data": {
    "id": "cn_01JSTAGE100000000000000001",
    "publicCode": "EQT01-000042",
    "competitionId": "mathematics-distillation-challenge-equational-theories-stage1",
    "kind": "cheatsheet",
    "title": "Prime modulus shortcuts",
    "remark": "Adds a reusable prime-modulus strategy.",
    "author": {
      "sairId": "U-9f7e1c00",
      "displayName": "alice",
      "avatarUrl": null
    },
    "contentBytes": 85,
    "contentSha256": "c91039d66e6d249aa522e530d982e56573972f9d00b37e1cd35971a3a4235a29",
    "favoriteCount": 4,
    "viewerHasFavorited": false,
    "commentCount": 2,
    "directChildCount": 1,
    "publishedAt": "2026-04-12T09:00:00Z",
    "content": "When the modulus is prime, use Fermat's little theorem before expanding the equation.",
    "lineage": {
      "depth": 0,
      "parent": null,
      "root": {
        "id": "cn_01JSTAGE100000000000000001",
        "publicCode": "EQT01-000042",
        "available": true
      }
    }
  }
}
```

## Errors

| HTTP | Code | When |
| :---: | :--- | :--- |
| `404` | `NOT_FOUND` | The item or owning competition is unavailable, or a supplied type assertion does not match. |
| `422` | `RESOURCE_FIELD_INVALID` | Type assertions are incomplete or invalid, or the request contains an unknown or repeated query parameter. |

Inactive and mismatched items use the same `404` response as a missing ID. See [Errors](../../../errors.md) for authentication, scope, and rate-limit errors.
