Costs, plans and quotas
You are billed for the work actually done - LLM calls, searches, transcription - marked up per your plan. There is no per-request fee, so a cheap claim is cheap.
What a claim cost
curl -s $RTFC/claims/$CLAIM/cost -H "X-Auth-Token: $TOKEN"{"detector_cost_usd": 0.0002, "worker_cost_usd": 0.0018,
"search_cost_usd": 0.0004, "elector_cost_usd": 0.0,
"translation_cost_usd": 0.0, "total_cost_usd": 0.0024}| Component | What it paid for |
|---|---|
detector_cost_usd | Finding the claim in the transcript |
worker_cost_usd | Researching it - the bulk, and it scales with research modes |
search_cost_usd | Search-provider calls |
elector_cost_usd | The LLM judge, when elector_enabled |
translation_cost_usd | On-demand ?lang= translation of the claim text and panel explanations (strong_lang_en/strong_lang_es shortcuts are free) |
total_cost_usd also appears on /claims/{id}/results and /best, and on each SSE result event as claim_total_cost_usd - so you can meter without extra requests.
Transcription is billed separately, by exact audio duration:
curl -s $RTFC/debates/$DEBATE/transcription-cost -H "X-Auth-Token: $TOKEN"
# {"audio_duration_seconds": 812.4, "cost_usd": 0.0135}Shared claims cost nothing
If a claim has already been researched - because another user shared the same public video, or the same claim text was checked in a shared pool - you get the existing answer and are charged $0.
This is deliberate and it is a feature, not a billing bug. Design for it: do not alert on a zero-cost claim, and do not assume cost is proportional to claims shown.
Your usage
curl -s $RTFC/usage/me/summary -H "X-Auth-Token: $TOKEN"
curl -s "$RTFC/usage/me?range=30d&granularity=day" -H "X-Auth-Token: $TOKEN"/usage/me reports your activity as volumes, not money: claims_detected and claims_elected (claims), queries (one research method run on one claim - two methods on the same claim count as 2), transcription (minutes of audio), plus counts for translations, re-analyses and API calls. It returns totals, a time series, by_kind (each row with volume and unit) and by_debate. range accepts 7d, 30d, mtd, all, or explicit from/to.
Plans and quotas
A plan sets included units (claims, debates, transcript minutes, spend), whether overage is allowed, a hard spend cap, max concurrent debates, and which features you can use.
Quotas are enforced wherever the work is requested - the same limits apply whether you call the API or use the web interface. There is no way for the two to disagree.
Running out
Exceeding a quota returns 402:
{"detail": "Quota exceeded",
"error": {"code": "quota_exceeded",
"details": {"kind": "claims", "used": 500, "limit": 500,
"resets_at": "2025-02-01T00:00:00Z"}}}If you cross the limit mid-debate, research pauses rather than failing: already detected claims are held, not dropped, and are re-queued automatically when the period rolls over or you upgrade. Ingest keeps running - you do not lose the transcript.
You will see quota.threshold_reached at 80% if you subscribe to webhooks, which is the point at which it is still comfortable to act.
Features
Some capabilities are plan-gated - certain research modes, the elector, media platforms:
{"plan": "pro", "features": ["youtube", "tiktok", "instagram",
"elector", "modes:agentic", "export_pdf"]}GET /v1/subscriptions/me lists what your plan allows, so you can hide what is unavailable instead of surfacing a 403.
Paying for a plan
See Payments for Checkout, the Customer Portal, and how overage is billed.