> ## 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.

# Rapporter

> Eksportér en enkeltstående scanningsrapport, eller planlæg tilbagevendende rapportmails.

> [!NOTE]
>
> GetQR API'et er i beta og er tilgængeligt for udvalgte arbejdsområder. Detaljer kan ændre sig før den generelle udgivelse.

Rapporter opsummerer scanninger pr. QR-kode for en afsluttet dag, uge eller måned. Eksportér en med det samme, eller planlæg en rapport, der sendes med e-mail med faste mellemrum.

| Metode | Sti | Beskrivelse |
| - | - | - |
| `POST` | `/api/v1/reports` | [Eksportér en rapport](#eksportér-en-rapport) |
| `GET` | `/api/v1/reports/schedules` | [Vis planlagte rapporter](#vis-planlagte-rapporter) |
| `POST` | `/api/v1/reports/schedules` | [Planlæg en rapport](#planlæg-en-rapport) |
| `PATCH` | `/api/v1/reports/schedules/{id}` | [Opdater en planlagt rapport](#opdater-en-planlagt-rapport) |
| `DELETE` | `/api/v1/reports/schedules/{id}` | [Slet en planlagt rapport](#slet-en-planlagt-rapport) |

## Headere

**Authorization** `string` *required*

`Bearer` efterfulgt af din API-nøgle. Se [Godkendelse](https://docs.getqr.com/da/api/authentication.md).

**Content-Type** `string`

`application/json`. Påkrævet ved `POST`- og `PATCH`-forespørgsler.

## Omfang

Både enkeltstående og planlagte rapporter tager et `scope`:

| `scope` | Dækker | `qrIds` |
| - | - | - |
| `all` | QR-koderne i dit arbejdsområde | Udelad |
| `selected` | Et udvalgt sæt QR-koder | Et eller flere id'er |
| `single` | Præcis én QR-kode | Præcis ét id |

En rapport viser højst 50 QR-koder. Med `all` er det de senest oprettede aktive QR-koder; koder på pause udelades. Med `selected` og `single` medtages koder på pause. QR-koder uden kortlink har ingen scanninger og springes over.

## Periode

Perioden er altid den seneste afsluttede, så en rapport aldrig medtager dagens ufuldstændige data. Dens grænser ligger ved midnat i rapportens tidszone.

| `period` eller `frequency` | Dækker |
| - | - |
| `daily` | Den foregående dag |
| `weekly` | Den foregående uge, mandag til søndag |
| `monthly` | Den foregående kalendermåned |

## Eksportér en rapport

`POST /api/v1/reports`

Bygger en rapport for den seneste afsluttede periode og returnerer den i svaret.

**scope** `string` *required*

`all`, `selected` eller `single`. Se [Omfang](#omfang).

**period** `string` *required*

`daily`, `weekly` eller `monthly`. Se [Periode](#periode).

**format** `string` *required*

`json` returnerer rapporten i svarets body. `csv` og `pdf` returnerer en fil til download.

**qrIds** `string[]`

QR-koder, der skal dækkes. Påkrævet for `selected` (et eller flere id'er) og `single` (præcis ét id). Udelad det for `all`.

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

IANA-tidszone, som periodens grænser justeres efter, f.eks. `America/New_York`. En ukendt tidszone returnerer `422`.

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

PDF'ens sprog, f.eks. `en` eller `de`. En værdi, der ikke understøttes, falder tilbage til engelsk. Ignoreres af `csv` og `json`.

**name** `string`

Titel, der vises på PDF'en, op til 40 tegn. Ignoreres af `csv` og `json`.

### JSON-svar

**periodStart** `string`

Periodens første dag, `YYYY-MM-DD`.

**periodEnd** `string`

Den første dag efter perioden, `YYYY-MM-DD`. Perioden slutter ved midnat i starten af denne dag.

**qrs** `object[]`

Én post pr. QR-kode.

**properties**

**qrId** `string`

QR-kodens id.

**name** `string`

QR-kodens titel eller `Untitled QR`.

**type** `string`

QR-kodens type, f.eks. `website`.

**totalScans** `integer`

Samlede scanninger i perioden.

**uniqueScans** `integer`

Unikke scanninger i perioden.

**topGeography** `string`

Landekoden med flest scanninger eller `—` uden scanninger.

**topDevice** `string`

Enheden med flest scanninger eller `—`.

**topOs** `string`

Styresystemet med flest scanninger eller `—`.

**topBrowser** `string`

Browseren med flest scanninger eller `—`.

### CSV- og PDF-svar

Body er filen. `Content-Disposition` navngiver den efter perioden, f.eks. `report-2026-08-10_2026-08-17.csv`. CSV-filen har én række pr. QR-kode med kolonnerne `QR ID`, `QR name`, `QR type`, `Total scans`, `Unique scans`, `Top geography`, `Top device`, `Top OS` og `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"
    }
  ]
}
```

## Objektet for en planlagt rapport

En planlagt rapport sendes med e-mail til den konto, der oprettede den, ved midnat i dens tidszone.

**id** `string`

Den planlagte rapports id.

**name** `string | null`

Etiket, der vises i e-mailens emnelinje og i dashboardet.

**frequency** `string`

`daily`, `weekly` eller `monthly`.

**scope** `string`

`all`, `selected` eller `single`.

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

QR-koder, som rapporten dækker med omfangene `selected` og `single`. `null`, når der ikke er sendt nogen id'er.

**filters** `null`

Altid `null`. Reserveret.

**includePdf** `boolean`

Om en PDF vedhæftes e-mailen.

**status** `string`

`active` eller `paused`.

**timezone** `string`

IANA-tidszone, som afsendelsestidspunktet og perioden justeres efter.

**locale** `string`

Sproget for e-mailen og PDF'en.

**nextRunAt** `string`

Hvornår næste e-mail skal sendes, ISO 8601: næste midnat (`daily`), næste mandag (`weekly`) eller den 1. i næste måned (`monthly`) i rapportens tidszone.

**lastRunAt** `string | null`

Hvornår den seneste e-mail blev sendt, ISO 8601.

**createdAt** `string`

Oprettelsesdato, ISO 8601.

**updatedAt** `string`

Dato for seneste opdatering, ISO 8601.

## Vis planlagte rapporter

`GET /api/v1/reports/schedules`

Returnerer de planlagte rapporter i dit arbejdsområde, også dem, som andre medlemmer har oprettet, med de nyeste først. Listen er pagineret: se [Paginering](https://docs.getqr.com/da/api/introduction.md#paginering).

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

Siden, der returneres, 1 eller højere.

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

Resultater pr. side, 1 til 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 }
}
```

## Planlæg en rapport

`POST /api/v1/reports/schedules`

Opretter en rapport, der sendes med e-mail med faste mellemrum. `nextRunAt` beregnes ud fra frekvensen og tidszonen.

> [!NOTE]
>
> En QR-kode kan kun indgå i én planlagt rapport pr. frekvens. En overlappende plan returnerer `409 conflict`.

En rapport med omfanget `all` overlapper alle andre rapporter med samme frekvens. Rapporter på pause tæller også med.

**frequency** `string` *required*

Hvor ofte rapporten sendes: `daily`, `weekly` eller `monthly`. Bestemmer også den periode, den dækker. Se [Periode](#periode).

**scope** `string` *required*

`all`, `selected` eller `single`. Se [Omfang](#omfang).

**timezone** `string` *required*

IANA-tidszone, som afsendelsestidspunktet og perioden justeres efter, f.eks. `America/New_York`. En ukendt tidszone returnerer `422`.

**locale** `string` *required*

Sproget for e-mailen og PDF'en, f.eks. `en` eller `de`. En værdi, der ikke understøttes, falder tilbage til engelsk. PDF'er på `zh`, `ja`, `ko` og `ar` vises på engelsk.

**qrIds** `string[]`

QR-koder, der skal dækkes. Påkrævet for `selected` (et eller flere id'er) og `single` (præcis ét id). Hvert id skal være en QR-kode i dit arbejdsområde, ellers returnerer forespørgslen `404`.

**name** `string`

Etiket, der vises i e-mailens emnelinje og i dashboardet, op til 40 tegn.

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

Vedhæft en PDF-udgave af rapporten i e-mailen.

```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"
}
```

## Opdater en planlagt rapport

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

Ændrer en planlagt rapport eller sætter den på pause og genoptager den. Send kun de felter, du vil ændre, mindst ét. Ændrer du frekvensen eller tidszonen, eller genoptager du en rapport på pause, beregnes `nextRunAt` igen. Reglen om én rapport pr. frekvens gælder stadig, så en overlappende ændring returnerer `409`.

**id** `string` *required*

Den planlagte rapports id. Hent det fra svaret på listen eller oprettelsen.

**status** `string`

`paused` stopper e-mailene uden at slette planen. `active` genoptager dem.

**name** `string`

Etiket, op til 40 tegn.

**frequency** `string`

`daily`, `weekly` eller `monthly`.

**scope** `string`

`all`, `selected` eller `single`.

**qrIds** `string[]`

QR-koder, der skal dækkes. Hvert id skal være en QR-kode i dit arbejdsområde.

**includePdf** `boolean`

Vedhæft en PDF i e-mailen.

**timezone** `string`

IANA-tidszone.

**locale** `string`

Sproget for e-mailen og PDF'en.

```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"
}
```

## Slet en planlagt rapport

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

Sletter planen og stopper alle fremtidige e-mails.

> [!WARNING]
>
> Sletning af en planlagt rapport kan ikke fortrydes.

**id** `string` *required*

Den planlagte rapports id.

```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 }
```

## Almindelige problemer

> [accordion] 404 ved eksport af en rapport
>
> Med omfanget `selected` eller `single` matchede ingen af `qrIds` en QR-kode med kortlink i dit arbejdsområde. Tjek id'erne.

> [accordion] 404 "QR not found." ved planlægning af en rapport
>
> Et af `qrIds` er ikke en QR-kode i dit arbejdsområde, eller den er slettet. Tjek id'erne med [Vis QR-koder](https://docs.getqr.com/da/api/endpoints/qr-codes.md).

> [accordion] 409 ved planlægning af en rapport
>
> En af QR-koderne indgår allerede i en planlagt rapport med samme frekvens, eller en rapport med den frekvens bruger omfanget `all`. Rediger eller slet den rapport, eller vælg en anden frekvens.

> [accordion] 404 "Scheduled report not found."
>
> `id` matcher ikke en planlagt rapport i dit arbejdsområde. Hent det fra [Vis planlagte rapporter](#vis-planlagte-rapporter).

> [accordion] Rapporten mangler dagens scanninger
>
> Rapporter dækker kun den seneste afsluttede periode. Brug [Statistik](https://docs.getqr.com/da/api/endpoints/analytics.md) til tal i realtid.

## Næste skridt

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

> [card] [Planlagte rapporter i appen](https://docs.getqr.com/da/analytics/scheduled-reports.md)

> [card] [Læs dine rapporter](https://docs.getqr.com/da/analytics/reading-reports.md)

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


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