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.

POST/v1/pass/verify
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:

JSON
{
  "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
  }
}
  • statusauthorized when 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:

JSON
{
  "data": {
    "status": "not_authorized",
    "reason": "expired"
  }
}
One-time, then spent

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.

Privacy by construction

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.