Deactivate a person
/people/{person_id}Deactivates a person instead of deleting them, so their visit and attendance history stays intact. A deactivated person can't host visitors, clock in or sign in, and no longer counts towards your plan's limits.
- Fires
person.deactivated. - Upcoming visits they host keep their
host_id. Reassign them withPATCH /visits/{visit_id}. - Deactivating someone who is already deactivated returns them unchanged and fires no event.
Scope: people:write · 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: people:write
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
curl -X DELETE "https://example.com/people/person_01kjsesxm0e4zbyvkr7bcfxbfg"{ "id": "person_01kjsf1800f38sgy433fabefh9", "name": "Kojo Badu", "email": "kojo.badu@voltabank.example", "phone": null, "job_title": "Facilities officer", "department": "Facilities", "employee_number": "VB-0188", "site_ids": [ "site_01kjpt3yw0fz0v414608h9x65s" ], "can_host": false, "tracks_attendance": true, "status": "deactivated", "custom_fields": {}, "created_at": "2026-03-03T09:04:00Z", "updated_at": "2026-08-20T13:55:00Z", "deactivated_at": "2026-08-20T13:55:00Z"}Update a person PATCH
Changes a person's details. Send only the fields you want to change; fields you leave out stay as they are. `custom_fields` are merged key by key, and a key set to `null` is removed. - Fires `person.updated`. - A deactivated person can't be updated (`invalid_state`). - Returns `conflict` if another person already uses the new email address. **Scope:** `people:write` · **Plan:** Pro and Enterprise in live mode; every plan in test mode.
List visits GET
Returns visits, newest first. Combine filters to answer everyday questions: - Who is on site now: `status=checked_in&site_id=…` - Today's expected guests: `status=expected&expected_after=…&expected_before=…` - A host's visitors: `host_id=…` In live mode, visits created before your plan's visitor history are left out. They're kept, not deleted, and come back if you move to a plan with a longer history. Visits that are still `expected`, `awaiting_approval` or `checked_in` are always included. **Scope:** `visits:read` · **Plan:** Pro and Enterprise in live mode; every plan in test mode.