Verify a claim
Check a factual claim against sources and return citations, source stances, and a verdict.
/api/v1/verifyhttps://api.webcite.coWhen 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 --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)stringOptional 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
claimstringrequiredThe factual claim to verify
decompose_claimbooleanBreak complex claims into sub-claims and verify each independently
Default: false
include_numeric_assessbooleanIf 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_stancebooleanInclude stance analysis for each source (adds 1 credit)
Default: true
include_verdictbooleanGenerate an overall verdict with confidence score (adds 1 credit)
Default: true
thread_idstringThread 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
authorstringrequiredAuthor or domain name
credibility_basisstringWhether 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_scorenumberrequiredCredibility/relevance score from 1-100 (higher = more credible/relevant/authoritative)
evidenceobjectPublisher evidence receipt v1: state, originalUrl, finalUrl, contentHash, retrievedAt, quoteMatch, typed publisher dates, retention, replayable and failureReason. Missing on legacy records means unknown provenance.
group_idstringGroup ID for citations from the same domain
highlight_rangesstring[]Character ranges [start, end] in snippet that are most relevant to the claim
idstringrequiredUnique citation identifier
is_group_primarybooleanWhether this is the primary (highest-ranked) citation from its domain group
publication_yearnumberPublication year of the cited source
ranknumberrequiredSequential rank (1, 2, 3...) where rank 1 is the highest/best citation, based on credibility_score and verified status
ranking_factorsobjectBreakdown of how the ranking score was calculated
Show ranking_factors fields
content_relevancenumberrequiredHow well the content matches the claim being verified (0-100).
recencynumberrequiredPublication freshness score (0-100). Current year = 100, decreases with age.
source_authoritynumberrequiredDomain reputation score (0-100). Higher scores for government, academic, major news sources.
snippetstringrequiredRelevant excerpt from the source
source_metadataobjectAdditional metadata about the source
Show source_metadata fields
domainstringrequiredExtracted domain from URL
domain_categorystringrequiredCategory of the source domain
Values: "government""academic""news""organization""encyclopedia""social""other"
is_fact_check_sitebooleanrequiredWhether this is a fact-checking website (snopes, politifact, etc.)
is_primary_sourcebooleanrequiredWhether this is a primary source (government, official, press release)
source_typestringSource type: Government Document, Dataset, Journal, Report, Trusted Media, Article, Reddit, Social Media
Values: "Government Document""Dataset""Journal""Report""Trusted Media""Article""Reddit""Social Media"
stancestringWhether this citation supports or contradicts the claim (only with useEnhancedAnalysis)
Values: "supports""contradicts""partially_supports""neutral""inconclusive"
stance_confidencenumberConfidence in the stance assessment (0-100)
stance_explanationstringBrief explanation of the stance determination
statusstringrequiredVerification status of the citation
titlestringrequiredTitle of the cited source
urlstringrequiredURL 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_countnumberrequiredNumber of citations for this claim
citationsobject[]requiredAll citations for this claim (full objects with stance, ranking, etc.)
Show citations fields
authorstringrequiredAuthor or domain name
credibility_basisstringWhether 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_scorenumberrequiredCredibility/relevance score from 1-100 (higher = more credible/relevant/authoritative)
evidenceobjectPublisher evidence receipt v1: state, originalUrl, finalUrl, contentHash, retrievedAt, quoteMatch, typed publisher dates, retention, replayable and failureReason. Missing on legacy records means unknown provenance.
group_idstringGroup ID for citations from the same domain
highlight_rangesstring[]Character ranges [start, end] in snippet that are most relevant to the claim
idstringrequiredUnique citation identifier
is_group_primarybooleanWhether this is the primary (highest-ranked) citation from its domain group
publication_yearnumberPublication year of the cited source
ranknumberrequiredSequential rank (1, 2, 3...) where rank 1 is the highest/best citation, based on credibility_score and verified status
ranking_factorsobjectBreakdown of how the ranking score was calculated
Show ranking_factors fields
content_relevancenumberrequiredHow well the content matches the claim being verified (0-100).
recencynumberrequiredPublication freshness score (0-100). Current year = 100, decreases with age.
source_authoritynumberrequiredDomain reputation score (0-100). Higher scores for government, academic, major news sources.
snippetstringrequiredRelevant excerpt from the source
source_metadataobjectAdditional metadata about the source
Show source_metadata fields
domainstringrequiredExtracted domain from URL
domain_categorystringrequiredCategory of the source domain
Values: "government""academic""news""organization""encyclopedia""social""other"
is_fact_check_sitebooleanrequiredWhether this is a fact-checking website (snopes, politifact, etc.)
is_primary_sourcebooleanrequiredWhether this is a primary source (government, official, press release)
source_typestringSource type: Government Document, Dataset, Journal, Report, Trusted Media, Article, Reddit, Social Media
Values: "Government Document""Dataset""Journal""Report""Trusted Media""Article""Reddit""Social Media"
stancestringWhether this citation supports or contradicts the claim (only with useEnhancedAnalysis)
Values: "supports""contradicts""partially_supports""neutral""inconclusive"
stance_confidencenumberConfidence in the stance assessment (0-100)
stance_explanationstringBrief explanation of the stance determination
statusstringrequiredVerification status of the citation
titlestringrequiredTitle of the cited source
urlstringrequiredURL of the cited source
claimstringrequiredThe claim/sub-prompt text
claim_idstringrequiredUnique identifier for this claim group
claim_indexnumberrequiredIndex of the claim (1-based)
domain_groupsobject[]Citations grouped by domain (lightweight, for deduplication UI)
Show domain_groups fields
domainstringrequiredDomain that groups these citations
domain_categorystringrequiredCategory of this domain
Values: "government""academic""news""organization""encyclopedia""social""other"
group_idstringrequiredUnique identifier for this domain group
group_stancestringrequiredOverall stance of citations from this domain
Values: "supports""contradicts""mixed""neutral"
primary_citation_idstringrequiredID of the primary (highest-ranked) citation from this domain
stance_summarystringrequiredOverall stance summary based on citations
Values: "supported""contradicted""mixed""unverifiable"
verdictobjectVerdict for this claim (streamed as citations complete)
Show verdict fields
aggregation_scorenumberLegacy aggregate score retained for compatibility
calibrated_confidencenumber | nullclaimstringrequiredThe original prompt/claim that was analyzed
confidencenumberrequiredLegacy aggregation score (0-100); use confidence_available and calibrated_confidence for calibration status
confidence_availablebooleanTrue only when calibrated confidence is available
confidence_basisstringValues: "unknown""heuristic""calibrated"
conflictobject | nullThe quoted, named pair of sources behind a "mixed" verdict. Null for every other verdict.
Show conflict fields
contradictingobjectrequiredShow contradicting fields
citation_idstringrequiredId of the citation taking this side
quotestringrequiredThe text this source actually carries, quoted rather than summarised, so a reader can check the disagreement themselves
sourcestringrequiredThe source, by url where known and by domain otherwise
supportingobjectrequiredShow supporting fields
citation_idstringrequiredId of the citation taking this side
quotestringrequiredThe text this source actually carries, quoted rather than summarised, so a reader can check the disagreement themselves
sourcestringrequiredThe source, by url where known and by domain otherwise
correction_statusstringWhether a source-backed replacement statement is available
Values: "available""not_established""conflicted""not_needed"
correctionsobject[]Corrections when the claim contains inaccuracies
Show corrections fields
actualstringlegacyDeprecated v1 alias of corrected_statement
citation_idsstring[]requiredIDs of citations that support this correction
claimedstringrequiredWhat the user originally claimed
corrected_statementstringrequiredA standalone replacement statement supported by the cited evidence
proofobject[]requiredShow proof fields
citation_idstringrequiredquotestringrequiredExact passage copied from the cited source excerpt
document_breakdownobjectStance counts over every document analysed, before syndicated copies of one telling were collapsed into a single origin.
Show document_breakdown fields
contradictsnumberrequiredNumber of citations that contradict the claim
inconclusivenumberNumber of citations that looked at the claim and could not tell. Distinct from neutral, which is a source that took no side.
irrelevantnumberNumber of citations judged off-topic. Excluded from every verdict denominator.
neutralnumberrequiredNumber 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_supportsnumberrequiredNumber of citations that partially support the claim
supportsnumberrequiredNumber of citations that fully support the claim
unknownnumberNumber of citations with no stance recorded. Never treated as agreement or as neutral: these were not scored, not scored as undecided.
document_countnumberDocuments analysed. Reported for transparency; origin_count is what the verdict counts.
insufficient_evidencebooleanTrue 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[]requiredIDs of citations that support this finding
confidencenumberrequiredLegacy model finding score (0-100); not calibrated truth confidence
confidence_availablebooleanTrue only when calibrated confidence is available
confidence_basisstringValues: "unknown""heuristic""calibrated"
findingstringrequiredA key fact extracted from the citations
origin_countnumberDistinct origins behind those documents. Four outlets running one wire story are four documents and one origin, and only this number votes.
resultstringrequiredOverall verdict based on citation analysis
Values: "supported""partially_supported""contradicted""mixed""unverifiable"
stance_breakdownobjectrequiredBreakdown 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
contradictsnumberrequiredNumber of citations that contradict the claim
inconclusivenumberNumber of citations that looked at the claim and could not tell. Distinct from neutral, which is a source that took no side.
irrelevantnumberNumber of citations judged off-topic. Excluded from every verdict denominator.
neutralnumberrequiredNumber 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_supportsnumberrequiredNumber of citations that partially support the claim
supportsnumberrequiredNumber of citations that fully support the claim
unknownnumberNumber of citations with no stance recorded. Never treated as agreement or as neutral: these were not scored, not scored as undecided.
summarystringrequiredHuman-readable summary of the findings
unverified_claimsstring[]Parts of the claim that could not be verified by any source
contentstringText 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
domainstringrequiredDomain that groups these citations
domain_categorystringrequiredCategory of this domain
Values: "government""academic""news""organization""encyclopedia""social""other"
group_idstringrequiredUnique identifier for this domain group
group_stancestringrequiredOverall stance of citations from this domain
Values: "supports""contradicts""mixed""neutral"
primary_citation_idstringrequiredID of the primary (highest-ranked) citation from this domain
generated_promptsstring[]Generated sub-prompts when useMultiplePrompt is enabled
operation_idstring | nullBilling operation identifier on public v1 responses; null when no operation was recorded.
search_metadataobjectMetadata about the search and analysis process
Show search_metadata fields
analysis_modelstringrequiredAI model used for analysis
processing_time_msnumberrequiredTotal processing time in milliseconds
relevant_sources_foundnumberrequiredNumber of relevant sources found and included
total_sources_searchednumberrequiredTotal number of sources searched
thread_idstringThread ID for conversation continuity
totalResultsnumberTotal number of citations across all claims
usageobjectBilling usage on public v1 responses.
Show usage fields
creditsnumber | nullrequiredCredits 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_scorenumberLegacy aggregate score retained for compatibility
calibrated_confidencenumber | nullclaimstringrequiredThe original prompt/claim that was analyzed
confidencenumberrequiredLegacy aggregation score (0-100); use confidence_available and calibrated_confidence for calibration status
confidence_availablebooleanTrue only when calibrated confidence is available
confidence_basisstringValues: "unknown""heuristic""calibrated"
conflictobject | nullThe quoted, named pair of sources behind a "mixed" verdict. Null for every other verdict.
Show conflict fields
contradictingobjectrequiredShow contradicting fields
citation_idstringrequiredId of the citation taking this side
quotestringrequiredThe text this source actually carries, quoted rather than summarised, so a reader can check the disagreement themselves
sourcestringrequiredThe source, by url where known and by domain otherwise
supportingobjectrequiredShow supporting fields
citation_idstringrequiredId of the citation taking this side
quotestringrequiredThe text this source actually carries, quoted rather than summarised, so a reader can check the disagreement themselves
sourcestringrequiredThe source, by url where known and by domain otherwise
correction_statusstringWhether a source-backed replacement statement is available
Values: "available""not_established""conflicted""not_needed"
correctionsobject[]Corrections when the claim contains inaccuracies
Show corrections fields
actualstringlegacyDeprecated v1 alias of corrected_statement
citation_idsstring[]requiredIDs of citations that support this correction
claimedstringrequiredWhat the user originally claimed
corrected_statementstringrequiredA standalone replacement statement supported by the cited evidence
proofobject[]requiredShow proof fields
citation_idstringrequiredquotestringrequiredExact passage copied from the cited source excerpt
document_breakdownobjectStance counts over every document analysed, before syndicated copies of one telling were collapsed into a single origin.
Show document_breakdown fields
contradictsnumberrequiredNumber of citations that contradict the claim
inconclusivenumberNumber of citations that looked at the claim and could not tell. Distinct from neutral, which is a source that took no side.
irrelevantnumberNumber of citations judged off-topic. Excluded from every verdict denominator.
neutralnumberrequiredNumber 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_supportsnumberrequiredNumber of citations that partially support the claim
supportsnumberrequiredNumber of citations that fully support the claim
unknownnumberNumber of citations with no stance recorded. Never treated as agreement or as neutral: these were not scored, not scored as undecided.
document_countnumberDocuments analysed. Reported for transparency; origin_count is what the verdict counts.
insufficient_evidencebooleanTrue 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[]requiredIDs of citations that support this finding
confidencenumberrequiredLegacy model finding score (0-100); not calibrated truth confidence
confidence_availablebooleanTrue only when calibrated confidence is available
confidence_basisstringValues: "unknown""heuristic""calibrated"
findingstringrequiredA key fact extracted from the citations
origin_countnumberDistinct origins behind those documents. Four outlets running one wire story are four documents and one origin, and only this number votes.
resultstringrequiredOverall verdict based on citation analysis
Values: "supported""partially_supported""contradicted""mixed""unverifiable"
stance_breakdownobjectrequiredBreakdown 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
contradictsnumberrequiredNumber of citations that contradict the claim
inconclusivenumberNumber of citations that looked at the claim and could not tell. Distinct from neutral, which is a source that took no side.
irrelevantnumberNumber of citations judged off-topic. Excluded from every verdict denominator.
neutralnumberrequiredNumber 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_supportsnumberrequiredNumber of citations that partially support the claim
supportsnumberrequiredNumber of citations that fully support the claim
unknownnumberNumber of citations with no stance recorded. Never treated as agreement or as neutral: these were not scored, not scored as undecided.
summarystringrequiredHuman-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