Skip to content
Documentation/Verification

Verify a claim

Check a factual claim against sources and return citations, source stances, and a verdict.

Markdown
POST/api/v1/verifyhttps://api.webcite.co

When to use it

Use this when you need sources and an assessment of whether they support a claim. Set decompose_claim: true to check the parts of a compound claim. Both /verify and /verify/stream support decomposition.

include_numeric_assess adds an arithmetic check of the claim text to this JSON endpoint. It does not supply source figures or certify the choice of operands. Use numeric verification for retained source operands.

Evidence response contract

Production rollout verified on 24 September 2026: the hosted API includes evidence policy 13 and the hosted MCP connector runs 1.9.0. This does not publish or upgrade the npm package installed by local clients. Inspect response metadata and the installed client version; saved responses retain their original policy and evidence time.

Preserve each citation's optional evidence receipt and credibility_basis, including null scores. Verdict confidence_available: false means calibrated truth confidence is unavailable; aggregation_score preserves the legacy number for compatibility. See publisher evidence receipts and score meanings. Source search does not become a judged verification merely because it returns citations.

Request

2 credits for search only; 3 with stance; 4 with a verdict. No additional operation charge.

Examples run on your server. Set WEBCITE_API_KEY first. Python examples use the requests package.

curl
curl --fail-with-body -X POST 'https://api.webcite.co/api/v1/verify' \
  -H "x-api-key: $WEBCITE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "claim": "The Eiffel Tower is 330 meters tall",
  "include_stance": true,
  "include_verdict": true
}'

Path and query parameters

Idempotency-Key (header)string

Optional 1-128 printable non-space ASCII key scoped to the account and verify endpoint. Reuse with the same request to recover a completed result without regenerating or charging twice. Different payload returns 409. Completed checkpoints are retained for 24 hours; missing checkpoints or unresolved accounting return 503 instead of repeating work. This header contract applies to JSON verify only.

Request body

claimstringrequired

The factual claim to verify

decompose_claimboolean

Break complex claims into sub-claims and verify each independently

Default: false

include_numeric_assessboolean

If true, also run deterministic numeric assessment on the claim text (no extra figure operands). Skips with reason when the claim is not numeric. Default false. Does not add a separate credit charge in this release; uses the verify bill only.

Default: false

include_stanceboolean

Include stance analysis for each source (adds 1 credit)

Default: true

include_verdictboolean

Generate an overall verdict with confidence score (adds 1 credit)

Default: true

thread_idstring

Thread ID to continue a conversation

Response

Read claim_groups for each claim and its citations, domain_groups, and verdict. Use operation_id and usage.credits to reconcile billing. Optional analysis fields may be absent; absence does not mean the claim is supported.

200 response

application/json

citationsobject[]legacy

[DEPRECATED] Use claim_groups[0].citations instead. Legacy citations array.

Show citations fields
authorstringrequired

Author or domain name

credibility_basisstring

Whether credibility_score rests on an actual measurement ('measured') or is a placeholder because no check has run yet ('unknown', e.g. no grounding signal or the citation has not been analysed). Absent means the same as "measured" for citations produced before this field existed.

Values: "measured""heuristic""unknown"

credibility_scorenumberrequired

Credibility/relevance score from 1-100 (higher = more credible/relevant/authoritative)

evidenceobject

Publisher evidence receipt v1: state, originalUrl, finalUrl, contentHash, retrievedAt, quoteMatch, typed publisher dates, retention, replayable and failureReason. Missing on legacy records means unknown provenance.

group_idstring

Group ID for citations from the same domain

highlight_rangesstring[]

Character ranges [start, end] in snippet that are most relevant to the claim

idstringrequired

Unique citation identifier

is_group_primaryboolean

Whether this is the primary (highest-ranked) citation from its domain group

publication_yearnumber

Publication year of the cited source

ranknumberrequired

Sequential rank (1, 2, 3...) where rank 1 is the highest/best citation, based on credibility_score and verified status

ranking_factorsobject

Breakdown of how the ranking score was calculated

Show ranking_factors fields
content_relevancenumberrequired

How well the content matches the claim being verified (0-100).

recencynumberrequired

Publication freshness score (0-100). Current year = 100, decreases with age.

source_authoritynumberrequired

Domain reputation score (0-100). Higher scores for government, academic, major news sources.

snippetstringrequired

Relevant excerpt from the source

source_metadataobject

Additional metadata about the source

Show source_metadata fields
domainstringrequired

Extracted domain from URL

domain_categorystringrequired

Category of the source domain

Values: "government""academic""news""organization""encyclopedia""social""other"

is_fact_check_sitebooleanrequired

Whether this is a fact-checking website (snopes, politifact, etc.)

is_primary_sourcebooleanrequired

Whether this is a primary source (government, official, press release)

source_typestring

Source type: Government Document, Dataset, Journal, Report, Trusted Media, Article, Reddit, Social Media

Values: "Government Document""Dataset""Journal""Report""Trusted Media""Article""Reddit""Social Media"

stancestring

Whether this citation supports or contradicts the claim (only with useEnhancedAnalysis)

Values: "supports""contradicts""partially_supports""neutral""inconclusive"

stance_confidencenumber

Confidence in the stance assessment (0-100)

stance_explanationstring

Brief explanation of the stance determination

statusstringrequired

Verification status of the citation

titlestringrequired

Title of the cited source

urlstringrequired

URL of the cited source

claim_groupsobject[]

Unified tree: All data organized by claim. Each claim_group contains citations, domain_groups, and verdict.

Show claim_groups fields
citation_countnumberrequired

Number of citations for this claim

citationsobject[]required

All citations for this claim (full objects with stance, ranking, etc.)

Show citations fields
authorstringrequired

Author or domain name

credibility_basisstring

Whether credibility_score rests on an actual measurement ('measured') or is a placeholder because no check has run yet ('unknown', e.g. no grounding signal or the citation has not been analysed). Absent means the same as "measured" for citations produced before this field existed.

Values: "measured""heuristic""unknown"

credibility_scorenumberrequired

Credibility/relevance score from 1-100 (higher = more credible/relevant/authoritative)

evidenceobject

Publisher evidence receipt v1: state, originalUrl, finalUrl, contentHash, retrievedAt, quoteMatch, typed publisher dates, retention, replayable and failureReason. Missing on legacy records means unknown provenance.

group_idstring

Group ID for citations from the same domain

highlight_rangesstring[]

Character ranges [start, end] in snippet that are most relevant to the claim

idstringrequired

Unique citation identifier

is_group_primaryboolean

Whether this is the primary (highest-ranked) citation from its domain group

publication_yearnumber

Publication year of the cited source

ranknumberrequired

Sequential rank (1, 2, 3...) where rank 1 is the highest/best citation, based on credibility_score and verified status

ranking_factorsobject

Breakdown of how the ranking score was calculated

Show ranking_factors fields
content_relevancenumberrequired

How well the content matches the claim being verified (0-100).

recencynumberrequired

Publication freshness score (0-100). Current year = 100, decreases with age.

source_authoritynumberrequired

Domain reputation score (0-100). Higher scores for government, academic, major news sources.

snippetstringrequired

Relevant excerpt from the source

source_metadataobject

Additional metadata about the source

Show source_metadata fields
domainstringrequired

Extracted domain from URL

domain_categorystringrequired

Category of the source domain

Values: "government""academic""news""organization""encyclopedia""social""other"

is_fact_check_sitebooleanrequired

Whether this is a fact-checking website (snopes, politifact, etc.)

is_primary_sourcebooleanrequired

Whether this is a primary source (government, official, press release)

source_typestring

Source type: Government Document, Dataset, Journal, Report, Trusted Media, Article, Reddit, Social Media

Values: "Government Document""Dataset""Journal""Report""Trusted Media""Article""Reddit""Social Media"

stancestring

Whether this citation supports or contradicts the claim (only with useEnhancedAnalysis)

Values: "supports""contradicts""partially_supports""neutral""inconclusive"

stance_confidencenumber

Confidence in the stance assessment (0-100)

stance_explanationstring

Brief explanation of the stance determination

statusstringrequired

Verification status of the citation

titlestringrequired

Title of the cited source

urlstringrequired

URL of the cited source

claimstringrequired

The claim/sub-prompt text

claim_idstringrequired

Unique identifier for this claim group

claim_indexnumberrequired

Index of the claim (1-based)

domain_groupsobject[]

Citations grouped by domain (lightweight, for deduplication UI)

Show domain_groups fields
domainstringrequired

Domain that groups these citations

domain_categorystringrequired

Category of this domain

Values: "government""academic""news""organization""encyclopedia""social""other"

group_idstringrequired

Unique identifier for this domain group

group_stancestringrequired

Overall stance of citations from this domain

Values: "supports""contradicts""mixed""neutral"

primary_citation_idstringrequired

ID of the primary (highest-ranked) citation from this domain

stance_summarystringrequired

Overall stance summary based on citations

Values: "supported""contradicted""mixed""unverifiable"

verdictobject

Verdict for this claim (streamed as citations complete)

Show verdict fields
aggregation_scorenumber

Legacy aggregate score retained for compatibility

calibrated_confidencenumber | null
claimstringrequired

The original prompt/claim that was analyzed

confidencenumberrequired

Legacy aggregation score (0-100); use confidence_available and calibrated_confidence for calibration status

confidence_availableboolean

True only when calibrated confidence is available

confidence_basisstring

Values: "unknown""heuristic""calibrated"

conflictobject | null

The quoted, named pair of sources behind a "mixed" verdict. Null for every other verdict.

Show conflict fields
contradictingobjectrequired
Show contradicting fields
citation_idstringrequired

Id of the citation taking this side

quotestringrequired

The text this source actually carries, quoted rather than summarised, so a reader can check the disagreement themselves

sourcestringrequired

The source, by url where known and by domain otherwise

supportingobjectrequired
Show supporting fields
citation_idstringrequired

Id of the citation taking this side

quotestringrequired

The text this source actually carries, quoted rather than summarised, so a reader can check the disagreement themselves

sourcestringrequired

The source, by url where known and by domain otherwise

correction_statusstring

Whether a source-backed replacement statement is available

Values: "available""not_established""conflicted""not_needed"

correctionsobject[]

Corrections when the claim contains inaccuracies

Show corrections fields
actualstringlegacy

Deprecated v1 alias of corrected_statement

citation_idsstring[]required

IDs of citations that support this correction

claimedstringrequired

What the user originally claimed

corrected_statementstringrequired

A standalone replacement statement supported by the cited evidence

proofobject[]required
Show proof fields
citation_idstringrequired
quotestringrequired

Exact passage copied from the cited source excerpt

document_breakdownobject

Stance counts over every document analysed, before syndicated copies of one telling were collapsed into a single origin.

Show document_breakdown fields
contradictsnumberrequired

Number of citations that contradict the claim

inconclusivenumber

Number of citations that looked at the claim and could not tell. Distinct from neutral, which is a source that took no side.

irrelevantnumber

Number of citations judged off-topic. Excluded from every verdict denominator.

neutralnumberrequired

Number of citations that took no side. This counts the neutral stance only. It previously also absorbed inconclusive and unscored citations, which are now reported in their own fields below.

partially_supportsnumberrequired

Number of citations that partially support the claim

supportsnumberrequired

Number of citations that fully support the claim

unknownnumber

Number of citations with no stance recorded. Never treated as agreement or as neutral: these were not scored, not scored as undecided.

document_countnumber

Documents analysed. Reported for transparency; origin_count is what the verdict counts.

insufficient_evidenceboolean

True when the counts were split but no two sources could be quoted disagreeing, so the split was reported as unverifiable rather than as a controversy.

key_findingsobject[]

Key facts extracted from citations (only with useEnhancedAnalysis)

Show key_findings fields
citation_idsstring[]required

IDs of citations that support this finding

confidencenumberrequired

Legacy model finding score (0-100); not calibrated truth confidence

confidence_availableboolean

True only when calibrated confidence is available

confidence_basisstring

Values: "unknown""heuristic""calibrated"

findingstringrequired

A key fact extracted from the citations

origin_countnumber

Distinct origins behind those documents. Four outlets running one wire story are four documents and one origin, and only this number votes.

resultstringrequired

Overall verdict based on citation analysis

Values: "supported""partially_supported""contradicted""mixed""unverifiable"

stance_breakdownobjectrequired

Breakdown of citation stances over distinct ORIGINS, which is what the verdict is computed from. For the raw per-document counts before origins were collapsed, see document_breakdown.

Show stance_breakdown fields
contradictsnumberrequired

Number of citations that contradict the claim

inconclusivenumber

Number of citations that looked at the claim and could not tell. Distinct from neutral, which is a source that took no side.

irrelevantnumber

Number of citations judged off-topic. Excluded from every verdict denominator.

neutralnumberrequired

Number of citations that took no side. This counts the neutral stance only. It previously also absorbed inconclusive and unscored citations, which are now reported in their own fields below.

partially_supportsnumberrequired

Number of citations that partially support the claim

supportsnumberrequired

Number of citations that fully support the claim

unknownnumber

Number of citations with no stance recorded. Never treated as agreement or as neutral: these were not scored, not scored as undecided.

summarystringrequired

Human-readable summary of the findings

unverified_claimsstring[]

Parts of the claim that could not be verified by any source

contentstring

Text content from agent (for non-citation responses)

domain_groupsobject[]legacy

[DEPRECATED] Use claim_groups[n].domain_groups instead. Legacy domain grouping.

Show domain_groups fields
domainstringrequired

Domain that groups these citations

domain_categorystringrequired

Category of this domain

Values: "government""academic""news""organization""encyclopedia""social""other"

group_idstringrequired

Unique identifier for this domain group

group_stancestringrequired

Overall stance of citations from this domain

Values: "supports""contradicts""mixed""neutral"

primary_citation_idstringrequired

ID of the primary (highest-ranked) citation from this domain

generated_promptsstring[]

Generated sub-prompts when useMultiplePrompt is enabled

operation_idstring | null

Billing operation identifier on public v1 responses; null when no operation was recorded.

search_metadataobject

Metadata about the search and analysis process

Show search_metadata fields
analysis_modelstringrequired

AI model used for analysis

processing_time_msnumberrequired

Total processing time in milliseconds

relevant_sources_foundnumberrequired

Number of relevant sources found and included

total_sources_searchednumberrequired

Total number of sources searched

thread_idstring

Thread ID for conversation continuity

totalResultsnumber

Total number of citations across all claims

usageobject

Billing usage on public v1 responses.

Show usage fields
creditsnumber | nullrequired

Credits actually deducted; null when a priced operation was not metered. Zero denotes a genuinely free operation.

verdictobjectlegacy

[DEPRECATED] Use claim_groups[n].verdict instead. Legacy overall verdict.

Show verdict fields
aggregation_scorenumber

Legacy aggregate score retained for compatibility

calibrated_confidencenumber | null
claimstringrequired

The original prompt/claim that was analyzed

confidencenumberrequired

Legacy aggregation score (0-100); use confidence_available and calibrated_confidence for calibration status

confidence_availableboolean

True only when calibrated confidence is available

confidence_basisstring

Values: "unknown""heuristic""calibrated"

conflictobject | null

The quoted, named pair of sources behind a "mixed" verdict. Null for every other verdict.

Show conflict fields
contradictingobjectrequired
Show contradicting fields
citation_idstringrequired

Id of the citation taking this side

quotestringrequired

The text this source actually carries, quoted rather than summarised, so a reader can check the disagreement themselves

sourcestringrequired

The source, by url where known and by domain otherwise

supportingobjectrequired
Show supporting fields
citation_idstringrequired

Id of the citation taking this side

quotestringrequired

The text this source actually carries, quoted rather than summarised, so a reader can check the disagreement themselves

sourcestringrequired

The source, by url where known and by domain otherwise

correction_statusstring

Whether a source-backed replacement statement is available

Values: "available""not_established""conflicted""not_needed"

correctionsobject[]

Corrections when the claim contains inaccuracies

Show corrections fields
actualstringlegacy

Deprecated v1 alias of corrected_statement

citation_idsstring[]required

IDs of citations that support this correction

claimedstringrequired

What the user originally claimed

corrected_statementstringrequired

A standalone replacement statement supported by the cited evidence

proofobject[]required
Show proof fields
citation_idstringrequired
quotestringrequired

Exact passage copied from the cited source excerpt

document_breakdownobject

Stance counts over every document analysed, before syndicated copies of one telling were collapsed into a single origin.

Show document_breakdown fields
contradictsnumberrequired

Number of citations that contradict the claim

inconclusivenumber

Number of citations that looked at the claim and could not tell. Distinct from neutral, which is a source that took no side.

irrelevantnumber

Number of citations judged off-topic. Excluded from every verdict denominator.

neutralnumberrequired

Number of citations that took no side. This counts the neutral stance only. It previously also absorbed inconclusive and unscored citations, which are now reported in their own fields below.

partially_supportsnumberrequired

Number of citations that partially support the claim

supportsnumberrequired

Number of citations that fully support the claim

unknownnumber

Number of citations with no stance recorded. Never treated as agreement or as neutral: these were not scored, not scored as undecided.

document_countnumber

Documents analysed. Reported for transparency; origin_count is what the verdict counts.

insufficient_evidenceboolean

True when the counts were split but no two sources could be quoted disagreeing, so the split was reported as unverifiable rather than as a controversy.

key_findingsobject[]

Key facts extracted from citations (only with useEnhancedAnalysis)

Show key_findings fields
citation_idsstring[]required

IDs of citations that support this finding

confidencenumberrequired

Legacy model finding score (0-100); not calibrated truth confidence

confidence_availableboolean

True only when calibrated confidence is available

confidence_basisstring

Values: "unknown""heuristic""calibrated"

findingstringrequired

A key fact extracted from the citations

origin_countnumber

Distinct origins behind those documents. Four outlets running one wire story are four documents and one origin, and only this number votes.

resultstringrequired

Overall verdict based on citation analysis

Values: "supported""partially_supported""contradicted""mixed""unverifiable"

stance_breakdownobjectrequired

Breakdown of citation stances over distinct ORIGINS, which is what the verdict is computed from. For the raw per-document counts before origins were collapsed, see document_breakdown.

Show stance_breakdown fields
contradictsnumberrequired

Number of citations that contradict the claim

inconclusivenumber

Number of citations that looked at the claim and could not tell. Distinct from neutral, which is a source that took no side.

irrelevantnumber

Number of citations judged off-topic. Excluded from every verdict denominator.

neutralnumberrequired

Number of citations that took no side. This counts the neutral stance only. It previously also absorbed inconclusive and unscored citations, which are now reported in their own fields below.

partially_supportsnumberrequired

Number of citations that partially support the claim

supportsnumberrequired

Number of citations that fully support the claim

unknownnumber

Number of citations with no stance recorded. Never treated as agreement or as neutral: these were not scored, not scored as undecided.

summarystringrequired

Human-readable summary of the findings

unverified_claimsstring[]

Parts of the claim that could not be verified by any source

Errors

For 400, check the request fields and source identifiers. For 401, check your API key. For 429, wait for the retry interval. See the errors guide before retrying a billable request.

401
Unauthorized - API key required
409
Idempotency-Key reused with a different verification request
429
Rate limit exceeded
503
Idempotent work in progress, saved result unavailable, or accounting unresolved; retry with the same key
Error handling and retry guidance