Лента, лайки, мэтчи
Лента
GET /v1/members/{external_id}/feed?limit=20 возвращает до 50 анкет людей из других приложений, которые подходят вашему пользователю (правила — в разделе Как устроена сеть).
Как смешивать со своими
Хорошо работает чередование: своя анкета, анкета из сети, своя, из сети. Так пользователь видит больше людей рядом, а ваши собственные пользователи не теряются.
Что показать на карточке
Отметьте, что анкета из сети «Перевал». Подойдёт текст «Из сети „Перевал“» или значок сети с пояснением.
| Поле | Как показать |
|---|---|
bio_translated |
Пометка «переведено ИИ» и ссылка «показать оригинал» (bio_original) |
photo_verified |
Значок проверки — так же, как у ваших проверенных пользователей. отметку считает сеть: способ проверки площадки человека одобрен, фото не новее проверки. verified_by: partner — проверила его площадка |
distance_km |
«4 км», если есть: только у тех, кто включил show_distance |
country |
Страна (код ISO 3166-1) — в «Весь мир» вместо расстояния: «Рим, Италия» |
height_cm |
Рост: «178 см», если человек его указал |
«Весь мир»
У ленты есть параметр scope: nearby (по умолчанию) — рядом, world — «Весь мир». В «Весь мир» расстояние не важно: люди из любых городов и стран, но только те, кто сам включил согласие «Весь мир» (consent.world). Смотрящему оно тоже нужно — без него 409 world_consent_required. Остальные условия — общий язык или согласие обоих на другие языки, общая цель, возраст — те же.
Покажите две ленты переключателем «Рядом | Весь мир»: смешивать дальних с ближними не стоит — тот, кто ищет встречу у себя в городе, утонет в людях с другого конца света. Человек с «Весь мир» остаётся и в обычной ленте рядом. Лимит 200 анкет в сутки — общий на обе ленты.
Фильтры
лента принимает фильтры смотрящего — храните их у себя и передавайте в каждом запросе:
| Параметр | Что делает |
|---|---|
radius_km |
Радиус «рядом», 1–300 км, по умолчанию 50. В scope=world не учитывается |
verified_only=true |
Только анкеты с photo_verified — отметкой, которую считает сеть |
height_min, height_max |
Рост от и до, 120–230 см. Кто рост не указал, проходит — иначе фильтр по росту опустошил бы ленту |
lat, lon |
Центр поиска «рядом» (оба сразу). Город в анкете смотрящего не меняется |
city, country |
Название места, если у анкеты нет координат — тот же город |
age_min, age_max |
Сузить возраст. Берётся пересечение с диапазоном анкеты смотрящего. Пустое пересечение — пустая страница и 200. В запросе минимум больше максимума — 422 |
intent |
Одна цель из анкеты смотрящего. В ленте остаются только те, у кого она есть. Чужая цель — 422 |
language |
Код ISO 639-1. Человек в ленте должен его знать. Общий язык или согласие обоих на другие языки остаются |
gender |
Только противоположный пол смотрящего. Свой — 422 |
Фильтр не расширяет анкету. Неверные значения — 422.
Если анкет мало, имеет смысл самим увеличить radius_km и сказать об этом человеку: «Если анкет будет мало, радиус чуть-чуть увеличится».
Страницы и дневной лимит
Ответ содержит next_cursor, пока страница может быть не последней. Следующий запрос — те же параметры и cursor. Курсора в ответе нет — страницы кончились. Повтор без cursor возвращает тех же людей.
В сутки участник получает не больше 200 разных людей. Повторный показ лимит не тратит. Сколько новых ещё можно показать — remaining_today:
{ "items": [ … ], "remaining_today": 180, "next_cursor": "…" }
Лимит исчерпан — новых людей нет до следующих суток (UTC), уже показанные сегодня по-прежнему приходят. Дизлайк прячет анкету на 30 дней. Для листалки им отмечают пропуск. Для сайта с поиском прокрутка страницы дизлайком не является: страницы идут курсором. Оба старта — приложение-листалка и сайт с поиском.
Лайк
POST /v1/likes
{ "from": "user-123", "to": "1b9e…" }
{"matched": false}— лайк сохранён, вторая сторона получилаlike.received.{"matched": true, "match_id": "…"}— лайк был взаимным, мэтч создан. Обе площадки получаютmatch.created.
Лайкнуть пользователя своего же приложения через сеть нельзя (403) — у себя вы делаете это как обычно.
- Лайкнуть можно только того, кого ваш пользователь может видеть. Блокировка в любую сторону, другой контур (тестовый и боевой) или скрытый человек, который сам не лайкал вашего, —
404, как будто анкеты нет. - Повторный лайк ничего не меняет и события не шлёт. Повышение обычного лайка до суперлайка шлёт
like.receivedснова, уже сsuper. - Пока анкета вашего пользователя на проверке сети, его лайки сохраняются, но вторая сторона получит
like.received, только когда анкета пройдёт. Отклонят — показанные лайки отзовутся (like.withdrawnсrejected).
Суперлайк
После явного подключения расходного аккаунта нужен заказ superlike и X-Action-Ref на действие, даже при цене 0 ₽. До подключения действует прежний контракт. Предел 5 в сутки — защитный, а не бесплатная квота. Услуги сети.
POST /v1/likes
{ "from": "user-123", "to": "1b9e…", "super": true, "message": "Привет! Любишь горы?" }
Особый лайк: получатель видит его сразу, без мэтча. Сообщение — по желанию, до 200 знаков, без контактов (телефон, ссылка, ник в мессенджере — 422).
- Площадка получателя получает
like.receivedсsuper: true, а у анкеты отправителя —super_like: сообщение на языке получателя (message), оригинал (message_original),translatedи признаки мошенничества (flags). - В ленте получателя и во «Вас лайкнули» такой человек идёт первым и с тем же
super_like. Покажите суперлайк заметно выделенным — отправитель потратил на него особое действие. - Когда случится мэтч, сообщение суперлайка станет первым в переписке: площадка получателя получит его обычным
message.created, площадка отправителя показывает его у себя сама. - Не больше 5 суперлайков в сутки от одного человека — дальше
429 super_like_limit. Обычный лайк, повышенный до суперлайка, тоже в счёте. Сколько давать своим пользователям и брать ли за это деньги — решаете вы.
Передумал
После подключения расходного аккаунта нужен действующий rewind-day и X-Action-Ref; число допустимых отмен в течение срока не ограничено коммерческой квотой. Отмена не возвращает удалённые мэтчи и переписку.
DELETE /v1/likes/1b9e…?from=user-123
Отменяет лайк или суперлайк, пока он не дал мэтч; после мэтча — 409 matched (закройте мэтч). Площадка получателя получает like.withdrawn и убирает лайк из «Вас лайкнули». Пропущенную анкету возвращает DELETE /v1/dislikes/{network_id}?from=… — она снова может попасть в ленту.
Дизлайк
POST /v1/dislikes
{ "from": "user-123", "to": "5c2a…" }
Шлите, когда человек в листалке пропустил анкету или на сайте с поиском явно отказал («не показывать»). Страница поиска и обновление сетки дизлайком не являются: для них есть cursor. Дизлайкнутая анкета уходит из ленты на 30 дней. Ответ — 204, вторая сторона ничего не узнаёт.
Можно пачкой, до 100 пар за запрос:
POST /v1/dislikes
{
"items": [
{ "from": "user-123", "to": "5c2a…" },
{ "from": "user-123", "to": "8d4f…" }
]
}
Входящие лайки
Событие like.received содержит анкету того, кто лайкнул (from), уже на языке вашего пользователя. Покажите её в «Вас лайкнули». Ответный POST /v1/likes создаст мэтч.
Если события потерялись, восстановите список запросом:
GET /v1/members/{external_id}/likes?limit=50
Он отдаёт тех, кто лайкнул участника и ждёт ответа, — без взаимных, дизлайкнутых и заблокированных, новые сначала:
{ "items": [ { "from": { "network_id": "…", "display_name": "Elena", … }, "liked_at": "2026-10-24T12:00:00Z" } ] }
Мэтч
match.created приходит обеим площадкам — каждой со своим пользователем в member и анкетой собеседника в with. Создайте у себя разговор и сохраните связь match_id ↔ ваш разговор: по match_id будут приходить сообщения, отметки о прочтении и закрытие.
Если взаимный лайк поставил ваш пользователь, match_id придёт и в ответе на лайк, и в событии — создавайте разговор идемпотентно (по match_id).
Список мэтчей
GET /v1/members/{external_id}/matches — открытые мэтчи с анкетами собеседников. Нужен для сверки и восстановления после сбоя; в обычной работе хватает событий.
Расстаться
сеть поддерживает разные способы расстаться — соберите из них своё меню переписки.
Удалить переписку только у себя — история скрыта для вашего пользователя, у собеседника остаётся, мэтч жив; новые сообщения идут как обычно:
POST /v1/matches/{match_id}/clear
{ "as": "user-123" }
Закрыть мэтч, сохранив историю — у обоих переписка остаётся, писать нельзя (409 match_closed); вторая сторона получает match.closed с reason: unmatched:
DELETE /v1/matches/{match_id}?by=user-123
Удалить пару у обоих — мэтч, переписка и лайки стираются у обоих; вторая сторона получает match.erased и убирает переписку; в лентах друг друга они не появятся cooldown_days дней (0–365, по умолчанию 30). Нужно «никогда» — блокируйте.
DELETE /v1/matches/{match_id}?by=user-123&erase=true&cooldown_days=30
Если кто-то из двоих жаловался на другого, сеть хранит скрытую копию стёртой переписки для разбора жалоб 90 дней.
Мэтч также закрывается, если кто-то из двоих заблокировал другого (reason: blocked) или удалён из сети (reason: account_deleted или left_network, плюс peer_deleted: true). Во втором случае история у вашего пользователя остаётся — покажите вместо имени и фото «Аккаунт удалён» или «Больше не в сети».
Буст и инкогнито
Необязательные режимы, отдельные права, ограничения приватности и поддержка форматов выдачи описаны в услугах сети. Обязательных событий «показ карточки» нет.