> ## Documentation Index
> Fetch the complete documentation index at: https://developers.vizito.eu/llms.txt
> Use this file to discover all available pages before exploring further.

# Pre-registering visitors

> Announce a visitor from your own system and send them an invitation with a QR code.

Pre-registration is where the API earns its keep: your booking system, ERP or meeting-room tool knows who is coming long before reception does. Push that into Vizito and the visitor gets an invitation, arrives with a QR code, and signs in without typing a thing.

<Steps>
  <Step title="Create the registered visitor">
    `POST /api/knownvisitors` with the details you already have.
  </Step>

  <Step title="Send the invitation">
    `POST /api/knownvisitors/sendinvite/{language_id}` — the visitor gets the email with the QR code, the calendar item and the wallet pass.
  </Step>

  <Step title="They arrive">
    Scanning the QR at the kiosk creates the visit. Nothing more for you to do.
  </Step>
</Steps>

## Create the registered visitor

```bash cURL theme={null}
curl -X POST https://api.vizito.eu/api/knownvisitors \
  -H "Authorization: Bearer $VIZITO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "company_id": "5f2a1b9c4d3e2f0011223344",
    "visit_type": "5f2a1b9c4d3e2f0011223399",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "company": "Analytical Engines Ltd",
    "email": "ada@example.com",
    "phone": "+32470123456",
    "recipient": "Jane Doe",
    "language": "en",
    "visiting_on": { "startDate": "2026-09-03T08:00:00.000Z", "endDate": "2026-09-03T17:00:00.000Z" }
  }'
```

```json Response theme={null}
{
  "message": "Known Visitor added!",
  "data": {
    "_id": "66c1a2b3c4d5e6f700112233",
    "first_name": "Ada",
    "visiting_on": { "startDate": "2026-09-03T08:00:00.000Z", "endDate": "2026-09-03T17:00:00.000Z" },
    "create_date": "2026-08-29T09:14:02.000Z"
  }
}
```

### Choosing `visiting_on`

| What you want                   | What to send                                                                         |
| ------------------------------- | ------------------------------------------------------------------------------------ |
| A visit on one day              | `{ "startDate": "2026-09-03T08:00:00.000Z", "endDate": "2026-09-03T17:00:00.000Z" }` |
| A multi-day stay                | The same shape, spanning several days                                                |
| A contractor with no fixed date | Leave `visiting_on` out and set `"persistent": true`                                 |

A registered visitor with no `visiting_on` is offered on the kiosk every day, which is exactly what you want for regulars and exactly what you do not want for a one-off meeting.

<Note>
  Custom fields work here too: any field the visit type defines can be set on the registered visitor under its `field_name`, and it is carried onto the visit when they sign in — including fields that are hidden on the kiosk.
</Note>

## Send the invitation

The invitation is a separate call, so you decide whether and when it goes out. Send the object you got back, including its `_id`:

```bash cURL theme={null}
curl -X POST https://api.vizito.eu/api/knownvisitors/sendinvite/en \
  -H "Authorization: Bearer $VIZITO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "_id": "66c1a2b3c4d5e6f700112233",
    "company_id": "5f2a1b9c4d3e2f0011223344",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "email": "ada@example.com",
    "recipient": "Jane Doe",
    "visiting_on": { "startDate": "2026-09-03T08:00:00.000Z", "endDate": "2026-09-03T17:00:00.000Z" }
  }'
```

The path segment is the language of the email (`en`, `nl`, `fr`, `de`, …). The email itself — subject, blocks, colours, whether it carries a QR code, a calendar invite or a wallet pass — is what your visit type is configured to send.

<Warning>
  `_id` is required: the QR code and the pre-registration link are derived from it. Sending the invitation before creating the registered visitor produces a mail whose QR code signs nobody in.
</Warning>

### Inviting a whole list at once

```bash theme={null}
curl -X POST https://api.vizito.eu/api/companies/{company_id}/knownvisitors/sendinvites \
  -H "Authorization: Bearer $VIZITO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '["66c1a2b3c4d5e6f700112233", "66c1a2b3c4d5e6f700112244"]'
```

```json Response theme={null}
{ "requested": 2, "queued": 1, "skippedNoEmail": 1, "skippedRateLimited": 0 }
```

Registered visitors without a usable email address are skipped rather than failing the call. Bulk invitations are rate-limited per location to keep a runaway loop from mailing your whole address book.

## Look up who is expected

```bash theme={null}
curl https://api.vizito.eu/api/knownvisitors/visitingon/{company_id}/2026-09-03 \
  -H "Authorization: Bearer $VIZITO_API_KEY"
```

Returns everyone expected that day, including the persistent ones that carry no date.

## Sign them in on arrival

Normally the visitor does this themselves by scanning their QR code. If reception — or your own system — needs to do it, one call turns registered visitors into visits:

```bash theme={null}
curl -X POST https://api.vizito.eu/api/companies/{company_id}/knownvisitors/signin \
  -H "Authorization: Bearer $VIZITO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '["66c1a2b3c4d5e6f700112233"]'
```

```json Response theme={null}
[{ "id": "66c1a2b3c4d5e6f700112233", "status": "success", "visitorId": "66c1b0000000000000000001" }]
```

Somebody already inside is reported as `skipped`, not signed in twice.

## Cleaning up

Registered visitors that are not `persistent` are removed automatically once their visit is behind them, following your location's data retention settings. You only need `DELETE /api/knownvisitors/{id}` when a meeting is cancelled.

<Card title="All registered visitor endpoints" icon="code" href="/api-reference/registered-visitors/creating-a-registered-visitor">
  Listing, filtering, updating and deleting.
</Card>


## Related topics

- [Introduction](/index.md)
- [Creating a registered visitor](/api-reference/registered-visitors/creating-a-registered-visitor.md)
- [Updating a registered visitor](/api-reference/registered-visitors/updating-a-registered-visitor.md)
- [Sending an invitation](/api-reference/registered-visitors/sending-an-invitation.md)
- [Quickstart](/documentation/quickstart.md)
