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

# QR-codedata per type

> Het dataformaat, een voorbeeldverzoek en wat je na het drukken nog kunt wijzigen, voor elk van de 16 QR-codetypes.

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

Elke QR-code heeft een `qrType`, en het type bepaalt wat `data` moet bevatten. Deze handleiding geeft per type het formaat, een werkende request-body en wat je nog kunt wijzigen als de code eenmaal gedrukt is.

De voorbeelden zijn request-bodies voor [Een QR-code maken](https://docs.getqr.com/nl/api/endpoints/qr-codes.md#een-qr-code-maken). Verstuur ze zo:

```bash theme={null}
curl -X POST "https://getqr.com/api/v1/qrs" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "qrType": "website", "data": "https://example.com/menu", "title": "Menu" }'
```

## Alle types in één oogopslag

| `qrType` | `data` | Te wijzigen na het drukken |
| - | - | - |
| [`website`](#website) | http(s)-URL | Ja |
| [`feedback`](#feedback) | http(s)-URL van het formulier | Ja |
| [`payment`](#betaling) | URL van de betaalprovider | Ja |
| [`whatsapp`](#whatsapp) | `wa.me`-link | Ja |
| [`location`](#locatie) | Kaart-URL | Ja |
| [`app`](#app-link) | Store-URL of leeg, plus `link.ios` / `link.android` | Ja |
| [`email`](#e-mail) | `mailto:`-URI | Ja |
| [`sms`](#sms) | `sms:`-URI | Ja |
| [`wifi`](#wifi) | `WIFI:`-payload | **Nee** |
| [`pdf`, `image`, `video`](#bestandstypes) | Leeg, met een `fileId` | Ja |
| [`vcard`](#vcard) | vCard 3.0-tekst | Ja |
| [`social`](#social-media) | JSON-string | Ja |
| [`multilink`](#multi-link) | JSON-string | Ja |
| [`event`](#event) | JSON-string | Ja |

## Hoe een QR-code wordt afgehandeld

Elke QR-code is een korte link plus een payload. Twee velden bevatten de inhoud:

| Veld | Wat het is |
| - | - |
| `link.url` | Waar de korte link een bezoeker naartoe stuurt. Dit is de echte bestemming voor elk type behalve `wifi`. |
| `data` | De payload van het type, gecontroleerd tegen `qrType`. Alleen bij `wifi`, `vcard`, `social`, `multilink`, `event` en `sms` wordt deze ongewijzigd opgeslagen. Bij alle andere types levert deze alleen `link.url`, en wordt de opgeslagen `data` de korte link. Lees de bestemming uit `url` in het antwoord. |

Regels voor elk type:

* **Standaardwaarden.** Bij het aanmaken wordt een weggelaten of lege `link.url` gelijk aan `data`, en kun je het hele `link`-object weglaten. Stuur je beide mee en verschillen ze, dan wint `link.url`. Stuur ze gelijk mee, of stuur alleen `data`.
* **Wat de afbeelding codeert.** De afbeelding codeert de korte link voor elk type behalve `wifi`. Zo kun je wijzigen waar een gedrukte code naartoe leidt, en worden de scans bijgehouden. Een WiFi-QR-code codeert het netwerk zelf: je kunt hem na het drukken niet wijzigen, en de scans worden niet bijgehouden.
* **Schema's.** `link.url` accepteert alleen `http:`, `https:`, `wifi:`, `mailto:`, `sms:` en `begin:`. Al het andere, waaronder `geo:`, `smsto:`, `matmsg:` en `tel:`, krijgt `422 Invalid destination URL`, ook als `data` het wel accepteert.
* **Lege data.** Een lege `data` slaat de typecontrole over. Bij een type met doorverwijzing moet `link.url` dan zijn ingesteld, anders krijgt de aanroep `400 Missing destination URL`.
* **Vorm.** Buiten de typecontrole valideert de server de payload niet. Een JSON-type hoeft alleen als JSON-object te parsen, en een vCard hoeft alleen met `BEGIN:VCARD` te beginnen.

> [!TIP]
>
> Limieten die hieronder met **Editor** zijn gemarkeerd, worden door de editor in het dashboard afgedwongen. De API accepteert payloads die ze negeren, maar die kunnen vreemd worden weergegeven op de landingspagina of in de editor.

## Website

`qrType`: `"website"`. Handleiding voor het dashboard: [Website-QR-code](https://docs.getqr.com/nl/qr-types/website.md).

| Veld | Gedrag |
| - | - |
| `data` | Een http(s)-URL. |
| `link.url` | De bestemming. Standaard gelijk aan `data`. |
| `fileId` | Niet toegestaan. |
| Codeert | De korte link, die doorverwijst naar `link.url`. Scans worden bijgehouden. |
| Na het drukken | Te wijzigen. Stuur `data` of `link.url` om de bestemming te verplaatsen. Alleen `data` is genoeg. |

```json Request body theme={null}
{
  "qrType": "website",
  "data": "https://example.com/menu",
  "title": "Menu"
}
```

Fouten:

* `422 Expected an http(s) URL, e.g. "https://example.com" for qrType "website".`
* `422 Invalid destination URL`

## Feedback

`qrType`: `"feedback"`. Handleiding voor het dashboard: [Feedback-QR-code](https://docs.getqr.com/nl/qr-types/feedback.md).

`data` is de http(s)-URL van het feedbackformulier, bijvoorbeeld een Google Form of een reviewpagina. Al het andere werkt zoals bij [Website](#website).

```json Request body theme={null}
{
  "qrType": "feedback",
  "data": "https://forms.gle/abc123"
}
```

## Betaling

`qrType`: `"payment"`. Handleiding voor het dashboard: [Betaal-QR-code](https://docs.getqr.com/nl/qr-types/payment.md).

`data` is de betaal-URL van de provider, bijvoorbeeld:

```text theme={null}
https://paypal.me/<user>/25EUR
```

De editor in het dashboard herkent deze hosts: `paypal.me`, `paypal.com/paypalme`, `cash.app`, `venmo.com`, `buy.stripe.com`, `stripe.com`, `square.link` en `payoneer.com`. Bij PayPal is het bedrag het laatste padsegment. Elke andere http(s)-URL werkt ook, maar die splitst de editor niet op in provider en bedrag. Al het andere werkt zoals bij [Website](#website).

```json Request body theme={null}
{
  "qrType": "payment",
  "data": "https://paypal.me/acme/25EUR"
}
```

## WhatsApp

`qrType`: `"whatsapp"`. Handleiding voor het dashboard: [WhatsApp-QR-code](https://docs.getqr.com/nl/qr-types/whatsapp.md).

`data` is een `wa.me`-link: het internationale nummer in cijfers zonder `+`, eventueel met een vooraf ingevulde tekst.

```text theme={null}
https://wa.me/<digits>
https://wa.me/<digits>?text=<urlencoded>
```

De server controleert alleen of het een http(s)-URL is. Het dashboard leest ook `api.whatsapp.com/send`-links. Al het andere werkt zoals bij [Website](#website).

```json Request body theme={null}
{
  "qrType": "whatsapp",
  "data": "https://wa.me/14155550123?text=Hi%20there"
}
```

## Locatie

`qrType`: `"location"`. Handleiding voor het dashboard: [Locatie-QR-code](https://docs.getqr.com/nl/qr-types/location.md).

`data` is een kaart-URL. Gebruik dit formaat om de QR-code in het dashboard te kunnen blijven bewerken (`query_place_id` is optioneel):

```text theme={null}
https://www.google.com/maps/search/?api=1&query=<address>&query_place_coords=<lat>,<lng>&query_place_id=<id>
```

Elke andere http(s)-URL verwijst ook door. Een `geo:`-URI komt door de `data`-controle, maar wordt als bestemming geweigerd, dus gebruik die niet. Al het andere werkt zoals bij [Website](#website).

```json Request body theme={null}
{
  "qrType": "location",
  "data": "https://www.google.com/maps/search/?api=1&query=Golden+Gate+Bridge&query_place_coords=37.8199,-122.4783"
}
```

## App Link

`qrType`: `"app"`. Handleiding voor het dashboard: [App Link-QR-code](https://docs.getqr.com/nl/qr-types/app-link.md).

| Veld | Gedrag |
| - | - |
| `link.ios`, `link.android` | URL's van de App Store en Google Play. iOS-bezoekers gaan naar `ios`, Android-bezoekers naar `android`. Bij het scannen gaan deze voor op al het andere. |
| `link.url` | De terugvaloptie voor andere apparaten. Standaard gelijk aan `data`, en anders aan `ios` of `android`. |
| `data` | Een http(s)-URL (het dashboard stuurt de store-URL), of leeg. Minstens één van `link.ios`, `link.android`, `link.url` of `data` moet zijn ingesteld, anders krijgt de aanroep `400 Missing destination URL`. |
| `fileId` | Niet toegestaan. |
| Codeert | De korte link. Scans worden bijgehouden. |
| Na het drukken | Te wijzigen. `link.ios` en `link.android` worden los van elkaar toegepast, elk alleen als je ze meestuurt. `null` wist er een. Je hoeft `qrType` niet opnieuw mee te sturen. Wissel je naar een ander type, dan worden beide store-links gewist. |

```json Request body theme={null}
{
  "qrType": "app",
  "data": "https://apps.apple.com/app/id123456789",
  "link": {
    "ios": "https://apps.apple.com/app/id123456789",
    "android": "https://play.google.com/store/apps/details?id=com.acme.app"
  }
}
```

Fouten:

* `422 Invalid URL`
* `400 Missing destination URL`

## E-mail

`qrType`: `"email"`. Handleiding voor het dashboard: [E-mail-QR-code](https://docs.getqr.com/nl/qr-types/email.md).

```text theme={null}
mailto:<address>?subject=<subject>&body=<body>
```

| Veld | Gedrag |
| - | - |
| `data` | Een `mailto:`-URI met een optioneel onderwerp en bericht. Codeer spaties als `%20`: het dashboard schrijft ze als `+`, wat niet elke mailapp als spatie leest. `matmsg:` wordt als bestemming geweigerd. |
| `link.url` | De `mailto:`-URI. Standaard gelijk aan `data`. |
| `fileId` | Niet toegestaan. |
| Codeert | De korte link, die een pagina opent die doorgeeft aan de mailapp. |
| Na het drukken | Te wijzigen. Stuur `data` of `link.url` om het bericht te wijzigen. Alleen `data` is genoeg. |

```json Request body theme={null}
{
  "qrType": "email",
  "data": "mailto:hi@example.com?subject=Hello&body=Hi%20there"
}
```

Fouten:

* `422 Expected a mailto URI, e.g. "mailto:hi@example.com?subject=Hello" for qrType "email".`

## SMS

`qrType`: `"sms"`. Handleiding voor het dashboard: [SMS-QR-code](https://docs.getqr.com/nl/qr-types/sms.md).

```text theme={null}
sms:+<digits>
sms:+<digits>?body=<encodeURIComponent(text)>
```

| Veld | Gedrag |
| - | - |
| `data` | Een `sms:`-URI met een optioneel bericht. Het dashboard leest alleen precies deze vorm. `smsto:` wordt als bestemming geweigerd. |
| `link.url` | De `sms:`-URI. Standaard gelijk aan `data`. |
| `fileId` | Niet toegestaan. |
| Codeert | De korte link, die een pagina opent die doorgeeft aan de berichtenapp. |
| Na het drukken | Te wijzigen. Stuur `data` of `link.url` om het bericht te wijzigen. Alleen `data` is genoeg. |

```json Request body theme={null}
{
  "qrType": "sms",
  "data": "sms:+14155550123?body=Table%2012"
}
```

Fouten:

* `422 Expected an SMS URI, e.g. "sms:+14155550123?body=Hello" for qrType "sms".`

## WiFi

`qrType`: `"wifi"`. Handleiding voor het dashboard: [WiFi-QR-code](https://docs.getqr.com/nl/qr-types/wifi.md).

```text theme={null}
WIFI:T:<WPA|WEP|nopass>;S:<ssid>;P:<password>;H:<true|false>;;
```

| Veld | Gedrag |
| - | - |
| `data` | Verplicht. Houd de volgorde `T`, `S`, `P`, `H` aan: de editor en de lijst in het dashboard zijn daarvan afhankelijk. Escape `\`, `;`, `"` en `:` in de SSID en het wachtwoord met een backslash. Gebruik voor een open netwerk `T:nopass` met een lege `P:`. Scanners weigeren `T:none`. **Editor:** SSID verplicht, wachtwoord minimaal 8 tekens, tenzij `nopass`. |
| `link.url` | Niet gebruikt bij het scannen. Standaard gelijk aan `data`. |
| `fileId` | Niet toegestaan. |
| Codeert | De ruwe `WIFI:`-payload, niet de korte link. Scans worden niet bijgehouden. |
| Na het drukken | **Niet te wijzigen.** Nieuwe `data` verandert alleen toekomstige downloads. Gedrukte codes houden het oude netwerk. |

```json Request body theme={null}
{
  "qrType": "wifi",
  "data": "WIFI:T:WPA;S:Cafe Guest;P:espresso42;H:false;;"
}
```

Fouten:

* `422 Expected a Wi-Fi payload, e.g. "WIFI:T:WPA;S:MyNetwork;P:secret;H:false;" for qrType "wifi".`

> [!WARNING]
>
> Wissel het type van een gedrukte WiFi-QR-code niet. De gedrukte codes houden het oude netwerk.

## Bestandstypes

`qrType`: `"pdf"`, `"image"` of `"video"`. Handleidingen voor het dashboard: [PDF](https://docs.getqr.com/nl/qr-types/pdf.md), [Image](https://docs.getqr.com/nl/qr-types/image.md), [Video](https://docs.getqr.com/nl/qr-types/video.md).

| Veld | Gedrag |
| - | - |
| `fileId` | Het bestand. Upload het met de target die bij het type past: `pdf`, `image` of `video`. Met een `fileId` wordt `link.url` de URL van het bestand, en alles wat je daarin meestuurt wordt genegeerd. |
| `data` | Alles behalve de payload van een ander type (`WIFI:`, `BEGIN:VCARD`, `sms:`, `mailto:`, een JSON-object). Leeg mag ook. |
| `link.url` | Zonder `fileId` wordt `link.url` (of `data`) als externe bestemming gebruikt. Dat werkt, maar het dashboard toont dan geen bestand. |
| Codeert | De korte link, die rechtstreeks naar het bestand doorverwijst. Een pdf opent als het ruwe bestand, niet in een viewerpagina. |
| Na het drukken | Te wijzigen. Stuur een nieuwe `fileId` om het bestand te vervangen. Het oude bestand wordt vrijgegeven. |

Eén bestand per QR-code: pdf-bundels en afbeeldingsgalerijen zijn niet beschikbaar via de API. Zie [Niet ondersteund via de API](#niet-ondersteund-via-de-api).

```json pdf theme={null}
{
  "qrType": "pdf",
  "data": "",
  "fileId": "file_9f8e7d6c5b4a",
  "title": "Brochure"
}
```

```json image theme={null}
{
  "qrType": "image",
  "data": "",
  "fileId": "file_3c2b1a0f9e8d",
  "title": "Floor plan"
}
```

```json video theme={null}
{
  "qrType": "video",
  "data": "",
  "fileId": "file_5e4d3c2b1a0f",
  "title": "Product demo"
}
```

Hoe je het bestand uploadt en de `fileId` krijgt, lees je bij [Bestanden](https://docs.getqr.com/nl/api/endpoints/files.md).

## vCard

`qrType`: `"vcard"`. Handleiding voor het dashboard: [vCard-QR-code](https://docs.getqr.com/nl/qr-types/vcard.md).

| Veld | Gedrag |
| - | - |
| `data` | Verplicht. vCard 3.0-tekst die begint met `BEGIN:VCARD`, regels gescheiden door `\r\n` (`\n` werkt ook). |
| `fileId` | Optionele profielafbeelding (target `logo`), gebruikt als `data` geen `PHOTO`- of `X-GETQR-IMAGE-FILEID`-regel heeft. |
| `link.url` | Wordt genegeerd en vervangen door de gehoste pagina. Laat het weg. |
| Codeert | De korte link, die de gehoste contactpagina opent met een download om het contact op te slaan (`.vcf`). |
| Na het drukken | Te wijzigen. Stuur nieuwe `data` om de pagina bij te werken. |

De landingspagina en de editor lezen alleen de regelvormen hieronder. Andere varianten, zoals `TEL;CELL:` of `EMAIL;TYPE=INTERNET:`, worden opgeslagen maar verschijnen niet op de pagina.

* `N:<last>;<first>;;;`: achternaam en voornaam. **Editor:** beide verplicht, maximaal 40 tekens.
* `FN:<first> <last>`: niet gelezen door de pagina. Het label in de lijst in het dashboard komt hiervandaan.
* `ORG:<company>` en `TITLE:<role>`: bedrijf en functie. **Editor:** maximaal 40 tekens.
* `TEL;TYPE=HOME:`, `TEL;TYPE=CELL:`, `TEL;TYPE=WORK:`, `TEL;TYPE=FAX:`: telefoon-, mobiele, werk- en faxnummers (`+` en cijfers).
* `EMAIL:<email>`: e-mailadres.
* `URL:<url>`: website.
* `NOTE:<text>`: samenvatting. Escape `\\`, `\n`, `\;` en `\,`. **Editor:** maximaal 200 tekens.
* `ADR:;;<street>;<city>;<state>;<zip>;<country>`: adres.
* `X-SOCIALPROFILE;TYPE=<platform>:<url>` of `URL;TYPE=<PLATFORM>:<url>`: sociale links, één regel per platform.
* `PHOTO;VALUE=URI:<url>`: URL van de profielafbeelding. Gaat voor op elke bestands-ID.
* `X-GETQR-IMAGE-FILEID:<fileId>`: profielafbeelding (target `logo`).
* `X-GETQR-PAGE-LOGO-FILEID:<fileId>`: paginalogo (target `logo`).
* `X-GETQR-LANDING-THEME:p|<0-4>` of `X-GETQR-LANDING-THEME:c|#RRGGBB|#RRGGBB|#RRGGBB`: thema van de landingspagina, ofwel een preset-index (0 tot 4), ofwel eigen kleuren voor achtergrond, knop en iconen.

Sociale platforms: `facebook`, `whatsapp`, `instagram`, `youtube`, `tiktok`, `messenger`, `snapchat`, `linkedin`, `x`, `reddit`, `pinterest`, `telegram`, `wechat`, `viber`, `line`.

```json Request body theme={null}
{
  "qrType": "vcard",
  "data": "BEGIN:VCARD\r\nVERSION:3.0\r\nN:Doe;Jane;;;\r\nFN:Jane Doe\r\nORG:Acme\r\nTITLE:CTO\r\nTEL;TYPE=CELL:+14155550123\r\nEMAIL:jane@acme.com\r\nURL:https://acme.com\r\nX-GETQR-LANDING-THEME:p|0\r\nEND:VCARD",
  "title": "Jane Doe"
}
```

Fouten:

* `422 Expected a vCard payload starting with "BEGIN:VCARD" for qrType "vcard".`

## Social Media

`qrType`: `"social"`. Handleiding voor het dashboard: [Social Media-QR-code](https://docs.getqr.com/nl/qr-types/social.md).

| Veld | Gedrag |
| - | - |
| `data` | Verplicht. Een JSON-string die een object codeert. Bouw hem op met `JSON.stringify`. |
| `fileId` | Optionele profielafbeelding op het hoofdniveau (target `logo`). |
| `link.url` | Wordt genegeerd en vervangen door de gehoste pagina. Laat het weg. |
| Codeert | De korte link, die de gehoste socialemediapagina opent. |
| Na het drukken | Te wijzigen. Stuur nieuwe `data` om de pagina bij te werken. |

Velden in `data`:

| Veld | Type | Opmerkingen |
| - | - | - |
| `firstName` | string | Kop van de pagina en de enige getoonde naam. **Editor:** verplicht, maximaal 40. |
| `lastName` | string | Maximaal 40. Niet zichtbaar op de pagina. |
| `summary` | string | Maximaal 200. |
| `socialLinks` | `{ platform, url }[]` | `platform` is een van de [sociale platforms van vCard](#vcard). **Editor:** elk platform maar één keer. |
| `customItems` | `{ name, url, logoFileId }[]` | **Editor:** `name` maximaal 40, een http(s)-`url` en een `logoFileId`. In totaal minstens één sociale link of eigen item. |
| `fileId` | string | Profielafbeelding (target `logo`). De `fileId` op het hoofdniveau is de terugvaloptie. |
| `imageUrl` | string | Externe URL van de profielafbeelding, alleen gebruikt als er geen bestands-ID is. |
| `pageLogoFileId` | string | Paginalogo (target `logo`). |
| `landingThemeMode` | `"preset" \| "custom"` | Standaard `preset`. |
| `landingPresetIndex` | 0–4 | Standaard 0. |
| `landingCustomBg`, `landingCustomButton`, `landingCustomIcon` | `#RRGGBB` | Gebruikt als de modus `custom` is. |

```json Request body theme={null}
{
  "qrType": "social",
  "data": "{\"firstName\":\"Acme Coffee\",\"summary\":\"Follow us\",\"socialLinks\":[{\"platform\":\"instagram\",\"url\":\"https://instagram.com/acme\"}],\"customItems\":[]}"
}
```

Fouten:

* `422 Expected a JSON object describing the social profile page for qrType "social".`

## Multi-Link

`qrType`: `"multilink"`. Handleiding voor het dashboard: [Multi-Link-QR-code](https://docs.getqr.com/nl/qr-types/multi-link.md).

| Veld | Gedrag |
| - | - |
| `data` | Verplicht. Een JSON-string die een object codeert. |
| `fileId` | Optionele profielafbeelding op het hoofdniveau (target `logo`). |
| `link.url` | Wordt genegeerd en vervangen door de gehoste pagina. Laat het weg. |
| Codeert | De korte link, die de gehoste multi-linkpagina opent. |
| Na het drukken | Te wijzigen. Stuur nieuwe `data` om de pagina bij te werken. |

De velden in `data` zijn die van [Social Media](#social-media), behalve dat `firstName`, `lastName` en `summary` zijn vervangen door:

| Veld | Type | Opmerkingen |
| - | - | - |
| `title` | string | Paginakop. **Editor:** verplicht, maximaal 40. |
| `description` | string | Maximaal 200. |

In `customItems` is `logoFileId` optioneel: dan wordt een standaardicoon getoond. **Editor:** minstens één sociale link of één niet-leeg eigen item.

```json Request body theme={null}
{
  "qrType": "multilink",
  "data": "{\"title\":\"Acme links\",\"description\":\"Everything in one place\",\"socialLinks\":[],\"customItems\":[{\"name\":\"Shop\",\"url\":\"https://acme.com/shop\",\"logoFileId\":\"\"}]}"
}
```

Fouten:

* `422 Expected a JSON object describing the multi-link page for qrType "multilink".`

## Event

`qrType`: `"event"`. Handleiding voor het dashboard: [Event-QR-code](https://docs.getqr.com/nl/qr-types/event.md).

| Veld | Gedrag |
| - | - |
| `data` | Verplicht. Een JSON-string die een object codeert. Onbekende of ongeldige waarden vallen terug op standaardwaarden. |
| `fileId` | Wordt gevalideerd (target `logo`) en opgeslagen, maar de eventpagina leest de omslagafbeelding alleen uit `data.fileId`. Zet de ID van de omslag in de payload. |
| `link.url` | Wordt genegeerd en vervangen door de gehoste pagina. Laat het weg. |
| Codeert | De korte link, die de gehoste eventpagina opent met een `.ics`-download. |
| Na het drukken | Te wijzigen. Stuur nieuwe `data` om de pagina bij te werken. |

Velden in `data`:

| Veld | Type | Opmerkingen |
| - | - | - |
| `name` | string | **Editor:** verplicht. |
| `eventType` | string | Een van de eventtypes hieronder, of leeg. |
| `start`, `end` | `"YYYY-MM-DDTHH:mm"` | Lokale kloktijd in `timezone`. **Editor:** beide verplicht, einde na begin. |
| `timezone` | IANA, bijvoorbeeld `"Europe/Berlin"` | Plaatst begin en einde in het `.ics`-bestand. Stuur hem altijd mee: bij een lege of onbekende zone behandelt het `.ics`-bestand de tijden als UTC. |
| `street`, `zip`, `city`, `state`, `country` | string | **Editor:** `city` en `country` verplicht, elk maximaal 40. |
| `facilities` | string\[] | ID's uit de lijst hieronder. Onbekende ID's worden genegeerd. |
| `notes` | string | Vrije tekst. |
| `fileId` | string | Omslagafbeelding (target `logo`). |
| `pageLogoFileId` | string | Paginalogo (target `logo`). |
| `organizerName`, `organizerEmail`, `mobile`, `work` | string | `mobile` en `work` maximaal 40. |
| `socialLinks` | `{ platform, url }[]` | De [sociale platforms van vCard](#vcard), plus `website`. |
| `ticketsUrl` | http(s)-URL | Link om tickets te kopen. |
| `ticketsLabel` | string | Maximaal 20 tekens. Langere labels worden afgekapt. Leeg toont het standaardlabel. |

> [accordion] Eventtypes
>
> `conference`, `seminar`, `workshop`, `training`, `webinar`, `meetup`, `networking`, `corporateEvent`, `productLaunch`, `tradeShow`, `jobFair`, `fundraiser`, `charity`, `wedding`, `engagement`, `birthday`, `anniversary`, `babyShower`, `graduation`, `reunion`, `party`, `religious`, `funeralMemorial`, `ceremony`, `concert`, `festival`, `clubNight`, `theater`, `comedy`, `filmScreening`, `exhibition`, `sports`, `tournament`, `raceMarathon`, `fitnessClass`, `foodDrink`, `market`, `openHouse`, `community`, `schoolEvent`, `kids`, `travelTour`

> [accordion] Voorzieningen
>
> | Groep | ID's |
> | - | - |
> | Toegang | `freeEntry`, `idRequired`, `invitationOnly`, `plusOneAllowed`, `reEntryAllowed` |
> | Leeftijd (kies er één) | `adultsOnly`, `age18Plus`, `age21Plus`, `kidsWelcome` |
> | Ter plaatse | `parking`, `publicTransport`, `shuttle`, `wheelchairAccess`, `evCharging`, `wifi`, `foodDrinks`, `alcoholServed`, `atm`, `coatCheck`, `pool`, `phoneCharging`, `firstAid`, `wc` |
> | Regels | `petsAllowed`, `noPets`, `smokingArea`, `noSmoking`, `noPhotos` |
> | Dresscode (kies er één) | `dressCasual`, `dressSmartCasual`, `dressBusiness`, `dressCocktail`, `dressThemed` |

```json Request body theme={null}
{
  "qrType": "event",
  "data": "{\"name\":\"Launch party\",\"eventType\":\"productLaunch\",\"start\":\"2026-11-20T18:00\",\"end\":\"2026-11-20T22:00\",\"timezone\":\"Europe/Berlin\",\"city\":\"Berlin\",\"country\":\"Germany\",\"facilities\":[\"freeEntry\"],\"socialLinks\":[],\"ticketsUrl\":\"https://acme.com/tickets\"}"
}
```

Fouten:

* `422 Expected a JSON object describing the event page for qrType "event".`

## Bestanden in QR-codes

Registreer een bestand via [Bestanden](https://docs.getqr.com/nl/api/endpoints/files.md), upload het en geef daarna de `fileId` mee. Gebruik de target die bij het gebruik past:

* **`pdf`, `image`, `video`.** De inhoud van een PDF-, afbeeldings- of video-QR-code.
* **`logo`.** Profielafbeeldingen, paginalogo's, iconen van eigen links en logo's in het midden.

Bestanden die nooit aan een QR-code worden gekoppeld, worden na een respijtperiode verwijderd.

`fileId`-fouten, teruggegeven bij het aanmaken en bij `PATCH` als `fileId` wordt meegestuurd:

| Status | Oorzaak |
| - | - |
| `422 unprocessable_entity` | Het type accepteert geen bestand. Alleen `pdf`, `image`, `video`, `vcard`, `social`, `multilink` en `event` accepteren er een. |
| `404 not_found` | Er is geen bestand met deze ID. Registreer het eerst met `POST /api/v1/files`. |
| `422 unprocessable_entity` | Het bestand is geüpload voor een andere target. Bijvoorbeeld een `image`-upload bij een PDF-QR-code, of een `pdf`-, `image`- of `video`-upload als vCard-foto. |
| `422 unprocessable_entity` | Het bestand is geregistreerd, maar de upload naar `uploadUrl` is nooit voltooid. |

Bestands-ID's binnen een payload (`fileId`, `pageLogoFileId`, `customItems[].logoFileId`, `X-GETQR-*-FILEID`-regels) worden niet gevalideerd. Ze worden alleen weergegeven als ze met de target `logo` zijn geüpload. De QR-code claimt ze, dus de opschoning laat ze met rust.

## Van type wisselen

Je kunt `qrType` wijzigen met [Een QR-code bijwerken](https://docs.getqr.com/nl/api/endpoints/qr-codes.md#een-qr-code-bijwerken). Stuur `data` mee die bij het nieuwe type past: de opgeslagen payload hoort bij het oude type, dus een wissel zonder nieuwe data wordt geweigerd.

Na een update wordt de bestemming in deze volgorde bepaald:

1. `vcard`, `social`, `multilink`, `event`: altijd de gehoste pagina.
2. Een pdf-bundel of afbeeldingsgalerij die in het dashboard is gemaakt: de bijbehorende landingspagina.
3. `pdf`, `image`, `video`: de URL van het bestand (een nieuwe `fileId`, anders de opgeslagen).
4. `link.url`, als die is meegestuurd.
5. Gewijzigde `data`.
6. De opgeslagen URL.

Wat elke wissel doet:

* **Van `pdf`, `image` of `video` af.** `fileId` en een eventuele bundel of galerij worden gewist.
* **Naar `pdf`, `image` of `video`.** Stuur ook `fileId` mee, anders wordt de opgeslagen gebruikt, en dat kan een vCard-foto zijn.
* **Van `app` af.** De appnaam, `link.ios` en `link.android` worden gewist, zodat telefoons de nieuwe bestemming volgen.
* **Naar `wifi`.** De afbeelding schakelt over naar de ruwe payload. Codes die al gedrukt zijn, bevatten nog de korte link, die nu doorverwijst naar een `wifi:`-URL.
* **Van `wifi` af.** Gedrukte codes houden hun oude netwerk.
* **Naar `vcard`, `social`, `multilink` of `event`.** De korte link wordt naar de nieuwe gehoste pagina gericht.
* **Van `vcard`, `social`, `multilink` of `event` af.** Stuur de nieuwe `data` mee. De bestemming volgt die.

Statische QR-codes die in het dashboard zijn gemaakt, hebben geen korte link, dus het wijzigen van hun `link.url` krijgt `422`.

## Niet ondersteund via de API

Deze functies van het dashboard maken geen deel uit van de v1 API. Onbekende velden worden zonder foutmelding genegeerd, dus meesturen heeft geen effect.

| Veld | Beschrijving |
| - | - |
| `appName` | De weergavenaam van een App Link-QR-code. App Link-QR-codes die via de API zijn gemaakt, tonen hun store-URL in de lijst in het dashboard. |
| `isStatic` | Een statische QR-code zonder korte link. Elke QR-code die de API maakt heeft er een, zodat je hem na het drukken kunt bewerken en volgen (behalve `wifi`). |
| `pdfBundle` | Een PDF-QR-code met twee of meer bestanden. De API maakt alleen PDF-QR-codes met één bestand. |
| `imageGallery` | Een Image-QR-code met twee of meer afbeeldingen. De API maakt alleen QR-codes met één afbeelding. |

Bundels en galerijen die in het dashboard zijn gemaakt, kun je via de API nog steeds lezen, pauzeren en verwijderen, maar hun bestanden kun je er niet mee wijzigen.

## Veelvoorkomende problemen

> [accordion] 422 Invalid destination URL
>
> `link.url` gebruikt een schema waarnaar de korte link niet kan doorverwijzen, zoals `geo:`, `smsto:`, `matmsg:` of `tel:`. Gebruik de formaten op deze pagina.

> [accordion] 400 Missing destination URL
>
> `data` is leeg en er is geen `link.url`. Stel voor `app` minstens één van `link.ios`, `link.android`, `link.url` of `data` in.

> [accordion] De data in het antwoord is een korte link, niet mijn URL
>
> Bij linktypes is de opgeslagen `data` de korte link. Lees de bestemming uit `url`.

> [accordion] Op de landingspagina ontbreken gegevens uit mijn payload
>
> De pagina leest alleen de velden en regelvormen die bij het type staan. Andere velden worden opgeslagen, maar niet getoond.

## Volgende stappen

> [card] [QR-codes](https://docs.getqr.com/nl/api/endpoints/qr-codes.md)

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

> [card] [Aanpassing](https://docs.getqr.com/nl/api/guides/customization.md)

> [card] [Toegangsregels](https://docs.getqr.com/nl/api/guides/access-rules.md)


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