> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cabalspy.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Get thesis

> GET /v1/theses/item: one thesis or reply by id, with author, reactions and the author's position.

One thesis or reply by its id, for a detail page or to refresh a single card after a live event. Hidden and deleted posts return `not_found`.

## Query Parameters

<ParamField query="id" type="string" required>
  Thesis or reply id.
</ParamField>

<ParamField query="csid_id" type="string">
  The viewer, one of your users. Fills my\_reactions and is\_mine.
</ParamField>

<ParamField query="api_key" type="string" required>
  Your API key. Alternatively pass it as an Authorization Bearer header.
</ParamField>

## Usage Example

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api-id.cabalspy.xyz/v1/theses/item?id=8d1f5a2e-6c4b-4e0f-9a7d-1b2c3d4e5f60" \
    -H "Authorization: Bearer YOUR_KEY"
  ```

  ```python Python theme={null}
  import requests

  r = requests.get("https://api-id.cabalspy.xyz/v1/theses/item",
                   params={"id": "8d1f5a2e-6c4b-4e0f-9a7d-1b2c3d4e5f60", "csid_id": viewer_sub},
                   headers={"Authorization": "Bearer YOUR_KEY"})
  t = r.json()["data"]
  print(t["body"], t["replies"], t["my_reactions"])
  ```

  ```javascript JavaScript theme={null}
  const p = new URLSearchParams({ id: "8d1f5a2e-6c4b-4e0f-9a7d-1b2c3d4e5f60" });
  const res = await fetch(`https://api-id.cabalspy.xyz/v1/theses/item?${p}`, {
    headers: { Authorization: "Bearer YOUR_KEY" },
  });
  const { data } = await res.json();
  console.log(data.body, data.likes);
  ```
</CodeGroup>

## Response

<ResponseField name="success" type="boolean">
  True on success.
</ResponseField>

<ResponseField name="data" type="object">
  One thesis or reply, the same object as in [List theses](/cabalspy-id/theses-list#response). Replies have kind `reply`, a parent\_id and no position.
</ResponseField>

<ResponseExample>
  ```json Response theme={null}
  {
    "success": true,
    "data": {
      "id": "8d1f5a2e-6c4b-4e0f-9a7d-1b2c3d4e5f60",
      "chain": "solana",
      "mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
      "kind": "thesis",
      "parent_id": null,
      "body": "Strong community, dev still holding, chart just broke out. Still early.",
      "stance": "bull",
      "author": {
        "csid_id": "0b7c4a52-3f1e-4f43-9d0a-2b5e7c1d9a11",
        "username": "MazeCCC",
        "name": "Maze",
        "image_url": "https://pbs.twimg.com/profile_images/.../photo.jpg",
        "kol_badge": true,
        "profile_url": "https://id.cabalspy.xyz/u/MazeCCC"
      },
      "likes": 1,
      "replies": 1,
      "reactions": { "like": 1 },
      "my_reactions": ["like"],
      "via": "Example Terminal",
      "created_at": "2026-10-13T09:12:44.512113+00:00",
      "is_mine": false,
      "position": { "private": true }
    },
    "meta": {
      "request_id": "req_5162c7cf7f87",
      "cached": false,
      "cache_age_seconds": 0,
      "version": "v1",
      "timestamp": "2026-10-13T10:04:11Z"
    }
  }
  ```
</ResponseExample>

## Errors

| Status | Code | Meaning |
| - | - | - |
| 400 | missing\_parameter | id is missing. |
| 401 | missing\_api\_key | API key missing. |
| 403 | invalid\_api\_key | API key invalid or not enabled for CabalSpy ID. |
| 404 | not\_found | No such post, or it was hidden or deleted. |
| 429 | rate\_limit\_exceeded | Rate limit exceeded. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.