ANDREW 3.0 · API docs

Сбор сообщений со страницы-приглашения · версия 1.0 · обновлено 04.06.2026

Общее

API обслуживает две формы со страницы-приглашения https://claudia.lidz-agency.ru/andrew3/:

Базовый URL: https://claudia.lidz-agency.ru/andrew3/api

Транспорт: JSON по HTTPS · кодировка UTF-8

CORS: только same-origin (api живёт на том же домене, что и сайт-приглашение).

Авторизация

Админ-токен передаётся параметром строки запроса: ?token=<TOKEN>. Запросить токен — у Андрея.

Эндпоинты

GET/feed · /bug

Получить список всех сообщений в соответствующем хранилище. Сортировка — в порядке поступления (старые → новые).

Параметры запроса

ПараметрТипОписание
tokenstring, опц.Админ-токен. При его наличии в ответ включаются служебные поля (ip, ua).

Ответ 200 OK

{
  "ok": true,
  "items": [
    { "id": 1, "msg": "С днём, друг! 🎂", "ts": 1781123456 },
    { "id": 2, "msg": "Версия огонь, обнови жизнь!", "ts": 1781123512 }
  ],
  "count": 2
}

С админ-токеном items содержит также поля ip, ua.

Пример

curl https://claudia.lidz-agency.ru/andrew3/api/feed
curl "https://claudia.lidz-agency.ru/andrew3/api/feed?token=…"
POST/feed · /bug

Добавить новое сообщение. Используется самим сайтом-приглашением при отправке формы. Защита от спама — на стороне API.

Тело запроса (application/json)

ПолеТипОписание
msgstring, обяз.Текст сообщения, до 240 символов (длиннее — обрезается).
websitestring, опц.Honeypot. Должен оставаться пустым. Если заполнен — запрос тихо отбрасывается (бот).

Ответ 200 OK

{ "ok": true, "id": 7 }

Ошибки

КодСлучайТело
400Невалидный JSON{"ok":false,"err":"bad json"}
400Пустое сообщение{"ok":false,"err":"empty"}
413Слишком большое тело (> 2KB){"ok":false,"err":"too big"}
429Превышен rate-limit{"ok":false,"err":"slow down"}

Пример

curl -X POST https://claudia.lidz-agency.ru/andrew3/api/feed \
  -H "Content-Type: application/json" \
  -d '{"msg":"Огонь!"}'
DELETE/feed · /bug

Полная очистка хранилища (необратимо). Требует админ-токен.

Параметры запроса

ПараметрТипОписание
tokenstring, обяз.Админ-токен.

Ответы

КодСлучайТело
200Очищено{"ok":true,"cleared":"feed.json"}
403Нет токена или неверный{"ok":false,"err":"forbidden"}

Пример

curl -X DELETE "https://claudia.lidz-agency.ru/andrew3/api/feed?token=…"

Защита от спама

Real-time wall на экране (рекомендация)

Готового websocket нет. Простая стратегия для проектора на празднике:

  1. Открыть страницу-стену на ноутбуке/мини-PC, подключённом к экрану.
  2. Опрашивать GET /feed (или /bug) раз в 3–5 сек.
  3. Сравнивать максимальный id с уже отображённым — новые анимировать «снизу вверх».
  4. Сетевой нагрузки минимум: ответ ~250 байт + ~50 байт на сообщение.

Пример клиент-сайд:

let seenMax = 0;
async function tick() {
  const r = await fetch('https://claudia.lidz-agency.ru/andrew3/api/feed', { cache: 'no-store' });
  const { items = [] } = await r.json();
  for (const it of items) {
    if (it.id > seenMax) {
      seenMax = it.id;
      renderNewMessage(it);   // подставь свой рендер
    }
  }
}
setInterval(tick, 3000);
tick();
Важно для wall-страницы: модерация в API не предусмотрена — если на экран попадает условно неудобное сообщение, лучше принимать решение на стороне клиента: например, держать blocklist слов или ручной режим публикации (новые сообщения сначала в очередь, оператор тапом отправляет на экран).

Модель данных

ПолеТипОписание
idintАвтоинкремент, уникален в рамках одного хранилища (feed / bug нумеруются отдельно).
msgstringТекст сообщения, до 240 символов.
tsint (unix-time)Момент приёма сервером, секунды UTC.
ipstringIP отправителя. Возвращается только с админ-токеном.
uastringUser-Agent отправителя (до 200 символов). Только с админ-токеном.

Производственные ограничения

Контакты

Андрей · @AnDnA · по техническим вопросам / для запроса токена.