Not official results. Only INEC declares election results in Nigeria. Binchika is a citizen transparency layer. No party ads · equal space for all 22 parties · our rules

Public launch: Thursday 5 November 2026. Site readiness testing is ongoing. Until citizen reporting opens (after our privacy notice is in force; the date will be announced here), the feed returns zero counts. This is expected and is not an error.

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 is NG-FC), each { "units": n, "totals": { … } }, where units is 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. Only published units are in the votes.
  • Coverage. The denominator is INEC's 2023 national count of polling units (176,846). Use “units.published of 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.totals adds up party votes across constituencies or states. It is not seats and not a result for any constituency or state. In those races each byState entry 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.
  • byState lists only states with at least one published unit. A missing race means president.
  • ledger.head is null until the first unit is published. Show the time from updatedAt (UTC; add one hour for WAT), for example “as of 21:05 WAT”.
  • Errors: 400 for an unknown race; 404 for a wrong URL path; 5xx means try again after 15–60 seconds and keep showing your last good copy.

Terms of use

  1. Show “Citizen-verified tallies. Only INEC declares results.” beside the figures, every time.
  2. Credit Binchika (binchika.com).
  3. Never present the figures as official results, a projection or a winner.
  4. 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”.
  5. 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.

Register your desk

Request media registration

For newsrooms, broadcasters, news agencies, election observers and research groups. We aim to reply within two working days. Registration gives your desk a named contact for corrections and notice before the feed's format changes; it does not unlock any extra data. It lasts 12 months. Political parties and campaigns: please use the contact form instead.

An email address at your organisation's own domain helps us confirm the request. We check the domains automatically and a person reviews every request. Your details are kept only with your message in our mailbox and are deleted after 12 months.