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

Форма на Vue с access_key

Готовый Vue компонент с обычной POST отправкой. Добавьте access_key и сохраните существующее оформление без SDK и лишнего состояния.

С чего начать

Скопируйте 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=Пример значения'

В Vue форма размещается внутри template обычного компонента. Для нативной отправки не нужны ref, v-model или запрос из script: браузер соберёт именованные поля сам.

Включите компонент в проект

Сохраните пример в ContactForm.vue и импортируйте его на страницу. Подставьте access_key из кабинета в скрытое поле. Стили можно перенести из существующей формы.

Сохраните один обработчик

Для обычного POST не добавляйте @submit.prevent: он остановит отправку браузера. Если используете собственный обработчик, собирайте FormData из form и отправляйте её на тот же общий endpoint.

Проверьте результат

Пустой email и неверный формат должны остановить отправку. В корректном запросе должны присутствовать access_key и пользовательские поля. Затем найдите заявку в кабинете.

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

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

Обновлено

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

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

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

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

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

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