Get a person's attendance evidence
/people/{person_id}/attendance-evidenceReturns, for face, selfie and location evidence, whether it applies to the person and their latest acknowledgement or consent, and the kiosks their face is enrolled on. Face templates stay on the kiosks: Agoo records only where a person is enrolled.
People can read their own; reading anyone else's needs attendance:read.
Scope: attendance:read · Plan: Pro and Enterprise in live mode; every plan in test mode.
Send Authorization: Bearer <token> on every request. The token is one of:
| Prefix | What it is | Where it may be used |
|---|---|---|
agoo_sk_live_ | Secret key, live mode | Your servers only |
agoo_sk_test_ | Secret key, test mode | Your servers only |
agoo_pk_live_ | Publishable key, live mode | Browsers and apps: create pre-registrations and bookings, read public booking types (with their intake questions) and their free slots, read the visit types open for pre-registration with their public forms. Never lists people. |
agoo_pk_test_ | Publishable key, test mode | As above, in test mode |
Admins create keys in Console → Developers → API keys and choose each key's scopes. A key is shown once. Never put a secret key in a URL, a browser or a mobile app.
In: header
Scope: attendance:read
Path Parameters
The person's ID.
^person_[0-7][0-9a-hjkmnp-tv-z]{25}$"person_01kjsesxm0e4zbyvkr7bcfxbfg"Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/people/person_01kjsesxm0e4zbyvkr7bcfxbfg/attendance-evidence"{ "person_id": "person_01kjw4mg80efgb5aqbsqnxhtbh", "evidence": [ { "person_id": "person_01kjw4mg80efgb5aqbsqnxhtbh", "evidence": "face", "status": "acknowledged", "basis": "required", "notice_version": 2, "record": { "id": "evidence_01m3vb29m0f019htcy61ah5x3g", "person_id": "person_01kjw4mg80efgb5aqbsqnxhtbh", "evidence": "face", "kind": "acknowledgement", "notice_version": 2, "method": "kiosk", "given_at": "2026-10-01T09:00:00Z", "recorded_by": "device", "recorded_by_person_id": null, "withdrawn_at": null, "withdrawal_method": null } }, { "person_id": "person_01kjw4mg80efgb5aqbsqnxhtbh", "evidence": "selfie", "status": "no_consent", "basis": "consent", "notice_version": 1, "record": null }, { "person_id": "person_01kjw4mg80efgb5aqbsqnxhtbh", "evidence": "location", "status": "off", "basis": "required", "notice_version": 1, "record": null } ], "face_enrolments": [ { "device_id": "dev_01kjywram0esxva8np5wzj6fre", "status": "enrolled", "enrolled_at": "2026-10-01T09:01:00Z", "deleted_at": null } ]}List people's evidence status GET
Returns, for one evidence type, each active person on attendance with their status, sorted by person. Use `status=unacknowledged` for everyone who hasn't acknowledged the current notice yet, or `status=no_consent` in consent mode. **Scope:** `attendance:read` · **Plan:** Pro and Enterprise in live mode; every plan in test mode.
Record an acknowledgement or consent POST
Records that the person acknowledged the current notice (when your organisation requires the evidence) or consented to it (consent mode), for example from a signed paper form or your HR system. Employees usually do this themselves in the app or at the kiosk. - The record's `kind` follows the notice's basis: `acknowledgement` or `consent`. - Recording the same thing again returns the existing record. - With no published notice for the evidence you get `invalid_state`. **Scope:** `attendance:manage` · **Plan:** Pro and Enterprise in live mode; every plan in test mode.