Интеграция

API Reference

Публичный HTTP API для приёма заявок.

Base URL: https://app.form-hook.com. Все endpoint принимают и возвращают JSON.

POST /api/c1/sites/{siteKey}/submissions

Отправить заявку. Публичный endpoint — не требует авторизации.

Параметры пути

ПараметрТипОписание
siteKeystringУникальный ключ сайта из дашборда

Заголовки

ЗаголовокЗначение
Content-Typeapplication/json
OriginДомен вашего сайта (браузер ставит автоматически)

Тело запроса

json
{
  "data": {
    "name": "Иван Петров",
    "email": "ivan@example.com",
    "phone": "+7 900 000-00-00",
    "message": "Произвольный текст"
  },
  "captcha_challenge_id": "01HXYZ...",
  "captcha_answer": 42
}

Поле data — произвольный JSON-объект. Ключи — имена полей формы. Поля captcha_challenge_id и captcha_answer нужны только если капча включена на сайте.

Ответ — 200 OK

json
{ "id": "01HXYZ..." }

Пример curl

bash
curl -X POST https://app.form-hook.com/api/c1/sites/ВАШ_SITE_KEY/submissions \
  -H "Content-Type: application/json" \
  -H "Origin: https://example.com" \
  -d '{
    "data": {
      "name": "Иван Петров",
      "email": "ivan@example.com"
    }
  }'

POST /api/c1/sites/{siteKey}/captcha/challenges

Получить captcha challenge — только при прямом HTTP без SDK.

Тело запроса

Пустое (или {}).

Ответ — 200 OK

json
{
  "challenge_id": "01HXYZ...",
  "question": "3 + 7 = ?",
  "expires_at": "2026-05-05T12:05:00Z"
}

Передайте challenge_id и ответ на вопрос в поле captcha_answer при отправке заявки.

Коды ошибок HTTP API

HTTPcodeОписание
400CAPTCHA_EMPTYНе передана капча (а она включена)
400CAPTCHA_ANSWER_INVALIDНеверный ответ на задачу капчи
400CAPTCHA_CHALLENGE_INVALIDChallenge истёк или не найден
400VALIDATION_ERRORОшибка валидации полей. Поле fields содержит детали
403DOMAIN_NOT_VERIFIEDДомен не верифицирован
403SITE_SUSPENDEDСайт заблокирован
403CORS_FORBIDDENOrigin не в списке разрешённых
404SITE_NOT_FOUNDНеверный siteKey
429RATE_LIMITEDПревышен лимит запросов

Формат ответа с ошибкой

json
{
  "code": "VALIDATION_ERROR",
  "message": "Validation failed",
  "fields": [
    { "name": "email", "message": "Обязательное поле" }
  ]
}

Коды ошибок SDK

Метод formhook.submit() бросает с объектом { code, message } при ошибке:

codeОписание
CAPTCHA_NOT_SOLVEDПользователь не решил капчу перед отправкой
CAPTCHA_ANSWER_INVALIDНеверный ответ — сброс виджета обязателен
CAPTCHA_SITE_DISABLEDКапча отключена на сайте, но виджет был отрендерен
SUBMIT_RATE_LIMITEDПревышен лимит запросов (429)
SUBMIT_VALIDATIONОшибка валидации данных (400)
SUBMIT_NETWORKСетевая ошибка — нет соединения
SUBMIT_IN_FLIGHTПредыдущая отправка ещё не завершена
WIDGET_LOAD_TIMEOUTВиджет капчи не загрузился за отведённое время

CORS

Endpoint принимает запросы только с доменов из списка разрешённых в настройках сайта. Для прямых server-side запросов (curl, backend) заголовок Origin можно не указывать — CORS проверяется только для браузерных запросов.

Лимиты

ПараметрЗначение
Rate limit100 запросов / секунду с одного IP
Размер теладо 1 МБ
TTL captcha challenge5 минут