WebCite API

API documentation for WebCite public API endpoints. Use these endpoints to verify claims, search for sources, and manage citations.

Overview

Base URL
text
https://devapi.webcite.co/api
Authentication
All endpoints require authentication using an API key. Include your API key in the request headers.
bash
x-api-key: your-api-key-here

You can create and manage API keys from the API Keys page.

Credit System

WebCite uses a credit-based billing system. Each API operation consumes credits from your monthly allocation. Credits are charged per claim, not per citation - each API call verifies 1 claim and returns multiple citations.

Credit Costs
Citation search costs 2 credits. Full verification (default) costs 4 credits total.
OperationCreditsDescription
Citation/Search2Search web sources for a claim. Returns multiple citations.
Stance Analysis1Analyze if citations support or contradict the claim. Optional
Verdict1Generate overall verification verdict. Optional
Full Verification4Citation + Stance + Verdict (default)
Saving Credits
Control which operations run to reduce credit usage.
json
// Citation only (2 credits){  "prompt": "Your claim here",  "include_stance": false,  "include_verdict": false} // Citation + Stance (3 credits){  "prompt": "Your claim here",  "include_verdict": false} // Full verification (3 credits) - default{  "prompt": "Your claim here"}
Plans
PlanCredits/MonthPrice
Free100$0
Builder500$20
EnterpriseCustomCustom
Checking Your Credits
GET/v1/payment/subscription/credits
json
{  "credits": {    "used": 12,    "remaining": 88,    "total": 100  },  "usage_breakdown": {    "citations": 8,    "stances": 3,    "verdicts": 1  },  "allow_overage": true,  "billing_period_start": "2026-01-01T00:00:00.000Z",  "billing_period_end": "2026-01-31T23:59:59.000Z"}
Overage Billing Settings
Paid plans (Builder/Enterprise) can toggle overage billing on or off.

Get Current Setting

GET/v1/payment/subscription/overage-setting
json
{  "allow_overage": true,  "plan_type": "builder",  "can_toggle": true}

Toggle Overage Billing

PUT/v1/payment/subscription/overage-setting
json
// Request{ "allow_overage": false } // Response{  "allow_overage": false,  "message": "Overage billing disabled. Requests will be blocked when credits are exhausted."}

When overage is disabled, API requests return 400 error when credits are exhausted. When enabled, overages are billed at $0.03/credit.

Credit Usage in Responses
Credit usage is included in stream metadata events.
json
// Metadata event in stream response{  "type": "metadata",  "data": {    "thread_id": "...",    "citation_id": "...",    "creditUsage": {      "credits_used": 3,      "credits_remaining": 47    }  }}

Important Notes

  • Credits are charged per claim, not per citation
  • Each API call verifies 1 claim and returns multiple citations
  • All citations for a claim are covered by the credit cost
  • Credits reset at the start of each billing period

Verify Claim

Verify a factual claim against authoritative sources. Returns sources with stance analysis and an overall verdict.

POST/api/v1/verify

Request

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

Parameters

ParameterTypeDescription
claimrequired
string

The factual claim to verify

thread_idoptional
string

Thread ID to continue a conversation

include_stanceoptional
boolean

Include stance analysis for each source (supports/contradicts/neutral). Adds 1 credit.

Default: true

include_verdictoptional
boolean

Generate an overall verdict with confidence score. Adds 1 credit.

Default: true

decompose_claimoptional
boolean

Break complex claims into atomic sub-claims and verify each independently.

Default: false

Response

json
{  "citations": [    {      "title": "TypeScript Official Documentation",      "url": "https://www.typescriptlang.org/docs/",      "snippet": "TypeScript is a strongly typed programming language...",      "id": "1",      "author": "typescriptlang",      "status": "verified",      "source_type": "Article"    }  ],  "totalResults": 5,  "thread_id": "123e4567-e89b-12d3-a456-426614174000"}

Search Sources

Search for authoritative sources related to a query. Returns raw citations without stance analysis or verdict. Use this for cheaper, faster searches when you don't need verification.

POST/api/v1/sources/search
Credits: 2 (search only, no analysis)

Request

curl
curl -X POST 'https://devapi.webcite.co/api/api/v1/sources/search' \  -H 'Content-Type: application/json' \  -H 'x-api-key: YOUR_API_KEY' \  -d '{    "query": "climate change effects on coral reefs",    "limit": 10  }'

Parameters

ParameterTypeDescription
queryrequired
string

Search query to find sources for

limitoptional
number

Maximum number of sources to return (1-20)

Default: 10

Enhanced Analysis

When useEnhancedAnalysis: true is set, the API returns additional fields that help you understand whether sources support or contradict the claim, and an overall verdict.

Enhanced Citation Fields
Each citation object includes these additional optional fields when enhanced analysis is enabled.
json
{  "title": "Example Source",  "url": "https://example.com/article",  "snippet": "The research confirms that...",  "credibility_score": 92,   // Enhanced Analysis Fields  "stance": "supports",  "stance_confidence": 88,  "stance_explanation": "Source directly confirms the claim with data.",  "highlight_terms": ["research confirms", "data shows"],  "source_metadata": {    "domain": "example.gov",    "domain_category": "government",    "is_primary_source": true,    "is_fact_check_site": false  }}
Verdict Object
The response includes an overall verdict summarizing how all citations relate to the claim.
json
{  "verdict": {    "claim": "AI is transforming healthcare",    "result": "supported",    "confidence": 85,    "summary": "Based on 4 authoritative sources, the claim is well-supported.",    "stance_breakdown": {      "supports": 3,      "partially_supports": 1,      "contradicts": 0,      "neutral": 1    },    "key_findings": [      {        "finding": "AI diagnostic tools show 95% accuracy",        "citation_ids": ["1", "3"],        "confidence": 92      }    ],    "corrections": [],

Usage Notes

  • Enhanced analysis adds processing time and token usage
  • All enhanced fields are optional and only present when useEnhancedAnalysis: true
  • If enhanced analysis fails, the API returns basic response

Claim Decomposition

Optional feature. When verifying complex claims containing multiple facts, set useClaimDecomposition: true to automatically break the claim into atomic sub-claims and verify each independently. This provides more accurate verification and identifies exactly which parts of a claim are true or false. Default is false (standard single-claim verification).

Example Request
Complex claim with multiple verifiable facts
json
{  "prompt": "Tesla is the best-selling EV company founded by Elon Musk",  "useEnhancedAnalysis": true,  "useClaimDecomposition": true}
Decomposition Event
First event showing how the claim was broken down
json
{  "type": "decomposition",  "data": {    "original_claim": "Tesla is the best-selling EV company founded by Elon Musk",    "sub_claims": [      {        "id": "sub-1",        "claim": "Tesla is the best-selling EV company",        "status": "pending"      },      {        "id": "sub-2",        "claim": "Elon Musk founded Tesla",        "status": "pending"      }    ],    "decomposition_reasoning": "The claim contains two distinct verifiable facts..."  }}
Sub-Claim Result Event
Result for each verified sub-claim
json
{  "type": "sub-claim-result",  "data": {    "sub_claim_id": "sub-2",    "claim": "Elon Musk founded Tesla",    "result": "contradicted",    "confidence": 68,    "summary": "5 of 8 sources contradict this claim.",    "citation_count": 8,    "supporting_count": 0,    "contradicting_count": 5,    "top_citations": [      {        "id": "1",        "title": "wikipedia.org",        "url": "https://en.wikipedia.org/wiki/Tesla,_Inc.",        "stance": "contradicts",        "credibility_score": 69      }    ]  }}
Overall Verdict with Corrections
Final verdict showing which sub-claims were verified or contradicted
json
{  "type": "verdict",  "data": {    "claim": "Tesla is the best-selling EV company founded by Elon Musk",    "result": "partially_false",    "confidence": 75,    "summary": "Analyzed 2 sub-claims: 1 verified, 1 contradicted.",    "stance_breakdown": {      "supports": 1,      "partially_supports": 0,      "contradicts": 1,      "neutral": 0    },    "corrections": [      {        "claimed": "Elon Musk founded Tesla",        "actual": "Evidence contradicts this claim",        "citation_ids": ["1", "2"]      }    ]  }}

When to Use Claim Decomposition

  • Claims containing multiple facts (e.g., "X was founded by Y in Z")
  • Statements with conjunctions (and, but, while, because)
  • Complex assertions that need granular verification
  • When you need to know exactly which parts are true vs false

Unified Response Structure

All responses use a unified tree structure with claim_groups as the single source of truth. Each claim contains its citations, domain groups, and verdict - no duplication.

Unified Tree Structure
Both single-claim and multi-claim queries use the same structure. Verdicts stream in parallel as each claim's citations complete.
json
{  "claim_groups": [    {      "claim_id": "claim-1",      "claim_index": 1,      "claim": "Tesla was founded by Elon Musk",      "stance_summary": "contradicted",      "citation_count": 5,      "citations": [        {          "id": "1",          "title": "Wikipedia - Tesla, Inc.",          "url": "https://en.wikipedia.org/wiki/Tesla,_Inc.",          "snippet": "Tesla was founded by Martin Eberhard and Marc Tarpenning...",          "stance": "contradicts",          "credibility_score": 85        }      ],      "domain_groups": [        {          "group_id": "group-wikipedia-org",          "domain": "wikipedia.org",          "domain_category": "encyclopedia",          "group_stance": "contradicts",          "citation_ids": ["1"],          "primary_citation_id": "1"        }      ],      "verdict": {        "claim": "Tesla was founded by Elon Musk",        "result": "contradicted",        "confidence": 85,        "summary": "Tesla was founded by Eberhard and Tarpenning, not Musk.",        "stance_breakdown": {          "supports": 0,          "partially_supports": 1,          "contradicts": 4,          "neutral": 0        }      }    }  ],  "totalResults": 5,  "thread_id": "123e4567-e89b-12d3-a456-426614174000",  "generated_prompts": []

Key Benefits

  • No duplication: Citations only appear in their claim_group
  • Parallel verdicts: Each claim's verdict streams as its citations complete
  • Single tree: claim_groups → citations + domain_groups + verdict
  • Consistent structure: Same format for single and multi-claim queries
Legacy Fields (Deprecated)
For backward compatibility, top-level fields are still included but deprecated.

citations → Use claim_groups[n].citations

verdict → Use claim_groups[n].verdict

citation_groups → Use claim_groups[n].domain_groups

List Citations

Retrieves a paginated list of citations generated by the authenticated user.

GET/api/v1/citations

Parameters

ParameterTypeDescription
pageoptional
number

Page number (starts from 1)

Default: 1

limitoptional
number

Number of items per page (max 100)

Default: 20

thread_idoptional
string

Filter citations by thread ID

fieldsoptional
enum

Field set: minimal, basic, detailed, with_relations, all

Default: basic

Response

json
{  "statusCode": 200,  "message": "Citations fetched successfully",  "data": [    {      "id": "123e4567-e89b-12d3-a456-426614174000",      "thread_id": "thread-123",      "citation": "[{\"title\":\"Example\",\"url\":\"https://example.com\"}]",      "prompt": "Latest trends in AI",      "is_active": true,      "created_at": "2024-01-01T00:00:00.000Z"    }  ],  "pagination": {    "total": 100,    "page": 1,    "limit": 20,    "totalPages": 5,    "hasNextPage": true,    "hasPreviousPage": false

Get Citation by ID

Retrieves a specific citation by its ID for the authenticated user.

GET/api/v1/citations/:id

Path Parameters

ParameterTypeDescription
idrequired
string

The unique identifier of the citation

Response

json
{  "statusCode": 200,  "message": "Citation fetched successfully",  "data": {    "prompt": "Latest trends in AI",    "citation": "[{\"title\":\"Example\",\"url\":\"https://example.com\"}]"  }}

Error Response (404)

json
{  "statusCode": 404,  "message": "Citation not found or does not belong to the user"}

Upload File

Uploads a file to storage and creates an asset record. Files are automatically sanitized and made publicly accessible.

POST/api/v1/upload
Content-Type: multipart/form-data

Request

bash
curl -X POST 'https://devapi.webcite.co/api/api/v1/upload' \  -H 'x-api-key: YOUR_API_KEY' \  -F 'file=@/path/to/your/file.pdf'

Response

json
{  "statusCode": 200,  "message": "File uploaded successfully",  "data": {    "asset_id": "123e4567-e89b-12d3-a456-426614174000",    "asset_url": "https://storage.googleapis.com/bucket-name/path/to/file.pdf"  }}

Data Structures

Citation Object
json
{  // Required fields  "title": "TypeScript Official Documentation",  "url": "https://www.typescriptlang.org/docs/",  "snippet": "TypeScript is a strongly typed programming language...",  "id": "1",  "author": "typescriptlang",  "status": "verified",  "credibility_score": 95,   // Optional fields  "source_type": "Article",  "publication_year": 2024,   // Enhanced Analysis fields (only with useEnhancedAnalysis: true)  "stance": "supports",  "stance_confidence": 90,  "stance_explanation": "Source directly confirms the claim"}

source_type can be: Government Document, Dataset, Journal, Report, Trusted Media, Article, Reddit, Social Media

stance can be: supports, contradicts, partially_supports, neutral, inconclusive

Pagination Object
json
{  "total": 100,  "page": 1,  "limit": 20,  "totalPages": 5,  "hasNextPage": true,  "hasPreviousPage": false}

Integrations

WebCite integrates with popular AI platforms and automation tools. Use these integrations to add fact-verification to your workflows.

ClaudeMCP Server
Connect WebCite to Claude Desktop or Claude Code via Model Context Protocol (MCP).

Install via npm

bash
npm install -g webcite-mcp-server

View on npm: webcite-mcp-server

Claude Desktop Configuration

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

json
{  "mcpServers": {    "webcite": {      "command": "npx",      "args": ["-y", "webcite-mcp-server"],      "env": {        "WEBCITE_API_KEY": "wc_your_api_key_here"      }    }  }}

Claude Code

bash
claude mcp add webcite -- npx -y webcite-mcp-serverexport WEBCITE_API_KEY=wc_your_api_key_here

Available Tools

verify_claimFull verification with stance analysis and verdict
2-4 credits
search_sourcesSearch for authoritative sources (citations only)
2 credits
list_citationsList your past verification results
0 credits
get_citationGet details of a specific verification
0 credits

Example Usage

In Claude, say: "Use WebCite to verify: The Eiffel Tower is 330 meters tall"

ChatGPTGPT Actions
Add WebCite fact-checking to any ChatGPT Plus GPT using OpenAI Actions.

Setup Instructions

  1. Go to ChatGPT → Explore GPTs → Create
  2. In the "Configure" tab, scroll to "Actions"
  3. Click "Create new action"
  4. Import the OpenAPI schema below
  5. Add your WebCite API key as authentication

OpenAPI Schema URL

text
https://api.webcite.co/openapi/gpt-actions.yaml

Authentication

In the Actions configuration, set:

  • Authentication type: API Key
  • Auth Type: Custom
  • Custom Header Name: x-api-key

Example Usage

Ask your GPT: "Fact check this: Electric vehicles produce more CO2 than gas cars"

ZapierZapier Integration
Automate fact-checking in your workflows with 6000+ app integrations.

Available Actions

Verify ClaimWhen triggered

Full verification with sources and verdict

Search SourcesWhen triggered

Find authoritative sources for a topic

Batch VerifyWhen triggered

Verify multiple claims from a spreadsheet row

Example Workflows

  • Slack channel → WebCite verify → Post result back
  • Google Sheet row → Batch verify claims → Update sheet
  • Email received → Extract claims → Verify → Reply

Unlock Full Integration Access

Free plan includes 100 credits/month. Upgrade to Builder for 500 credits and higher rate limits.

Rate Limits

API rate limits vary by plan. Exceeding limits returns a 429 error with retry information.

Rate Limits by Plan
PlanRequests/MinRequests/DayConcurrent
Free101002
Builder301,0005
Enterprise100+CustomCustom
Rate Limit Headers
All API responses include rate limit information in headers.
text
X-RateLimit-Limit: 30X-RateLimit-Remaining: 28X-RateLimit-Reset: 1706659200X-Credits-Used: 4X-Credits-Remaining: 496
429 Rate Limit Error
When rate limit is exceeded, the API returns a 429 status with retry information.
json
{  "statusCode": 429,  "message": "Rate limit exceeded. Please wait 45 seconds.",  "error": "Too Many Requests",  "retryAfter": 45}

Best Practices

  • Implement exponential backoff when receiving 429 errors
  • Use batch_verify for multiple claims instead of individual calls
  • Cache verification results to avoid redundant API calls
  • Monitor X-RateLimit-Remaining to proactively manage usage

Need Higher Limits?

Enterprise plans include custom rate limits, dedicated support, and SLA guarantees.

For more information, visit WebCite