API
Этим API пользуется сайт и приложение. Ответы — JSON. Токен создаётся в настройках, в блоке ключа API.
Адрес
https://vltc.fun
В настройках нажмите «Показать ключ» или создайте новый. В запрос кладите его как Bearer. Ключ показывается один раз при создании, потом его можно открыть снова из того же окна.
Заголовки
Authorization: Bearer <token>— нужен везде, кроме регистрации, входа, ленты, профиля и поиска.Content-Type: application/json— для POST с телом.Accept: application/jsonX-Profile: 2— номер профиля, если у аккаунта их несколько. Без заголовка берётся текущий.
Как выглядит ответ
{"ok":true,"data":{...}}
{"ok":false,"code":"validation","error":"..."}
Коды: validation — проверьте поля, auth — нет токена, forbidden — нет права, rate — слишком часто, filter — текст не прошёл фильтр, crisis — вопрос не опубликован, вместо него помощь.
/api/v1/auth/register
Создаёт аккаунт. login — почта или телефон, password — от 8 символов, буква и цифра, nickname — имя профиля.
Поля: login, password, nickname/api/v1/auth/login
Возвращает token, user и profiles. Если включена двухфакторная защита, первый ответ просит totp, второй запрос шлёт тот же пароль и код.
Поля: login, password, totp/api/v1/me
Текущий аккаунт, активный профиль и список профилей.
/api/v1/feed?mode=fresh
Лента. mode выбирает свежее, умное, подписки или топ.
Поля: mode=fresh|smart|following|top/api/v1/questions
Новый вопрос. to — @slug получателя, пустое to публикует в общую ленту. kind: text или poll. Для опроса options — от 2 до 5 строк. anonymous: 1 прячет имя.
Поля: body, to, kind, anonymous, options[]/api/v1/answers
Ответ на вопрос. visibility: public или private.
Поля: question_id, body, visibility/api/v1/reactions
Реакция на ответ. kind: like, fire, laugh, shock, sad. Повтор той же реакции снимает её.
Поля: answer, kind/api/v1/follows
Подписка. on: 1 подписаться, 0 отписаться.
Поля: slug, on/api/v1/notifications
Последние уведомления аккаунта.
/api/v1/conversations
Список диалогов активного профиля.
/api/v1/messages
Личное сообщение. to — номер профиля. Нужна взаимная подписка или дружба, сотрудники пишут без этого.
Поля: to, body/api/v1/profiles/{slug}
Публичная карточка: имя, slug, био, настроение, галочка. Скрытый профиль не отдаётся.
/api/v1/search?q=
Люди по началу имени или slug.
Поля: qПример вопроса
POST /api/v1/questions
{"body":"Как прошёл день?","to":"artem","kind":"poll","anonymous":1,"options":["хорошо","тихо"]}
Картинка к вопросу с сайта уходит обычной формой, не JSON. В API сейчас текст и варианты опроса.
Что API не отдаёт
Имя анонимного автора, почта, IP и точное место в ответах не приходят. Намёки премиума остаются общими: устройство, был ли человек в подписках, спрашивал ли раньше.