> This page is optimized for agents. Use the linked Markdown pages and llms.txt indexes for related API content.

# Get the presence report (night register).

> Returns the guests present per night, as one entry per day in date order. Only guests who are actually checked in are counted, split per age group; group on reservationNumber to ignore the age groups. A guest counts from the check-in day up to but not including the registered check-out day, and a stay without a registered check-out keeps counting, so a forgotten check-out keeps that guest in the register every night after. Days run from midnight UTC, so a check-in or check-out registered just after local midnight can land on the neighbouring day. Paging is on reservations, so a stay is never split across pages and X-Total-Count is the number of reservations. Every page repeats all days in the range and fills them with the reservations of that page only, so the days must be merged across pages: an empty items array on a single page does not mean nobody was present. Once every page is merged, a day with nobody present keeps an empty items array, so "nobody there" differs from "not delivered".

- Product: Reports
- Section: Report
- Snapshot: Current
- Method: `GET`
- Path: `/api/reports/presence`

## Query parameters

### `dateFrom`

Type: `string`  
Format: `date-time`  
Required: yes  

### `dateTo`

Type: `string`  
Format: `date-time`  
Required: no  

### `grouped`

Type: `boolean`  
Required: no  
Default: `false`  

### `includeCancelled`

Type: `boolean`  
Required: no  
Default: `false`  

### `accommodationCategory`

Type: `number`  
Required: no  

### `offset`

Type: `number`  
Required: no  
Default: `0`  

### `limit`

Type: `number`  
Required: no  
Default: `25`  

## Execute with TypeScript

Package: `@recranet/sdk`  

```ts
import { RecranetApiClient } from "@recranet/sdk";

const client = new RecranetApiClient({ apiKey: process.env.RECRANET_API_KEY! });

const result = await client.reports.presence({
  dateFrom: new Date("2026-06-01"),
});
```

## Execute with curl

```bash
curl "https://app.recranet.com/api/reports/presence" \
    -H "X-Api-Key: $RECRANET_API_KEY" \
    --url-query "dateFrom=$DATEFROM"
```

## Responses

### Response `200`

Category: success  

Successful operation

#### `application/json`

##### Generated example

```json
[
  {
    "date": "2025-10-01",
    "items": [
      {
        "reservationId": 84213,
        "reservationNumber": "2025-1043",
        "reservationName": "Jansen",
        "reservationAccommodationTitle": "Comfort chalet 4p",
        "reservationAccommodationUnitNumber": "B12",
        "reservationDateFrom": "2025-09-29",
        "reservationDateTo": "2025-10-05",
        "ageGroupSpecificationDescription": "Volwassenen",
        "numOfPersons": 2,
        "guestLocality": "Utrecht",
        "guestCountry": "NL",
        "guestDocumentType": "id-card",
        "modified": "2025-09-29T14:03:11+02:00"
      }
    ]
  }
]
```

##### Schema

###### object[]

Type: `object[]`  

###### object

Type: `object`  

###### `date`

Type: `string`  
Format: `date`  
Required: no  

###### `items`

Type: `object[]`  
Required: no  

###### object

Type: `object`  

###### `reservationId`

Type: `number`  
Required: no  

###### `reservationNumber`

Type: `string`  
Required: no  

###### `reservationName`

Type: `string`  
Required: no  

###### `reservationAccommodationTitle`

Type: `string`  
Required: no  

###### `reservationAccommodationUnitNumber`

Type: `string`  
Required: no  

###### `reservationDateFrom`

Type: `string`  
Format: `date`  
Required: no  

###### `reservationDateTo`

Type: `string`  
Format: `date`  
Required: no  

###### `ageGroupSpecificationDescription`

Type: `string`  
Required: no  

###### `numOfPersons`

Type: `number`  
Required: no  

###### `guestLocality`

Type: `string`  
Required: no  

###### `guestCountry`

Type: `string`  
Required: no  

###### `guestDocumentType`

Type: `string`  
Required: no  

###### `modified`

Type: `string`  
Format: `date-time`  
Required: no  

The reservation timestamp. It also moves for edits unrelated to the register, so it helps spot changes but is not a change filter.

### Response `400`

Category: client-error  

Bad request

#### `application/json`

##### Example

```json
{
  "statusCode": 400,
  "description": "Bad request",
  "errors": [
    "Bad request"
  ]
}
```

##### Schema

###### object

Type: `object`  

### Response `429`

Category: client-error  

Too many requests

#### `application/json`

##### Example

```json
{
  "statusCode": 429,
  "description": "Too many requests",
  "errors": [
    "Too many requests"
  ]
}
```

##### Schema

###### object

Type: `object`  

## Related representations

- [Human documentation](/reports/methods/presence/)
- [TypeScript Markdown](/reports/methods/presence.md?lang=typescript)
- [curl Markdown](/reports/methods/presence.md?lang=curl)
- [site llms.txt](/llms.txt)
- [product llms.txt](/reports/llms.txt)
- [snapshot llms.txt](/reports/llms.txt)
