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

# Bestanden

> Upload pdf's, afbeeldingen, video's en logo's voor je QR-codes.

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

PDF-, afbeeldings- en video-QR-codes verwijzen naar een bestand, en ook een eigen logo is een bestand. Uploaden gaat in twee stappen: registreer het bestand om een URL te krijgen en stuur de bytes daarna naar die URL.

| Methode | Pad | Beschrijving |
| - | - | - |
| `POST` | `/api/v1/files` | [Een bestandsupload registreren](#een-bestandsupload-registreren) |

## Een bestand uploaden

**1. Registreer het bestand**

Roep [Een bestandsupload registreren](#een-bestandsupload-registreren) aan met de `target`, `contentType` en `size` van het bestand. De `target` bepaalt de toegestane contenttypes en de maximale grootte. Je krijgt een `fileId` en een `uploadUrl` terug.

**2. Verstuur het bestand**

Stuur het bestand met een `PUT`-verzoek naar `uploadUrl`. De `Content-Type` en `Content-Length` moeten precies overeenkomen met de `contentType` en `size` die je hebt geregistreerd: al het andere wordt geweigerd. De URL is vooraf ondertekend, dus voeg je API-sleutel niet toe. Hij verloopt na 10 minuten.

```bash theme={null}
curl -X PUT "$UPLOAD_URL" \
  -H "Content-Type: application/pdf" \
  --data-binary @menu.pdf
```

**3. Gebruik de bestands-ID**

Geef `fileId` mee wanneer je [een QR-code maakt](https://docs.getqr.com/nl/api/endpoints/qr-codes.md):

* Als `fileId` voor een `pdf`-, `image`- of `video`-QR-code. Upload met de bijbehorende target.
* Als `fileId` voor de profielafbeelding van een `vcard`-, `social`-, `multilink`- of `event`-QR-code. Upload met de target `logo`.
* Als `logoOptions.fileId`, met `logoOptions.type` ingesteld op `uploaded`, voor een eigen logo. Upload met de target `logo`. Zie [Aanpassing](https://docs.getqr.com/nl/api/guides/customization.md).

## Limieten

| `target` | Toegestane contenttypes | Maximale grootte |
| - | - | - |
| `pdf` | `application/pdf` | 20 MB (20.971.520 bytes) |
| `image` | `image/*` | 5 MB (5.242.880 bytes) |
| `video` | `video/*` | 50 MB (52.428.800 bytes) |
| `logo` | `image/*` | 5 MB (5.242.880 bytes) |

* **Kaal MIME-type.** Stuur één type en subtype in kleine letters, zoals `image/png`. Parameters zoals `;charset=` en lijsten worden geweigerd.
* **Geen SVG.** Op XML gebaseerde types zoals `image/svg+xml` worden niet geaccepteerd. Upload een rasterafbeelding zoals `image/png` of `image/jpeg`.

## Headers

**Authorization** `string` *required*

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

**Content-Type** `string` *required*

`application/json`.

## Een bestandsupload registreren

`POST /api/v1/files`

Registreert een bestand en geeft een vooraf ondertekende URL terug om het naartoe te uploaden. Deze aanroep uploadt het bestand zelf niet.

**target** `string` *required*

Waar het bestand voor is: `pdf`, `image`, `video` of `logo`. Bepaalt de toegestane contenttypes en de maximale grootte. Zie [Limieten](#limieten).

**contentType** `string` *required*

MIME-type van het bestand, bijvoorbeeld `application/pdf`, zonder parameters. Het uploadverzoek moet precies deze `Content-Type` versturen.

**size** `integer` *required*

Exacte grootte van het bestand in bytes, een positief geheel getal. Wordt gecontroleerd tegen de limiet voor de target. Het uploadverzoek moet precies deze `Content-Length` versturen.

**name** `string`

Oorspronkelijke bestandsnaam, maximaal 255 tekens. Wordt bewaard voor weergave in het dashboard. Een pad met `/` of `\` wordt geweigerd.

**fileId** `string`

ID die je meegeeft als `fileId` of `logoOptions.fileId`.

**uploadUrl** `string`

Vooraf ondertekende URL waarnaar je het bestand met `PUT` verstuurt.

**expiresIn** `integer`

Seconden tot `uploadUrl` verloopt: `600`.

**method** `string`

HTTP-methode voor de upload: `PUT`.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/files" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "pdf",
    "contentType": "application/pdf",
    "size": 248000,
    "name": "menu.pdf"
  }'
```

```json 200 theme={null}
{
  "fileId": "file_7bQ2xR9mKp",
  "uploadUrl": "https://storage.getqr.com/qrs-content/pdf/file_7bQ2xR9mKp?X-Amz-...",
  "expiresIn": 600,
  "method": "PUT"
}
```

## Veelvoorkomende problemen

> [accordion] 422 "Content type … is not allowed for target"
>
> Het contenttype past niet bij de target. Zo accepteert `pdf` alleen `application/pdf`. Zie [Limieten](#limieten).

> [accordion] 422 "must be a single lowercase type/subtype"
>
> Stuur het contenttype in kleine letters en zonder parameters: `image/png`, niet `Image/PNG` of `image/png; charset=utf-8`.

> [accordion] 422 "File is too large for target"
>
> De opgegeven `size` ligt boven de limiet voor de target. Comprimeer het bestand voordat je het registreert.

> [accordion] De upload naar uploadUrl mislukt
>
> De URL verloopt 10 minuten nadat je het bestand hebt geregistreerd, en het verzoek moet precies de geregistreerde `Content-Type` en `Content-Length` versturen. Registreer het bestand opnieuw voor een nieuwe URL.

> [accordion] 422 "is registered but its content was never uploaded" bij het maken van een QR-code
>
> Je hebt het bestand geregistreerd, maar de `PUT` naar `uploadUrl` is niet voltooid. Upload het bestand en maak daarna de QR-code.

> [accordion] 422 "was uploaded to …" bij het maken van een QR-code
>
> Het bestand is geregistreerd met een andere target, bijvoorbeeld een `image`-bestand voor een `pdf`-QR-code. Registreer een nieuwe upload met de bijbehorende target.

> [accordion] 404 "File … was not found" bij het maken van een QR-code
>
> De `fileId` bestaat niet. Neem hem over uit het antwoord van [Een bestandsupload registreren](#een-bestandsupload-registreren).

## Volgende stappen

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

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

> [card] [Aanpassing](https://docs.getqr.com/nl/api/guides/customization.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.