Документация
Справочник API
API Reference
Base URL:
https://api.mkpdf.ru. Every /v1/* request requires
Authorization: Bearer <api key> (create one in the dashboard). Only
the monthly quota charges for a request — a failed conversion (bad
input, engine error) never counts against it.
Быстрый старт
- Зарегистрируйтесь и создайте API-ключ в личном кабинете.
- Отправьте запрос на нужный эндпоинт с заголовком
.Authorization: Bearer <ваш ключ> - Получите готовый PDF в теле ответа (
) либо ссылку на файл, если указалиapplication/pdf
."deliver": "url"
POST /v1/convert/html
POST /v1/convert/htmlКонвертирует HTML-разметку в PDF через Chromium — с полноценным CSS, кастомными шрифтами и кириллицей из коробки.
Тело запроса
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| string | да | HTML-разметка страницы |
| string | нет | (по умолчанию) | | |
| string | нет | | | (число без суффикса — миллиметры) |
| bool | нет | альбомная ориентация, по умолчанию |
| string | нет | (по умолчанию, байты PDF в ответе) | (нужен настроенный S3, см. ниже) |
Ответ
200 OK, Content-Type: application/pdf — бинарное содержимое файла.
Ошибка, например
400 Bad Request:
{ "error": "html is required" }
POST /v1/convert/url
POST /v1/convert/urlРендерит реальную веб-страницу (вместе с JS и динамическим контентом) в PDF.
Тело запроса такое же, как у
/v1/convert/html, но с полем url вместо html.
Ответ
200 OK, Content-Type: application/pdf.
POST /v1/convert/office
POST /v1/convert/officeКонвертирует
.docx/.xlsx/.pptx в PDF через LibreOffice — без установки офисного пакета у себя. multipart/form-data, поле file.Ответ
200 OK, Content-Type: application/pdf.
POST /v1/merge
POST /v1/mergeСклеивает 2 и более PDF в один, в порядке загрузки.
multipart/form-data, повторяющееся поле files.Ответ
200 OK, Content-Type: application/pdf.
Доставка результата: inline
или url
inlineurlПо умолчанию (
deliver: "inline", или поле не указано) PDF возвращается прямо в теле ответа. Если на бэкенде настроен S3 (см. .env.example), можно передать "deliver": "url" в /v1/convert/html или /v1/convert/url — тогда вместо бинарного тела вы получите:
{ "url": "https://...", "expires_in": "1h" }
Полезно для больших документов, когда не хочется держать соединение открытым на время рендера.
Rate limits и квоты
- Rate limit: 5 запросов/сек, всплеск до 20, на один API-ключ — не зависит от тарифа.
- Месячная квота: общая на все ключи в аккаунте (см.
). Каждый ответ несёт заголовкиGET /dashboard/usage
/X-RateLimit-Limit
для текущего периода.X-RateLimit-Remaining - В квоту засчитывается только успешная конвертация — ошибка на стороне движка или невалидный запрос ничего не списывают.
Ошибки
{ "error": "человекочитаемое сообщение" }
Соответствующий HTTP-статус:
400 — некорректный запрос, 401 — неверный/отсутствующий API-ключ, 429 — превышен rate limit или квота, 502 — сбой на стороне движка рендеринга.Эта страница собирается из docs/api.md в репозитории проекта — правки туда сразу попадают на сайт после деплоя.