> ## 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 /corroborate

> Verify a factual claim against SEC + news + people index.

## Use case

Verify a factual claim about a company against BETA's structured sources (SEC filings, M\&A transactions, material events, news, people index) before your agent acts on it. Returns `corroborated: true` with evidence + confidence, or `corroborated: false` with `reason: "no_match"` when sources don't support the claim. **This is the citation-discipline primitive** — treat `corroborated: false` as informational, not as failure.

For the standard integration pattern, see [Recipes → Corroborate before write](/recipes/corroborate-before-write).

## Request

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

<ParamField body="claims" type="array" required>
  Array of 1–10 claim objects. Each claim:

  <Expandable title="claim fields">
    <ResponseField name="claim.type" type="string">`role` · `event` · `person`.</ResponseField>
    <ResponseField name="claim.person_name" type="string">Required for `role` and `person` claims.</ResponseField>
    <ResponseField name="claim.role" type="string">Optional for `role` claims — e.g., `"CEO"`, `"CFO"`, `"Director"`.</ResponseField>
    <ResponseField name="claim.description" type="string">Required for `event` claims — keyword-style, e.g., `"acquisition of Mellanox"`.</ResponseField>
    <ResponseField name="claim.period" type="object">Optional `{start, end}` to bound when the claim should be true.</ResponseField>
  </Expandable>
</ParamField>

## Response

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

<ResponseField name="results" type="array">
  One result per submitted claim, indexed by `claim_index`.

  <Expandable title="result fields">
    <ResponseField name="result.claim_index" type="integer">Index into the input claims array.</ResponseField>
    <ResponseField name="result.corroborated" type="boolean">`true` if sources support the claim.</ResponseField>
    <ResponseField name="result.confidence" type="number">Confidence (0–1) based on evidence strength + source count.</ResponseField>
    <ResponseField name="result.reason" type="string">`multi_source_match` · `sec_filing_match` · `people_index_match` · `news_match` · `no_match` · `error` · `missing_input` · `unsupported_claim_type`</ResponseField>
    <ResponseField name="result.detail" type="string">Human-readable explanation.</ResponseField>
    <ResponseField name="result.evidence" type="array">Each evidence item has `type`, `date`, `text`, and `confidence`.</ResponseField>
    <ResponseField name="result.sources_checked" type="array">Which datasets BETA looked in — populated even on `no_match` so you can audit what was tried.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta" type="object">
  `sources_available`, `entity_coverage` (`public_company` | `private_company`), `corroborated_at` (ISO timestamp), `resolution` (per Citation Contract).
</ResponseField>

## Code samples

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://api.getbeta.io/api/v1/corroborate \
    -H "Authorization: Bearer $BETA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "company": "NVIDIA",
      "claims": [
        {"type": "role", "person_name": "Jensen Huang", "role": "CEO"}
      ]
    }'
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch('https://api.getbeta.io/api/v1/corroborate', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.BETA_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      company: 'NVIDIA',
      claims: [
        { type: 'role', person_name: 'Jensen Huang', role: 'CEO' }
      ]
    })
  });
  ```

  ```python Python theme={null}
  import os, requests
  res = requests.post(
      'https://api.getbeta.io/api/v1/corroborate',
      headers={'Authorization': f'Bearer {os.environ["BETA_API_KEY"]}'},
      json={
          'company': 'NVIDIA',
          'claims': [
              {'type': 'role', 'person_name': 'Jensen Huang', 'role': 'CEO'}
          ]
      }
  )
  ```
</CodeGroup>

## Live response

```json theme={null}
{
  "entity": {
    "key": "nvidia",
    "name": "NVIDIA Corporation",
    "verified": true
  },
  "results": [
    {
      "claim_index": 0,
      "corroborated": true,
      "confidence": 0.8,
      "reason": "people_index_match",
      "detail": "Jensen Huang found in 1 record(s) at this company.",
      "evidence": [
        {
          "type": "people_index",
          "person": "Jensen Huang",
          "role": "CEO",
          "source_type": "news_extraction",
          "is_current": true,
          "verified_count": 8
        }
      ],
      "sources_checked": [
        "sec_executive_changes",
        "company_mentioned_people"
      ]
    }
  ],
  "meta": {
    "sources_available": [
      "entity_registry",
      "sec_executive_changes",
      "sec_ma_transactions",
      "company_mentioned_people",
      "source_articles"
    ],
    "entity_coverage": "public_company",
    "corroborated_at": "2026-05-20T03:49:30.925Z",
    "resolution": { "source": "curated", "confidence": 1 }
  }
}
```

## Cost notes

`/corroborate` is BETA's most expensive call ($0.10/claim during overage versus $0.05 for the others). **Batch up to 10 claims per request** to minimize round-trip cost and latency.

## Errors

| Status | Body                                                  | When                 |
| ------ | ----------------------------------------------------- | -------------------- |
| `400`  | `{"error": "At least one claim required"}`            | Empty `claims` array |
| `400`  | `{"error": "Maximum 10 claims per request"}`          | `claims.length > 10` |
| `404`  | `{"error": "Company not found", "code": "NOT_FOUND"}` | No entity resolved   |

## Citation pointer

See [Citation Contract](/citation-contract#what-beta-refuses-to-assert) for how `corroborated: false` is the explicit refusal signal — the most important shape this endpoint produces.
