The gate admits a badge it should refuse
A reader that has only ever been tried with a valid badge is a reader that admits everyone. The nine faults a badge gate actually hits, and what each one really is.
A gate that reads an Offision visitor badge asks Offision for a verdict and acts on it. Almost every fault below is one of two things: the gate acting on the HTTP status instead of the answer in the body, or the credential not being allowed to write. The calls themselves are described in What the visitor badge API answers.
| What you see | Usual cause |
|---|---|
invalid_client on the token call | Client id or secret copied with surrounding whitespace, or the secret has been regenerated since |
| Every badge is admitted, including expired and cancelled ones | The gate is acting on the HTTP status. A refused scan is a 200 — the answer is isGranted in the body |
| The token works, every gate call returns 403 | The credential has visitor.read but not visitor.readwrite. All three gate calls are POST, so read-only is refused |
| Calls work from one server and 401 from another | The credential’s IP restriction does not list that server’s outbound address |
notFound, for a code that is printed on the badge | The code was mangled in transit — trimmed, upper-cased, or the scanner sent the whole URL rather than the code inside it. The call itself accepts any of the four code kinds |
| Every visitor’s check-in time is the time they last walked past the gate | Something is calling check-in on a schedule rather than on a scan. A scan on re-entry returns alreadyCheckedIn and writes nothing |
| Every badge stays at Await and reception sees nobody arrive | The gate is calling verify, not check-in. Verify records the scan and nothing else |
| A returning visitor is refused | Verify answers alreadyCheckedOut for someone who has left. Call check-in, which re-admits them |
| The arrival is recorded but the Offision door never opens | Door release follows a check-in made at an Offision panel only |
| A long term badge opens the gate but nothing is recorded | Expected. A long term badge has no visit to open, so action is always none |

