List visit types
/visit-typesReturns your organisation's visit types: the six built-in types, renamed or not, and the types your admins have added, such as "Parent pickup" or "Vendor". Built-in types come first, then the others by name.
Use a type's key as type when you create a visit, and its form_id to read the questions that type
asks. Types that are turned off (enabled: false) are included so you can still read older visits; leave
them out with enabled=true.
Types open for pre-registration (pre_registration: true) carry a public_form: the questions a visitor
answers when they pre-register, without the fields your staff fill in.
Scope: forms:read · Plan: Pro and Enterprise in live mode; every plan in test mode.
Publishable keys: allowed. They see only the types that are turned on and open for pre-registration,
so a pre-registration form can offer exactly those.
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: forms:read
Query Parameters
How many items to return, from 1 to 100.
1 <= value <= 10025The next_cursor from the previous page. Leave it out for the first page.
length <= 512true for only the types new visits can use; false for only the types that are turned off.
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/visit-types?limit=25&enabled=true"{ "data": [ { "key": "meeting", "name": "Meeting", "built_in": true, "enabled": true, "pre_registration": true, "form_id": "form_01kk16jcj0fapr5z3qmqxgvpvv", "public_form": { "version": 2, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "vehicle_plate": { "type": "string", "title": "Vehicle number plate", "maxLength": 12 }, "bringing_laptop": { "type": "boolean", "title": "Bringing a laptop?" } }, "additionalProperties": false } }, "created_at": "2026-03-02T08:14:00Z", "updated_at": "2026-07-21T15:40:00Z" }, { "key": "interview", "name": "Interview", "built_in": true, "enabled": true, "pre_registration": false, "form_id": "form_01kk174pg0eak8k0ypct9rw8r3", "public_form": null, "created_at": "2026-03-02T08:14:00Z", "updated_at": "2026-03-02T08:14:00Z" }, { "key": "delivery", "name": "Delivery", "built_in": true, "enabled": true, "pre_registration": false, "form_id": "form_01kk17q0e0ewfrt47wvwzp8e1z", "public_form": null, "created_at": "2026-03-02T08:14:00Z", "updated_at": "2026-03-02T08:14:00Z" }, { "key": "contractor", "name": "Contractor", "built_in": true, "enabled": true, "pre_registration": true, "form_id": "form_01kk1602m0errvasw8gkt8f90b", "public_form": { "version": 3, "schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "contractor_company": { "type": "string", "title": "Contracting company", "maxLength": 120 }, "work_order": { "type": "string", "title": "Work order number", "pattern": "^WO-[0-9]{5}$" }, "areas": { "type": "array", "title": "Areas needed", "items": { "enum": [ "server_room", "generator_house", "roof", "banking_hall" ] }, "uniqueItems": true } }, "required": [ "contractor_company", "work_order" ], "additionalProperties": false } }, "created_at": "2026-03-02T08:14:00Z", "updated_at": "2026-09-02T10:15:00Z" }, { "key": "event", "name": "Event", "built_in": true, "enabled": false, "pre_registration": false, "form_id": "form_01kk189ac0edzvfq6yzsbzrk1z", "public_form": null, "created_at": "2026-03-02T08:14:00Z", "updated_at": "2026-06-18T10:30:00Z" }, { "key": "other", "name": "Other", "built_in": true, "enabled": true, "pre_registration": false, "form_id": "form_01kk18vma0fe0tf2q2mbq32tzf", "public_form": null, "created_at": "2026-03-02T08:14:00Z", "updated_at": "2026-03-02T08:14:00Z" }, { "key": "vendor", "name": "Vendor", "built_in": false, "enabled": true, "pre_registration": false, "form_id": "form_01kztpxc70fy3v3c0st276bbvj", "public_form": null, "created_at": "2026-08-12T10:05:00Z", "updated_at": "2026-08-12T10:05:00Z" } ], "next_cursor": null, "has_more": false}List audit events GET
Returns entries from your organisation's audit trail, newest first: changes, exports and views of personal data, by people, API keys, OAuth apps, kiosks and Agoo itself. The trail is append-only and hash-chained: each entry's `previous_hash` is the `hash` of the entry before it. Returns entries from your plan's audit-trail period (3 years on Pro, up to 7 years on Enterprise). Moving to a lower plan doesn't delete older entries: they're kept, hidden, and come back when you move up. **Scope:** `audit:read` · **Plan:** Pro and Enterprise in live mode; every plan in test mode.
Get a visit type GET
Returns one visit type by its key, whether it's turned on or off. A key your organisation doesn't have returns `not_found`. A type open for pre-registration includes its `public_form`. **Scope:** `forms:read` · **Plan:** Pro and Enterprise in live mode; every plan in test mode. **Publishable keys:** allowed for types that are turned on and open for pre-registration. Any other key returns `not_found`.