RTFC API

Research modes & the elector

How hard a claim gets checked is your choice, per debate - or per claim.

The methods

ModeWhat it doesGood for
two_stepSearch → read the results → judgeMost claims. Fast, cheap.
decomposeBreak the claim into sub-questions, research each, synthesizeCompound or multi-part claims
decompose_investDecomposition with a more investigative plannerClaims needing an angle, not just facts
nativeAsk a search-native model to research and answer directlyA useful independent second opinion
localSearch only the internal indexed corpus, no external callsDeterministic, zero search cost
agenticAn agent searches, fetches pages, follows citations, requests PDFsStatistical and document-backed claims

And composites that run several and give you every panel:

ModeExpands to
paralleltwo_step + decompose
parallel_estwo_step + decompose + local
parallel_fulltwo_step + decompose + decompose_invest

Choosing per debate

json
{"research_modes": ["two_step", "decompose"]}

More modes means more panels, more confidence, more cost - roughly linearly. Start with ["two_step"] and add when you find claims it does not settle.

An empty list is meaningful, not a mistake:

json
{"research_modes": []}

Claims are still detected, persisted and shown - but nothing is researched until you ask. That is how you build a "review, then check the ones that matter" flow without paying for the rest.

Checking one claim another way

Any claim can be re-checked with a specific method, including one already checked:

bash
curl -sX POST $RTFC/claim \
  -H "X-Auth-Token: $TOKEN" -H 'Content-Type: application/json' \
  -d '{"text": "…", "debate_id": "…", "research_mode": "agentic", "manually_added": true}'

manually_added: true also widens the elector's expectations, so an election waits for the added method to finish instead of deciding without it.

For a shared claim, only the genuinely missing method runs - asking for parallel on a claim that already has a two_step panel researches decompose alone.

The elector

With several methods you get several panels, and something has to choose. Set elector_enabled: true on the debate and an LLM judge elects the best one once every expected method has finished - weighing source count and trust, sub-question coverage, and the verdict itself.

json
{"research_modes": ["two_step", "decompose", "agentic"], "elector_enabled": true}

GET /v1/claims/{id}/best then returns the elected panel with election_method: "llm" and an elected block explaining why.

It is advisory: it never overrides a human. Full precedence, highest first:

  1. Operator winner - someone explicitly picked a panel (POST /claims/{id}/winner)
  2. Crowd votes - the highest net-voted panel, if any has positive net votes
  3. LLM elector - when elector_enabled
  4. Math - decisive verdict, then confidence, then best source trust

election_method on the response tells you which applied, so your UI can say "chosen by our reviewers" rather than implying a machine decided.

Verdicts

true, false, partially_true, misleading, unverifiable, pending.

unverifiable is a real answer, not a failure - it means the evidence available does not settle the claim, and it is more honest than a low-confidence guess. Before returning it, two_step and decompose automatically retry the search in English and Spanish, since international sources are indexed in those far more often. The verdict always comes back in the claim's own language regardless.