QR Code Attendance Check-In
Who this guide is for: Administrators and instructors who run in-person (ILT) sessions and want a frictionless way to record attendance — learners scan a code on their phone instead of being marked off a roster by hand.
For an in-person session, the instructor displays a QR code. Each learner scans it with their phone camera, confirms with their existing EmbayLMS login, and is marked present — auto-completing the session’s module the same way manual attendance does. Check-in counts update live on the session page.
This is an alternative to (not a replacement for) manual roster marking, which remains available for walk-ins or learners without a phone.
Before you start
- The session must be an in-person (ILT) session. Virtual (Zoom/VILT) sessions use Zoom attendance and do not show the QR panel.
- The session must not be cancelled.
- Learners must already be registered for the session and able to sign in to your EmbayLMS tenant.
Step-by-step
1. Open the session
Go to Admin → Sessions and open the session you’re running. The QR check-in panel appears above the roster for in-person sessions.
2. Generate the QR code
Click Generate QR code. EmbayLMS creates a signed, time-limited code and renders it on screen. The code is valid from now until 30 minutes after the session’s end time (shown as Valid until … under the code).
Display the code where learners can reach it — projected on a screen, on your laptop, or printed.
3. Learners scan and confirm
Each learner:
- Scans the QR code with their phone camera and opens the link.
- Signs in if they aren’t already (then scans again).
- Taps Check in on the confirmation screen.
They see a confirmation that their attendance was recorded. Scanning twice is safe — the second scan simply says they’re already checked in.
4. Watch the live count
The panel shows N / M checked in (present / registered) and refreshes automatically every few seconds, so you can see check-ins arrive in real time.
5. Regenerate if needed
If the code expires (e.g. a long session) or you want a fresh one, click Regenerate code.
Configuration reference
| Field / control | Where | Behaviour |
|---|---|---|
| Generate QR code | Session page, QR panel | Creates a signed check-in code for this session and shows it on screen. |
| Valid until | Under the QR code | Expiry = session end time + 30 minutes. After this, the code stops working. |
| Regenerate code | QR panel | Issues a fresh code (e.g. after expiry). |
| N / M checked in | QR panel header | Live count of present learners over registered learners; polls every ~5 seconds. |
| Learner Check in button | Phone, after scanning | Marks the signed-in learner present. Idempotent. |
How it stays secure
- The QR encodes a signed link (HMAC). A learner cannot edit it to check into a different session or extend its validity.
- The code expires automatically (session end + 30 min), so an old photo of the code can’t be reused later.
- A learner can only ever check themselves in — identity comes from their own signed-in session, never from the code. The code only proves “this is a genuine, unexpired check-in code for this session.”
- Every check-in is written to the audit log (
checkin_scanned), and code generation is logged too (checkin_qr_generated).
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Learner sees “This check-in code has expired” | The session ended more than 30 minutes ago, or the code is old. | Click Regenerate code and have them scan the new one. |
| Learner sees “You’re not registered for this session” | They have no registration on this session. | Add them to the roster (register/enroll them), then they can check in. Or mark them present manually. |
| Learner sees “Sign in to check in” | They aren’t logged in on their phone. | They sign in, then scan the QR code again. |
| Learner sees “This check-in code is invalid” | The link was altered, or it’s from a different tenant. | Regenerate the code and have them re-scan. |
| The QR panel doesn’t appear | The session is virtual (VILT) or cancelled. | QR check-in is for in-person, non-cancelled sessions only. Use Zoom attendance for VILT. |
| The live count isn’t moving | Network hiccup; the panel keeps the last known count. | It self-recovers on the next poll; refresh the page if needed. |
Related
- Manual attendance — mark learners present/absent from the roster on the same session page (works alongside QR check-in).
- Course completion — marking a learner present auto-completes the session’s ILT module and recomputes their course progress.