> ## 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-коды

> Создание, получение списка, изменение, приостановка, дублирование, удаление и скачивание QR-кодов.

> [!NOTE]
>
> GetQR API находится в бета-версии и доступен для отдельных рабочих пространств. До общего релиза детали могут измениться.

QR-код в GetQR — это изображение и короткая ссылка, через которую он ведёт на адрес назначения. При создании QR-кода создаётся и его короткая ссылка, поэтому позже адрес назначения можно изменить без повторной печати кода.

| Метод | Путь | Описание |
| - | - | - |
| `GET` | `/api/v1/qrs` | [Список QR-кодов](#список-qr-кодов) |
| `POST` | `/api/v1/qrs` | [Создание QR-кода](#создание-qr-кода) |
| `GET` | `/api/v1/qrs/{qrId}` | [Получение QR-кода](#получение-qr-кода) |
| `PATCH` | `/api/v1/qrs/{qrId}` | [Обновление QR-кода](#обновление-qr-кода) |
| `PUT` | `/api/v1/qrs/{qrId}` | [Установка состояния паузы](#установка-состояния-паузы) |
| `POST` | `/api/v1/qrs/{qrId}/pause` | [Приостановка QR-кода](#приостановка-qr-кода) |
| `POST` | `/api/v1/qrs/{qrId}/activate` | [Возобновление QR-кода](#возобновление-qr-кода) |
| `POST` | `/api/v1/qrs/{qrId}/duplicate` | [Дублирование QR-кода](#дублирование-qr-кода) |
| `DELETE` | `/api/v1/qrs/{qrId}` | [Удаление QR-кода](#удаление-qr-кода) |
| `GET` | `/api/v1/qrs/{qrId}/download` | [Скачивание изображения QR-кода](#скачивание-изображения-qr-кода) |

> [card] [Данные QR-кода по типам](https://docs.getqr.com/ru/api/guides/qr-types.md)
>
> Формат `data` для каждого из 16 типов.

> [card] [Оформление](https://docs.getqr.com/ru/api/guides/customization.md)
>
> Стили точек, цвета, рамки и логотипы.

> [card] [Правила доступа](https://docs.getqr.com/ru/api/guides/access-rules.md)
>
> Расписание, лимит сканирований и пароль.

Статистику сканирований QR-кода см. в разделе [Аналитика](https://docs.getqr.com/ru/api/endpoints/analytics.md).

## Объект QR-кода

Все эндпоинты QR-кодов, кроме [Удаления](#удаление-qr-кода) и [Скачивания](#скачивание-изображения-qr-кода), отвечают этим объектом. Список возвращает массив таких объектов.

**id** `string`

Уникальный ID QR-кода, например `qr_1EPcVfeHZAY2iNoVLsgW2Aqf`.

**qrType** `string`

Тип QR-кода, например `website`. Все 16 значений см. в разделе [Данные QR-кода по типам](https://docs.getqr.com/ru/api/guides/qr-types.md).

**title** `string | null`

Название QR-кода, которое отображается в панели управления.

**description** `string | null`

Произвольная заметка о QR-коде.

**data** `string`

Сохранённые данные. Для `wifi`, `vcard`, `social`, `multilink`, `event` и `sms` — это переданные вами данные. Для остальных типов — короткая ссылка, поэтому адрес назначения читайте из `url`.

**archived** `boolean`

`true`, если QR-код приостановлен.

**isStatic** `boolean`

`true` для статического QR-кода, созданного в панели управления: у него нет короткой ссылки. API всегда создаёт динамические QR-коды.

**shortLink** `string | null`

Полная короткая ссылка, например `https://getqr.sh/x7Kd2p1`.

**domain** `string | null`

Домен короткой ссылки.

**key** `string | null`

Слаг короткой ссылки.

**keyIsCustom** `boolean`

`true`, если слаг выбран вручную, а не сгенерирован.

**url** `string | null`

Адрес назначения, на который перенаправляет короткая ссылка.

**ios** `string | null`

Адрес назначения для посетителей с iOS, для QR-кодов `app`.

**android** `string | null`

Адрес назначения для посетителей с Android, для QR-кодов `app`.

**scans** `integer`

Общее число сканирований.

**access** `object`

Правила доступа. Сам пароль никогда не возвращается. См. [Правила доступа](https://docs.getqr.com/ru/api/guides/access-rules.md).

**properties**

**passwordProtected** `boolean`

Должны ли посетители вводить пароль.

**activeAt** `string | null`

Запланированное начало, ISO 8601.

**pauseAt** `string | null`

Запланированное окончание, ISO 8601.

**scanLimit** `integer | null`

Максимальное число сканирований.

**designKind** `string`

Только для чтения. `custom` — дизайн, который API может полностью изменять. `branded` и `ai` — Branded design или AI design, созданный в панели управления. API не может изменить его изображение, но сохраняет его, когда вы меняете другие поля.

**design** `object`

Сохранённый дизайн: `styles`, `frameOptions` и `logoOptions`, каждый — объект или `null`. У них та же структура, что и у полей запроса, поэтому их можно отправить обратно. См. [Оформление](https://docs.getqr.com/ru/api/guides/customization.md).

**file** `object | null`

Файл QR-кода `pdf`, `image` или `video`: `id`, `name` и `size` в байтах.

**appName** `string | null`

Только для чтения. Отображаемое название QR-кода `app`, созданного в панели управления.

**pdfBundle** `object | null`

Только для чтения. QR-код `pdf` с несколькими файлами, созданный в панели управления: `title`, `layout` и `files`.

**imageGallery** `object | null`

Только для чтения. QR-код `image` с несколькими изображениями, созданный в панели управления: `title`, `layout` и `files`.

**createdAt** `string`

Дата создания, ISO 8601.

**updatedAt** `string`

Дата последнего обновления, ISO 8601.

Секреты и внутренние ID (`password`, `userId`, `workspaceId`, `projectId`) никогда не возвращаются.

```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-кодов

`GET /api/v1/qrs`

Возвращает QR-коды вашего рабочего пространства постранично.

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

Возвращаемая страница, 1 или больше.

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

QR-кодов на странице, от 1 до 100. Большее значение отклоняется.

**search** `string`

Ищет по названию QR-кода. Запросы длиннее 2 символов ищут и по сохранённому `data`. Для типов-ссылок в сохранённом `data` находится короткая ссылка, поэтому по адресам назначения искать нельзя.

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

Поле сортировки: `createdAt`, `updatedAt`, `clicks` (всего сканирований), `lastClicked` (последнее сканирование) или `type`. `type` всегда сортирует по убыванию и игнорирует `sortOrder`.

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

Направление сортировки: `asc` или `desc`.

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

Включать приостановленные QR-коды.

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

Возвращать только приостановленные QR-коды. Имеет приоритет над `showArchived`.

Булевы параметры принимают строки `true` или `false`. Запрашивайте следующую страницу, пока `pagination.hasMore` равно `true`. См. [Пагинация](https://docs.getqr.com/ru/api/introduction.md#пагинация).

```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-кода

`POST /api/v1/qrs`

Создаёт QR-код вместе с его короткой ссылкой. Отвечает `201 Created` с новым [QR-кодом](#объект-qr-кода).

**Idempotency-Key** `string`

Ваш собственный токен для повторов. Повтор запроса с тем же ключом в течение 24 часов возвращает исходный ответ, а не создаёт второй QR-код. См. [Повторы и дубликаты](#повторы-и-дубликаты).

**qrType** `string` *required*

Что кодирует QR-код. Этим же задаётся формат, в котором должно быть `data`. Одно из значений: `website`, `pdf`, `image`, `video`, `whatsapp`, `social`, `wifi`, `app`, `feedback`, `vcard`, `sms`, `payment`, `location`, `multilink`, `email`, `event`.

**data** `string` *required*

Данные типа, которые проверяются на соответствие `qrType`. Пустая строка пропускает проверку. Формат каждого типа описан в разделе [Данные QR-кода по типам](https://docs.getqr.com/ru/api/guides/qr-types.md).

**link** `object`

Короткая ссылка, через которую работает QR-код. Необязательно: если её не передать, `link.url` берётся из `data`.

**properties**

**url** `string`

Адрес назначения, на который перенаправляет короткая ссылка. Если не передан или пуст, по умолчанию равен `data`. Если переданы оба и они различаются, приоритет у `link.url`. QR-коды `vcard`, `social`, `multilink` и `event` всегда ведут на свою размещённую страницу, а QR-коды `pdf`, `image` и `video` с `fileId` — на файл. Допустимые схемы: `http:`, `https:`, `wifi:`, `mailto:`, `sms:`, `begin:`.

**domain** `string`

Домен короткой ссылки. Это должен быть работающий домен вашего рабочего пространства: другой домен возвращает `403`, а ещё не подключённый — `422`. По умолчанию используется домен рабочего пространства по умолчанию.

**key** `string`

Слаг короткой ссылки, от 3 до 15 символов, сохраняется в нижнем регистре. Недопустимый слаг возвращает `422`, а занятый — `409`. Если не передан, генерируется случайный слаг из 7 символов.

**ios** `string | null`

URL назначения для посетителей с iOS, для QR-кодов `app`.

**android** `string | null`

URL назначения для посетителей с Android, для QR-кодов `app`.

**title** `string | null`

Заголовок превью ссылки (`og:title`), хранится в короткой ссылке. Это не то же самое, что `title` самого QR-кода. Пока нигде не отображается.

**description** `string | null`

Описание превью ссылки (`og:description`), хранится в короткой ссылке. Пока нигде не отображается.

**expiresAt, expiredUrl** `—`

Недоступно в этом API: передача любого из них возвращает `422`. Чтобы остановить QR-код в заданное время, используйте `access.pauseAt`.

**title** `string`

Название QR-кода, которое отображается в панели управления. Пробелы по краям обрезаются, от 1 до 40 символов. Если не передано, QR-код остаётся без названия.

**description** `string`

Произвольная заметка о QR-коде. До 280 символов.

**fileId** `string`

Файл QR-кода `pdf`, `image` или `video`, загруженный с соответствующим target. Для `vcard`, `social` и `multilink` — необязательное изображение профиля, загруженное с target `logo`. `event` тоже его принимает, но его страница берёт обложку из `data.fileId`. Другие типы получают `422`. Сначала загрузите файл через [Файлы](https://docs.getqr.com/ru/api/endpoints/files.md). См. [Файлы в QR-кодах](https://docs.getqr.com/ru/api/guides/qr-types.md#файлы-в-qr-кодах).

**templateId** `string`

[Шаблон](https://docs.getqr.com/ru/api/endpoints/templates.md), дизайн которого применяется к новому QR-коду. Переданные поля дизайна накладываются поверх него. Шаблон с Branded design или AI design возвращает `422` (`art_template_unsupported`). Неизвестный шаблон или шаблон из другого рабочего пространства возвращает `404`.

**styles** `object`

Формы и цвета точек и углов. См. [Оформление](https://docs.getqr.com/ru/api/guides/customization.md).

**frameOptions** `object`

Рамка вокруг QR-кода и текст призыва к действию. См. [Оформление](https://docs.getqr.com/ru/api/guides/customization.md).

**logoOptions** `object`

Логотип в центре: готовый логотип или ваш файл, загруженный с target `logo`. Неизвестный файл, незавершённая загрузка или файл другого target отклоняются. См. [Оформление](https://docs.getqr.com/ru/api/guides/customization.md).

**access** `object`

Расписание, лимит сканирований и защита паролем. См. [Правила доступа](https://docs.getqr.com/ru/api/guides/access-rules.md).

**properties**

**activeAt** `string | null`

Запланированное начало, ISO 8601.

**pauseAt** `string | null`

Запланированное окончание, ISO 8601.

**scanLimit** `integer | null`

Максимальное число сканирований, положительное целое число.

**password** `string | null`

Пароль, который должны ввести посетители. Его передача включает защиту.

**passwordProtected** `boolean`

Отключает или снова включает защиту, сохраняя пароль.

**archived** `boolean`

Приостановлен ли QR-код. `true` создаёт его приостановленным: сканирования показывают страницу паузы вместо адреса назначения.

Неизвестные поля отбрасываются без ошибки. См. [Не поддерживается в API](https://docs.getqr.com/ru/api/guides/qr-types.md#не-поддерживается-в-api).

```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 },
  "…": "…"
}
```

### Повторы и дубликаты

* **С ключом.** С заголовком `Idempotency-Key` ответ повторяется в течение 24 часов.
* **Без ключа.** Одинаковое тело запроса, отправленное в течение 30 секунд, считается дубликатом.
* **Повторы.** Повтор возвращает сохранённый ответ с `x-idempotent-replay: true`. Новый QR-код возвращает `false`.
* **Запрос ещё выполняется.** Второй запрос, пока первый ещё выполняется, получает `409 conflict`.
* **Ошибки.** Если создание не удалось, ключ сразу освобождается, и можно повторить запрос с тем же ключом.
* **Без гарантий.** Если защита от дубликатов недоступна, создание выполняется без неё.

См. также [Идемпотентность](https://docs.getqr.com/ru/api/introduction.md#идемпотентность).

## Получение QR-кода

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

Возвращает [QR-код](#объект-qr-кода) с его короткой ссылкой, правилами доступа, дизайном и, для типов с файлами, его файлом.

**qrId** `string` *required*

ID QR-кода из ответа на запрос списка или создания.

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

Ответ — полный [объект QR-кода](#объект-qr-кода).

## Обновление QR-кода

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

Изменяет содержимое, адрес назначения, дизайн или правила доступа QR-кода. Передавайте только поля, которые хотите изменить. Отвечает обновлённым [QR-кодом](#объект-qr-кода).

**qrId** `string` *required*

ID QR-кода.

Тело принимает те же поля, что и [Создание QR-кода](#создание-qr-кода), все необязательные, со следующими отличиями:

* **`templateId`.** Не принимается.
* **`link`.** Частичное обновление. Если не передать `link.url`, текущий адрес назначения сохраняется. `link.domain` и `link.key` возвращают `422`: напечатанный код кодирует именно короткую ссылку, поэтому для другой ссылки создайте новый QR-код.
* **`data`.** Проверяется на соответствие итоговому типу, только если меняется `data` или `qrType`. Смена `qrType` без подходящего `data` отклоняется. См. [Смена типа](https://docs.getqr.com/ru/api/guides/qr-types.md#смена-типа).
* **Дизайн.** `styles`, `frameOptions` и `logoOptions` объединяются с сохранённым дизайном, поэтому частичный объект меняет только то, что в нём указано. Выбор другого логотипа заменяет его, но сохраняет его размер.
* **`access`.** Каждый ключ применяется, если он передан. `null` удаляет правило. Правила доступа передаются в `access`: передача их в `link` возвращает `422`.
* **`archived`.** Приостанавливает или возобновляет QR-код вместе с его короткой ссылкой, как [Приостановка](#приостановка-qr-кода) и [Возобновление](#возобновление-qr-кода).

```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 },
  "…": "…"
}
```

Что можно изменить после печати для каждого типа, описано в разделе [Данные QR-кода по типам](https://docs.getqr.com/ru/api/guides/qr-types.md).

## Установка состояния паузы

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

Напрямую задаёт состояние паузы. [Приостановка](#приостановка-qr-кода) и [Возобновление](#возобновление-qr-кода) делают то же самое и читаются понятнее.

**qrId** `string` *required*

ID QR-кода.

**archived** `boolean` *required*

`true`, чтобы приостановить QR-код, `false`, чтобы возобновить его.

```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-кода

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

QR-код перестаёт вести на адрес назначения: вместо него сканирования показывают страницу паузы. Напечатанный код и его короткая ссылка остаются действительными. Без тела запроса.

**qrId** `string` *required*

ID QR-кода.

```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-кода

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

Приостановленный QR-код снова начинает вести на адрес назначения. Расписание и лимит сканирований продолжают действовать. Без тела запроса.

**qrId** `string` *required*

ID QR-кода.

```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-кода

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

Создаёт копию с тем же содержимым и дизайном. Без тела запроса. Отвечает `201 Created` с новым [QR-кодом](#объект-qr-кода).

**qrId** `string` *required*

ID QR-кода, который нужно скопировать.

* **Короткая ссылка.** Копия получает собственную короткую ссылку со случайным слагом на домене рабочего пространства по умолчанию, а не на домене исходного кода. Её сканирования считаются отдельно.
* **Название.** К названию добавляется суффикс ` (Copy)`. Результат укладывается в 40 символов: длинное название сначала сокращается. QR-код без названия остаётся без названия.
* **Не копируются.** Правила доступа (пароль, расписание, лимит сканирований) и состояние паузы. Копия всегда активна.
* **Файлы.** Файлы PDF и изображений, включая файлы наборов и галерей, копируются, поэтому копия владеет ими сама. Видеофайлы и файлы дизайна, например логотипы, общие с исходным кодом.

```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-кода

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

Удаляет QR-код и его короткую ссылку. Отвечает ID удалённого кода.

> [!WARNING]
>
> Удаление безвозвратно. Напечатанный код и его короткая ссылка перестают работать, а история сканирований становится недоступной. Если QR-код может снова понадобиться, лучше [приостановите](#приостановка-qr-кода) его.

**qrId** `string` *required*

ID QR-кода.

**id** `string`

ID удалённого QR-кода.

**deleted** `boolean`

Всегда `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-кода

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

Отрисовывает QR-код с его дизайном и возвращает файл.

**qrId** `string` *required*

ID QR-кода для отрисовки из ответа на запрос списка или создания.

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

Формат файла: `jpg`, `png`, `svg`, `pdf` (страница A4) или `eps`. Branded design или AI design скачивается только в `jpg`, `png` или `pdf`.

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

Размер изображения в пикселях: `1024`, `2048` или `4096`. `svg` и `pdf` его игнорируют. Branded design или AI design скачивается только в размере `1024`.

| `format` | `Content-Type` | Имя файла |
| - | - | - |
| `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` |

* **Тело.** Тело ответа — это сам файл. Предлагаемое имя файла передаётся в заголовке `Content-Disposition`: оно строится из названия, а для QR-кода без названия — `qr-code`.
* **Кэширование.** Ответы содержат `ETag` и `Cache-Control: private, max-age=3600, must-revalidate`. Отправьте `ETag` обратно в `If-None-Match`, чтобы получить `304 Not Modified`, если QR-код не изменился.
* **Ошибки.** Неподдерживаемый формат или размер возвращает `400 bad_request`. Сообщение об ошибке называет причину: `qr_download_invalid_format`, `qr_download_invalid_resolution`, `qr_download_art_format_unsupported` или `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>
```

## Правила доступа

Передайте объект `access` при создании или обновлении, чтобы задать начало и окончание работы, ограничить число сканирований или установить пароль. Пропущенные правила не меняются, а `null` удаляет правило. Полное описание с примерами — в разделе [Правила доступа](https://docs.getqr.com/ru/api/guides/access-rules.md).

## Объекты дизайна

`styles`, `frameOptions` и `logoOptions` задают формы точек и углов, цвета, рамку и логотип. Они одинаково работают для QR-кодов, [шаблонов](https://docs.getqr.com/ru/api/endpoints/templates.md) и [массового создания](https://docs.getqr.com/ru/api/endpoints/bulk-qr-creations.md). Неизвестные формы, рамки или логотипы отклоняются. Все допустимые значения и готовый пример — в разделе [Оформление](https://docs.getqr.com/ru/api/guides/customization.md).

## Частые проблемы

> [accordion] 422 при установке пароля, расписания или лимита сканирований
>
> Передавайте правило в `access`, а не в `link`.

> [accordion] 422 при изменении link.domain или link.key
>
> Короткую ссылку нельзя изменить после создания, потому что её кодирует напечатанный код. Вместо этого создайте новый QR-код.

> [accordion] 422 "Expected … for qrType"
>
> `data` не соответствует формату `qrType`. Проверьте тип в разделе [Данные QR-кода по типам](https://docs.getqr.com/ru/api/guides/qr-types.md).

> [accordion] 409 conflict при создании QR-кода
>
> Такой же запрос на создание ещё выполняется, или `link.key` уже занят. Повторите запрос, когда первый завершится. С `Idempotency-Key` повтор вернёт исходный QR-код.

> [accordion] Скачивается JPEG, а не PNG
>
> Параметры называются `format` и `resolution`, а `format` по умолчанию равен `jpg`. Передайте `format=png`.

> [accordion] 404 для QR-кода, который виден в панели управления
>
> Каждый запрос выполняется в рабочем пространстве вашего API-ключа. Проверьте, что QR-код относится к нему. См. [Аутентификация](https://docs.getqr.com/ru/api/authentication.md).

## Что дальше

> [card] [Данные QR-кода по типам](https://docs.getqr.com/ru/api/guides/qr-types.md)

> [card] [Оформление](https://docs.getqr.com/ru/api/guides/customization.md)

> [card] [Правила доступа](https://docs.getqr.com/ru/api/guides/access-rules.md)

> [card] [Аналитика](https://docs.getqr.com/ru/api/endpoints/analytics.md)


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