1. Получите публичный ключ
Создайте форму в личном кабинете и скопируйте access_key. Это публичный ключ для отправки: он может находиться в браузере, но не даёт доступа к управлению или чтению заявок. Управляющий token, пароль и серверные секреты никогда не вставляйте в клиентский код.
2. Добавьте пример на сайт
Выберите стек в блоке выше. HTML сохраните на странице контактов. React компонент импортируйте в приложение. Astro компонент добавьте на статическую страницу: server route и hydration не требуются. Все варианты используют один адрес с путём /v1/submit и скрытый access_key. Адрес берётся из PUBLIC_API_URL при сборке этой инструкции.
Сохраняйте name у своих полей. Поддерживаются строки и повторяющиеся текстовые поля, JSON, urlencoded и multipart. Файлы и вложенные объекты отклоняются. Тело ограничено 65536 bytes, число имён 100, имя 64 символами ASCII, значение 8192 UTF-8 bytes и повтор 20 значениями. botcheck можно добавить пустым: заполненное поле отклоняется как спам.
3. Отправьте синтетическую проверку
Используйте вымышленные значения и адрес из домена .test. Для безопасной проверки добавьте в форму <input type="hidden" name="test" value="true">, а в React закройте input как />. JSON принимает test: true. Тестовая заявка сохраняется с отдельным признаком, не расходует коммерческий usage и не запускает обычные уведомления или webhooks. Технические ограничения запросов действуют и в этом режиме.
Найдите тестовую заявку в кабинете и проверьте поля. Затем уберите hidden test, чтобы принимать обычные обращения. Проверку уведомления владельцу выполняйте отдельным явным действием на подтверждённый адрес. Сообщение «сохранена» подтверждает запись, а не доставку письма или webhook.
Успех, ошибка и повтор
JavaScript примеров проверяет HTTP ответ, success: true, status: "accepted" и submission_id. При отказе ввод остаётся на странице, кнопка снова доступна. Ответ 400 означает ошибку полей, 404 требует проверить ключ и активность формы, 413 означает превышение размера, 415 неподдерживаемый формат, 429 просит подождать перед повтором, 503 означает временную недоступность приёма. Безопасный код запроса помогает найти ошибку без передачи текста заявки.
Каждая попытка неизменных данных с JavaScript использует тот же Idempotency-Key, в том числе после потери ответа. Replay возвращает прежний submission_id; другой payload с тем же ключом получает 409. Срок идемпотентности 24 часа в пределах формы. Изменённые поля и новая отправка после подтверждения получают новый ключ. После перезагрузки страницы ключ в памяти теряется, поэтому не повторяйте неопределённую отправку после reload, пока не проверите кабинет.
HTML и Astro сохраняют нативный POST без JavaScript: браузер переходит на подтверждённую страницу результата после commit. Ошибка сервера в этом режиме отображается его безопасным JSON ответом; вернитесь назад, чтобы исправить поля. Нативная отправка не добавляет Idempotency-Key автоматически. Если нужен свой redirect, заранее разрешите точный HTTPS origin в настройках формы и добавьте hidden redirect.
Контракт для вашего агента
Начните с машиночитаемой инструкции, затем используйте актуальный /openapi.json на origin API, указанном в коде. Публичный POST не требует сессии и не должен отправлять cookies. CORS позволяет внешний fetch только для публичного приёма; Origin и ключ формы не дают management прав. Подключать отдельный backend для сайта не нужно.
Обновлено