htmlkin.ru
Войти
Для разработчиков

Документация REST API

Публикуйте и обновляйте HTML-страницы прямо из кода и AI-пайплайнов. Публикация и обновление статических сайтов, HTML-страниц и PDF-документов из кода и AI-пайплайнов. Доступен на тарифах Оптимальный и Бизнес по API-ключу.

Создать API-ключ →Скачать OpenAPI

Аутентификация

Все запросы требуют API-ключа в заголовке Authorization. Ключ создаётся в личном кабинете на странице «API-ключи» и показывается один раз. Запрос без валидного ключа отклоняется с 401 invalid_api_key.

Базовый адрес всех эндпоинтов — https://htmlkin.ru/api/v1. В каждый запрос добавляйте заголовок:

"Authorization: Bearer <api_key>"

API доступен на тарифах Оптимальный и Бизнес. Ключ создаётся в личном кабинете на странице «API-ключи» и показывается один раз.

Лимиты частоты

Частота запросов ограничена по тарифу. При превышении возвращается 429 rate_limit_exceeded с заголовком Retry-After.

ТарифЛимит
Оптимальный60 запросов в минуту
Бизнес120 запросов в минуту

Эндпоинты

POST/api/v1/pages

Опубликовать страницу

Загружает HTML-файл, ZIP статического сайта или PDF-документ и публикует его на собственном субдомене. Передаётся ровно одно из полей html_file, site_archive и pdf_file. По умолчанию присваивается случайный субдомен; можно задать свой в поле subdomain.

Тело запроса multipart/form-data
ПолеТипОбязательноОписание
html_filefileнетОдин HTML-файл; сохраняется как index.html. Ровно один источник контента.
site_archivefileнетZIP статического сайта: корневой index.html, суммарный распакованный лимит тарифа.
pdf_filefileнетPDF-документ вместо сайта. Ровно один источник контента.
subdomainstringнетЖелаемый субдомен ({subdomain}.htmlkin.ru), символы a-z, 0-9, «-». Если занят — 409.
pinstringнет4-значный PIN (0000–9999) для защиты просмотра. На платных тарифах.
Пример запроса
curl -X POST https://htmlkin.ru/api/v1/pages \
  -H "Authorization: Bearer $HTMLKIN_API_KEY" \
  -F "html_file=@index.html" \
  -F "subdomain=mypage"
Ответ 201
{
  "id": "abc123",
  "url": "https://mypage.htmlkin.ru",
  "expires_at": null,
  "created_at": "2026-06-14T07:00:00Z",
  "updated_at": "2026-06-14T07:00:00Z",
  "file_count": 1,
  "entry_path": "index.html"
}
PUT/api/v1/pages/{id}

Обновить страницу

Полностью заменяет сайт новым HTML, ZIP или PDF по тому же адресу и/или меняет PIN. URL страницы не меняется (тип контента менять можно: HTML-страницу допустимо заменить PDF-документом и наоборот). Источник — не более одного из полей html_file, site_archive и pdf_file; можно передать только pin, если нужно лишь изменить защиту.

Тело запроса multipart/form-data
ПолеТипОбязательноОписание
html_filefileнетНовый HTML-файл (опционально; не вместе с pdf_file).
site_archivefileнетНовый полный ZIP сайта; все прежние файлы будут заменены.
pdf_filefileнетНовый PDF-документ (опционально; не вместе с html_file).
pinstringнет4 цифры — установить/сменить PIN; пустая строка — снять PIN.
Пример запроса
curl -X PUT https://htmlkin.ru/api/v1/pages/abc123 \
  -H "Authorization: Bearer $HTMLKIN_API_KEY" \
  -F "html_file=@index.html"
Ответ 200
{
  "id": "abc123",
  "url": "https://mypage.htmlkin.ru",
  "expires_at": null,
  "created_at": "2026-06-14T07:00:00Z",
  "updated_at": "2026-06-14T07:10:00Z",
  "size_bytes": 12345,
  "file_count": 8,
  "entry_path": "index.html",
  "pin_protected": false
}
GET/api/v1/pages/{id}

Получить информацию о странице

Возвращает метаданные страницы: адрес, размер сайта, число файлов, entrypoint, срок жизни и PIN-защиту.

Параметры пути
ПараметрОписание
idИдентификатор страницы.
Пример запроса
curl -X GET https://htmlkin.ru/api/v1/pages/abc123 \
  -H "Authorization: Bearer $HTMLKIN_API_KEY"
Ответ 200
{
  "id": "abc123",
  "url": "https://mypage.htmlkin.ru",
  "expires_at": null,
  "created_at": "2026-06-14T07:00:00Z",
  "updated_at": "2026-06-14T07:10:00Z",
  "size_bytes": 12345,
  "file_count": 8,
  "entry_path": "index.html",
  "pin_protected": false
}
DELETE/api/v1/pages/{id}

Удалить страницу

Безвозвратно удаляет страницу. Если к странице был привязан кастомный домен, домен остаётся в аккаунте — снимается только его связь с этой страницей.

Параметры пути
ПараметрОписание
idИдентификатор страницы.
Пример запроса
curl -X DELETE https://htmlkin.ru/api/v1/pages/abc123 \
  -H "Authorization: Bearer $HTMLKIN_API_KEY"
Ответ 200
{
  "id": "abc123",
  "deleted": true
}

Коды ошибок

Тело ошибки всегда одинаковое: { "error": "<code>", "message": "<описание>" }.

HTTPerrorОписание
400invalid_fileОдиночный файл не похож на HTML или PDF.
400invalid_siteНеверная комбинация источников или невалидный набор файлов сайта.
400invalid_archiveZIP повреждён, зашифрован или использует неподдерживаемый формат.
400invalid_pathНедопустимый, небезопасный или дублирующийся путь файла.
400missing_entry_fileВ корне сайта отсутствует index.html.
400too_many_filesВ сайте больше 100 полезных файлов.
400invalid_pinPIN не из 4 цифр.
400invalid_subdomainСубдомен с недопустимыми символами (разрешены a-z, 0-9, «-»).
401invalid_api_keyНевалидный или отсутствующий API-ключ.
403api_not_allowedТариф без доступа к API (нужен Оптимальный или Бизнес).
403page_limit_exceededПревышен лимит активных сайтов по тарифу.
404not_foundСтраница не найдена или принадлежит другому владельцу.
409subdomain_takenЗапрошенный субдомен уже занят.
413file_too_largeСуммарный распакованный размер сайта превышает лимит тарифа (до 50 МБ).
429rate_limit_exceededПревышена частота запросов; в ответе заголовок Retry-After.

Тестирование и генерация клиентов

API описан машиночитаемой спецификацией OpenAPI 3.1. Импортируйте её, чтобы интерактивно отправлять запросы и генерировать готовый клиент под свой язык:

  • Swagger UI / Postman — вставьте адрес https://htmlkin.ru/api/v1/openapi.json, задайте Bearer-ключ и вызывайте эндпоинты прямо из браузера.
  • openapi-generator — сгенерируйте SDK для Python, TypeScript, Go и других языков одной командой из той же спецификации.

Публикация из AI-ассистентов (MCP)

Тот же API доступен через MCP-сервер https://htmlkin.ru/mcp — Claude и другие ассистенты публикуют и обновляют страницы прямо из диалога, по вашему API-ключу. Устанавливать и запускать ничего не нужно.

Настройка MCP-сервера →