Overview Documentation API Reference Playground Pricing
Sign In Get API Key

API Reference

Base URL: https://api.factivelabs.com

All endpoints require Bearer token authentication unless noted. Responses are JSON.

POST /api/v1/verify

Submit content for fact-checking. Extracts individual claims and verifies each one against web sources. Supports three response modes: synchronous, streaming (SSE), and asynchronous (job polling).

POST /api/v1/verify Verify content for factual accuracy

Request Body

ParameterTypeRequiredDescription
content string Required The text to verify, or a URL pointing to content. Maximum length depends on your plan (Free: 10K chars, Pro: 50K, Enterprise: 100K).
mode string Required Content type. One of: text, url, youtube, tiktok, pdf, docx, image.
stream boolean Optional Enable Server-Sent Events streaming. Default: false. When true, response is streamed as SSE events.
async boolean Optional Enable async mode. Default: false. When true, returns a job ID immediately for polling.
filter_tables boolean Optional Skip granular table/statistical claims that are hard to verify. Default: true.

Response (Synchronous)

{
  "id": "ver_abc123def456",
  "status": "completed",
  "claims": [
    {
      "text": "The Earth is approximately 4.5 billion years old",
      "verdict": "confirmed",
      "explanation": "Scientific evidence from radiometric dating consistently supports...",
      "sources": [
        {
          "title": "Age of Earth - USGS",
          "url": "https://www.usgs.gov/...",
          "snippet": "The age of the Earth is estimated at 4.54 billion years..."
        }
      ],
      "offset": {"start": 0, "end": 49}
    }
  ],
  "usage": {
    "claims_extracted": 1,
    "claims_verified": 1,
    "content_length": 49
  }
}

Response (Async)

{
  "job_id": "job_xyz789",
  "status": "processing"
}

SSE Events (Streaming)

event: claim
data: {"text": "...", "verdict": "confirmed", "explanation": "...", "sources": [...]}

event: done
data: {"claims_total": 3, "usage": {"claims_extracted": 3, "claims_verified": 3}}

POST /api/v1/extract

Extract individual claims from content using ProRata's extraction engine. No verification is performed — returns claims only. Significantly faster and cheaper than the verify endpoint.

POST /api/v1/extract Extract claims (no verification)

Request Body

ParameterTypeRequiredDescription
content string Required The text to extract claims from. Maximum length depends on plan.
content_type string Required Input format: text, url, youtube, tiktok, pdf, docx, image.
max_claims integer Optional Maximum claims to extract (1-500). Default: 100.
context string Optional Additional context to improve extraction accuracy.
skip_table_claims boolean Optional Filter out granular table/statistical claims. Default: true.

Response

{
  "id": "ex_abc123def456",
  "status": "complete",
  "claims": [
    {
      "text": "The Earth is approximately 4.5 billion years old",
      "sentence": "The Earth is approximately 4.5 billion years old.",
      "start_offset": 0,
      "end_offset": 49,
      "filtered": false
    }
  ],
  "claims_count": 1,
  "processing_time_ms": 820,
  "usage": {
    "claims_extracted": 1,
    "claims_filtered": 0,
    "content_length": 49,
    "cost_usd": 0.002
  }
}

GET /api/v1/jobs/{id}

Check the status of an async verification job. Poll this endpoint after submitting a request with "async": true.

GET /api/v1/jobs/{job_id} Check async job status

Path Parameters

ParameterTypeRequiredDescription
job_id string Required The job ID returned from the verify endpoint when using async mode.

Response (Processing)

{
  "job_id": "job_xyz789",
  "status": "processing",
  "progress": 0.45,
  "claims_so_far": 3
}

Response (Completed)

{
  "job_id": "job_xyz789",
  "status": "completed",
  "claims": [...],
  "usage": {
    "claims_extracted": 12,
    "claims_verified": 12,
    "content_length": 4521
  }
}

Response (Failed)

{
  "job_id": "job_xyz789",
  "status": "failed",
  "error": "Content extraction failed: unable to parse PDF"
}

POST /api/v1/verify/batch

Submit multiple documents for verification in a single request. Each item is processed independently.

POST /api/v1/verify/batch Batch verify multiple documents

Request Body

ParameterTypeRequiredDescription
items array Required Array of verification requests. Each item has content and mode fields. Max items: Free 5, Pro 50, Enterprise 100.

Request Example

{
  "items": [
    {"content": "The speed of light is 300,000 km/s", "mode": "text"},
    {"content": "https://example.com/article", "mode": "url"},
    {"content": "Water boils at 100 degrees Celsius at sea level", "mode": "text"}
  ]
}

Response

{
  "results": [
    {"id": "ver_001", "status": "completed", "claims": [...], "usage": {...}},
    {"id": "ver_002", "status": "completed", "claims": [...], "usage": {...}},
    {"id": "ver_003", "status": "completed", "claims": [...], "usage": {...}}
  ],
  "total_usage": {
    "claims_extracted": 5,
    "claims_verified": 5,
    "items_processed": 3
  }
}

GET /health

Health check endpoint. No authentication required.

GET /health Health check (no auth)

Response

{"status": "ok", "version": "1.0.0"}

Claim Object

Represents a single extracted and verified claim.

FieldTypeDescription
textstringThe claim text, with coreferences resolved (pronouns replaced with names).
verdictstringOne of: confirmed, disputed, inconclusive.
explanationstringPlain-English explanation of why the claim received this verdict.
sourcesarray[Source]Array of source citations supporting the verdict.
offsetobject{"start": int, "end": int} — character positions in the original content.

ExtractedClaim Object

Represents a single extracted claim (no verification data).

FieldTypeDescription
textstringThe extracted claim text, self-contained and verifiable.
sentencestringOriginal sentence from which the claim was extracted.
start_offsetintegerCharacter start position in the source text (nullable).
end_offsetintegerCharacter end position in the source text (nullable).
filteredbooleanTrue if the claim was flagged as granular table data by the filter.

Source Object

FieldTypeDescription
titlestringTitle of the source page or document.
urlstringURL to the source.
snippetstringRelevant excerpt from the source.

Usage Object

FieldTypeDescription
claims_extractedintegerNumber of claims extracted from the content.
claims_verifiedintegerNumber of claims that were verified (may be less if table filter is on).
content_lengthintegerCharacter length of the input content.

Error Object

FieldTypeDescription
error.codestringMachine-readable error code (e.g., rate_limit_exceeded, invalid_api_key).
error.messagestringHuman-readable error description.
error.retry_afterintegerSeconds to wait before retrying (for rate limit errors).