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

# POST /people

> Indexed executives, board, founders, investors.

## Use case

Get the indexed-people list for a company — executives, board members, founders, investors. **The index covers SEC-filed individuals and news-mentioned individuals; mid-career and individual-contributor roles are not indexed by design.** When you query a role type that isn't covered, BETA returns sparse results with an explicit `coverage_note` — see [Citation Contract](/citation-contract#what-beta-refuses-to-assert).

## Request

<ParamField body="company" type="string" required>
  Company name or entity key. 2–200 characters.
</ParamField>

<ParamField body="filters" type="object">
  Narrow the result set:

  <Expandable title="filter fields">
    <ResponseField name="filters.role_type" type="array">e.g., `["executive", "board"]` to restrict by role category.</ResponseField>
    <ResponseField name="filters.current_only" type="boolean">If `true`, only return `is_current: true` records.</ResponseField>
    <ResponseField name="filters.person_name" type="string">Lookup a specific person by name.</ResponseField>
  </Expandable>
</ParamField>

## Response

<ResponseField name="entity" type="object">Resolved entity (`key`, `name`).</ResponseField>

<ResponseField name="people" type="array">
  Up to 25 person records, ordered by role priority (CEO → President → CFO → CTO → COO → others) then by `verified_count`.

  <Expandable title="person fields">
    <ResponseField name="person.name" type="string">Person's name as it appears in sources.</ResponseField>
    <ResponseField name="person.role" type="string | null">Their role at the company.</ResponseField>
    <ResponseField name="person.role_type" type="string | null">Role category: `executive` · `board` · `founder` · `investment`.</ResponseField>
    <ResponseField name="person.is_current" type="boolean">Whether the role is current (based on latest source).</ResponseField>
    <ResponseField name="person.source_types" type="array">e.g., `["news_mention"]`, `["news_extraction"]`, `["sec_filing"]`.</ResponseField>
    <ResponseField name="person.verified_count" type="integer">Times this person+role has been corroborated across sources. Higher = more confident.</ResponseField>
    <ResponseField name="person.last_seen" type="string | null">Most recent source date, `YYYY-MM-DD`.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta" type="object">
  <Expandable title="meta fields">
    <ResponseField name="meta.total_indexed" type="integer">Total distinct people indexed for this company.</ResponseField>
    <ResponseField name="meta.coverage_note" type="string">Always present — describes what the index covers and what it doesn't.</ResponseField>
    <ResponseField name="meta.resolution" type="object">Provenance — see [Citation Contract](/citation-contract).</ResponseField>
  </Expandable>
</ResponseField>

## Code samples

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://api.getbeta.io/api/v1/people \
    -H "Authorization: Bearer $BETA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"company": "Anthropic"}'
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch('https://api.getbeta.io/api/v1/people', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.BETA_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ company: 'Anthropic' })
  });
  ```

  ```python Python theme={null}
  import os, requests
  res = requests.post(
      'https://api.getbeta.io/api/v1/people',
      headers={'Authorization': f'Bearer {os.environ["BETA_API_KEY"]}'},
      json={'company': 'Anthropic'}
  )
  ```
</CodeGroup>

## Live response (truncated)

```json theme={null}
{
  "entity": { "key": "anthropic", "name": "Anthropic" },
  "people": [
    {
      "name": "Dario Amodei",
      "role": "CEO",
      "role_type": "executive",
      "is_current": true,
      "source_types": ["news_mention"],
      "verified_count": 17,
      "last_seen": "2026-03-18"
    },
    {
      "name": "Chris Liddell",
      "role": "Board member (former Microsoft CFO)",
      "role_type": "executive",
      "is_current": true,
      "source_types": ["news_mention"],
      "verified_count": 1,
      "last_seen": "2026-02-14"
    },
    {
      "name": "Irina Ghose",
      "role": "Managing Director of India",
      "role_type": "executive",
      "is_current": true,
      "source_types": ["news_extraction"],
      "verified_count": 18,
      "last_seen": "2026-02-19"
    }
  ],
  "meta": {
    "total_indexed": 15,
    "coverage_note": "People index covers SEC-filed executives, board members, and news-mentioned individuals. Mid-level roles are not indexed.",
    "resolution": { "source": "curated", "confidence": 1 }
  }
}
```

<Note>
  **Deduplication caveat**: news-extraction sources occasionally produce multiple records for the same person with slightly different role text (e.g., `"CEO"` and `"Chief (CEO)"`). Treat them as one person; dedupe on `name` (or normalized name) + `role_type` in your consumer.
</Note>

## Errors

| Status | Body                                                               | When               |
| ------ | ------------------------------------------------------------------ | ------------------ |
| `404`  | `{"error": "Company not found", "code": "NOT_FOUND"}`              | No entity resolved |
| Other  | See [`/validate`](/endpoints/validate#errors) for the standard set |                    |

## Citation pointer

When `people: []` or sparse, **read `meta.coverage_note`** — that's BETA's explicit declaration of what the index doesn't cover. See [Citation Contract → What BETA refuses to assert](/citation-contract#what-beta-refuses-to-assert).
