BrenzuriStart free
Corroboration and flags
Concepts

Corroboration and flags

A claim is confirmed by independent origins, not by a count of outlets. Everything else is a flag.

On this page

Origins, not outlets#

The text of an article is broken into claims, and each claim is checked against the origins that report it. An origin is where a report comes from, not where it was printed: three outlets that carry one wire story are one origin. A claim confirmed by two or more independent origins is corroborated. Anything else is a flag.

Reading is billed by the page, so results that share an origin are grouped before anything is fetched and one page per origin is read. The method is written out on the public sourcing policy.

The five states#

claims[].state takes one of these values. Only corroborated is not a flag.

StateWhat it meansIn the text
corroboratedTwo or more independent origins report it, or an official source and an outlet do.Plain.
singleSourceOne origin reports it and no other corroborates it.Underlined. It stays in the text: removing it would hide the most useful thing the check produces.
circularSeveral outlets carry it, but they all trace back to the same origin. A source count calls this corroborated; it is not.Marked in its own colour, because it is the state most likely to fool a reader.
disputedIndependent origins report it differently. Both are primary reporting, so neither is dropped.Marked; the disagreement is shown.
parallelTwo sources say the same sentence about their own separate subjects, for example each vendor describing its own product.Split and attributed instead of counted as agreement.

originCount on the claim is the number of independent origins behind it, so a singleSource claim has originCount 1.

Reading the flags over the API#

Fetch the article and keep the claims whose state is not corroborated. Each one names its sources and the unit of text it sits in.

curl "$BRENZURI_URL/api/v1/articles/$ARTICLE_ID" \
  -H "Authorization: Bearer $BRENZURI_KEY" \
  | jq '[.claims[] | select(.state != "corroborated") | {id, text, state, originCount, paragraph}]'

Two exits from a flag#

A flag leaves in one of two ways. There is no silent dismiss.

  1. Add a source. POST /articles/{id}/claims/{claimId}/sources with a URL. The page is fetched, checked for whether it carries the claim, and the origins are grouped again. A key or an agent with the edit scope can do this. If the page does not carry the claim the answer is 422 source_does_not_support and nothing is added.
  2. Keep it with a note. A person records why the flag stands. The claim then has keptFlag: true and a keptNote, and the note travels into the export. Only a person can do this; it is not on the list a key may call.

The check runs twice#

Claims are first checked before the article is written, from what the origins say. The finished article is then read back against the claims and the source excerpts, with figures and quotes matched literally, because the first check cannot see the sentences the writer produced. The read-back appears in quality as q-readback.