Бюро Цифровых Технологий

База знаний

Документация «Вираж»

База знаний по продуктам и API экосистемы «Вираж»: модули, методы, вебхуки — с примерами.

Обновлено: 24.08.2026

Пользователи

Единый профиль болельщика, ученика школы или участника мероприятия — общее ядро для всех продуктов экосистемы «Вираж». Один ID работает в CRM, ДЮСШ, билетах и лояльности одновременно.

Обзор методов

МетодПутьОписание
GET/usersСписок пользователей
GET/users/{id}Получить профиль пользователя
POST/usersСоздать пользователя
PATCH/users/{id}Обновить профиль
DELETE/users/{id}Удалить пользователя
GET/users/{id}/activityЛента активности
POST/users/mergeОбъединить дубли

Список пользователей

Эндпоинт
GET /users

Постраничная выдача пользователей клуба с фильтрами по дате регистрации и статусу лояльности. Используйте cursor из ответа для следующей страницы.

Параметры

ПараметрГдеТипОбязателенОписание
limitqueryintegerнетРазмер страницы, от 1 до 100. По умолчанию — 20.
cursorquerystringнетЗначение next_cursor из предыдущего ответа.
loyalty_statusquerystringнетФильтр по уровню лояльности: silver, gold, platinum.
created_afterquerystring (ISO 8601)нетТолько пользователи, зарегистрированные после указанной даты.
Запрос
curl "https://api.virazh.io/v1/users?limit=20&loyalty_status=gold" \
  -H "Authorization: Bearer sk_test_51H..."
Ответ
{
  "data": [
    { "id": "usr_8f21c", "name": "Иван Петров", "loyalty_status": "gold" },
    { "id": "usr_71bd0", "name": "Мария Орлова", "loyalty_status": "gold" }
  ],
  "has_more": true,
  "next_cursor": "usr_71bd0"
}

Поля ответа

ПолеТипОписание
dataarray<User>Список карточек пользователей на текущей странице.
has_morebooleanЕсть ли следующая страница.
next_cursorstring | nullКурсор для запроса следующей страницы, если has_more = true.

Получить профиль пользователя

Эндпоинт
GET /users/{id}

Возвращает карточку пользователя с базовыми полями и ссылками на связанные сущности — программу лояльности, покупки, посещаемость.

Параметры

ПараметрГдеТипОбязателенОписание
idпутьstringдаИдентификатор пользователя, например usr_8f21c.
Запрос
curl https://api.virazh.io/v1/users/usr_8f21c \
  -H "Authorization: Bearer sk_test_51H..."
Ответ
{
  "id": "usr_8f21c",
  "name": "Иван Петров",
  "phone": "+7 900 123-45-67",
  "email": "ivan@example.com",
  "created_at": "2026-03-14T09:02:00Z",
  "loyalty": {
    "status": "silver",
    "points": 1240
  }
}

Поля ответа

ПолеТипОписание
idstringИдентификатор пользователя.
namestringПолное имя.
phonestringТелефон в формате +7 900 123-45-67.
emailstring | nullЭлектронная почта, если указана.
created_atstring (ISO 8601)Дата и время регистрации.
loyalty.statusstringТекущий уровень программы лояльности.
loyalty.pointsintegerБаланс баллов.

Создать пользователя

Эндпоинт
POST /users

Регистрирует нового пользователя в системе. Если пользователь с таким телефоном уже есть — вернёт существующую карточку без дубликата.

Параметры

ПараметрГдеТипОбязателенОписание
nameтелоstringдаПолное имя пользователя.
phoneтелоstringдаТелефон в формате +7XXXXXXXXXX — основной идентификатор для поиска дублей.
emailтелоstringнетЭлектронная почта.
sourceтелоstringнетИсточник регистрации: сайт, приложение, стойка на стадионе. Для аналитики.
Запрос
curl https://api.virazh.io/v1/users \
  -X POST \
  -H "Authorization: Bearer sk_test_51H..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Иван Петров",
    "phone": "+79001234567"
  }'
Ответ
{
  "id": "usr_8f21c",
  "name": "Иван Петров",
  "phone": "+7 900 123-45-67",
  "created_at": "2026-08-25T11:40:12Z"
}

Поля ответа

ПолеТипОписание
idstringИдентификатор созданного (или найденного существующего) пользователя.
namestringПолное имя.
phonestringТелефон в нормализованном формате.
created_atstring (ISO 8601)Дата создания карточки.

Обновить профиль

Эндпоинт
PATCH /users/{id}

Частичное обновление — передавайте только изменившиеся поля. Телефон и email проходят повторную проверку на уникальность.

Параметры

ПараметрГдеТипОбязателенОписание
idпутьstringдаИдентификатор пользователя.
nameтелоstringнетНовое имя.
phoneтелоstringнетНовый телефон.
emailтелоstringнетНовый email.
Запрос
curl https://api.virazh.io/v1/users/usr_8f21c \
  -X PATCH \
  -H "Authorization: Bearer sk_test_51H..." \
  -H "Content-Type: application/json" \
  -d '{ "email": "ivan.petrov@example.com" }'
Ответ
{
  "id": "usr_8f21c",
  "email": "ivan.petrov@example.com",
  "updated_at": "2026-08-25T11:44:02Z"
}

Поля ответа

ПолеТипОписание
idstringИдентификатор пользователя.
updated_atstring (ISO 8601)Дата последнего обновления профиля.

Удалить пользователя

Эндпоинт
DELETE /users/{id}

Мягкое удаление — профиль скрывается из выборок и рассылок, но история покупок и посещений сохраняется для отчётности. Восстановление возможно только через поддержку.

Параметры

ПараметрГдеТипОбязателенОписание
idпутьstringдаИдентификатор пользователя.
Запрос
curl https://api.virazh.io/v1/users/usr_8f21c \
  -X DELETE \
  -H "Authorization: Bearer sk_test_51H..."
Ответ
{
  "id": "usr_8f21c",
  "status": "deleted",
  "deleted_at": "2026-08-25T12:10:00Z"
}

Поля ответа

ПолеТипОписание
idstringИдентификатор удалённого пользователя.
statusstringВсегда deleted при успешном ответе.
deleted_atstring (ISO 8601)Дата и время удаления.

Лента активности

Эндпоинт
GET /users/{id}/activity

Хронологический журнал действий пользователя — покупки, посещения тренировок, начисления баллов, участие в рассылках. Полезно для карточки клиента в вашей CRM.

Параметры

ПараметрГдеТипОбязателенОписание
idпутьstringдаИдентификатор пользователя.
limitqueryintegerнетКоличество записей, до 50. По умолчанию — 10.
typequerystringнетФильтр по типу события: ticket_purchase, loyalty_accrued, training_attended и др.
Запрос
curl "https://api.virazh.io/v1/users/usr_8f21c/activity?limit=10" \
  -H "Authorization: Bearer sk_test_51H..."
Ответ
{
  "user_id": "usr_8f21c",
  "data": [
    { "type": "ticket_purchase", "at": "2026-08-20T18:02:00Z", "amount": 800 },
    { "type": "loyalty_accrued", "at": "2026-08-20T18:03:00Z", "amount": 40 },
    { "type": "training_attended", "at": "2026-08-19T16:00:00Z" }
  ]
}

Поля ответа

ПолеТипОписание
user_idstringИдентификатор пользователя.
dataarray<ActivityEvent>Список событий с полями type, at и параметрами события.

Объединить дубли

Эндпоинт
POST /users/merge

Склеивает две карточки одного человека (например, заведённые по телефону и по email) в одну — баллы, история и билеты переносятся на primary_id, вторая карточка помечается как объединённая.

Параметры

ПараметрГдеТипОбязателенОписание
primary_idтелоstringдаКарточка, которая останется активной.
duplicate_idтелоstringдаКарточка-дубль, которая будет объединена с primary_id.
Запрос
curl https://api.virazh.io/v1/users/merge \
  -X POST \
  -H "Authorization: Bearer sk_test_51H..." \
  -H "Content-Type: application/json" \
  -d '{ "primary_id": "usr_8f21c", "duplicate_id": "usr_11a90" }'
Ответ
{
  "primary_id": "usr_8f21c",
  "merged_from": "usr_11a90",
  "points_merged": 210
}

Поля ответа

ПолеТипОписание
primary_idstringИдентификатор итоговой карточки.
merged_fromstringИдентификатор объединённой (закрытой) карточки.
points_mergedintegerСколько баллов перенесено на primary_id.

Полезно знать

  • Поле phone — основной идентификатор при создании: повторная регистрация с тем же номером вернёт существующего пользователя, а не создаст дубликат.
  • Для списков используйте limit до 100 записей за раз и next_cursor из ответа — офсетная пагинация (page=) не поддерживается.
  • Мягкое удаление (DELETE /users/{id}) скрывает профиль из выборок и рассылок, но сохраняет историю для отчётности — это не то же самое, что обращение по праву на забвение, которое обрабатывается вручную через поддержку клуба.
  • При объединении дублей (/users/merge) необратимо: вторая карточка помечается объединённой и теряет самостоятельный доступ, все баллы и билеты переходят на primary_id.