Public API Handwrittner: рукописные документы из вашего приложения
Собирайте шаблоны из текста, таблиц, изображений и колонок, настраивайте почерк в полном редакторе и передавайте новые данные через API. Один шаблон — множество разных документов.
Создать свой API-шаблон →
Настройте шаблон один раз, меняйте данные в каждом запросе
API Template — сохранённое оформление будущего документа: почерк, размер бумаги, поля и расположение элементов. Ваше приложение отправляет ID шаблона и новые данные, а Handwrittner создаёт документ с теми же настройками. Это удобно для конспектов, персональных писем, учебных материалов и отчётов.
В структурированном шаблоне документ собирается из блоков. Выберите элемент слева, настройте его справа и задайте имя поля API key. Например, заголовок может получать значение из title, текст — из body, а картинка — из photo.
Текст
Один или несколько абзацев: постоянный текст либо новое значение из API.
Заголовок
Название документа или раздела с отдельным размером и оформлением.
Изображение
Загруженная картинка по assetId, с настройками ширины и выравнивания.
Таблица
Колонки с заданными ключами, строки данных, заголовки и оформление линий.
Список
Маркеры или нумерация. Приложение передаёт массив пунктов.
Колонки
Две или три колонки с текстом, картинками и другими блоками внутри.
Разделитель
Горизонтальная линия между разделами документа.
Промежуток
Свободное место нужной высоты между элементами.
Разрыв страницы
Начало следующего раздела на новом листе.
Постоянный блок хранит своё содержимое в шаблоне: например, подпись или название организации. Динамический блок получает новое значение из data при каждой генерации. Можно настроить обязательность поля и проверить его на тестовых данных.
Перетаскивайте блоки, меняйте порядок, добавляйте элементы внутрь колонок или под всей структурой. История помогает отменить и повторить изменения. Масштабируйте схему, выбирайте книжную или альбомную ориентацию и сохраняйте свои форматы размером до A3.
Для таблиц доступны настройки линий, отступов, ширины, заголовков и оформления. Возле картинки можно добавить текст справа или слева: оба элемента располагаются в колонках и получают свои поля API.
Создайте свой шрифт и используйте его в API
Вместо стандартного почерка можно выбрать собственный шрифт из библиотеки Handwrittner. В FontCreator вы создаёте буквы и их варианты, настраиваете интервалы и соединения, собираете шрифт, а затем выбираете его в API-шаблоне.
После создания и сборки сохранённый шрифт остаётся доступен для API даже после окончания подписки. Чтобы снова редактировать его, понадобится подходящая подписка. Оплата API-генераций учитывается отдельно.
При переходе из API-шаблона в полный редактор выбранный почерк сохраняется. Обновить собранный шрифт можно из меню выбора, а готовый TTF — загрузить в свою библиотеку при наличии доступа к этой функции.
Подробнее о создании своего шрифта →Полный редактор /main для оформления текста
Нажмите «Настроить шаблон» или «Почерк и модификации в /main», чтобы перейти в привычный редактор Handwrittner. Здесь можно точечно настроить размер текста, цвет, поля, межстрочный интервал, красную строку, сетку и фон бумаги.
Текст в редакторе служит примером для настройки почерка. Новое содержимое документа ваше приложение передаёт через API. У структурированного шаблона блоки остаются в Builder, а предпросмотр использует значения из его Test Data.

Предпросмотр обновляется по кнопке: меняйте настройки, затем нажмите «Обновить Preview», переключайте страницы и увеличивайте изображение. Для проверки сохранять шаблон заранее не нужно. В превью видны первые 4 страницы с водяным знаком; готовый PDF содержит весь документ.
Те же модификаторы, что в обычном редакторе
API-шаблон использует инструменты оформления обычного сайта. Не нужно отдельно программировать каждое отклонение букв: включите нужные эффекты, выберите пресет или уточните значения вручную и сохраните настройки в шаблоне.
Слова
Наклон, смещение выше или ниже строки, зигзаг и изменения расположения частей слова помогают передать естественное движение руки.
Буквы
Небольшие изменения наклона, размера и положения символов делают текст менее однообразным. Интенсивность эффектов можно настроить.
Строки
Настройте поведение строк и интервалы, чтобы почерк был аккуратнее или свободнее — в зависимости от задачи.
Бумага и фон
Клетка, линейка, цвет бумаги, линия поля и дополнительный контент страницы задают внешний вид готового документа.

Готовые пресеты помогают начать с аккуратного конспекта или более свободной рукописи. Проверяйте эффекты на примере, добавляя их постепенно. Доступ к отдельным функциям определяется теми же условиями, что и в обычном редакторе.
Для обычного текста — Simple Text Template
Если нужны только абзацы, выберите «Простой текст». Настройте шрифт, бумагу и интервалы, сохраните шаблон и передавайте каждый новый текст в поле text. Добавлять блоки, колонки и отдельные поля не потребуется.

Один перенос строки в JSON записывается как \n, а разделение абзацев — как \n\n. Например, ваше приложение может отправлять новый конспект каждый день, сохраняя одинаковый почерк и оформление.
{
"templateId": "tpl_ЗАМЕНИТЕ_ID_ШАБЛОНА",
"text": "Конспект по биологии\n\nКлетка — основная единица строения живых организмов.\n\nВывод: строение клетки связано с её функциями."
}Выберите элемент и посмотрите, что передавать в API
Примеры расположены слева направо. Нажмите на нужный сценарий: ниже появятся схема документа, настройка блоков и JSON запроса. Названия полей должны совпадать с API key в вашем сохранённом шаблоне.
Список
Добавьте блок «Список», задайте API key topics и выберите маркеры или нумерацию. Передайте массив строк.
- Определение предела
- Непрерывность функции
- Практические примеры
{
"templateId": "tpl_ЗАМЕНИТЕ_ID_ШАБЛОНА",
"data": {
"topics": [
"Определение предела",
"Непрерывность функции",
"Практические примеры"
]
}
}Слева показана схема. Настоящий почерк и разбивку страниц проверяйте в Preview вашего шаблона.
Замените демонстрационный ID своим. У каждого примера должна быть соответствующая структура и поля в шаблоне; содержимое полей можно менять в каждом запросе.
Весь процесс: создать генерацию → дождаться результата → скачать PDF
Генерація PDF виконується асинхронно. Перший запит створює завдання та повертає його ID. Потім перевірте статус завдання і після completed завантажте PDF за downloadUrl.
Для читання JSON у Bash потрібен jq. Виконуйте три кроки послідовно в одному терміналі.
Крок 1. Створити генерацію
POST /api/v1/generations# Requires jq.
command -v jq >/dev/null || { printf '%s\n' 'Install jq first.' >&2; exit 1; }
export HW_API_KEY='your_api_key'
JOB=$(curl --fail-with-body 'https://handwrittner.com/api/v1/generations' \
-H "Authorization: Bearer $HW_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary @- <<'HW_TEMPLATE_JSON'
{
"templateId": "tpl_ЗАМЕНИТЕ_ID_ШАБЛОНА",
"data": {
"topics": [
"Определение предела",
"Непрерывность функции",
"Практические примеры"
]
}
}
HW_TEMPLATE_JSON
) || exit 1
BASE='https://handwrittner.com/api/v1'
printf '%s\n' "$JOB"
GENERATION_ID=$(printf '%s' "$JOB" | jq -er '.id') || exit 1Сервер повертає ID генерації та статус queued: завдання поставлено в чергу. Відповідь POST не містить PDF.
{
"id": "gen_...",
"status": "queued"
}Крок 2. Перевірити статус генерації
GET /api/v1/generations/{generationId}while true; do
STATUS=$(printf '%s' "$JOB" | jq -er '.status') || exit 1
case "$STATUS" in
completed) break ;;
queued|processing) sleep 10 ;;
*) printf '%s\n' "$JOB" >&2; exit 1 ;;
esac
JOB=$(curl --fail-with-body \
"$BASE/generations/$GENERATION_ID" \
-H "Authorization: Bearer $HW_API_KEY") || exit 1
printf '%s\n' "$JOB"
donequeued → processing → completed. Перевіряйте статус раз на 10 секунд. При failed покажіть error і не завантажуйте PDF. Приклад відповіді completed:
{
"id": "gen_...",
"status": "completed",
"pages": 2,
"creditsSpent": 2,
"downloadUrl": "/api/v1/generations/gen_.../download"
}Крок 3. Завантажити PDF
GET downloadUrl[ "$(printf '%s' "$JOB" | jq -r '.status')" = completed ] || exit 1
DOWNLOAD_URL=$(printf '%s' "$JOB" | jq -er '.downloadUrl') || exit 1
case "$DOWNLOAD_URL" in
https://*|http://*) ;;
/*) AUTHORITY="${BASE#*://}"; DOWNLOAD_URL="${BASE%%://*}://${AUTHORITY%%/*}$DOWNLOAD_URL" ;;
*) printf '%s\n' 'Invalid downloadUrl' >&2; exit 1 ;;
esac
curl --fail-with-body "$DOWNLOAD_URL" \
-H "Authorization: Bearer $HW_API_KEY" \
-o 'handwrittner.pdf' || exit 1Завантажуйте PDF лише після completed. Адреса береться з downloadUrl відповіді; відносний шлях розв’язується відносно адреси API.
Скопируйте API-запрос после создания шаблона
После сохранения Builder автоматически подставляет templateId и текущие данные в примеры кода. Доступны cURL, JavaScript, Python, Java, C++ и C#. Для cURL есть отдельные варианты Linux / macOS и Windows PowerShell.

PDF создаётся асинхронно. Первый POST /api/v1/generations возвращает ID задачи и статус queued. Проверяйте GET /api/v1/generations/{id}: после completed скачайте PDF по downloadUrl из ответа. Если задача завершилась со статусом failed, проверьте ошибку; скачивать PDF в этом случае не нужно.
Кнопка «Скопировать весь процесс · 3 шага» позволяет скопировать создание задачи, ожидание результата и скачивание одним фрагментом. Подставьте свой API-ключ и выполните код в выбранной среде. Для PNG и SVG используйте соответствующий формат результата в Builder.
Размер бумаги сразу показывает стоимость страницы
Расход для выбранного формата виден в настройках шаблона. Для своих размеров используется соответствующая категория по габаритам страницы. Итоговое списание рассчитывается по фактическим страницам успешно созданного документа.
Если есть API-тариф, сначала используются включённые в него листы. После исчерпания дневного или общего лимита расходуется дополнительный баланс. Предпросмотр, проверка статуса и скачивание бесплатны, а неудачная генерация не списывает листы.