GroundTruth is where your organization keeps what it knows about attacks, illegal mining, occupied farmland, displaced families and blocked roads. Every record carries its sources and a rating. Confirmed deaths are kept apart from reported ones. Every change stays on the record for good. And a feed API keeps your partners’ systems, and your own, up to date.
Gunmen came into a farming community in Guma at about one in the morning. By six the first reports are out. A national daily, quoting residents, says forty-three people were killed. A wire service says at least twenty, and within the hour ten other outlets run its story almost word for word. A police spokesman tells a radio station nine.
Then a church partner’s field staff, who spent the morning going from house to house, send a list: seventeen names, each one confirmed with a family member.
In a spreadsheet, this becomes a row that says “about 30 killed”, with a link to whichever article someone found first. A month later nobody remembers where 30 came from, two of the links are dead, and a second row for the same attack has crept in from another list.
In GroundTruth, the analyst opens one record. Each report goes in as a source, with a saved copy of the page, so a story that is later taken down is still on file. The wire story and its ten copies count as one source. The seventeen names are stored encrypted, and the record now reads at least 17 confirmed, up to 43 reported, with a flag that the reports disagree. Nothing is averaged.
GroundTruth suggests a rating from the separate sources; the analyst applies B2: a usually reliable source, probably true. The residents’ account of who did it goes in as alleged: Fulani militants. Within minutes the duplicate check notices that a partner organization has recorded the same attack in its own public dataset, and puts the match in both teams’ review queues. A person on each side confirms it.
Every change goes out on the dataset’s feed. A research partner’s database and a coalition dashboard both follow it, and each one sees only what the dataset’s sharing settings allow.
Six months later, an official says the toll was inflated after the fact. The team opens the record as it stood the morning after the attack: what was known, from whom, and when. A check of the record’s chain confirms that nothing has been quietly changed since.
A GroundTruth record is more than a pin on a map. Here is the attack from the scenario, as your own team sees it.
| Confirmed | Reported | |
|---|---|---|
| Killed | 17 | 43 |
| Injured | 12 | 30 |
| Abducted | 0 | 6+ |
Violence rarely ends when the attackers leave. GroundTruth records the attack and what follows it: the mines that pay for it, the farmland taken, the families who flee and the roads that close.
GroundTruth does the careful bookkeeping that is hard to keep up by hand. It suggests; your analysts decide.
When the numbers are challenged, you need to show what you knew, and when you knew it. GroundTruth keeps both.
Two kinds of time. Every record knows when the event happened and when your team learned each fact about it. Ask for the attacks of last March as your organization understood them on the first of April, and you get exactly that, even after later corrections.
Nothing is deleted. An edit closes the old version and adds a new one. A record found to be wrong is retracted with a reason: it disappears from the map and the feeds, but stays in the history.
A chain you can check. Each change is sealed with a cryptographic fingerprint that includes the change before it, one chain per dataset. Altering any past entry breaks every link after it. Your admins can re-check a whole chain with one button, and the database itself refuses edits to past versions.
Proof others can hold. Every feed response carries the latest fingerprint of each dataset’s chain. Partners who keep those fingerprints hold independent proof of what the record said, outside your control and ours.
Your database, a partner’s research system or a coalition dashboard can follow GroundTruth directly. What your team does in the dashboard, your systems can do through the API, under the same rules.
as_of any past moment.BASE=https://issacharanalytics.org/api/v1 AUTH="Authorization: Bearer $GROUNDTRUTH_TOKEN" # Start at the current head of every dataset you can read curl -H "$AUTH" "$BASE/feed?from=latest" # Then keep asking with the next_cursor you were given curl -H "$AUTH" "$BASE/feed?cursor=$NEXT_CURSOR"
{
"data": [
{
"seq": 1841, "op": "tombstone", "reason": "merged",
"record": "01JPC7Q2…", "merged_into": "01JPB3R8…", …
},
{
"seq": 1842, "op": "upsert",
"record": "01JPB3R8…", "version": 6,
"recorded_at": "2026-03-16T09:42:07Z",
"data": {
"title": "Attack by Fulani militants in Guma (Benue)",
"status": "verified",
"rating": { "code": "B2", "confidence": "high" },
"location": { "precision": "community", "admin2": "Guma", … },
"casualties": {
"killed": { "floor": 17, "ceiling": 43, "conflict": true }
},
…
}
}
],
"next_cursor": "eyJ2Ijox…",
"has_more": false,
"heads": {
"01JP9ZK4…": { "feed_seq": 1842, "hash": "9f2c…6e41", … }
}
}
| Method | Path | What it does | Access |
|---|---|---|---|
| GET | /datasets | The datasets you can read, with each chain’s latest fingerprint | read |
| GET | /datasets/{id}/records | Records as JSON or GeoJSON: as_of, dates, map box, status, min_rating | read |
| GET | /records/{id} | One record with its sources, casualty reports, victims and attributions | read |
| GET | /records/{id}/history | Every version, with what changed and why | read |
| GET | /feed | Every change, in order, across the datasets you follow | read |
| POST | /datasets/{id}/records | Add a record to one of your datasets | write |
| PATCH | /records/{id} | Change a record, with a reason | write |
| POST | /records/{id}/sources | Add a source, with a saved screenshot or PDF. Also /claims, /persons, /attributions and /observations for casualty reports, named victims, attributions and measurements | write |
Every ISSACHAR organization starts on Community. Professional adds private and partners-only datasets and higher API limits.
| CommunityIncluded with every organization | ProfessionalSubscription per organization | |
|---|---|---|
| Public datasets | Unlimited | Unlimited |
| Vetting, history & audit chain | Included | Included |
| Imports & the Overwatch layer | Included | Included |
| Feed API | 60 requests a minute | 600 requests a minute |
| Connected systems (feed clients) | Up to 3 | Up to 25 |
| Private datasets | Not included | Included |
| Partners-only datasets & partner access | Not included | Included |
If your organization documents violence, tracks displacement or needs a shared record with partners that holds up under scrutiny, we’d like to show you GroundTruth.