API

Этим API пользуется сайт и приложение. Ответы — JSON. Токен создаётся в настройках, в блоке ключа API.

Адрес

https://vltc.fun

В настройках нажмите «Показать ключ» или создайте новый. В запрос кладите его как Bearer. Ключ показывается один раз при создании, потом его можно открыть снова из того же окна.

Заголовки

  • Authorization: Bearer <token> — нужен везде, кроме регистрации, входа, ленты, профиля и поиска.
  • Content-Type: application/json — для POST с телом.
  • Accept: application/json
  • X-Profile: 2 — номер профиля, если у аккаунта их несколько. Без заголовка берётся текущий.

Как выглядит ответ

{"ok":true,"data":{...}}

{"ok":false,"code":"validation","error":"..."}

Коды: validation — проверьте поля, auth — нет токена, forbidden — нет права, rate — слишком часто, filter — текст не прошёл фильтр, crisis — вопрос не опубликован, вместо него помощь.

POST /api/v1/auth/register

Создаёт аккаунт. login — почта или телефон, password — от 8 символов, буква и цифра, nickname — имя профиля.

Поля: login, password, nickname
POST /api/v1/auth/login

Возвращает token, user и profiles. Если включена двухфакторная защита, первый ответ просит totp, второй запрос шлёт тот же пароль и код.

Поля: login, password, totp
GET /api/v1/me

Текущий аккаунт, активный профиль и список профилей.

GET /api/v1/feed?mode=fresh

Лента. mode выбирает свежее, умное, подписки или топ.

Поля: mode=fresh|smart|following|top
POST /api/v1/questions

Новый вопрос. to — @slug получателя, пустое to публикует в общую ленту. kind: text или poll. Для опроса options — от 2 до 5 строк. anonymous: 1 прячет имя.

Поля: body, to, kind, anonymous, options[]
POST /api/v1/answers

Ответ на вопрос. visibility: public или private.

Поля: question_id, body, visibility
POST /api/v1/reactions

Реакция на ответ. kind: like, fire, laugh, shock, sad. Повтор той же реакции снимает её.

Поля: answer, kind
POST /api/v1/follows

Подписка. on: 1 подписаться, 0 отписаться.

Поля: slug, on
GET /api/v1/notifications

Последние уведомления аккаунта.

GET /api/v1/conversations

Список диалогов активного профиля.

POST /api/v1/messages

Личное сообщение. to — номер профиля. Нужна взаимная подписка или дружба, сотрудники пишут без этого.

Поля: to, body
GET /api/v1/profiles/{slug}

Публичная карточка: имя, slug, био, настроение, галочка. Скрытый профиль не отдаётся.

GET /api/v1/search?q=

Люди по началу имени или slug.

Поля: q

Пример вопроса

POST /api/v1/questions
{"body":"Как прошёл день?","to":"artem","kind":"poll","anonymous":1,"options":["хорошо","тихо"]}

Картинка к вопросу с сайта уходит обычной формой, не JSON. В API сейчас текст и варианты опроса.

Что API не отдаёт

Имя анонимного автора, почта, IP и точное место в ответах не приходят. Намёки премиума остаются общими: устройство, был ли человек в подписках, спрашивал ли раньше.