Генерируйте PDF-этикетки с кодами маркировки «Честный Знак» (DataMatrix) и штрихкодом прямо из своего кода или системы учёта — одним HTTP-запросом к API barcode1.ru. Ниже: получение ключа, документация и готовые примеры на Python, curl, Node.js и PHP.
Два поля в multipart:
| Поле | Тип | Дефолт | Описание |
|---|---|---|---|
webhook_url | string | обяз. | HTTPS-адрес, куда вернём результат |
payload | object/array | — | Любые данные клиента (≤ 16 KB), вернутся в callback |
inner_dups | string | stop | Действие с дублями внутри текущего PDF: print, skip или stop |
history_dups | string | stop | Действие с дублями по истории пользователя: print, skip или stop |
text | string | — | Текст на этикетке. HTML с форматированием (см. ниже) |
bcode | string | — | Штрихкод (для EAN-13 — только 12-13 цифр) |
barcode_type | string | code128 | code128 / ean13 / gtin_ean13 / qr / none |
label_size_x | int (мм) | 58 | Ширина этикетки |
label_size_y | int (мм) | 40 | Высота этикетки |
include_eac | bool | true | Знак EAC |
include_cz | bool | true | Знак Честный Знак |
show_num | bool | true | Номер этикетки |
num_start | int | 1 | С какого числа начинать нумерацию |
nowrap | bool | false | true = не переносить, сжать шрифт чтобы каждая строка влезла целиком. false = обычный перенос по словам |
name_h_align | string | center | left / center / right |
Поля inner_dups и history_dups управляют двумя независимыми проверками:
inner — повторы одного GTIN+serial внутри текущего PDF.history — коды, которые уже были обработаны этим API-пользователем ранее.Для каждого ключа доступны режимы:
stop — остановить генерацию до списания, если найдены дубли. Это дефолт.skip — пропустить дубли. Для inner печатается первое вхождение, повторные строки пропускаются. Для history пропускаются все найденные в истории строки.print — печатать всё, но вернуть информацию о дублях в webhook.В списках webhook возвращается максимум 500 кодов суммарно; счётчики всегда точные. Если список обрезан, верхний флаг truncated будет true.
Текст автоматически подгоняется под площадь этикетки — общий шрифт уменьшается.
Параметр nowrap=true запрещает переносы внутри строк (каждая строка остаётся целиком,
шрифт сжимается ещё сильнее). При nowrap=false — обычный перенос по словам.
Переносы между строк всегда делайте через <br>.
Перед генерацией любой входящий HTML прогоняется через очистку (sanitize) — всё, что не из списка ниже, будет удалено молча.
Поддерживаемые теги (whitelist):
| Тег | Что делает | Пример |
|---|---|---|
<b>...</b> или <strong> | Жирный | <b>Футболка</b> |
<i>...</i> | Курсив | <i>хлопок</i> |
<u>...</u> | Подчёркнутый | <u>Артикул</u> |
<br> | Перенос строки | строка 1<br>строка 2 |
<span class="fs-sm"> | Мелкий шрифт (~8pt) | <span class="fs-sm">Артикул 12345</span> |
<span class="fs-lg"> | Крупный шрифт (~13pt) | <span class="fs-lg">XL</span> |
| Без обёртки | Обычный шрифт (~10pt) | Просто текст |
| Комбинации | Теги вкладываются | <span class="fs-lg"><b>XL</b></span> |
Размеров шрифта всего три: мелкий / обычный / крупный.
Произвольный размер в pt задать нельзя — поддерживаются только классы fs-sm, fs-lg и «без класса».
Цвета не поддерживаются. Любой style="color:..." или <font color="..."> будет удалён очисткой.
Что НЕ работает (вырезается очисткой):
<div>, <p> — не используйте. Они автоматически заменяются на <br>. Структуру стройте через <br> напрямую.<font>, <span style="..."> с любым CSS (включая font-size, color) — стрипается, остаётся только текст.<img>, <table>, <a>, <script>, <style> и т.п. — удаляются.fs-sm/fs-lg.Особенности:
", \) экранируйте по правилам JSON: \", \\.name_h_align (left/center/right), не тегами.\n в строке автоматически конвертируются в <br>.&, <) декодируются до фильтра — то есть <script> тоже будет вырезан, не вставится как текст.Готовый пример:
Доступные размеры этикетки (X×Y, мм): 58×40, 58×60, 20×20, 20×30, 20×40. При другом размере вернётся 400 со списком допустимых.
Это означает что задача принята в обработку. Результат придёт асинхронно на ваш webhook_url.
Мы делаем POST на ваш webhook_url в формате multipart/form-data с двумя полями:
POST без поля file: передаём только form-поле data, внутри него JSON:
Возможные error_code:
INVALID_PDF, PARSE_FAILED, TOO_MANY_KIZ (больше 2000 КИЗ),
DUPLICATES_FOUND, ALL_KIZ_SKIPPED,
INSUFFICIENT_FUNDS, GENERATION_FAILED.
Webhook отправляется одной попыткой. Если ваш сервер не ответил 2xx, задача помечается failed.
Как при обычной генерации: при активной подписке списывается с баланса (5 коп со штрихкодом, 3 коп без), иначе — бонусами (1 бонус за КИЗ).
При нехватке средств webhook получит INSUFFICIENT_FUNDS.
Обязательны два multipart-поля — file (PDF с КИЗ) и data (JSON).
В самом JSON обязателен только webhook_url, остальное — опционально.
Получите PDF этикетки 58×40. Без bcode штрихкод не рендерится,
без text этикетка только с DataMatrix и нумерацией.