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

# Claim Detection

> Find the verifiable factual claims inside a block of text.

Given a block of text, such as the body of an article, this returns the statements in it that can actually be fact-checked. Opinions, questions, and rhetoric are left out.

Each detected claim carries a verbatim excerpt copied from your input, never a paraphrase, so you can locate it in the original text by substring match and highlight it.

Pair this with [Fact Checker](/api-reference/fact-checker): detect first, then verify each claim you care about.

## Request Body

<ParamField body="text" type="string" required>
  The text to scan. Maximum 20,000 characters.
</ParamField>

<ParamField body="url" type="string">
  Source URL of the text. Recorded with the result.
</ParamField>

<ParamField body="title" type="string">
  Title of the source page. Recorded with the result.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.factagora.com/api/v1/claims/detect" \
    -H "Authorization: Bearer fa_your_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "text": "The European Central Bank raised interest rates by 25 basis points on Thursday. Analysts think this was overdue. Eurozone inflation has stayed above 2% for eleven straight months.",
      "url": "https://example.com/ecb-article",
      "title": "ECB raises rates again"
    }'
  ```
</RequestExample>

## Response

<ResponseField name="claims" type="array">
  The detected claims, in the order they appear in the text.

  <Expandable title="Claim fields">
    <ResponseField name="id" type="string">Identifier for this detected claim</ResponseField>
    <ResponseField name="text" type="string">The sentence copied verbatim from your input. Use this for substring matching against the original text</ResponseField>
    <ResponseField name="normalized_claim" type="string">The same sentence with pronouns and references resolved from the surrounding context, so it stands on its own. Send this to Fact Checker rather than `text`. Identical to `text` when there was nothing to resolve</ResponseField>
    <ResponseField name="claim_type" type="string">One of `FACTUAL`, `STATISTICAL`, `QUOTE`, `EVENT`</ResponseField>
    <ResponseField name="title" type="string">Short label for the claim</ResponseField>
    <ResponseField name="description" type="string">Longer description of what is being claimed</ResponseField>
    <ResponseField name="confidence" type="number">How confident the detector is that this is a checkable claim, 0 to 1</ResponseField>
    <ResponseField name="category" type="string">Topic category of the claim</ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "claims": [
      {
        "id": "ck_01H8X2",
        "text": "The European Central Bank raised interest rates by 25 basis points on Thursday.",
        "normalized_claim": "The European Central Bank raised interest rates by 25 basis points on Thursday.",
        "claim_type": "EVENT",
        "title": "ECB raised rates by 25bp",
        "description": "A 25 basis point rate increase by the European Central Bank.",
        "confidence": 0.94,
        "category": "economy"
      },
      {
        "id": "ck_01H8X3",
        "text": "Eurozone inflation has stayed above 2% for eleven straight months.",
        "normalized_claim": "Eurozone inflation has stayed above 2% for eleven straight months.",
        "claim_type": "STATISTICAL",
        "title": "Eurozone inflation above 2% for 11 months",
        "description": "Inflation in the eurozone remained over the 2% target for eleven consecutive months.",
        "confidence": 0.88,
        "category": "economy"
      }
    ]
  }
  ```
</ResponseExample>

<Note>
  The sentence "Analysts think this was overdue" is not returned. It is an opinion, so there is nothing to verify.
</Note>
