Подключение по стеку

Форма на статическом сайте Astro

Обычная HTML форма в Astro компоненте: общий POST адрес, скрытый access_key и проверка полей без hydration или server route.

С чего начать

Скопируйте access_key в кабинете, вставьте его в блок ниже и возьмите код для своего стека. Адрес отправки уже указан.

Открыть готовый код
Готовое подключение

Вставьте ключ.
Скопируйте код.

Все формы отправляются методом POST на один адрес. Поле access_key указывает, в какую форму попадёт заявка. Остальные поля остаются вашими.

Взять ключ в кабинете

Замените YOUR_ACCESS_KEY ключом своей формы. Для всех вариантов используется один адрес отправки.

Промпт

Задание вашему ИИ агенту
Подключи форму на моём сайте к Субмито.
Отправляй поля методом POST на https://app.submito.ru/v1/submit.
Добавь скрытое поле access_key со значением YOUR_ACCESS_KEY.
Поля формы: email (обязательно), message (обязательно).
Сохрани дизайн, компоненты и подписи полей.
Используй обычную HTML отправку без SDK и своей базы данных.
Проверь обязательные поля, email и работу на мобильном экране.

HTML

contact.html
<form action="https://app.submito.ru/v1/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
  <label for="email">Ваша почта</label>
  <input id="email" type="email" name="email" required>
  <label for="message">Сообщение</label>
  <textarea id="message" name="message" required></textarea>
  <button type="submit">Отправить</button>
</form>

React

ContactForm.tsx
export default function ContactForm() {
  return (
    <form action="https://app.submito.ru/v1/submit" method="POST">
      <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
      <label htmlFor="email">Ваша почта</label>
      <input id="email" type="email" name="email" required />
      <label htmlFor="message">Сообщение</label>
      <textarea id="message" name="message" required />
      <button type="submit">Отправить</button>
    </form>
  );
}

Next.js

app/components/ContactForm.tsx
export default function ContactForm() {
  return (
    <form action="https://app.submito.ru/v1/submit" method="POST">
      <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
      <label htmlFor="email">Ваша почта</label>
      <input id="email" type="email" name="email" required />
      <label htmlFor="message">Сообщение</label>
      <textarea id="message" name="message" required />
      <button type="submit">Отправить</button>
    </form>
  );
}

Astro

src/components/ContactForm.astro
<form action="https://app.submito.ru/v1/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
  <label for="email">Ваша почта</label>
  <input id="email" type="email" name="email" required>
  <label for="message">Сообщение</label>
  <textarea id="message" name="message" required></textarea>
  <button type="submit">Отправить</button>
</form>

Vue

ContactForm.vue
<template>
  <form action="https://app.submito.ru/v1/submit" method="POST">
    <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
    <label for="email">Ваша почта</label>
    <input id="email" type="email" name="email" required>
    <label for="message">Сообщение</label>
    <textarea id="message" name="message" required></textarea>
    <button type="submit">Отправить</button>
  </form>
</template>

Svelte

ContactForm.svelte
<form action="https://app.submito.ru/v1/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
  <label for="email">Ваша почта</label>
  <input id="email" type="email" name="email" required>
  <label for="message">Сообщение</label>
  <textarea id="message" name="message" required></textarea>
  <button type="submit">Отправить</button>
</form>

JavaScript

submit.js
// Передайте поля формы и сохраните idempotencyKey для повтора тех же данных.
// Для новой заявки создайте новый crypto.randomUUID().
export async function submitForm(payload, idempotencyKey) {
  const response = await fetch("https://app.submito.ru/v1/submit", {
    method: "POST",
    credentials: "omit",
    headers: { "Content-Type": "application/json", "Idempotency-Key": idempotencyKey },
    body: JSON.stringify({ ...payload, access_key: "YOUR_ACCESS_KEY" })
  });
  const result = await response.json();
  if (!response.ok || result.success !== true || result.status !== "accepted" || !result.submission_id) {
    throw new Error("Сохранение не подтверждено. Сохраните ввод и повторите с тем же ключом идемпотентности.");
  }
  // Заявка сохранена. Доставка уведомлений проверяется отдельно.
  return result;
}
// Поля payload: email (обязательно), message (обязательно)

cURL

Терминал / HTTP клиент
# Сохраните один Idempotency-Key для повторов этой отправки.
# Для новой заявки используйте новый UUID.
curl 'https://app.submito.ru/v1/submit' \
  -H 'Accept: application/json' \
  -H 'Idempotency-Key: REPLACE_WITH_UUID' \
  --data-urlencode 'access_key=YOUR_ACCESS_KEY' \
  --data-urlencode 'email=synthetic@example.test' \
  --data-urlencode 'message=Пример значения'

В Astro форма может быть обычной HTML разметкой внутри компонента. Она подходит и для статического сайта: запрос уходит прямо на общий endpoint Субмито.

Встройте компонент

Сохраните разметку выше в src/components/ContactForm.astro и импортируйте на страницу. Подставьте access_key из кабинета. Для обычной отправки не нужны client директивы, hydration или server route.

Настройте поля

Сохраните action, method и скрытое поле access_key. Добавляйте свои поля с name, видимыми label и подходящими типами ввода. Встроенная проверка браузера работает без JavaScript.

Проверьте статическую сборку

Откройте собранную страницу, попробуйте пустой и корректный ввод. После отправки проверьте заявку в кабинете. Если добавляете собственный fetch, сохраните доступность подписей и сообщений об ошибках.

Источники и дата проверки

Редакционная сверка: 2026-10-27. Учитывайте версию инструментов в своём проекте.

Обновлено

Следующий шаг

Продолжите подключение

Начните с формы

Ваш сайт уже есть.
Подключим форму.

Откройте личный кабинет, затем передайте агенту промпт подключения.

Подключить форму