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

# Rapporten

> Exporteer een eenmalig scanrapport of plan terugkerende rapportmails.

> [!NOTE]
>
> De GetQR API is in bèta en beschikbaar voor geselecteerde workspaces. Details kunnen nog veranderen vóór de algemene release.

Rapporten vatten de scans per QR-code samen voor een afgeronde dag, week of maand. Exporteer er meteen een, of plan een rapport dat regelmatig per e-mail wordt verstuurd.

| Methode | Pad | Beschrijving |
| - | - | - |
| `POST` | `/api/v1/reports` | [Een rapport exporteren](#een-rapport-exporteren) |
| `GET` | `/api/v1/reports/schedules` | [Geplande rapporten weergeven](#geplande-rapporten-weergeven) |
| `POST` | `/api/v1/reports/schedules` | [Een rapport plannen](#een-rapport-plannen) |
| `PATCH` | `/api/v1/reports/schedules/{id}` | [Een gepland rapport bijwerken](#een-gepland-rapport-bijwerken) |
| `DELETE` | `/api/v1/reports/schedules/{id}` | [Een gepland rapport verwijderen](#een-gepland-rapport-verwijderen) |

## Headers

**Authorization** `string` *required*

`Bearer` gevolgd door je API-sleutel. Zie [Authenticatie](https://docs.getqr.com/nl/api/authentication.md).

**Content-Type** `string`

`application/json`. Verplicht bij `POST`- en `PATCH`-verzoeken.

## Bereik

Eenmalige en geplande rapporten accepteren allebei een `scope`:

| `scope` | Beslaat | `qrIds` |
| - | - | - |
| `all` | De QR-codes in je workspace | Weglaten |
| `selected` | Een gekozen set QR-codes | Een of meer ID's |
| `single` | Precies één QR-code | Precies één ID |

Een rapport bevat maximaal 50 QR-codes. Met `all` zijn dat de meest recent aangemaakte actieve QR-codes; gepauzeerde codes vallen erbuiten. Met `selected` en `single` worden gepauzeerde codes wel meegenomen. QR-codes zonder korte link hebben geen scans en worden overgeslagen.

## Periode

De periode is altijd de laatste afgeronde periode, dus een rapport bevat nooit de onvolledige gegevens van vandaag. De grenzen liggen om middernacht in de tijdzone van het rapport.

| `period` of `frequency` | Beslaat |
| - | - |
| `daily` | De vorige dag |
| `weekly` | De vorige week, van maandag tot en met zondag |
| `monthly` | De vorige kalendermaand |

## Een rapport exporteren

`POST /api/v1/reports`

Stelt een rapport op voor de laatste afgeronde periode en geeft het terug in het antwoord.

**scope** `string` *required*

`all`, `selected` of `single`. Zie [Bereik](#bereik).

**period** `string` *required*

`daily`, `weekly` of `monthly`. Zie [Periode](#periode).

**format** `string` *required*

`json` geeft het rapport terug in de body van het antwoord. `csv` en `pdf` geven een bestandsdownload terug.

**qrIds** `string[]`

QR-codes die het rapport beslaat. Verplicht bij `selected` (een of meer ID's) en `single` (precies één ID). Laat het weg bij `all`.

**timezone** `string` (default: UTC)

IANA-tijdzone waarop de grenzen van de periode worden uitgelijnd, bijvoorbeeld `America/New_York`. Een onbekende tijdzone geeft `422`.

**locale** `string` (default: en)

Taal van de pdf, bijvoorbeeld `en` of `de`. Een niet-ondersteunde waarde valt terug op Engels. Wordt genegeerd bij `csv` en `json`.

**name** `string`

Titel op de pdf, maximaal 40 tekens. Wordt genegeerd bij `csv` en `json`.

### JSON-antwoord

**periodStart** `string`

Eerste dag van de periode, `YYYY-MM-DD`.

**periodEnd** `string`

Eerste dag na de periode, `YYYY-MM-DD`. De periode eindigt om middernacht aan het begin van deze dag.

**qrs** `object[]`

Eén item per QR-code.

**properties**

**qrId** `string`

ID van de QR-code.

**name** `string`

Titel van de QR-code, of `Untitled QR`.

**type** `string`

Type van de QR-code, bijvoorbeeld `website`.

**totalScans** `integer`

Totaal aantal scans in de periode.

**uniqueScans** `integer`

Unieke scans in de periode.

**topGeography** `string`

Landcode met de meeste scans, of `—` zonder scans.

**topDevice** `string`

Apparaat met de meeste scans, of `—`.

**topOs** `string`

Besturingssysteem met de meeste scans, of `—`.

**topBrowser** `string`

Browser met de meeste scans, of `—`.

### CSV- en PDF-antwoorden

De body is het bestand. `Content-Disposition` geeft het een naam op basis van de periode, bijvoorbeeld `report-2026-08-10_2026-08-17.csv`. De CSV heeft één rij per QR-code met de kolommen `QR ID`, `QR name`, `QR type`, `Total scans`, `Unique scans`, `Top geography`, `Top device`, `Top OS` en `Top browser`.

```bash JSON theme={null}
curl -X POST "https://getqr.com/api/v1/reports" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": "selected",
    "qrIds": ["clw3n7t1x0002ab0d5mqe8pkr"],
    "period": "weekly",
    "format": "json",
    "timezone": "America/New_York"
  }'
```

```bash PDF theme={null}
curl -X POST "https://getqr.com/api/v1/reports" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "scope": "all", "period": "monthly", "format": "pdf", "locale": "de" }' \
  --output report.pdf
```

```json 200 theme={null}
{
  "periodStart": "2026-08-10",
  "periodEnd": "2026-08-17",
  "qrs": [
    {
      "qrId": "clw3n7t1x0002ab0d5mqe8pkr",
      "name": "Landing page",
      "type": "website",
      "totalScans": 128,
      "uniqueScans": 96,
      "topGeography": "US",
      "topDevice": "Mobile",
      "topOs": "iOS",
      "topBrowser": "Safari"
    }
  ]
}
```

## Het object voor geplande rapporten

Een gepland rapport wordt per e-mail verstuurd naar het account dat het heeft aangemaakt, om middernacht in de tijdzone van het rapport.

**id** `string`

ID van het geplande rapport.

**name** `string | null`

Label dat in het onderwerp van de e-mail en in het dashboard wordt getoond.

**frequency** `string`

`daily`, `weekly` of `monthly`.

**scope** `string`

`all`, `selected` of `single`.

**qrIds** `string[] | null`

QR-codes die het rapport beslaat bij het bereik `selected` en `single`. `null` als er geen ID's zijn meegestuurd.

**filters** `null`

Altijd `null`. Gereserveerd.

**includePdf** `boolean`

Of er een pdf aan de e-mail wordt toegevoegd.

**status** `string`

`active` of `paused`.

**timezone** `string`

IANA-tijdzone waarop het verzendtijdstip en de periode worden uitgelijnd.

**locale** `string`

Taal van de e-mail en de pdf.

**nextRunAt** `string`

Wanneer de volgende e-mail wordt verstuurd, ISO 8601: de volgende middernacht (`daily`), de volgende maandag (`weekly`) of de 1e van de volgende maand (`monthly`), in de tijdzone van het rapport.

**lastRunAt** `string | null`

Wanneer de laatste e-mail is verstuurd, ISO 8601.

**createdAt** `string`

Aanmaakdatum, ISO 8601.

**updatedAt** `string`

Datum van de laatste update, ISO 8601.

## Geplande rapporten weergeven

`GET /api/v1/reports/schedules`

Geeft de geplande rapporten van je workspace terug, ook die van andere leden, de nieuwste eerst. De lijst is gepagineerd: zie [Paginering](https://docs.getqr.com/nl/api/introduction.md#paginering).

**page** `integer` (default: 1)

Pagina die wordt teruggegeven, 1 of hoger.

**pageSize** `integer` (default: 100)

Resultaten per pagina, 1 tot 100.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/reports/schedules?page=1&pageSize=100" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "data": [
    {
      "id": "clx8f2k9a0001qk0c8vhd3xyz",
      "name": "Weekly campaign digest",
      "frequency": "weekly",
      "scope": "selected",
      "qrIds": ["clw3n7t1x0002ab0d5mqe8pkr", "clw3n7t1x0004ab0d9rzu2wfh"],
      "filters": null,
      "includePdf": true,
      "status": "active",
      "timezone": "America/New_York",
      "locale": "en",
      "nextRunAt": "2026-08-10T04:00:00.000Z",
      "lastRunAt": "2026-08-03T04:00:12.000Z",
      "createdAt": "2026-07-01T12:34:56.000Z",
      "updatedAt": "2026-07-28T09:12:00.000Z"
    }
  ],
  "pagination": { "page": 1, "pageSize": 100, "total": 1, "hasMore": false }
}
```

## Een rapport plannen

`POST /api/v1/reports/schedules`

Maakt een rapport aan dat regelmatig per e-mail wordt verstuurd. `nextRunAt` wordt berekend op basis van de frequentie en de tijdzone.

> [!NOTE]
>
> Een QR-code kan per frequentie maar bij één gepland rapport horen. Een overlappende planning geeft `409 conflict`.

Een rapport met het bereik `all` overlapt met elk ander rapport met dezelfde frequentie. Gepauzeerde rapporten tellen ook mee.

**frequency** `string` *required*

Hoe vaak het rapport wordt verstuurd: `daily`, `weekly` of `monthly`. Bepaalt ook de periode die het beslaat. Zie [Periode](#periode).

**scope** `string` *required*

`all`, `selected` of `single`. Zie [Bereik](#bereik).

**timezone** `string` *required*

IANA-tijdzone waarop het verzendtijdstip en de periode worden uitgelijnd, bijvoorbeeld `America/New_York`. Een onbekende tijdzone geeft `422`.

**locale** `string` *required*

Taal van de e-mail en de pdf, bijvoorbeeld `en` of `de`. Een niet-ondersteunde waarde valt terug op Engels. Pdf's in `zh`, `ja`, `ko` en `ar` worden in het Engels weergegeven.

**qrIds** `string[]`

QR-codes die het rapport beslaat. Verplicht bij `selected` (een of meer ID's) en `single` (precies één ID). Elke ID moet een QR-code in je workspace zijn, anders geeft het verzoek `404`.

**name** `string`

Label dat in het onderwerp van de e-mail en in het dashboard wordt getoond, maximaal 40 tekens.

**includePdf** `boolean` (default: false)

Voeg een pdf-versie van het rapport toe aan de e-mail.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/reports/schedules" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekly campaign digest",
    "frequency": "weekly",
    "scope": "selected",
    "qrIds": ["clw3n7t1x0002ab0d5mqe8pkr"],
    "includePdf": true,
    "timezone": "America/New_York",
    "locale": "en"
  }'
```

```json 200 theme={null}
{
  "id": "clx8f2k9a0001qk0c8vhd3xyz",
  "name": "Weekly campaign digest",
  "frequency": "weekly",
  "scope": "selected",
  "qrIds": ["clw3n7t1x0002ab0d5mqe8pkr"],
  "filters": null,
  "includePdf": true,
  "status": "active",
  "timezone": "America/New_York",
  "locale": "en",
  "nextRunAt": "2026-08-10T04:00:00.000Z",
  "lastRunAt": null,
  "createdAt": "2026-08-03T12:34:56.000Z",
  "updatedAt": "2026-08-03T12:34:56.000Z"
}
```

## Een gepland rapport bijwerken

`PATCH /api/v1/reports/schedules/{id}`

Wijzigt een gepland rapport, of pauzeert en hervat het. Stuur alleen de velden die je wilt wijzigen, minstens één. Als je de frequentie of de tijdzone wijzigt, of een gepauzeerd rapport hervat, wordt `nextRunAt` opnieuw berekend. De regel van één rapport per frequentie blijft gelden, dus een overlappende wijziging geeft `409`.

**id** `string` *required*

ID van het geplande rapport. Neem die over uit het antwoord van de lijst of van het aanmaken.

**status** `string`

`paused` stopt de e-mails zonder de planning te verwijderen. `active` hervat ze.

**name** `string`

Label, maximaal 40 tekens.

**frequency** `string`

`daily`, `weekly` of `monthly`.

**scope** `string`

`all`, `selected` of `single`.

**qrIds** `string[]`

QR-codes die het rapport beslaat. Elke ID moet een QR-code in je workspace zijn.

**includePdf** `boolean`

Voeg een pdf toe aan de e-mail.

**timezone** `string`

IANA-tijdzone.

**locale** `string`

Taal van de e-mail en de pdf.

```bash cURL theme={null}
curl -X PATCH "https://getqr.com/api/v1/reports/schedules/clx8f2k9a0001qk0c8vhd3xyz" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Monthly campaign digest",
    "frequency": "monthly",
    "status": "active"
  }'
```

```json 200 theme={null}
{
  "id": "clx8f2k9a0001qk0c8vhd3xyz",
  "name": "Monthly campaign digest",
  "frequency": "monthly",
  "scope": "selected",
  "qrIds": ["clw3n7t1x0002ab0d5mqe8pkr"],
  "filters": null,
  "includePdf": true,
  "status": "active",
  "timezone": "America/New_York",
  "locale": "en",
  "nextRunAt": "2026-09-01T04:00:00.000Z",
  "lastRunAt": "2026-08-03T04:00:12.000Z",
  "createdAt": "2026-07-01T12:34:56.000Z",
  "updatedAt": "2026-08-05T10:15:00.000Z"
}
```

## Een gepland rapport verwijderen

`DELETE /api/v1/reports/schedules/{id}`

Verwijdert de planning en stopt alle volgende e-mails.

> [!WARNING]
>
> Het verwijderen van een gepland rapport kan niet ongedaan worden gemaakt.

**id** `string` *required*

ID van het geplande rapport.

```bash cURL theme={null}
curl -X DELETE "https://getqr.com/api/v1/reports/schedules/clx8f2k9a0001qk0c8vhd3xyz" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{ "id": "clx8f2k9a0001qk0c8vhd3xyz", "deleted": true }
```

## Veelvoorkomende problemen

> [accordion] 404 bij het exporteren van een rapport
>
> Met het bereik `selected` of `single` kwam geen van de `qrIds` overeen met een QR-code met korte link in je workspace. Controleer de ID's.

> [accordion] 404 "QR not found." bij het plannen van een rapport
>
> Een van de `qrIds` is geen QR-code in je workspace, of is verwijderd. Controleer de ID's met [QR-codes weergeven](https://docs.getqr.com/nl/api/endpoints/qr-codes.md).

> [accordion] 409 bij het plannen van een rapport
>
> Een van de QR-codes hoort al bij een gepland rapport met dezelfde frequentie, of een rapport met die frequentie gebruikt het bereik `all`. Bewerk of verwijder dat rapport, of kies een andere frequentie.

> [accordion] 404 "Scheduled report not found."
>
> De `id` komt niet overeen met een gepland rapport in je workspace. Neem hem over uit [Geplande rapporten weergeven](#geplande-rapporten-weergeven).

> [accordion] In het rapport ontbreken de scans van vandaag
>
> Rapporten beslaan alleen de laatste afgeronde periode. Gebruik [Analytics](https://docs.getqr.com/nl/api/endpoints/analytics.md) voor actuele cijfers.

## Volgende stappen

> [card] [Analytics](https://docs.getqr.com/nl/api/endpoints/analytics.md)

> [card] [Geplande rapporten in de app](https://docs.getqr.com/nl/analytics/scheduled-reports.md)

> [card] [Rapporten lezen](https://docs.getqr.com/nl/analytics/reading-reports.md)

> [card] [Fouten](https://docs.getqr.com/nl/api/errors.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.