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

# Dateien

> Laden Sie PDFs, Bilder, Videos und Logos für Ihre QR-Codes hoch.

> [!NOTE]
>
> Die GetQR API befindet sich in der Beta-Phase und steht ausgewählten Workspaces zur Verfügung. Details können sich bis zur allgemeinen Veröffentlichung noch ändern.

PDF-, Bild- und Video-QR-Codes verweisen auf eine Datei, und auch ein eigenes Logo ist eine Datei. Das Hochladen erfolgt in zwei Schritten: Registrieren Sie die Datei, um eine URL zu erhalten, und senden Sie dann die Bytes an diese URL.

| Methode | Pfad | Beschreibung |
| - | - | - |
| `POST` | `/api/v1/files` | [Datei-Upload registrieren](#datei-upload-registrieren) |

## Datei hochladen

**1. Datei registrieren**

Rufen Sie [Datei-Upload registrieren](#datei-upload-registrieren) mit `target`, `contentType` und `size` der Datei auf. Das `target` bestimmt die zulässigen Content-Types und die Größenbegrenzung. Sie erhalten eine `fileId` und eine `uploadUrl`.

**2. Datei senden**

Senden Sie die Datei mit einer `PUT`-Anfrage an `uploadUrl`. Ihr `Content-Type` und ihre `Content-Length` müssen exakt mit dem registrierten `contentType` und der registrierten `size` übereinstimmen: Alles andere wird abgelehnt. Die URL ist vorsigniert, fügen Sie also keinen API-Schlüssel hinzu. Sie läuft nach 10 Minuten ab.

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

**3. Datei-ID verwenden**

Übergeben Sie `fileId`, wenn Sie einen [QR-Code erstellen](https://docs.getqr.com/de/api/endpoints/qr-codes.md):

* Als `fileId` für einen `pdf`-, `image`- oder `video`-QR-Code. Laden Sie die Datei mit dem passenden Target hoch.
* Als `fileId` für das Profilbild eines `vcard`-, `social`-, `multilink`- oder `event`-QR-Codes. Laden Sie die Datei mit dem Target `logo` hoch.
* Als `logoOptions.fileId`, mit `logoOptions.type` auf `uploaded`, für ein eigenes Logo. Laden Sie die Datei mit dem Target `logo` hoch. Siehe [Anpassung](https://docs.getqr.com/de/api/guides/customization.md).

## Limits

| `target` | Zulässige Content-Types | Maximale Größe |
| - | - | - |
| `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) |

* **Reiner MIME-Typ.** Senden Sie einen einzelnen Typ mit Subtyp in Kleinbuchstaben, etwa `image/png`. Parameter wie `;charset=` und Listen werden abgelehnt.
* **Kein SVG.** XML-basierte Typen wie `image/svg+xml` werden nicht akzeptiert. Laden Sie eine Rastergrafik wie `image/png` oder `image/jpeg` hoch.

## Header

**Authorization** `string` *required*

`Bearer` gefolgt von Ihrem API-Schlüssel. Siehe [Authentifizierung](https://docs.getqr.com/de/api/authentication.md).

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

`application/json`.

## Datei-Upload registrieren

`POST /api/v1/files`

Registriert eine Datei und liefert eine vorsignierte URL, an die Sie sie hochladen. Dieser Aufruf lädt die Datei selbst nicht hoch.

**target** `string` *required*

Wofür die Datei gedacht ist: `pdf`, `image`, `video` oder `logo`. Legt die zulässigen Content-Types und die Größenbegrenzung fest. Siehe [Limits](#limits).

**contentType** `string` *required*

MIME-Typ der Datei, zum Beispiel `application/pdf`, ohne Parameter. Die Upload-Anfrage muss genau diesen `Content-Type` senden.

**size** `integer` *required*

Exakte Größe der Datei in Bytes, eine positive ganze Zahl. Wird mit dem Limit für das Target abgeglichen. Die Upload-Anfrage muss genau diese `Content-Length` senden.

**name** `string`

Ursprünglicher Dateiname, bis zu 255 Zeichen. Wird zur Anzeige im Dashboard gespeichert. Ein Pfad mit `/` oder `\` wird abgelehnt.

**fileId** `string`

ID, die Sie als `fileId` oder `logoOptions.fileId` übergeben.

**uploadUrl** `string`

Vorsignierte URL, an die Sie die Datei per `PUT` senden.

**expiresIn** `integer`

Sekunden, bis `uploadUrl` abläuft: `600`.

**method** `string`

HTTP-Methode für den 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"
}
```

## Häufige Probleme

> [accordion] 422 "Content type … is not allowed for target"
>
> Der Content-Type passt nicht zum Target. Zum Beispiel akzeptiert `pdf` nur `application/pdf`. Siehe [Limits](#limits).

> [accordion] 422 "must be a single lowercase type/subtype"
>
> Senden Sie den Content-Type in Kleinbuchstaben und ohne Parameter: `image/png`, nicht `Image/PNG` oder `image/png; charset=utf-8`.

> [accordion] 422 "File is too large for target"
>
> Die angegebene `size` liegt über dem Limit für das Target. Komprimieren Sie die Datei, bevor Sie sie registrieren.

> [accordion] Der Upload an uploadUrl schlägt fehl
>
> Die URL läuft 10 Minuten nach der Registrierung der Datei ab, und die Anfrage muss genau den registrierten `Content-Type` und die registrierte `Content-Length` senden. Registrieren Sie die Datei erneut, um eine neue URL zu erhalten.

> [accordion] 422 "is registered but its content was never uploaded" beim Erstellen eines QR-Codes
>
> Sie haben die Datei registriert, aber der `PUT` an `uploadUrl` wurde nicht abgeschlossen. Laden Sie die Datei hoch und erstellen Sie dann den QR-Code.

> [accordion] 422 "was uploaded to …" beim Erstellen eines QR-Codes
>
> Die Datei wurde mit einem anderen Target registriert, zum Beispiel eine `image`-Datei für einen `pdf`-QR-Code. Registrieren Sie einen neuen Upload mit dem passenden Target.

> [accordion] 404 "File … was not found" beim Erstellen eines QR-Codes
>
> Die `fileId` existiert nicht. Nehmen Sie sie aus der Antwort von [Datei-Upload registrieren](#datei-upload-registrieren).

## Wie geht es weiter?

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

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

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

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


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