Skip to main content
POST
/
v2
/
reports
/
factcheck
curl -X POST https://api.tryprofound.com/v2/reports/factcheck \
  -H "X-API-Key: <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "start_date": "2026-06-09",
    "end_date": "2026-06-15",
    "group_by": ["model"]
  }'
{
  "info": {
    "total_results": 9,
    "count": 9,
    "next_cursor": null,
    "models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
    "group_by": ["model"],
    "start_date": "2026-06-09",
    "end_date": "2026-06-15",
    "filter": null
  },
  "data": [
    { "model": { "id": "a1c9…", "name": "ChatGPT" }, "accuracy": 0.986, "accurate": 1980, "inaccurate": 28 },
    { "model": { "id": "b7f2…", "name": "Microsoft Copilot" }, "accuracy": 0.831, "accurate": 1360, "inaccurate": 276 }
  ]
}
Accuracy scores for your category’s fact-checked claims — the numbers behind the platform’s FactCheck (Accuracy) tab. group_by picks the slice; accuracy is a ratio 01 (accurate / (accurate + inaccurate)). Per-category, so there is no asset or scope.
  • Metrics (every row): accuracy (01), accurate, inaccurate.
  • group_by: 0–2 of date, model, region, persona, prompt, topic, tag, themeor one citation (citation can’t be combined with another dimension). Empty → one headline score; ["date"] → the daily accuracy series; two dims (e.g. ["model", "date"]) → one row per combination, in a single query.
  • Row shape follows group_by: a value dimension → { <dim>: { id, name }, … }; ["citation"]{ citation: { url, citation_category }, … } (a citation is a URL, not an id/name); ["date"]{ date, … }.
  • filter: scopes which responses are counted — a top-level and of single-field leaves over model, topic, region, persona, prompt, tag. One leaf per field (use in for OR within a field); only topic may be negated. This is a narrower grammar than the other v2 reports (no or/not nesting).
New to the v2 reports? See Filtering & concepts for the shared { info, data } shape, grouping, and pagination. FactCheck uses that envelope but has no scope/assets/metrics params and a constrained filter (above). For the inaccurate claims themselves, see FactCheck Claims.
POST /v2/reports/factcheck/stream takes the same request body and returns Server-Sent Events: one summary event (the info block), then one result event per row. limit/cursor are ignored; it returns everything by default. Pass max_results to cap.
Response (text/event-stream)
event: summary
data: { ...the info block... }

event: result    ← one per row, same shape as data[] above
data: {"model": {"id": "a1c9…", "name": "ChatGPT"}, "accuracy": 0.986, "accurate": 1980, "inaccurate": 28}
curl -X POST https://api.tryprofound.com/v2/reports/factcheck \
  -H "X-API-Key: <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "start_date": "2026-06-09",
    "end_date": "2026-06-15",
    "group_by": ["model"]
  }'
{
  "info": {
    "total_results": 9,
    "count": 9,
    "next_cursor": null,
    "models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
    "group_by": ["model"],
    "start_date": "2026-06-09",
    "end_date": "2026-06-15",
    "filter": null
  },
  "data": [
    { "model": { "id": "a1c9…", "name": "ChatGPT" }, "accuracy": 0.986, "accurate": 1980, "inaccurate": 28 },
    { "model": { "id": "b7f2…", "name": "Microsoft Copilot" }, "accuracy": 0.831, "accurate": 1360, "inaccurate": 276 }
  ]
}

Authorizations

X-API-Key
string
header
required

Body

application/json

Accuracy scores. group_by picks the slice (one or two dimensions); empty → the headline score.

category_id
string
required
start_date
string
required

YYYY-MM-DD, ET, inclusive

end_date
string
required

YYYY-MM-DD, ET, inclusive

group_by
enum<string>[]

1-2 of date/model/region/persona/prompt/topic/tag/theme (or one citation). Empty → headline.

Maximum array length: 2
Available options:
date,
model,
region,
persona,
prompt,
topic,
tag,
citation,
theme
filter
FilterNode · object | null

Scope which responses count (see Filtering).

limit
integer | null

Rows per page; default 100.

Required range: 0 < x <= 100
max_results
integer | null

Stream only: cap rows returned.

Required range: x > 0
cursor
string | null

Response

Successful Response

The response is of type Response Query Scores V2 Reports Factcheck Post · object.