# List a profile's articles

Articles where the person is quoted or discussed, with the annotated statements. Newest first.

Canonical: https://chikaraintel.com/docs/api/reference/profiles/list-profile-articles

```text
GET https://api.chikaraintel.com/v1/profiles/{profileReference}/articles
```

Authentication: `Authorization: Bearer <token>`.

## Parameters

- `profileReference` (uuid, path, required) The person's reference.
- `type` (string, query) Only annotations of this type, and only articles that have one. Values: `speech`, `feedback`, `recommendation`, `review`.
- `role` (string, query) `about`: the person is the subject. `by`: the person is the speaker. Values: `about`, `by`.
- `collapse` (string, query) `latest` folds repeated yearly statements from the same organisation, type and speaker into the newest, with `history_count`. `none` returns every one. Default `latest`. Values: `latest`, `none`.
- `page` (integer, query) 1-based page number. Default `1`.
- `limit` (integer, query) Rows per page, up to 100. A larger value is capped at 100, not rejected. Default `20`.

## Response

The payload is under `success`, with paging details under `meta`.

- `article` (object) `{ reference, title, url, published_at }`.
- `events` (array) `{ reference, type, summary }` for linked events.
- `about` (array) Annotations where the person is the subject.
  - `reference` (uuid) The annotation's reference.
  - `type` (string) `speech`, `feedback`, `recommendation` or `review`. See [statements](/docs/concepts/statements).
  - `summary` (string) A one-line summary.
  - `text` (string | null) The verbatim passage, where the article's licence allows it.
  - `start` (integer) Start offset into the article content, in UTF-16 code units.
  - `end` (integer) End offset, in UTF-16 code units.
  - `speaker` (object) `{ kind, name, role, organisation_name, profile_reference }`. `kind` is `person` or `body`.
  - `subject` (object) `{ name, role, organisation_name, profile_reference }`.
- `by` (array) Annotations where the person is the speaker.
  - `reference` (uuid) The annotation's reference.
  - `type` (string) `speech`, `feedback`, `recommendation` or `review`. See [statements](/docs/concepts/statements).
  - `summary` (string) A one-line summary.
  - `text` (string | null) The verbatim passage, where the article's licence allows it.
  - `start` (integer) Start offset into the article content, in UTF-16 code units.
  - `end` (integer) End offset, in UTF-16 code units.
  - `speaker` (object) `{ kind, name, role, organisation_name, profile_reference }`. `kind` is `person` or `body`.
  - `subject` (object) `{ name, role, organisation_name, profile_reference }`.

An invalid `type`, `role` or `collapse` returns 422.

## Examples

cURL:

```bash
curl -sS -G "https://api.chikaraintel.com/v1/profiles/a1b2c3d4-e5f6-4a7b-9c8d-e9f0a1b2c341/articles" \
  -H "Authorization: Bearer $CHIKARA_API_TOKEN" \
  -H "Accept: application/json" \
  --data-urlencode "role=about" \
  --data-urlencode "limit=20" \
  --data-urlencode "page=1"
```

JavaScript:

```javascript
const BASE = "https://api.chikaraintel.com";
const headers = {
  Authorization: `Bearer ${process.env.CHIKARA_API_TOKEN}`,
  Accept: "application/json"
};

const limit = 50;
const maxPages = 20; // hard cap
const rows = [];

for (let page = 1; page <= maxPages; page++) {
  const params = new URLSearchParams({
    role: "about",
    limit: String(limit),
    page: String(page)
  });
  const res = await fetch(`${BASE}/v1/profiles/a1b2c3d4-e5f6-4a7b-9c8d-e9f0a1b2c341/articles?${params}`, { headers });
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);

  const { success } = await res.json();
  rows.push(...success);
  if (success.length < limit) break; // a short page is the last page
}

console.log(rows.length, rows[0]);
```

Python:

```python
import os
import requests

BASE = "https://api.chikaraintel.com"
HEADERS = {
    "Authorization": f"Bearer {os.environ['CHIKARA_API_TOKEN']}",
    "Accept": "application/json",
}

LIMIT = 50
MAX_PAGES = 20  # hard cap
rows = []

for page in range(1, MAX_PAGES + 1):
    res = requests.get(
        f"{BASE}/v1/profiles/a1b2c3d4-e5f6-4a7b-9c8d-e9f0a1b2c341/articles",
        headers=HEADERS,
        params={
            "role": "about",
            "limit": LIMIT,
            "page": page,
        },
        timeout=30,
    )
    res.raise_for_status()
    batch = res.json()["success"]
    rows.extend(batch)
    if len(batch) < LIMIT:  # a short page is the last page
        break

print(len(rows), rows[:1])
```

Response:

```json
{
  "status": {
    "code": 200,
    "messages": []
  },
  "success": [
    {
      "article": {
        "reference": "8e1f2a3b-c5d6-4e7f-8a9b-c0d1e2f3a4e1",
        "title": "Appointment of Chief Financial Officer",
        "url": "https://www.example.com/halberd/2026/cfo-appointment",
        "published_at": "2026-08-04T07:00:00+00:00"
      },
      "events": [
        {
          "reference": "e5f6a7b8-c9d0-4e1f-8a3b-c4d5e6f7a881",
          "type": "move",
          "summary": "Halberd Industrial Group appoints Elena Marchetti as Chief Financial Officer"
        }
      ],
      "about": [
        {
          "reference": "…",
          "type": "feedback",
          "summary": "The chair on the appointment",
          "text": "Elena brings deep experience of integrating acquired businesses.",
          "start": 412,
          "end": 478,
          "speaker": {
            "kind": "person",
            "name": "Daniel Reyes",
            "role": "Chair",
            "organisation_name": "Halberd Industrial Group",
            "profile_reference": "d4e5f6a7-b8c9-4d0e-9f2a-b3c4d5e6f771"
          },
          "subject": {
            "name": "Elena Marchetti",
            "role": "Chief Financial Officer",
            "organisation_name": "Halberd Industrial Group",
            "profile_reference": "a1b2c3d4-e5f6-4a7b-9c8d-e9f0a1b2c341"
          }
        }
      ],
      "by": []
    }
  ],
  "meta": {
    "total": 1,
    "rows_per_page": 20,
    "page": 1,
    "total_pages": 1,
    "links": {
      "first-page": {
        "href": "/v1/profiles/{profileReference}/articles?page=1",
        "method": "GET"
      },
      "current-page": {
        "href": "/v1/profiles/{profileReference}/articles?page=1",
        "method": "GET"
      }
    }
  },
  "correlation_id": "5f0c2a9e4b7d4c1e"
}
```

## Used by

- get_person
