For newsrooms and civic organisations
Use our citizen tallies, correctly.
Binchika publishes citizen-verified polling-unit tallies as an open, read-only feed. Any newsroom can use it today, without a key. Registered desks also get a named contact for corrections and notice before the feed changes.
These are not results. Only INEC declares election results in Nigeria. Binchika never declares a winner and never projects one.
What the feed is
- Vote totals from polling units whose citizen tally passed every check: at least three separate citizen reports of the same posted result sheet, at least 85% agreement, confirmed by a trained Binchika volunteer (a verifier), and figures on the sheet that add up. Units that fail a check appear in the unit counts but not in the vote totals.
- Aggregates only: national and per-state totals, unit counts, and how many units have a citizen tally that does not match the result sheet INEC published on IReV, INEC's online result-viewing portal. A difference is not proof of wrongdoing: report it as “does not match”, never as fraud. No photographs, no names, no personal data.
- Every published unit is in the public, tamper-evident ledger, so you can check any figure yourself.
- Local government elections are run by the State Independent Electoral Commissions (SIECs), not INEC. They are not in the feed.
Connect
One address per race: president, senate, house, governor or state-assembly. JSON, open to any origin, refreshed at most every 15 seconds. Checking more often returns the same copy.
GET https://binchika.com/api/press/snapshot?race=president
Example in JavaScript and Python
const r = await fetch("https://binchika.com/api/press/snapshot?race=president");
const feed = await r.json();
// Always show feed.notice next to the figures. It is the required line:
// "Citizen-verified tallies. Only INEC declares results."
console.log(feed.notice, feed.units.published, feed.national.totals);
import requests
feed = requests.get("https://binchika.com/api/press/snapshot",
params={"race": "president"}, timeout=10).json()
print(feed["notice"], feed["units"]["published"], feed["national"]["totals"])
Example response and errors
{
"notice": "Citizen-verified tallies. Only INEC declares results.",
"race": "president",
"updatedAt": "2026-11-01T12:05:41.043Z",
"ledger": { "head": null, "count": 0, "verify": "https://binchika.com/ledger/" },
"units": { "published": 0, "lowerConfidence": 0, "held": 0, "notYetHigh": 0,
"denominator": 176846, "denominatorSource": "INEC 2023 polling units" },
"national": { "totals": {} },
"byState": {},
"irev": { "compared": 0, "mismatches": 0 },
"rules": "Lower-confidence and held units are not in the totals. ..."
}
national.totals: party acronym → votes, from published units only.byState: one entry per ISO 3166-2 state code (NG-AB…NG-ZA; the FCT isNG-FC), each{ "units": n, "totals": { … } }, whereunitsis the number of published units in that state.units.published: units in the totals.lowerConfidence: agreement too low to count.held: failed a posting check (for example totals that do not add up).notYetHigh: still waiting for enough reports. Onlypublishedunits are in the votes.- Coverage. The denominator is INEC's 2023 national count of polling units (176,846). Use “
units.publishedof 176,846” only for the president, Senate and House races. Not every state elects a governor on the same day, and the FCT has no State House of Assembly, so for governor and state-assembly races state the count instead: “from 1,240 polling units in the states voting”. The feed has no per-state polling-unit total, so for a state also state the count: “from 312 polling units in Lagos”. - For Senate, House, governor and state-assembly races,
national.totalsadds up party votes across constituencies or states. It is not seats and not a result for any constituency or state. In those races eachbyStateentry adds up the published units from every constituency in that state that has any, so label it that way, for example “all Senate districts in Lagos combined”, never as if the state were one contest. byStatelists only states with at least one published unit. A missingracemeanspresident.ledger.headisnulluntil the first unit is published. Show the time fromupdatedAt(UTC; add one hour for WAT), for example “as of 21:05 WAT”.- Errors:
400for an unknown race;404for a wrong URL path;5xxmeans try again after 15–60 seconds and keep showing your last good copy.
Terms of use
- Show “Citizen-verified tallies. Only INEC declares results.” beside the figures, every time.
- Credit Binchika (binchika.com).
- Never present the figures as official results, a projection or a winner.
- Always state coverage. President, Senate and House: “in N of 176,846 polling units”. Governor and state assembly: “from N polling units in the states voting”. One state: “from N polling units in Lagos”.
- Senate, House and state assembly: the figures add up votes from many separate contests. They are not seats and not a result for any constituency or state. Say “party votes across all Senate districts with published units” or “all Senate districts in Lagos combined”, never “Lagos Senate result”.
Say, for example, for the presidential race: “In 1,240 of 176,846 polling units, citizen-verified tallies show Party X with 52,310 votes and Party Y with 48,920. Only INEC declares results.” Don't say: “Party X leads”, “X is winning” or “projected winner”, and do not call the party with the most votes “leading”, “ahead” or “trending”. Published units are not a random sample and do not show the national picture. On screen, do not highlight, colour or tick the party with the most votes; if you sort parties by votes, label the list “by citizen-verified votes so far”. Always state coverage. On radio or television, say the notice aloud.
The same terms apply to every outlet: no exclusives, no paid tier, no early access.