pdfapi

Создать PDF

POSThttps://pdfapi.ru/api/v1/convert

Превращает HTML, страницу по адресу, Markdown или документ Office в PDF. Ответ — сам PDF, а расход страниц — в заголовках. Страницы списываются один раз при сохранении готового PDF. Тот же Idempotency-Key и запрос повторно выдают результат без списания 24 часа.

Авторизация

Ключ из кабинета в заголовке Authorization: Bearer pdf_live_… или X-API-Key: pdf_live_…. Лимит частоты считается на ключ.

Тело запроса

JSON до 5 МБ. Поле source выбирает вид источника и остальные поля.

Разметка HTML со стилями. Доступно на всех тарифах.

  • source"html"обязательное

    Тип источника.

  • htmlstringобязательное

    HTML-документ или фрагмент. Не пустой.

    Пример:
    "<h1>Счёт №42</h1>"
  • optionsobjectнеобязательное

    Параметры страницы. Все необязательные; другие ключи — ошибка 400.

    • landscapeboolean

      Альбомная ориентация.

      По умолчанию:
      false
    • paperWidthstring

      Ширина листа. По умолчанию A4.

      Формат:
      число и единица pt, px, in, mm, cm или pc без пробела: «20mm», «1.5cm», «.5in»; без единицы — дюймы
      Пример:
      "8.27in"
    • paperHeightstring

      Высота листа. По умолчанию A4.

      Формат:
      число и единица pt, px, in, mm, cm или pc без пробела: «20mm», «1.5cm», «.5in»; без единицы — дюймы
      Пример:
      "11.7in"
    • marginTopstring

      Верхнее поле.

      Формат:
      число и единица pt, px, in, mm, cm или pc без пробела: «20mm», «1.5cm», «.5in»; без единицы — дюймы
      Пример:
      "20mm"
    • marginBottomstring

      Нижнее поле.

      Формат:
      число и единица pt, px, in, mm, cm или pc без пробела: «20mm», «1.5cm», «.5in»; без единицы — дюймы
      Пример:
      "20mm"
    • marginLeftstring

      Левое поле.

      Формат:
      число и единица pt, px, in, mm, cm или pc без пробела: «20mm», «1.5cm», «.5in»; без единицы — дюймы
      Пример:
      "0.39in"
    • marginRightstring

      Правое поле.

      Формат:
      число и единица pt, px, in, mm, cm или pc без пробела: «20mm», «1.5cm», «.5in»; без единицы — дюймы
      Пример:
      "0.39in"
    • waitDelaystring

      Подождать перед печатью, пока скрипт на странице дорисует содержимое: график, шрифт с CDN, данные по fetch.

      Формат:
      число и s или ms, не больше 10 секунд: «2s», «500ms»
      По умолчанию:
      "0s"
      Пример:
      "1s"

Ответы

  • Заголовки
    • Idempotency-Keystring

      Ключ одного документа. Сохраните до запроса для восстановления после таймаута.

    • Idempotency-Replayedstring

      true при повторной выдаче без списания.

    • X-Result-Expires-Atstring

      Конец 24-часового срока повторной выдачи (UTC).

    • X-Pages-Renderedinteger

      Сколько страниц списано за этот документ.

      Пример:
      2
    • X-Quota-Limitinteger

      Лимит страниц текущего периода.

      Пример:
      10000
    • X-Quota-Usedinteger

      Использовано в периоде, включая этот документ.

      Пример:
      145
    • X-Quota-Remaininginteger

      Осталось в периоде.

      Пример:
      9855
  • invalid_request
    — нет source или содержимого, лишний или неверный параметр в options — имя поля в message
    url_not_allowed
    — адрес без http(s) или ведёт во внутреннюю сеть
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
  • missing_api_key
    — нет заголовка Authorization: Bearer … и X-API-Key
    invalid_api_key
    — ключ неверный или отозван
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
  • quota_exceeded
    — лимит исчерпан или документ больше остатка; страницы не списываются
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
  • email_not_verified
    — почта аккаунта не подтверждена
    source_not_allowed
    — источник недоступен на тарифе: на Free — только HTML
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
  • idempotency_in_progress
    — ещё выполняется, повторите через Retry-After с тем же ключом
    idempotency_conflict
    — тело запроса отличается от исходного
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
  • result_expired
    — новый рендер требует нового ключа
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
  • payload_too_large
    — вынесите картинки по ссылкам или уменьшите файл
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
  • rate_limit_exceeded
    — запросы чаще лимита тарифа; повторите через Retry-After секунд
    Заголовки
    • Retry-Afterinteger

      Через сколько секунд можно повторить.

      Пример:
      3
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
  • render_failed
    — обычно дело в разметке или недоступной странице
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
  • unavailable
    — очередь заполнена или рендер перезапускается; повторите позже
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
  • render_timeout
    — документ слишком тяжёлый или страница грузится долго
    Тело
    • errorstringобязательное

      Код ошибки — по нему стоит ветвиться в коде.

      Пример:
      "quota_exceeded"
    • messagestring

      Текст по-русски — для журнала и человека.

      Пример:
      "Лимит страниц исчерпан"
Запрос
cURL
curl -X POST https://pdfapi.ru/api/v1/convert \
  -H "Authorization: Bearer $PDFAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source":"html","html":"<h1>Счёт №42</h1><p>К оплате: 12 000 ₽</p>","options":{"marginTop":"20mm"}}' \
  -o document.pdf
Ответ
http
HTTP/1.1 200 OK
Content-Type: application/pdf
X-Pages-Rendered: 1
X-Quota-Limit: 10000
X-Quota-Used: 144
X-Quota-Remaining: 9856

%PDF-1.4 … (сам документ)
Попробовать
тратит страницы с вашего тарифа