Status expires on its own.
Nobody declares a status in Bona. Every enrolment carries a completion date computed from entry date plus programme duration, adjusted by direct-entry credit and by every strike and closure the institution has declared. A student still enrolled past that date files a re-validation, and a named person at their institution reviews it. The arithmetic is visible to everyone it affects.
Past her expected completion date and inside the three-month grace period. Her institution has until 31 October 2026 to confirm she is still enrolled.
Every date shown anywhere in Bona is explainable by a trace like this one, down to the circular number behind the adjustment. It is what a student contesting a status, a registrar reviewing a re-validation and a bank auditing a lending decision are all actually asking for.
curl https://api.bona.ng/c/NS-TEST-0001-AAAM # The same record behind a key, with consent-scoped fields: curl https://api.bona.ng/v1/verify/NS-TEST-0001-AAAM \ -H "Authorization: Bearer bona_test_…"
{
"status": "…",
"institution": "…",
"programme": "…",
"level": …
}Attestation — enrolled or not, and where — needs no consent and no key. Everything past that does: a student grants fields, not scopes, and the grant is checked live on every call, so a revocation takes effect immediately rather than at the end of a cache window.
Onboarding takes about three weeks, most of it ours, and the first upload is a spreadsheet you already have. Bona costs the institution nothing.
Start onboarding →A landlord, a shop, a small employer. No account and no integration — just the student’s NSID and ₦500.
Open Quick Verify →