| POST | /api/scan/ | Submit scan from node. Resolves the person via issued IDCard (active/lost/damaged/expired) first, then falls back to the legacy Person.card_number, so replaced/old cards still attribute to the correct person. | None |
| GET | /api/info/{card_number}/ | Lookup person by card number (same resolution order as /api/scan/). | None |
| GET | /api/devices/status/ | Device online or offline state | Admin |
| GET | /api/devicelogs/latest-meta/ | Latest device log metadata | Admin |
| POST | /admin/core/person/register-id/save/ | ID registration save. A plain save updates profile info only. With print_trigger=true it issues a new active IDCard, expires the previous active card, writes an IDCardPrintLog (using print_reason), and keeps Person.id_image in sync. | Admin (person_id_registration) |
| GET | /admin/core/person/register-id/print-logs/?person_id=<id> | Powers the "Save and Print Card" modal. Returns reasons (the IDCardPrintLog reason choices) and logs (the person's prior print audit entries: reason, printed_at, printed_by, notes, card_number, card_status), newest first. | Admin (person_id_registration) |