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

> QR-Codes erstellen, auflisten, aktualisieren, pausieren, duplizieren, löschen und herunterladen.

> [!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.

Ein QR-Code in GetQR besteht aus dem Bild und einem Kurzlink, über den er aufgelöst wird. Beim Erstellen eines QR-Codes entsteht auch sein Kurzlink, sodass Sie das Ziel später ändern können, ohne den Code neu zu drucken.

| Methode | Pfad | Beschreibung |
| - | - | - |
| `GET` | `/api/v1/qrs` | [QR-Codes auflisten](#qr-codes-auflisten) |
| `POST` | `/api/v1/qrs` | [QR-Code erstellen](#qr-code-erstellen) |
| `GET` | `/api/v1/qrs/{qrId}` | [QR-Code abrufen](#qr-code-abrufen) |
| `PATCH` | `/api/v1/qrs/{qrId}` | [QR-Code aktualisieren](#qr-code-aktualisieren) |
| `PUT` | `/api/v1/qrs/{qrId}` | [Pausierungsstatus festlegen](#pausierungsstatus-festlegen) |
| `POST` | `/api/v1/qrs/{qrId}/pause` | [QR-Code pausieren](#qr-code-pausieren) |
| `POST` | `/api/v1/qrs/{qrId}/activate` | [QR-Code reaktivieren](#qr-code-reaktivieren) |
| `POST` | `/api/v1/qrs/{qrId}/duplicate` | [QR-Code duplizieren](#qr-code-duplizieren) |
| `DELETE` | `/api/v1/qrs/{qrId}` | [QR-Code löschen](#qr-code-löschen) |
| `GET` | `/api/v1/qrs/{qrId}/download` | [QR-Code-Bild herunterladen](#qr-code-bild-herunterladen) |

> [card] [QR-Code-Daten nach Typ](https://docs.getqr.com/de/api/guides/qr-types.md)
>
> Das `data`-Format jedes der 16 Typen.

> [card] [Anpassung](https://docs.getqr.com/de/api/guides/customization.md)
>
> Punktstile, Farben, Rahmen und Logos.

> [card] [Zugriffsregeln](https://docs.getqr.com/de/api/guides/access-rules.md)
>
> Zeitplan, Scan-Limit und Passwort.

Scan-Statistiken eines QR-Codes finden Sie unter [Analytics](https://docs.getqr.com/de/api/endpoints/analytics.md).

## Das QR-Code-Objekt

Jeder QR-Code-Endpunkt antwortet mit diesem Objekt, außer [Löschen](#qr-code-löschen) und [Herunterladen](#qr-code-bild-herunterladen). Die Liste liefert ein Array solcher Objekte.

**id** `string`

Eindeutige ID des QR-Codes, zum Beispiel `qr_1EPcVfeHZAY2iNoVLsgW2Aqf`.

**qrType** `string`

Typ des QR-Codes, zum Beispiel `website`. Alle 16 Werte finden Sie unter [QR-Code-Daten nach Typ](https://docs.getqr.com/de/api/guides/qr-types.md).

**title** `string | null`

Name des QR-Codes, der im Dashboard angezeigt wird.

**description** `string | null`

Freie Notiz zum QR-Code.

**data** `string`

Die gespeicherte Payload. Bei `wifi`, `vcard`, `social`, `multilink`, `event` und `sms` ist es die Payload, die Sie gesendet haben. Bei allen anderen Typen ist es der Kurzlink. Lesen Sie das Ziel daher aus `url`.

**archived** `boolean`

`true`, wenn der QR-Code pausiert ist.

**isStatic** `boolean`

`true` bei einem im Dashboard erstellten statischen QR-Code, der keinen Kurzlink hat. Die API erstellt immer dynamische QR-Codes.

**shortLink** `string | null`

Vollständiger Kurzlink, zum Beispiel `https://getqr.sh/x7Kd2p1`.

**domain** `string | null`

Domain des Kurzlinks.

**key** `string | null`

Slug des Kurzlinks.

**keyIsCustom** `boolean`

`true`, wenn der Slug gewählt und nicht generiert wurde.

**url** `string | null`

Ziel, auf das der Kurzlink weiterleitet.

**ios** `string | null`

Ziel für iOS-Besucher, bei `app`-QR-Codes.

**android** `string | null`

Ziel für Android-Besucher, bei `app`-QR-Codes.

**scans** `integer`

Gesamtzahl der Scans.

**access** `object`

Zugriffsregeln. Das Passwort selbst wird nie zurückgegeben. Siehe [Zugriffsregeln](https://docs.getqr.com/de/api/guides/access-rules.md).

**properties**

**passwordProtected** `boolean`

Ob Besucher ein Passwort eingeben müssen.

**activeAt** `string | null`

Geplanter Start, ISO 8601.

**pauseAt** `string | null`

Geplantes Ende, ISO 8601.

**scanLimit** `integer | null`

Maximale Anzahl an Scans.

**designKind** `string`

Schreibgeschützt. `custom` ist ein Design, das die API vollständig bearbeiten kann. `branded` und `ai` sind ein im Dashboard erstelltes Branded design oder AI design. Die API kann dessen Bild nicht bearbeiten, behält es aber bei, wenn Sie andere Felder ändern.

**design** `object`

Das gespeicherte Design: `styles`, `frameOptions` und `logoOptions`, jeweils ein Objekt oder `null`. Sie haben denselben Aufbau wie die Anfragefelder, sodass Sie sie zurücksenden können. Siehe [Anpassung](https://docs.getqr.com/de/api/guides/customization.md).

**file** `object | null`

Die Datei eines `pdf`-, `image`- oder `video`-QR-Codes: `id`, `name` und `size` in Bytes.

**appName** `string | null`

Schreibgeschützt. Anzeigename eines im Dashboard erstellten `app`-QR-Codes.

**pdfBundle** `object | null`

Schreibgeschützt. Ein im Dashboard erstellter `pdf`-QR-Code mit mehreren Dateien: `title`, `layout` und `files`.

**imageGallery** `object | null`

Schreibgeschützt. Ein im Dashboard erstellter `image`-QR-Code mit mehreren Bildern: `title`, `layout` und `files`.

**createdAt** `string`

Erstellungsdatum, ISO 8601.

**updatedAt** `string`

Datum der letzten Aktualisierung, ISO 8601.

Geheimnisse und interne IDs (`password`, `userId`, `workspaceId`, `projectId`) werden nie zurückgegeben.

```json theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "qrType": "website",
  "title": "Landing page",
  "description": null,
  "data": "https://getqr.sh/x7Kd2p1",
  "archived": false,
  "isStatic": false,
  "shortLink": "https://getqr.sh/x7Kd2p1",
  "domain": "getqr.sh",
  "key": "x7Kd2p1",
  "keyIsCustom": false,
  "url": "https://example.com",
  "ios": null,
  "android": null,
  "scans": 128,
  "access": {
    "passwordProtected": false,
    "activeAt": null,
    "pauseAt": null,
    "scanLimit": null
  },
  "designKind": "custom",
  "design": {
    "styles": { "dotsOptions": { "type": "rounded", "color": "#1E40AF" }, … },
    "frameOptions": { "id": "card", "text": "Scan me!", … },
    "logoOptions": { "type": "suggested", "id": "logo-website-3", "scalePercent": 25 }
  },
  "file": null,
  "appName": null,
  "pdfBundle": null,
  "imageGallery": null,
  "createdAt": "2026-08-01T10:00:00.000Z",
  "updatedAt": "2026-08-01T10:00:00.000Z"
}
```

## QR-Codes auflisten

`GET /api/v1/qrs`

Liefert die QR-Codes Ihres Workspace, seitenweise.

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

Zurückzugebende Seite, 1 oder höher.

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

QR-Codes pro Seite, von 1 bis 100. Ein größerer Wert wird abgelehnt.

**search** `string`

Durchsucht den Titel des QR-Codes. Suchanfragen mit mehr als 2 Zeichen durchsuchen auch das gespeicherte `data`. Bei Link-Typen ist das gespeicherte `data` der Kurzlink, daher lassen sich Ziel-URLs nicht durchsuchen.

**sortBy** `string` (default: createdAt)

Sortierfeld: `createdAt`, `updatedAt`, `clicks` (Scans insgesamt), `lastClicked` (letzter Scan) oder `type`. `type` sortiert immer absteigend und ignoriert `sortOrder`.

**sortOrder** `string` (default: desc)

Sortierrichtung: `asc` oder `desc`.

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

Pausierte QR-Codes einbeziehen.

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

Nur pausierte QR-Codes zurückgeben. Hat Vorrang vor `showArchived`.

Boolesche Parameter erwarten die Strings `true` oder `false`. Fordern Sie die nächste Seite an, solange `pagination.hasMore` den Wert `true` hat. Siehe [Paginierung](https://docs.getqr.com/de/api/introduction.md#paginierung).

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

```json 200 theme={null}
{
  "data": [
    {
      "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
      "qrType": "website",
      "title": "Landing page",
      "shortLink": "https://getqr.sh/x7Kd2p1",
      "url": "https://example.com",
      "scans": 128,
      "…": "…"
    }
  ],
  "pagination": { "page": 1, "pageSize": 100, "total": 1, "hasMore": false }
}
```

## QR-Code erstellen

`POST /api/v1/qrs`

Erstellt einen QR-Code zusammen mit seinem Kurzlink. Antwortet mit `201 Created` und dem neuen [QR-Code](#das-qr-code-objekt).

**Idempotency-Key** `string`

Ihr eigenes Token für Wiederholungen. Wiederholen Sie die Anfrage innerhalb von 24 Stunden mit demselben Schlüssel, erhalten Sie die ursprüngliche Antwort, statt einen zweiten QR-Code zu erstellen. Siehe [Wiederholungen und Duplikate](#wiederholungen-und-duplikate).

**qrType** `string` *required*

Was der QR-Code kodiert. Damit steht auch das Format fest, das `data` haben muss. Einer von `website`, `pdf`, `image`, `video`, `whatsapp`, `social`, `wifi`, `app`, `feedback`, `vcard`, `sms`, `payment`, `location`, `multilink`, `email`, `event`.

**data** `string` *required*

Die Payload des Typs, geprüft anhand von `qrType`. Ein leerer String überspringt die Prüfung. Das Format jedes Typs steht unter [QR-Code-Daten nach Typ](https://docs.getqr.com/de/api/guides/qr-types.md).

**link** `object`

Der Kurzlink, über den der QR-Code aufgelöst wird. Optional: Fehlt er, folgt `link.url` dem Wert von `data`.

**properties**

**url** `string`

Ziel, auf das der Kurzlink weiterleitet. Fehlt es oder ist es leer, gilt `data`. Werden beide gesendet und unterscheiden sie sich, gewinnt `link.url`. QR-Codes vom Typ `vcard`, `social`, `multilink` und `event` zeigen immer auf ihre gehostete Seite, QR-Codes vom Typ `pdf`, `image` und `video` mit einer `fileId` auf die Datei. Zulässige Schemata: `http:`, `https:`, `wifi:`, `mailto:`, `sms:`, `begin:`.

**domain** `string`

Domain des Kurzlinks. Sie muss eine aktive Domain Ihres Workspace sein: Eine andere Domain erhält `403`, eine noch nicht aktive Domain `422`. Standard ist die Standarddomain des Workspace.

**key** `string`

Slug des Kurzlinks, 3 bis 15 Zeichen, in Kleinbuchstaben gespeichert. Ein nicht zulässiger Slug erhält `422`, ein bereits vergebener `409`. Fehlt er, wird ein zufälliger Slug mit 7 Zeichen erzeugt.

**ios** `string | null`

Ziel-URL für Besucher auf iOS, bei `app`-QR-Codes.

**android** `string | null`

Ziel-URL für Besucher auf Android, bei `app`-QR-Codes.

**title** `string | null`

Titel der Linkvorschau (`og:title`), am Kurzlink gespeichert. Nicht zu verwechseln mit dem eigenen `title` des QR-Codes. Wird derzeit nirgends angezeigt.

**description** `string | null`

Beschreibung der Linkvorschau (`og:description`), am Kurzlink gespeichert. Wird derzeit nirgends angezeigt.

**expiresAt, expiredUrl** `—`

In dieser API nicht verfügbar: Wer eines davon sendet, erhält `422`. Verwenden Sie `access.pauseAt`, um den QR-Code zu einem bestimmten Zeitpunkt zu stoppen.

**title** `string`

Name des QR-Codes, der im Dashboard angezeigt wird. Wird getrimmt, 1 bis 40 Zeichen. Fehlt er, bleibt der QR-Code ohne Titel.

**description** `string`

Freie Notiz zum QR-Code. Bis zu 280 Zeichen.

**fileId** `string`

Die Datei eines `pdf`-, `image`- oder `video`-QR-Codes, hochgeladen mit dem passenden Target. Bei `vcard`, `social` und `multilink` ein optionales Profilbild, hochgeladen mit dem Target `logo`. `event` akzeptiert es ebenfalls, die Seite liest das Titelbild aber aus `data.fileId`. Andere Typen erhalten `422`. Laden Sie die Datei zuerst über [Dateien](https://docs.getqr.com/de/api/endpoints/files.md) hoch. Siehe [Dateien in QR-Codes](https://docs.getqr.com/de/api/guides/qr-types.md#dateien-in-qr-codes).

**templateId** `string`

[Vorlage](https://docs.getqr.com/de/api/endpoints/templates.md), deren Design auf den neuen QR-Code angewendet wird. Gesendete Designfelder werden darübergelegt. Eine Vorlage mit Branded design oder AI design erhält `422` (`art_template_unsupported`). Eine unbekannte Vorlage oder eine aus einem anderen Workspace erhält `404`.

**styles** `object`

Formen und Farben von Punkten und Ecken. Siehe [Anpassung](https://docs.getqr.com/de/api/guides/customization.md).

**frameOptions** `object`

Rahmen um den QR-Code samt Text der Handlungsaufforderung. Siehe [Anpassung](https://docs.getqr.com/de/api/guides/customization.md).

**logoOptions** `object`

Logo in der Mitte: ein vorgeschlagenes Logo oder Ihre eigene Datei, hochgeladen mit dem Target `logo`. Eine unbekannte Datei, ein nicht abgeschlossener Upload oder eine Datei eines anderen Targets wird abgelehnt. Siehe [Anpassung](https://docs.getqr.com/de/api/guides/customization.md).

**access** `object`

Zeitplan, Scan-Limit und Passwortschutz. Siehe [Zugriffsregeln](https://docs.getqr.com/de/api/guides/access-rules.md).

**properties**

**activeAt** `string | null`

Geplanter Start, ISO 8601.

**pauseAt** `string | null`

Geplantes Ende, ISO 8601.

**scanLimit** `integer | null`

Maximale Anzahl an Scans, eine positive ganze Zahl.

**password** `string | null`

Passwort, das Besucher eingeben müssen. Wenn Sie es senden, wird der Schutz eingeschaltet.

**passwordProtected** `boolean`

Schaltet den Schutz aus oder wieder ein und behält dabei das gespeicherte Passwort.

**archived** `boolean`

Ob der QR-Code pausiert ist. `true` erstellt ihn pausiert: Scans zeigen die Pausierungsseite statt des Ziels.

Unbekannte Felder werden ohne Fehler verworfen. Siehe [Nicht über die API unterstützt](https://docs.getqr.com/de/api/guides/qr-types.md#nicht-über-die-api-unterstützt).

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/qrs" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: landing-page-2026-08" \
  -d '{
    "qrType": "website",
    "data": "https://example.com",
    "title": "Landing page",
    "access": { "scanLimit": 500 }
  }'
```

```json 201 theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "qrType": "website",
  "title": "Landing page",
  "data": "https://getqr.sh/x7Kd2p1",
  "shortLink": "https://getqr.sh/x7Kd2p1",
  "url": "https://example.com",
  "scans": 0,
  "access": { "passwordProtected": false, "activeAt": null, "pauseAt": null, "scanLimit": 500 },
  "…": "…"
}
```

### Wiederholungen und Duplikate

* **Mit Schlüssel.** Mit einem `Idempotency-Key`-Header wird die Antwort 24 Stunden lang erneut ausgeliefert.
* **Ohne Schlüssel.** Ein identischer Body, der innerhalb von 30 Sekunden gesendet wird, gilt als Duplikat.
* **Wiederholungen.** Eine Wiederholung liefert die gespeicherte Antwort mit `x-idempotent-replay: true`. Ein neuer QR-Code liefert `false`.
* **Laufende Anfrage.** Eine zweite Anfrage, während die erste noch läuft, erhält `409 conflict`.
* **Fehlschläge.** Eine fehlgeschlagene Erstellung gibt den Schlüssel sofort frei, sodass Sie es mit demselben Schlüssel erneut versuchen können.
* **Ohne Garantie.** Ist der Schutzmechanismus nicht verfügbar, werden Erstellungen ungeschützt ausgeführt.

Siehe auch [Idempotenz](https://docs.getqr.com/de/api/introduction.md#idempotenz).

## QR-Code abrufen

`GET /api/v1/qrs/{qrId}`

Liefert einen [QR-Code](#das-qr-code-objekt) mit Kurzlink, Zugriffsregeln, Design und bei dateibasierten Typen seiner Datei.

**qrId** `string` *required*

ID des QR-Codes, aus der Antwort der Liste oder der Erstellung.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

Die Antwort ist das vollständige [QR-Code-Objekt](#das-qr-code-objekt).

## QR-Code aktualisieren

`PATCH /api/v1/qrs/{qrId}`

Ändert Inhalt, Ziel, Design oder Zugriffsregeln eines QR-Codes. Senden Sie nur die Felder, die Sie ändern möchten. Antwortet mit dem aktualisierten [QR-Code](#das-qr-code-objekt).

**qrId** `string` *required*

ID des QR-Codes.

Der Body akzeptiert dieselben Felder wie [QR-Code erstellen](#qr-code-erstellen), alle optional, mit diesen Unterschieden:

* **`templateId`.** Wird nicht akzeptiert.
* **`link`.** Teilweise. Das aktuelle Ziel bleibt erhalten, wenn Sie `link.url` weglassen. `link.domain` und `link.key` erhalten `422`: Der Kurzlink ist das, was der gedruckte Code kodiert. Erstellen Sie für einen anderen Kurzlink einen neuen QR-Code.
* **`data`.** Wird nur dann gegen den resultierenden Typ geprüft, wenn sich `data` oder `qrType` ändert. Ein Wechsel von `qrType` ohne passende `data` wird abgelehnt. Siehe [Typwechsel](https://docs.getqr.com/de/api/guides/qr-types.md#typwechsel).
* **Design.** `styles`, `frameOptions` und `logoOptions` werden mit dem gespeicherten Design zusammengeführt, sodass ein Teilobjekt nur ändert, was es nennt. Ein anderes Logo ersetzt das bisherige, behält aber dessen Größe.
* **`access`.** Jeder Schlüssel wird übernommen, wenn er vorhanden ist. `null` entfernt eine Regel. Zugriffsregeln gehören unter `access`: Wer sie unter `link` sendet, erhält `422`.
* **`archived`.** Pausiert oder reaktiviert den QR-Code und seinen Kurzlink gemeinsam, wie [Pausieren](#qr-code-pausieren) und [Reaktivieren](#qr-code-reaktivieren).

```bash cURL theme={null}
curl -X PATCH "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Autumn campaign",
    "access": { "password": "s3cr3t", "passwordProtected": true }
  }'
```

```json 200 theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "title": "Autumn campaign",
  "access": { "passwordProtected": true, "activeAt": null, "pauseAt": null, "scanLimit": null },
  "…": "…"
}
```

Was Sie bei den einzelnen Typen nach dem Druck ändern können, steht unter [QR-Code-Daten nach Typ](https://docs.getqr.com/de/api/guides/qr-types.md).

## Pausierungsstatus festlegen

`PUT /api/v1/qrs/{qrId}`

Legt den Pausierungsstatus direkt fest. [Pausieren](#qr-code-pausieren) und [Reaktivieren](#qr-code-reaktivieren) tun dasselbe und sind leichter lesbar.

**qrId** `string` *required*

ID des QR-Codes.

**archived** `boolean` *required*

`true`, um den QR-Code zu pausieren, `false`, um ihn zu reaktivieren.

```bash cURL theme={null}
curl -X PUT "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "archived": true }'
```

```json 200 theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "archived": true,
  "…": "…"
}
```

## QR-Code pausieren

`POST /api/v1/qrs/{qrId}/pause`

Verhindert, dass der QR-Code auf sein Ziel aufgelöst wird: Scans zeigen stattdessen die Pausierungsseite. Der gedruckte Code und sein Kurzlink bleiben gültig. Kein Anfrage-Body.

**qrId** `string` *required*

ID des QR-Codes.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/pause" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "archived": true,
  "…": "…"
}
```

## QR-Code reaktivieren

`POST /api/v1/qrs/{qrId}/activate`

Sorgt dafür, dass ein pausierter QR-Code wieder auf sein Ziel aufgelöst wird. Zeitplan und Scan-Limit gelten weiterhin. Kein Anfrage-Body.

**qrId** `string` *required*

ID des QR-Codes.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/activate" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "archived": false,
  "…": "…"
}
```

## QR-Code duplizieren

`POST /api/v1/qrs/{qrId}/duplicate`

Erstellt eine Kopie mit demselben Inhalt und Design. Kein Anfrage-Body. Antwortet mit `201 Created` und dem neuen [QR-Code](#das-qr-code-objekt).

**qrId** `string` *required*

ID des zu kopierenden QR-Codes.

* **Kurzlink.** Die Kopie erhält einen eigenen Kurzlink mit zufälligem Slug auf der Standarddomain des Workspace, nicht auf der Domain des Originals. Ihre Scans werden getrennt gezählt.
* **Titel.** Der Titel erhält das Suffix ` (Copy)`. Das Ergebnis bleibt innerhalb von 40 Zeichen: Ein langer Titel wird vorher gekürzt. Ein QR-Code ohne Titel bleibt ohne Titel.
* **Nicht kopiert.** Zugriffsregeln (Passwort, Zeitplan, Scan-Limit) und der Pausierungsstatus. Die Kopie ist immer aktiv.
* **Dateien.** PDF- und Bilddateien, auch die von Bundles und Galerien, werden kopiert, sodass sie der Kopie gehören. Videodateien und Designdateien wie Logos teilt die Kopie mit dem Original.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/duplicate" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 201 theme={null}
{
  "id": "qr_7Hk2PqWmX9cTnV4sLbR8YdZe",
  "title": "Landing page (Copy)",
  "shortLink": "https://getqr.sh/p2Wq9dL",
  "url": "https://example.com",
  "archived": false,
  "scans": 0,
  "…": "…"
}
```

## QR-Code löschen

`DELETE /api/v1/qrs/{qrId}`

Löscht den QR-Code und seinen Kurzlink. Antwortet mit der gelöschten ID.

> [!WARNING]
>
> Das Löschen ist endgültig. Der gedruckte Code und sein Kurzlink funktionieren nicht mehr, und der Scanverlauf ist nicht mehr abrufbar. [Pausieren](#qr-code-pausieren) Sie den QR-Code stattdessen, wenn Sie ihn eventuell wieder brauchen.

**qrId** `string` *required*

ID des QR-Codes.

**id** `string`

ID des gelöschten QR-Codes.

**deleted** `boolean`

Immer `true`.

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

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

## QR-Code-Bild herunterladen

`GET /api/v1/qrs/{qrId}/download`

Rendert den QR-Code mit seinem Design und liefert die Datei.

**qrId** `string` *required*

ID des zu rendernden QR-Codes, aus der Antwort der Liste oder der Erstellung.

**format** `string` (default: jpg)

Ausgabeformat: `jpg`, `png`, `svg`, `pdf` (eine A4-Seite) oder `eps`. Ein Branded design oder AI design lässt sich nur als `jpg`, `png` oder `pdf` herunterladen.

**resolution** `integer` (default: 1024)

Bildgröße in Pixeln: `1024`, `2048` oder `4096`. `svg` und `pdf` ignorieren sie. Ein Branded design oder AI design lässt sich nur mit `1024` herunterladen.

| `format` | `Content-Type` | Dateiname |
| - | - | - |
| `jpg` | `image/jpeg` | `<title>-<resolution>px.jpg` |
| `png` | `image/png` | `<title>-<resolution>px.png` |
| `svg` | `image/svg+xml` | `<title>.svg` |
| `pdf` | `application/pdf` | `<title>.pdf` |
| `eps` | `application/postscript` | `<title>-<resolution>px.eps` |

* **Body.** Der Antwort-Body ist die Datei. Der vorgeschlagene Dateiname steht im `Content-Disposition`-Header. Er wird aus dem Titel gebildet, bei einem QR-Code ohne Titel lautet er `qr-code`.
* **Caching.** Antworten enthalten einen `ETag` und `Cache-Control: private, max-age=3600, must-revalidate`. Senden Sie den `ETag` in `If-None-Match` zurück, um `304 Not Modified` zu erhalten, wenn sich der QR-Code nicht geändert hat.
* **Fehler.** Ein nicht unterstütztes Format oder eine nicht unterstützte Auflösung erhält `400 bad_request`. Die Fehlermeldung nennt den Grund: `qr_download_invalid_format`, `qr_download_invalid_resolution`, `qr_download_art_format_unsupported` oder `qr_download_art_resolution_unsupported`.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/download?format=png&resolution=1024" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  --output qr-code.png
```

```http 200 theme={null}
HTTP/1.1 200 OK
Content-Type: image/png
Content-Disposition: attachment; filename="landing-page-1024px.png"
ETag: "9f2c0e1b5a7d43c8b016e2f4a9d5c3718be40f92"
Cache-Control: private, max-age=3600, must-revalidate

<binary image data>
```

## Zugriffsregeln

Senden Sie beim Erstellen oder Aktualisieren ein `access`-Objekt, um Start und Ende zu planen, die Anzahl der Scans zu begrenzen oder ein Passwort zu verlangen. Weggelassene Regeln bleiben unverändert, und `null` entfernt eine Regel. Das vollständige Verhalten mit Beispielen steht unter [Zugriffsregeln](https://docs.getqr.com/de/api/guides/access-rules.md).

## Design-Objekte

`styles`, `frameOptions` und `logoOptions` legen Formen von Punkten und Ecken, Farben, Rahmen und Logo fest. Sie funktionieren bei QR-Codes, [Vorlagen](https://docs.getqr.com/de/api/endpoints/templates.md) und der [Massenerstellung](https://docs.getqr.com/de/api/endpoints/bulk-qr-creations.md) gleich. Unbekannte Formen, Rahmen oder Logos werden abgelehnt. Alle zulässigen Werte und ein ausgearbeitetes Beispiel finden Sie unter [Anpassung](https://docs.getqr.com/de/api/guides/customization.md).

## Häufige Probleme

> [accordion] 422 beim Festlegen von Passwort, Zeitplan oder Scan-Limit
>
> Senden Sie die Regel unter `access`, nicht unter `link`.

> [accordion] 422 beim Ändern von link.domain oder link.key
>
> Der Kurzlink lässt sich nach dem Erstellen nicht ändern, weil der gedruckte Code ihn kodiert. Erstellen Sie stattdessen einen neuen QR-Code.

> [accordion] 422 "Expected … for qrType"
>
> `data` passt nicht zum Format von `qrType`. Prüfen Sie den Typ unter [QR-Code-Daten nach Typ](https://docs.getqr.com/de/api/guides/qr-types.md).

> [accordion] 409 conflict beim Erstellen eines QR-Codes
>
> Eine identische Erstellung läuft noch, oder `link.key` ist vergeben. Versuchen Sie es erneut, sobald die erste Anfrage abgeschlossen ist. Mit einem `Idempotency-Key` liefert die Wiederholung den ursprünglichen QR-Code.

> [accordion] Der Download ist ein JPEG statt eines PNG
>
> Die Parameter heißen `format` und `resolution`, und `format` ist standardmäßig `jpg`. Senden Sie `format=png`.

> [accordion] 404 für einen QR-Code, den ich im Dashboard sehe
>
> Jede Anfrage läuft im Workspace Ihres API-Schlüssels. Prüfen Sie, ob der QR-Code zu diesem Workspace gehört. Siehe [Authentifizierung](https://docs.getqr.com/de/api/authentication.md).

## Wie geht es weiter?

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

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

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

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


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