Verify a Pass
A Hannu Pass is a delegated, one-time credential that confirms an Operator's visit is authorised — verify one at the public POST /v1/pass/verify endpoint. It shows the verifier the Operator's first name, photo, and tier, but never their contact details or government IDs.
Some tasks send an Operator to a place that needs to confirm the visit is legitimate — a building reception, a pickup counter, a gated site. A Hannu Pass lets that place confirm the visit is real and authorised, and see just enough to match the person at the door.
What a Pass is
A Pass is a delegated, one-time credential issued for a specific visit. It proves the bearer is a Hannu-verified Operator acting under a real task. When verified, it shows the Operator's first name, last initial, photo, and reputation tier, plus the client who sent them — enough to confirm the person on the doorstep. It never exposes the Operator's phone, address, full name, or BVN/NIN — contact details and government IDs are never exposed. It's scoped to one visit and expires.
Verify it
The venue presents the scanned Pass token to the public verification endpoint. POST /v1/pass/verify needs no API key — anyone handed a Pass can confirm it. The token goes in the body field token.
curl -X POST https://api.hannu.africa/v1/pass/verify \
-H "Authorization: Bearer $HANNU_KEY"An authorized response confirms the visit and shows who to expect:
{
"data": {
"status": "authorized",
"credential_ref": "cred_7a20",
"operator": {
"first_name": "Amara",
"last_initial": "O",
"tier": "verified",
"photo_url": "https://…"
},
"sent_by": "Acme Logistics",
"scope": {
"action_class": "field_verification",
"task_title": "Confirm storefront at 23 Commercial Avenue, Yaba",
"zone_ref": "lagos_yaba"
},
"issued_at": "2026-07-17T13:30:00Z",
"expires_at": "2026-07-17T16:30:00Z",
"scan_count": 1
}
}status—authorizedwhen the Pass is genuine, unspent, and unexpired.operator— first name, last initial, photo, and tier, so the verifier can match the person at the door.sent_by— the client who sent the Operator.scope— what the visit is authorized for: action class, task title, and zone.
An expired, revoked, spent, or unknown Pass returns status: "not_authorized" with a reason and no Operator or client details:
{
"data": {
"status": "not_authorized",
"reason": "expired"
}
}A Pass authenticates a single visit. Once verified and used, it can't be replayed for another. This keeps a leaked or copied token from authorizing a second visit.
Verifying a Pass reveals the Operator's first name, photo, and tier, and the client who sent them — enough to confirm the visit — but never their contact details or government IDs. The developer who created the task never sees the Operator's phone or full name either. See how Operators work.