Реферальная программа¶
У каждого пользователя есть личный реферальный код. Кто регистрируется по нему — получает бонус кредитами, и пригласивший тоже. Код и статистика отдаются одним эндпоинтом; применяется код при регистрации нового пользователя.
Свой код и статистика¶
Только для полноценного аккаунта: гостю эта ручка отвечает
403 registration_required. Закрыта именно выдача своего кода — прийти по чужому гость
может, и бонусы по такой ссылке начисляются при его регистрации (см.
Приглашение гостя).
{
"code": "AB12CD34",
"link": "https://mivio.app/r/AB12CD34",
"invited": 7,
"credited": 3,
"earned": 30
}
code— личный реферальный код (8 символов, есть у аккаунта с момента создания).link— готовая ссылка для шаринга; в ней зашитcode(формат…/r/<code>). Домен ссылки связан с приложением (universal link / app link), поэтому на устройстве с установленным приложением она открывает его и приносит код в путь; без приложения тот же адрес отдаёт веб-страницу приглашения.invited— сколько пользователей зарегистрировались по этому коду.credited— за скольких приглашённых начислен бонус.earned— суммарно заработано кредитов на приглашённых.
Как применяется код¶
Отдельного запроса «ввести код» нет — реферальный код передаётся при регистрации
в поле ref_code:
curl -X POST "$BASE_URL/v1/auth/register" -H 'Content-Type: application/json' \
-d '{"email":"u@example.com","password":"s3cret","ref_code":"AB12CD34"}'
ref_code принимается в register, google, apple, vk и yandex
(Аутентификация).
Если пользователь пришёл по ссылке …/r/AB12CD34, клиент достаёт код из deep-link и
кладёт его в ref_code при первой регистрации.
Плохой код не ломает регистрацию
Пустой, неизвестный или собственный код — тихо игнорируется (no-op): аккаунт всё равно создаётся, просто без реферальной привязки. Применить код можно только в момент регистрации — позже привязать себя к пригласившему нельзя.
Приглашение гостя¶
Основное место для кода — регистрация, и для гостя тоже. Приложение создаёт гостя при
первом запуске, до того как человек что-либо ввёл, так что в этот момент кода обычно
просто неоткуда взять: он появляется позже, на экране регистрации. Гость, созданный БЕЗ
кода, спокойно передаёт его в register (или во вход через провайдера) с токеном гостя в
заголовке — там и привязка, и бонусы.
POST /v1/auth/anonymous тоже принимает ref_code, но это случай поуже: приложение
открыли по ссылке-приглашению и код известен сразу. Тогда гость связывается с пригласившим
немедленно, а бонусы всё равно не платятся — они начисляются обеим сторонам, когда
этот гость станет полноценным аккаунтом. Так приглашение оплачивается за живого
пользователя, а не за установку приложения. Второй раз передавать код в этом случае не
нужно, но и не вредно: см. ниже.
Пригласивший не подменяется
Если связь уже записана, другой код при регистрации её не перезапишет — бонус получит тот, кто привёл человека на самом деле. Так что повторная передача кода безопасна, а подменить пригласившего своим кодом на экране регистрации нельзя.
Своя ручка GET /v1/referral гостю закрыта: приглашать может тот, кто зарегистрировался
сам.
Вознаграждение¶
При успешной привязке бонус кредитами начисляется обеим сторонам:
- новому пользователю — за регистрацию по коду;
- пригласившему — за каждого приглашённого.
Бонус не начисляется ни одной стороне, если приглашённый и пригласивший когда-либо входили с
одного устройства (device_id при регистрации и входе): это один человек со вторым
аккаунтом. Привязка при этом остаётся, а invited растёт, credited и earned - нет.
Поэтому device_id стоит передавать всегда, когда он известен.
Начисление идемпотентно (повторная регистрация одного и того же пользователя не
задвоит бонус). Обе записи видны в истории кредитов — kind
referral_bonus (приглашённому) и referral_earned (пригласившему).