WebCite API
API documentation for WebCite public API endpoints. Use these endpoints to verify claims, search for sources, and manage citations.
Overview
https://devapi.webcite.co/apix-api-key: your-api-key-hereYou 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.
| Operation | Credits | Description |
|---|---|---|
Citation/Search | 2 | Search web sources for a claim. Returns multiple citations. |
Stance Analysis | 1 | Analyze if citations support or contradict the claim. Optional |
Verdict | 1 | Generate overall verification verdict. Optional |
| Full Verification | 4 | Citation + Stance + Verdict (default) |
// 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"}| Plan | Credits/Month | Price |
|---|---|---|
| Free | 100 | $0 |
| Builder | 500 | $20 |
| Enterprise | Custom | Custom |
/v1/payment/subscription/credits{ "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"}Get Current Setting
/v1/payment/subscription/overage-setting{ "allow_overage": true, "plan_type": "builder", "can_toggle": true}Toggle Overage Billing
/v1/payment/subscription/overage-setting// 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.
// 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.
/api/v1/verifyRequest
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
| Parameter | Type | Description |
|---|---|---|
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: |
include_verdictoptional | boolean | Generate an overall verdict with confidence score. Adds 1 credit. Default: |
decompose_claimoptional | boolean | Break complex claims into atomic sub-claims and verify each independently. Default: |
Response
{ "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"}Streaming Verification (SSE)
Stream verification results in real-time using Server-Sent Events. Citations are streamed as they are processed, followed by groups, verdict, and metadata.
/api/v1/verify/streamEvent Types
citationIndividual citations as they are processedgroupsCitation groups by domain (if useEnhancedAnalysis)verdictOverall verdict result (if useEnhancedAnalysis)decompositionClaim broken into sub-claims (if useClaimDecomposition)sub-claim-startStarting verification of a sub-claimsub-claim-resultResult for a sub-claim verificationmetadataThread ID, citation ID, totals, processing timedoneStream completeerrorError occurred (if applicable)JavaScript Example
const response = await fetch('https://devapi.webcite.co/api/api/v1/verify/stream', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' }, body: JSON.stringify({ claim: 'The Eiffel Tower is 330 meters tall' })}); const reader = response.body.getReader();const decoder = new TextDecoder(); while (true) { const { done, value } = await reader.read(); if (done) break; const chunk = decoder.decode(value); const lines = chunk.split('\n').filter(line => line.startsWith('data: ')); for (const line of lines) { const event = JSON.parse(line.slice(6)); switch (event.type) { case 'citation': console.log('New citation:', event.data);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.
/api/v1/sources/searchRequest
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
| Parameter | Type | Description |
|---|---|---|
queryrequired | string | Search query to find sources for |
limitoptional | number | Maximum number of sources to return (1-20) Default: |
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.
{ "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": { "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).
{ "prompt": "Tesla is the best-selling EV company founded by Elon Musk", "useEnhancedAnalysis": true, "useClaimDecomposition": true}{ "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..." }}{ "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 } ] }}{ "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.
{ "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
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.
/api/v1/citationsParameters
| Parameter | Type | Description |
|---|---|---|
pageoptional | number | Page number (starts from 1) Default: |
limitoptional | number | Number of items per page (max 100) Default: |
thread_idoptional | string | Filter citations by thread ID |
fieldsoptional | enum | Field set: minimal, basic, detailed, with_relations, all Default: |
Response
{ "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": falseGet Citation by ID
Retrieves a specific citation by its ID for the authenticated user.
/api/v1/citations/:idPath Parameters
| Parameter | Type | Description |
|---|---|---|
idrequired | string | The unique identifier of the citation |
Response
{ "statusCode": 200, "message": "Citation fetched successfully", "data": { "prompt": "Latest trends in AI", "citation": "[{\"title\":\"Example\",\"url\":\"https://example.com\"}]" }}Error Response (404)
{ "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.
/api/v1/uploadmultipart/form-dataRequest
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
{ "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
{ // 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
{ "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.
Claude Desktop Configuration
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{ "mcpServers": { "webcite": { "command": "npx", "args": ["-y", "webcite-mcp-server"], "env": { "WEBCITE_API_KEY": "wc_your_api_key_here" } } }}Claude Code
claude mcp add webcite -- npx -y webcite-mcp-serverexport WEBCITE_API_KEY=wc_your_api_key_hereAvailable Tools
verify_claimFull verification with stance analysis and verdictsearch_sourcesSearch for authoritative sources (citations only)list_citationsList your past verification resultsget_citationGet details of a specific verificationExample Usage
In Claude, say: "Use WebCite to verify: The Eiffel Tower is 330 meters tall"
Setup Instructions
- Go to ChatGPT → Explore GPTs → Create
- In the "Configure" tab, scroll to "Actions"
- Click "Create new action"
- Import the OpenAPI schema below
- Add your WebCite API key as authentication
OpenAPI Schema URL
https://api.webcite.co/openapi/gpt-actions.yamlAuthentication
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"
Available Actions
Full verification with sources and verdict
Find authoritative sources for a topic
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
Rate Limits
API rate limits vary by plan. Exceeding limits returns a 429 error with retry information.
| Plan | Requests/Min | Requests/Day | Concurrent |
|---|---|---|---|
| Free | 10 | 100 | 2 |
| Builder | 30 | 1,000 | 5 |
| Enterprise | 100+ | Custom | Custom |
X-RateLimit-Limit: 30X-RateLimit-Remaining: 28X-RateLimit-Reset: 1706659200X-Credits-Used: 4X-Credits-Remaining: 496{ "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-Remainingto proactively manage usage
For more information, visit WebCite