Fact It
Developers

API reference

Every endpoint and data type below is generated from the OpenAPI 3.1 spec, which is itself generated from the Zod schemas the server validates against — so this reference can never drift from the real contract.

POST/api/check

Fact-check a response

Extract claims from `response`, verify each against live evidence, and return the final Check. Non-streaming — the connection stays open until every verdict is ready. Use /api/check/stream to render verdicts as they land.

Auth: Required — Bearer token

Request body

FieldTypeRequiredDetails
responsestringrequiredminLength: 1
promptstringoptional
sourceAppenumoptionalchatgpt-web | claude-web | gemini-web | perplexity-web | chatgpt-desktop | claude-desktop | dashboard | cli | otherdefault: other
sensitivityenumoptionalstrict | balanced | lightdefault: balanced
bypassCachebooleanoptional
reviewobjectoptional
verifierModelstringoptional

review

FieldTypeRequiredDetails
reasonenumrequireduser-thumbs-down
priorVerdictsarray<object>optional

priorVerdicts[]

FieldTypeRequiredDetails
claimTextstringrequired
statusenumrequiredsupported | partial | contradicted | unsupported
confidencenumberrequiredmin: 0, max: 1
reasoningstringrequired

Responses

StatusDescription
200The completed fact-check.
400The request body failed CheckRequest validation.
401Authentication required — no session cookie or API token was supplied (code: unauthenticated).
402Monthly credit allowance exhausted (code: credits_exhausted).
429Rate limit exceeded.
503Daily budget cap reached, or a transient identity/metering failure; retry (see Retry-After).

200 body — Check

FieldTypeRequiredDetails
idstringrequired
sourceAppenumrequiredchatgpt-web | claude-web | gemini-web | perplexity-web | chatgpt-desktop | claude-desktop | dashboard | cli | other
promptstringoptional
responsestringrequired
verdictsarray<object>required
degradedProvidersarray<object>optional
overallConfidencenumberrequiredmin: 0, max: 1
modelobjectrequired
costobjectoptional
createdAtstring (date-time)required

verdicts[]

FieldTypeRequiredDetails
claimIdstringrequired
statusenumrequiredsupported | partial | contradicted | unsupported | pending
confidencenumberrequiredmin: 0, max: 1
evidencearray<object>required
reasoningstringrequired

evidence[]

FieldTypeRequiredDetails
urlstring (uri)required
titlestringrequired
snippetstringrequired
lastModifiedAtstring (date-time)optional
authorityScorenumberrequiredmin: 0, max: 1
recencyScorenumberrequiredmin: 0, max: 1
relevanceScorenumberrequiredmin: 0, max: 1
providerIdstringrequired

degradedProviders[]

FieldTypeRequiredDetails
providerIdstringrequired
kindenumrequiredquota | auth | rate-limit | upstream | network
statusintegeroptionalmin: -9007199254740991
messagestringrequired

model

FieldTypeRequiredDetails
extractorstringrequired
verifierstringrequired

cost

FieldTypeRequiredDetails
usdnumberrequiredmin: 0
inputTokensintegerrequiredmin: 0
outputTokensintegerrequiredmin: 0
cacheReadTokensintegerrequiredmin: 0
cacheWriteTokensintegerrequiredmin: 0
searchCallsintegerrequiredmin: 0

Example

curl https://fact-it-web-412159981305.us-central1.run.app/api/check \
  -H 'Authorization: Bearer fk_your_token' \
  -H 'Content-Type: application/json' \
  -d '{ "response": "The Eiffel Tower is 984 feet tall." }'
POST/api/check/stream

Fact-check a response (streaming)

Same input as /api/check, streamed as Server-Sent Events. Each event is a PipelineEvent encoded as `data: <json>\n\n`. The terminal event is either `{ "type": "done", "check": Check }` or `{ "type": "error", ... }`.

Auth: Required — Bearer token

Request body

FieldTypeRequiredDetails
responsestringrequiredminLength: 1
promptstringoptional
sourceAppenumoptionalchatgpt-web | claude-web | gemini-web | perplexity-web | chatgpt-desktop | claude-desktop | dashboard | cli | otherdefault: other
sensitivityenumoptionalstrict | balanced | lightdefault: balanced
bypassCachebooleanoptional
reviewobjectoptional
verifierModelstringoptional

review

FieldTypeRequiredDetails
reasonenumrequireduser-thumbs-down
priorVerdictsarray<object>optional

priorVerdicts[]

FieldTypeRequiredDetails
claimTextstringrequired
statusenumrequiredsupported | partial | contradicted | unsupported
confidencenumberrequiredmin: 0, max: 1
reasoningstringrequired

Responses

StatusDescription
200An SSE stream of PipelineEvent objects.
400Invalid JSON or CheckRequest.
401Authentication required — no session cookie or API token was supplied (code: unauthenticated).
402Monthly credit allowance exhausted (code: credits_exhausted).
429Rate limit exceeded.
503Daily budget cap reached, or a transient identity/metering failure; retry (see Retry-After).

200 body — PipelineEvent

type: "extracted"

FieldTypeRequiredDetails
type"extracted"required
claimsarray<object>required

claims[]

FieldTypeRequiredDetails
idstringrequired
textstringrequired
spanobjectrequired
typeenumrequirednumeric | historical | current_event | scientific | biographical | definition | opinion
importanceenumrequiredcore | supporting | aside
freshnessNeedenumrequiredlive | recent | evergreen
searchQuerystringoptional
domainenumrequiredgeneral | medical | legal | scientific | financial | news | personaldefault: general

span

FieldTypeRequiredDetails
startintegerrequiredmin: 0
endintegerrequiredmin: 0

type: "retrieving"

FieldTypeRequiredDetails
type"retrieving"required
claimIdstringrequired

type: "retrieved"

FieldTypeRequiredDetails
type"retrieved"required
claimIdstringrequired
evidencearray<object>required

evidence[]

FieldTypeRequiredDetails
urlstring (uri)required
titlestringrequired
snippetstringrequired
lastModifiedAtstring (date-time)optional
authorityScorenumberrequiredmin: 0, max: 1
recencyScorenumberrequiredmin: 0, max: 1
relevanceScorenumberrequiredmin: 0, max: 1
providerIdstringrequired

type: "verdict"

FieldTypeRequiredDetails
type"verdict"required
verdictobjectrequired

verdict

FieldTypeRequiredDetails
claimIdstringrequired
statusenumrequiredsupported | partial | contradicted | unsupported | pending
confidencenumberrequiredmin: 0, max: 1
evidencearray<object>required
reasoningstringrequired

evidence[]

FieldTypeRequiredDetails
urlstring (uri)required
titlestringrequired
snippetstringrequired
lastModifiedAtstring (date-time)optional
authorityScorenumberrequiredmin: 0, max: 1
recencyScorenumberrequiredmin: 0, max: 1
relevanceScorenumberrequiredmin: 0, max: 1
providerIdstringrequired

type: "done"

FieldTypeRequiredDetails
type"done"required
checkobjectrequired

check

FieldTypeRequiredDetails
idstringrequired
sourceAppenumrequiredchatgpt-web | claude-web | gemini-web | perplexity-web | chatgpt-desktop | claude-desktop | dashboard | cli | other
promptstringoptional
responsestringrequired
verdictsarray<object>required
degradedProvidersarray<object>optional
overallConfidencenumberrequiredmin: 0, max: 1
modelobjectrequired
costobjectoptional
createdAtstring (date-time)required

verdicts[]

FieldTypeRequiredDetails
claimIdstringrequired
statusenumrequiredsupported | partial | contradicted | unsupported | pending
confidencenumberrequiredmin: 0, max: 1
evidencearray<object>required
reasoningstringrequired

evidence[]

FieldTypeRequiredDetails
urlstring (uri)required
titlestringrequired
snippetstringrequired
lastModifiedAtstring (date-time)optional
authorityScorenumberrequiredmin: 0, max: 1
recencyScorenumberrequiredmin: 0, max: 1
relevanceScorenumberrequiredmin: 0, max: 1
providerIdstringrequired

degradedProviders[]

FieldTypeRequiredDetails
providerIdstringrequired
kindenumrequiredquota | auth | rate-limit | upstream | network
statusintegeroptionalmin: -9007199254740991
messagestringrequired

model

FieldTypeRequiredDetails
extractorstringrequired
verifierstringrequired

cost

FieldTypeRequiredDetails
usdnumberrequiredmin: 0
inputTokensintegerrequiredmin: 0
outputTokensintegerrequiredmin: 0
cacheReadTokensintegerrequiredmin: 0
cacheWriteTokensintegerrequiredmin: 0
searchCallsintegerrequiredmin: 0

type: "error"

FieldTypeRequiredDetails
type"error"required
messagestringrequired
claimIdstringoptional

Example

# Same body as /api/check, but the response is an SSE stream
# (Content-Type: text/event-stream). Each event is `data: <PipelineEvent JSON>`.
curl -N https://fact-it-web-412159981305.us-central1.run.app/api/check/stream \
  -H 'Authorization: Bearer fk_your_token' \
  -H 'Content-Type: application/json' \
  -d '{ "response": "The Eiffel Tower is 984 feet tall." }'
POST/api/feedback

Rate a check

Submit an anonymous thumbs up/down on a check. Fire-and-forget; returns 202 and stores no account id (see the Feedback schema).

Auth: None

Request body

FieldTypeRequiredDetails
checkIdstringoptional
sourceAppenumrequiredchatgpt-web | claude-web | gemini-web | perplexity-web | chatgpt-desktop | claude-desktop | dashboard | cli | other
ratingenumrequiredup | down
responseSnippetstringoptionalmaxLength: 2000
priorVerdictsarray<object>optional
overallConfidencenumberoptionalmin: 0, max: 1
commentstringoptionalmaxLength: 1000

priorVerdicts[]

FieldTypeRequiredDetails
claimTextstringrequired
statusenumrequiredsupported | partial | contradicted | unsupported
confidencenumberrequiredmin: 0, max: 1
reasoningstringrequired

Responses

StatusDescription
202Feedback accepted.
400The request body failed Feedback validation.
429Rate limit exceeded.

202 body — Ok

FieldTypeRequiredDetails
ok"true"required

Example

curl https://fact-it-web-412159981305.us-central1.run.app/api/feedback \
  -H 'Content-Type: application/json' \
  -d '{ "sourceApp": "other", "rating": "up" }'
GET/api/account/usage

Get credit balance

Plan and remaining credits for the authenticated caller. The one /api/account route that accepts an API token (read-only); the others require a session cookie.

Auth: Required — Bearer token

Responses

StatusDescription
200Current usage summary.
401Missing or invalid credential.
503Temporarily unavailable; retry.

200 body — UsageSummary

FieldTypeRequiredDetails
planstringrequiredPlan identifier, e.g. "free" or "pro".
monthlyCreditAllowanceintegerrequiredCredits included with the plan each period. NOT the usable total on its own — add bonusCredits, or just read creditsRemaining.
bonusCreditsintegeroptionalOne-off credits granted on top of the plan allowance for the current period (e.g. an approved top-up request). Cleared when the period rolls over. Absent on older servers.
creditsUsedintegerrequired
creditsRemainingintegerrequiredmonthlyCreditAllowance + bonusCredits - creditsUsed, floored at 0.
periodStartstring (date-time)required
byokEnabledbooleanrequiredWhether the caller has a bring-your-own-key verifier configured.

Example

curl https://fact-it-web-412159981305.us-central1.run.app/api/account/usage \
  -H 'Authorization: Bearer fk_your_token'

Data types

The shared object shapes referenced by the endpoints above.

Check

FieldTypeRequiredDetails
idstringrequired
sourceAppenumrequiredchatgpt-web | claude-web | gemini-web | perplexity-web | chatgpt-desktop | claude-desktop | dashboard | cli | other
promptstringoptional
responsestringrequired
verdictsarray<object>required
degradedProvidersarray<object>optional
overallConfidencenumberrequiredmin: 0, max: 1
modelobjectrequired
costobjectoptional
createdAtstring (date-time)required

verdicts[]

FieldTypeRequiredDetails
claimIdstringrequired
statusenumrequiredsupported | partial | contradicted | unsupported | pending
confidencenumberrequiredmin: 0, max: 1
evidencearray<object>required
reasoningstringrequired

evidence[]

FieldTypeRequiredDetails
urlstring (uri)required
titlestringrequired
snippetstringrequired
lastModifiedAtstring (date-time)optional
authorityScorenumberrequiredmin: 0, max: 1
recencyScorenumberrequiredmin: 0, max: 1
relevanceScorenumberrequiredmin: 0, max: 1
providerIdstringrequired

degradedProviders[]

FieldTypeRequiredDetails
providerIdstringrequired
kindenumrequiredquota | auth | rate-limit | upstream | network
statusintegeroptionalmin: -9007199254740991
messagestringrequired

model

FieldTypeRequiredDetails
extractorstringrequired
verifierstringrequired

cost

FieldTypeRequiredDetails
usdnumberrequiredmin: 0
inputTokensintegerrequiredmin: 0
outputTokensintegerrequiredmin: 0
cacheReadTokensintegerrequiredmin: 0
cacheWriteTokensintegerrequiredmin: 0
searchCallsintegerrequiredmin: 0

Verdict

FieldTypeRequiredDetails
claimIdstringrequired
statusenumrequiredsupported | partial | contradicted | unsupported | pending
confidencenumberrequiredmin: 0, max: 1
evidencearray<object>required
reasoningstringrequired

evidence[]

FieldTypeRequiredDetails
urlstring (uri)required
titlestringrequired
snippetstringrequired
lastModifiedAtstring (date-time)optional
authorityScorenumberrequiredmin: 0, max: 1
recencyScorenumberrequiredmin: 0, max: 1
relevanceScorenumberrequiredmin: 0, max: 1
providerIdstringrequired

Evidence

FieldTypeRequiredDetails
urlstring (uri)required
titlestringrequired
snippetstringrequired
lastModifiedAtstring (date-time)optional
authorityScorenumberrequiredmin: 0, max: 1
recencyScorenumberrequiredmin: 0, max: 1
relevanceScorenumberrequiredmin: 0, max: 1
providerIdstringrequired

Claim

FieldTypeRequiredDetails
idstringrequired
textstringrequired
spanobjectrequired
typeenumrequirednumeric | historical | current_event | scientific | biographical | definition | opinion
importanceenumrequiredcore | supporting | aside
freshnessNeedenumrequiredlive | recent | evergreen
searchQuerystringoptional
domainenumrequiredgeneral | medical | legal | scientific | financial | news | personaldefault: general

span

FieldTypeRequiredDetails
startintegerrequiredmin: 0
endintegerrequiredmin: 0

CostSummary

FieldTypeRequiredDetails
usdnumberrequiredmin: 0
inputTokensintegerrequiredmin: 0
outputTokensintegerrequiredmin: 0
cacheReadTokensintegerrequiredmin: 0
cacheWriteTokensintegerrequiredmin: 0
searchCallsintegerrequiredmin: 0

UsageSummary

FieldTypeRequiredDetails
planstringrequiredPlan identifier, e.g. "free" or "pro".
monthlyCreditAllowanceintegerrequiredCredits included with the plan each period. NOT the usable total on its own — add bonusCredits, or just read creditsRemaining.
bonusCreditsintegeroptionalOne-off credits granted on top of the plan allowance for the current period (e.g. an approved top-up request). Cleared when the period rolls over. Absent on older servers.
creditsUsedintegerrequired
creditsRemainingintegerrequiredmonthlyCreditAllowance + bonusCredits - creditsUsed, floored at 0.
periodStartstring (date-time)required
byokEnabledbooleanrequiredWhether the caller has a bring-your-own-key verifier configured.