Update a person
/people/{person_id}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
conflictif another person already uses the new email address.
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"Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
The fields to change. Send null to clear an optional field.
1 <= propertiesResponse 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 PATCH "https://example.com/people/person_01kjsesxm0e4zbyvkr7bcfxbfg" \ -H "Content-Type: application/json" \ -d '{ "job_title": "Director, Treasury" }'{ "id": "person_01kjsesxm0e4zbyvkr7bcfxbfg", "name": "Kwame Mensah", "email": "kwame.mensah@voltabank.example", "phone": "+233205550142", "job_title": "Director, Treasury", "department": "Treasury", "employee_number": "VB-0142", "site_ids": [ "site_01kjpt3yw0fz0v414608h9x65s" ], "can_host": true, "tracks_attendance": true, "status": "active", "custom_fields": {}, "created_at": "2026-03-03T09:00:00Z", "updated_at": "2026-10-14T10:02:00Z", "deactivated_at": null}Get a person GET
Returns one host or employee, including deactivated people. **Scope:** `people:read` · **Plan:** Pro and Enterprise in live mode; every plan in test mode.
Deactivate a person DELETE
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 with `PATCH /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.