Обновлено: 22.09.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 из ответа.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
limit | query | integer | нет | Размер страницы, от 1 до 100. По умолчанию 20. |
cursor | query | string | нет | Значение next_cursor из предыдущего ответа. |
loyalty_status | query | string | нет | Фильтр по уровню лояльности: silver, gold, platinum. |
created_after | query | string (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"
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array<User> | Список карточек пользователей на текущей странице. |
has_more | boolean | Есть ли следующая страница. |
next_cursor | string | 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
}
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | string | Идентификатор пользователя. |
name | string | Полное имя. |
phone | string | Телефон в формате +7 900 123-45-67. |
email | string | null | Электронная почта, если указана. |
created_at | string (ISO 8601) | Дата и время регистрации. |
loyalty.status | string | Текущий уровень программы лояльности. |
loyalty.points | integer | Баланс баллов. |
Создать пользователя
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"
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | string | Идентификатор созданного (или найденного существующего) пользователя. |
name | string | Полное имя. |
phone | string | Телефон в нормализованном формате. |
created_at | string (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"
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | string | Идентификатор пользователя. |
updated_at | string (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"
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | string | Идентификатор удалённого пользователя. |
status | string | При успешном ответе равно deleted. |
deleted_at | string (ISO 8601) | Дата и время удаления. |
Лента активности
GET /users/{id}/activityЖурнал действий пользователя в хронологическом порядке: покупки, посещения тренировок, начисления баллов, участие в рассылках. Подходит для карточки клиента в вашей CRM.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор пользователя. |
limit | query | integer | нет | Количество записей, до 50. По умолчанию 10. |
type | query | string | нет | Фильтр по типу события: 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_id | string | Идентификатор пользователя. |
data | array<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_id | string | Идентификатор итоговой карточки. |
merged_from | string | Идентификатор объединённой (закрытой) карточки. |
points_merged | integer | Сколько баллов перенесено на primary_id. |
Полезно знать
- При создании пользователя основным идентификатором служит поле
phone. Если зарегистрировать тот же номер повторно, метод вернёт существующего пользователя и дубликат не появится. - Списки листаются через
limit(до 100 записей за раз) иnext_cursorиз ответа. Пагинация по смещению (page=) не поддерживается. - Мягкое удаление (
DELETE /users/{id}) скрывает профиль из выборок и рассылок и сохраняет историю для отчётности. Обращения по праву на забвение поддержка клуба обрабатывает отдельно и вручную. - Объединение дублей (
/users/merge) необратимо. Вторая карточка получает отметку объединённой и теряет самостоятельный доступ, все баллы и билеты переходят наprimary_id.
