Record an acknowledgement or consent
/people/{person_id}/attendance-evidenceRecords 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
kindfollows the notice's basis:acknowledgementorconsent. - 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.
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:manage
Path Parameters
The person's ID.
^person_[0-7][0-9a-hjkmnp-tv-z]{25}$"person_01kjsesxm0e4zbyvkr7bcfxbfg"Header Parameters
A UUID you generate for this operation. If you retry with the same key within 24 hours, Agoo returns the
original response instead of acting twice. While the first request is still running, a retry returns
conflict. Reusing a key with a different request returns idempotency_key_reused. Responses with
rate_limited, internal_error or unavailable aren't stored, so retry those with the same key.
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/people/person_01kjsesxm0e4zbyvkr7bcfxbfg/attendance-evidence" \ -H "Idempotency-Key: 3f6b2a1e-8c4d-4f7a-9b2e-5d1c0a7e9f64" \ -H "Content-Type: application/json" \ -d '{ "evidence": "face", "method": "paper", "notice_version": 2, "given_at": "2026-10-01T09:00:00Z" }'{ "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}Get a person's attendance evidence GET
Returns, 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.
Withdraw a consent POST
Records that the person withdrew their consent. New capture of that evidence stops straight away, and a method that needs it is no longer offered to them (they use another method, or the kiosk's fallback). For face, every kiosk is told to delete the person's template. Evidence already recorded is kept until its retention date. Acknowledgements can't be withdrawn (`invalid_state`): your organisation requires that evidence. A consent already withdrawn is returned as it is. **Scope:** `attendance:manage` · **Plan:** Pro and Enterprise in live mode; every plan in test mode.