Base URL
GET /companiesList means GET https://api.vizito.eu/api/companiesList.
Authentication
Send your API key as a bearer token on every request:Everything hangs off a location
Almost every endpoint names a location, either in the path (/companies/{company_id}/...) or in the body (company_id). Your key is pinned to a set of locations, and naming one outside that set is refused with 403.
Start with GET /companiesList: it is the only endpoint that needs no location id, and it returns the ones your key covers.
Conventions
Ids
Ids
Every id is a 24-character hexadecimal string, e.g.
5f2a1b9c4d3e2f0011223344. Objects carry theirs as _id. Ids are stable: store them rather than re-resolving objects by name.Dates and times
Dates and times
Timestamps are ISO 8601 in UTC —
2026-08-29T07:58:11.000Z — both in and out. Where an endpoint takes a date in the path it also accepts a plain YYYY-MM-DD, which is read in the location’s own timezone.Request bodies
Request bodies
Send
Content-Type: application/json. Form-encoded bodies are accepted too, for the sake of older integrations, but JSON is what you want.Custom fields
Custom fields
A visit type can define its own questions. Their answers are stored on the visitor or registered visitor under the field’s
field_name, alongside the built-in fields — so you send and read them as ordinary top-level keys. GET /companies/{company_id}/fields lists what a location has.Extra fields are kept
Extra fields are kept
Visitors, registered visitors and hosts accept keys beyond the documented ones and store them as-is. Handy for carrying your own reference (
"crm_id": "..."), but be deliberate: a typo in a field name creates a new field rather than failing.Language
Language
Endpoints that return configured text — visit types, agreements, fields — take a
language_id query parameter (en, nl, fr, de, …) and answer in that language, falling back to English.Listing endpoints
The two big lists — visitors and registered visitors — are the ones the Backoffice grids are built on, so they take the grid’s parameters:
They answer with the page and the unfiltered-by-page total:
Rate limits
There is no general request quota. Two things are limited:- Failed key presentations — 30 refused credentials from one IP address in 15 minutes gets you
429for the rest of the window. Valid requests never count towards it. - Bulk invitations — capped per location, so a loop cannot mail your whole address book. Over the cap, the extra recipients are reported as
skippedRateLimitedrather than sent.

