Описание API Endpoints
1. Аутентификация и верификация по SMS (OTP)
POST /api/v2/auth/otp-request
Описание: Запрос одноразового кода (OTP)
Request Body (application/json):
interface OTPRequest {
phoneNumber: string; // Номер телефона для верификации
captchaToken: string; // Токен капчи, если требуется
}
Response (200) (application/json):
interface OTPResponse {
verificationToken: string; // Уникальный идентификатор для верификации OTP
expiresAt: string; // Дата и время истечения срока действия OTP
resendCount: number; // Количество оставшихся попыток отправки OTP
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
400 INVALID_PHONE_FORMAT, если номер телефона не соответствует формату.
401 CAPTCHA_EXPIRED, если токен капчи отсутствует или неверен (истёк).
403 PHONE_TEMPORARILY_BLOCKED, если номер заблокирован (за превышение количество попыток).
429 SMS_RATE_LIMIT_EXCEEDED, если превышено количество запросов на отправку OTP в течение определённого времени. (Если будет заголовок Retry-After поставить, то можно обратный таймер запустить)
500 (Internal Server Error), прочие ошибки.
POST /api/v2/auth/otp-verify
Описание: Верификация полученного кода (OTP)
Request Body (application/json):
interface OTPVerificationRequest {
phoneNumber: string; // Номер телефона для верификации
otpCode: string; // Код OTP, полученный пользователем
captchaToken: string; // Токен капчи, если требуется
verificationToken: string; // Уникальный идентификатор для верификации OTP
}
Response (200) (application/json):
interface OTPVerificationResponse {
resendCount?: number; // Количество оставшихся попыток отправки OTP
accessToken?: string; // Токен доступа, если верификация успешна
expiresAt?: string; // Дата и время истечения срока действия токена доступа
statusId: number; // Статус пользователя
userGuid?: Guid; // GUID пользователя, если верификация успешна
}
Response cookie:
Set-Cookie: refreshToken={refreshToken}; HttpOnly; Secure; SameSite=Strict; Expires={expiresAt}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
401 OTP_INVALID, если неверный OTP-код.
401 OTP_EXPIRED, если срок действия OTP-кода истёк.
401 CAPTCHA_EXPIRED, если токен капчи отсутствует или неверен (истёк).
403 PHONE_TEMPORARILY_BLOCKED, если номер заблокирован (за превышение количество попыток).
429 OTP_ATTEMPTS_EXCEEDED, если превышено попыток ввода OTP в течение определённого времени. (Если будет заголовок Retry-After поставить, то можно обратный таймер запустить)
500 (Internal Server Error), прочие ошибки.
POST /api/v2/auth/logout
Описание: Выход из системы и отзыв токенов доступа
Authentication: Bearer {accessToken}
Response (200) (application/json):
interface LogoutResponse {
success: boolean; // Сообщение об успешном выходе
}
Response cookie:
Set-Cookie: refreshToken=; HttpOnly; Secure; SameSite=Strict; Expires=Thu, 01 Jan 1970 00:00:00 GMT
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
2. Регистрация
POST /api/v2/groups/register
Описание: Регистрация группы/пользователя
Authentication: Bearer {accessToken}
Request Body (application/json):
interface GroupRegistrationRequest {
coordinatorGuid: Guid; // GUID координатора группы
companyGuid: Guid; // GUID компании
users: UserRegistrationRequest[]; // Массив пользователей, входящих в группу
}
interface UserRegistrationRequest {
title?: string; // Титул иностранного пользователя (например, "Dr", "Mr", "Lord" и т.д.)
firstName: string; // Имя пользователя
lastName: string; // Фамилия пользователя
middleName?: string; // Отчество пользователя (необязательное поле)
birthDate: string; // Дата рождения пользователя (в формате ISO 8601)
email: string; // Email пользователя
phoneNumber: string; // Номер телефона пользователя
country: string; // Страна пользователя
photoGuid: Guid; // GUID фотографии пользователя
contactPersonGuid: Guid | null; // GUID контактного лицо пользователя
companyGuid: Guid; // GUID компании пользователя
position: string; // Должность пользователя
groupGuid: Guid | null; // GUID группы пользователя
isForeignCitizen: boolean; // Является ли пользователь иностранным гражданином
typeId: number; // Тип пользователя
}
Response (201) (application/json):
export interface GroupRegistrationResponse {
groupGuid?: Guid; // GUID группы, если регистрация успешна
userCount: number; // Количество пользователей в группе
users: GroupUser[]; // Массив пользователей группы с их статусами
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
3. Пользователь
GET /api/v2/users/{userGuid}
Описание: Получить профиль пользователя
Authentication: Bearer {accessToken}
Path Parameters:
userGuid
: string (uuid)
Response (200) (application/json):
interface Partial<User> {
guid: Guid; // Уникальный идентификатор пользователя
title: string; // Титул иностранного пользователя (например, "Dr", "Mr", "Lord" и т.д.)
firstName: string; // Имя пользователя
lastName: string; // Фамилия пользователя
middleName?: string; // Отчество пользователя (необязательное поле)
birthDate: Date; // Дата рождения пользователя
email: string; // Email пользователя
phoneNumber: string; // Номер телефона пользователя в формате 79XXXXXXXXX
country: string; // Страна пользователя в формате ISO-3166
photoGuid: Guid; // GUID фотографии пользователя
contactPersonGuid: Guid; // GUID Контактного лица пользователя
companyGuid?: Guid; // Компания пользователя (если пользователь не является представителем СМИ)
passport?: MaskedPassportData; // Замаскированные паспортные данные пользователя
speakerData?: SpeakerData; // Данные спикера, если пользователь является спикером
position: string; // Должность пользователя
groupGuid: Guid; // GUID группы пользователя
statusId: number; // Статус пользователя
checkStatusId: number; // Статус проверки пользователя
typeId: number; // Тип пользователя
isForeignCitizen: boolean; // Является ли пользователь иностранным гражданином
paymentRequired: boolean; // Требуется ли оплата для регистрации пользователя
paymentCompanyId: Guid; // GUID компании, для которой требуется оплата
payingForThemselves: boolean; // Оплачивает ли пользователь билет самостоятельно
ticketPrice: number; // Цена билета для пользователя
invoice: Payment | null; // Платёж пользователя, если требуется оплата
}
export interface MaskedPassportData {
number: string; // Номер паспорта (замаскированный)
}
export interface Payment {
id: string; // Уникальный идентификатор платежа (номер счёта)
date: Date; // Дата платежа
url: string; // URL для оплаты (если применимо)
status: string; // Статус платежа (paid, pending, failed)
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
PUT /api/v2/users/{userGuid}
Описание: Частичное обновление профиля пользователя
Authentication: Bearer {accessToken}
Path Parameters:
userGuid
: string (uuid)
Request Body (application/json):
interface UserUpdateRequest {
userGuid: Guid; // GUID пользователя, чьи данные нужно обновить
title?: string; // Титул иностранного пользователя (например, "Dr", "Mr", "Lord" и т.д.)
firstName?: string; // Имя пользователя
lastName?: string; // Фамилия пользователя
middleName?: string; // Отчество пользователя
birthDate?: string; // Дата рождения пользователя (в формате ISO 8601)
email?: string; // Email пользователя
country?: string; // Страна пользователя
photoGuid?: Guid; // GUID фотографии пользователя
position?: string; // Должность пользователя
}
Response (200) (application/json):
userGuid
: string (uuid)
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
GET /api/v2/users/typeList
Описание: Получить список типов пользователей
Authentication: Bearer {accessToken}
Response (200) (application/json):
export interface UserTypeResponse {
types: UserType[]; // Массив типов пользователей
}
export interface UserType {
id: number; // Уникальный идентификатор типа пользователя
name: string; // Название типа пользователя
description?: string; // Описание типа пользователя (необязательное поле)
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
GET /api/v2/users/statusList
Описание: Получить список статусов пользователей
Authentication: Bearer {accessToken}
Response (200) (application/json):
export interface UserStatusResponse {
statuses: UserStatus[]; // Массив статусов пользователей
}
export interface UserStatus {
id: number; // Уникальный идентификатор статуса пользователя
name: string; // Название статуса пользователя
description?: string; // Описание статуса пользователя (необязательное поле)
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
GET /api/v2/users/checkStatusList
Описание: Получить список статусов проверки пользователей
Authentication: Bearer {accessToken}
Response (200) (application/json):
export interface UserCheckStatusResponse {
checkStatuses: UserCheckStatus[]; // Массив статусов проверки пользователей
}
export interface UserCheckStatus {
id: number; // Уникальный идентификатор статуса проверки пользователя
name: string; // Название статуса проверки пользователя
description?: string; // Описание статуса проверки пользователя (необязательное поле)
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
3.1. Подтверждение учётной записи пользователя
GET /api/v2/users/{userGuid}/confirm
Описание: Получить данные для подтверждения учётной записи
Authentication: Bearer {accessToken}
Path Parameters:
userGuid
: string (uuid)
Response (200) (application/json):
interface UserConfirmationData {
userGuid: Guid; // GUID пользователя, чью учётную запись нужно подтвердить
userData: UserRegistrationRequest; // Данные пользователя, которые нужно подтвердить
editableFields: EditableKeys; // Список полей, которые пользователь может редактировать
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
POST /api/v2/users/{userGuid}/confirm
Описание: Подтвердить учётную запись пользователя
Authentication: Bearer {accessToken}
Path Parameters:
userGuid
: string (uuid)- Request Body (application/json):
interface UserConfirmationRequest {
userGuid: Guid; // GUID пользователя, чью учётную запись нужно подтвердить
confirmationToken: string; // Токен подтверждения, полученный пользователем
editedUserData?: Partial<Pick<UserRegistrationRequest, EditableKeys[number]>>; // Отредактированные данные пользователя, если есть
}
Response (200) (application/json):
interface UserConfirmationResponse {
userGuid?: Guid; // GUID пользователя, если подтверждение успешно
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
3.2. Паспортные данные
POST /api/v2/users/{userGuid}/passport
Описание: Добавление паспортных данных пользователя
Authentication: Bearer {accessToken}
Path Parameters:
userGuid
: string (uuid)- Request Body (application/json):
interface PassportData {
number: string; // Номер паспорта
issuedBy: string; // Кем выдан паспорт
issuedDate: string; // Дата выдачи паспорта (в формате ISO 8601)
issuedCode: string; // Код подразделения, выдавшего паспорт
issueCountry: string; // Страна, выдавшая паспорт (в формате ISO-3166)
birthPlace: string; // Место рождения владельца паспорта
firstName: string; // Имя владельца паспорта
lastName: string; // Фамилия владельца паспорта
middleName?: string; // Отчество владельца паспорта (необязательное поле)
birthDate: string; // Дата рождения владельца паспорта (в формате ISO 8601)
sex: boolean; // Пол владельца паспорта (true - мужской, false - женский)
registrationAddress: string; // Адрес регистрации по паспорту
photoMainPageGuid: Guid; // GUID фотографии первого разворот паспорта
photoRegistrationPageGuid?: Guid; // GUID фотографии страницы регистрации
}
Response (200) (application/json):
interface MaskedPassportData {
number: string; // Номер паспорта (замаскированный)
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
GET /api/v2/users/{userGuid}/passport
Описание: Получить паспортные данные пользователя (только замаскированные)
Authentication: Bearer {accessToken}
Path Parameters:
userGuid
: string (uuid) Response (200) (application/json):
interface MaskedPassportData {
number: string; // Номер паспорта (замаскированный)
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
POST /api/v2/users/{userGuid}/passport/image
Описание: Добавление фотографии паспорта пользователя
Authentication: Bearer {accessToken}
Path Parameters:
userGuid
: string (uuid)- Request Body (multipart/form-data):
interface PassportImageUploadRequest {
passportImage: File; // Файл изображения паспорта
}
Response (200) (application/json):
interface PassportImageUploadResponse {
imageGuid: Guid; // GUID загруженного изображения паспорта
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
3.3. Данные спикера
GET /api/v2/users/{userGuid}/speaker-data
Описание: Получить данные спикера
Authentication: Bearer {accessToken}
Path Parameters:
userGuid
: string (uuid)
Response (200) (application/json):
interface SpeakerData {
userGuid: Guid; // GUID пользователя, которому принадлежат данные спикера
firstNameEn: string; // Имя спикера на английском языке
lastNameEn: string; // Фамилия спикера на английском языке
middleNameEn?: string; // Отчество спикера на английском языке (необязательное поле)
positionEn: string; // Должность спикера на английском языке
biography: string; // Биография спикера на русском языке
biographyEn: string; // Биография спикера на английском языке
photoGuid: Guid; // GUID фотографии спикера
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
PUT /api/v2/users/{userGuid}/speaker-data
Описание: Создать или обновить данные спикера
Authentication: Bearer {accessToken}
Path Parameters:
userGuid
: string (uuid)- Request Body (application/json):
interface SpeakerData {
userGuid: Guid; // GUID пользователя, которому принадлежат данные спикера
firstNameEn: string; // Имя спикера на английском языке
lastNameEn: string; // Фамилия спикера на английском языке
middleNameEn?: string; // Отчество спикера на английском языке (необязательное поле)
positionEn: string; // Должность спикера на английском языке
biography: string; // Биография спикера на русском языке
biographyEn: string; // Биография спикера на английском языке
photoGuid: Guid; // GUID фотографии спикера
}
Response (200) (application/json):
interface SpeakerData {
userGuid: Guid; // GUID пользователя, которому принадлежат данные спикера
firstNameEn: string; // Имя спикера на английском языке
lastNameEn: string; // Фамилия спикера на английском языке
middleNameEn?: string; // Отчество спикера на английском языке (необязательное поле)
positionEn: string; // Должность спикера на английском языке
biography: string; // Биография спикера на русском языке
biographyEn: string; // Биография спикера на английском языке
photoGuid: Guid; // GUID фотографии спикера
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
4. Группа
GET /api/v2/groups/{groupGuid}
Описание: Получить детали группы
Authentication: Bearer {accessToken}
Path Parameters:
groupGuid
: string (uuid)
Response (200) (application/json):
interface Group {
guid: Guid; // Уникальный идентификатор группы
companyGuid: Guid; // Компания, к которой принадлежит группа
coordinatorGuid: Guid; // Координатор группы
userCount: number; // Количество пользователей в группе
users: GroupUser[]; // Массив пользователей группы
}
interface GroupUser {
guid: Guid; // Уникальный идентификатор пользователя
name: string; // ФИО пользователя (title + firstName + lastName + middleName)
maskedPhoneNumber: string; // Замаскированный номер телефона пользователя
photoGuid: Guid; // GUID фотографии пользователя
statusId: number; // Статус пользователя
checkStatusId: number; // Статус проверки пользователя
typeId: number; // Тип пользователя
isSpeakerDataFilled: boolean; // Заполнены ли данные спикера
isPassportDataFilled: boolean; // Заполнены ли паспортные данные
isForeignCitizen: boolean; // Является ли пользователь иностранным гражданином
paymentRequired: boolean; // Требуется ли оплата для регистрации пользователя
invoice: Payment | null; // Платёж пользователя, если требуется оплата
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
5. Компания
GET /api/v2/company/byInn/{inn}
Описание: Получить компанию по ИНН
Authentication: Bearer {accessToken}
Path Parameters:
inn
: string (ИНН компании) Response (200) (application/json):
interface Patial<Company> {
guid: Guid; // Уникальный идентификатор компании
inn: string; // ИНН компании
name: string; // Полное название компании
shortName: string; // Краткое название компании
address: string; // Юридический адрес компании
kpp: string; // КПП компании
ogrn: string; // ОГРН компании
director: string; // ФИО директора компании
country: string; // Страна компании (в формате ISO-3166)
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
POST /api/v2/company
Описание: Создать компанию (например, СМИ или иностранную компанию)
Authentication: Bearer {accessToken}
Request Body (application/json):
interface Partial<CompanyData> {
inn?: string; // ИНН компании
name: string; // Полное название компании
shortName?: string; // Краткое название компании
address?: string; // Юридический адрес компании
kpp?: string; // КПП компании
ogrn?: string; // ОГРН компании
director?: string; // ФИО директора компании
country?: string; // Страна компании (в формате ISO-3166)
typeId: number; // Тип компании (например, СМИ, спонсор, участник и т.д.)
}
Response (201) (application/json):
interface CompanyCreateResponse {
companyGuid?: Guid; // GUID созданной компании, если создание успешно
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
GET /api/v2/company/{companyGuid}
Описание: Получить данные компании
Authentication: Bearer {accessToken}
Path Parameters:
companyGuid
: string (uuid)
Response (200) (application/json):
interface Company {
guid: Guid; // Уникальный идентификатор компании
inn: string; // ИНН компании
name: string; // Полное название компании
shortName: string; // Краткое название компании
address: string; // Юридический адрес компании
kpp: string; // КПП компании
ogrn: string; // ОГРН компании
director: string; // ФИО директора компании
country: string; // Страна компании (в формате ISO-3166)
typeId: number; // Тип компании (например, СМИ, спонсор, участник и т.д.)
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
GET /api/v2/company/typeList
Описание: Получить список типов компаний
Authentication: Bearer {accessToken}
Response (200) (application/json):
export interface CompanyTypeResponse {
types: CompanyType[]; // Массив типов компаний
}
export interface CompanyType {
id: number; // Уникальный идентификатор типа компании
name: string; // Название типа компании
description?: string; // Описание типа компании (необязательное поле)
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
6. Загрузка изображений/файлов
POST /api/v2/images/upload
Описание: Загрузка изображения
Request Body (multipart/form-data):
interface ImageUploadRequest {
image: File; // Файл изображения
}
Response (200) (application/json):
interface ImageUploadResponse {
imageGuid: Guid; // GUID загруженного изображения
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
POST /api/v2/files/upload
Описание: Загрузка файла
Request Body (multipart/form-data):
interface FileUploadRequest {
file: File; // Файл для загрузки
}
Response (200) (application/json):
interface FileUploadResponse {
fileGuid: Guid; // GUID загруженного файла
}
Error Response (application/json):
type ApiErrorResponse = {
error: string; // Описание ошибки
errorCode?: string; // Код ошибки (опционально)
}
GET /api/v2/images/{imageGuid}/{size}?open={open}?cdn={cdn}
Описание: Получение изображения по GUID
Path Parameters:
size
: string - размер изображения, "small", "medium", "large"imageGuid
: string (uuid)
Query Parameters:
cdn
: boolean (опционально) - если true, будет использоваться CDN для получения изображенияopen
: boolean (опционально) - если true, изображение будет открыто в браузере, иначе будет предложено скачать
Response (200) (image/*):
- Изображение в формате, соответствующем GUID
Error Response:
HTTP 404 Not Found, если изображение не найдено
GET /api/v2/files/{fileGuid}?open={open}?cdn={cdn}
Описание: Получение файла по GUID
Path Parameters:
fileGuid
: string (uuid)
Query Parameters:
cdn
: boolean (опционально) - если true, будет использоваться CDN для получения файлаopen
: boolean (опционально) - если true, файл будет открыт в браузере, иначе будет предложено скачать
Response (200) (application/octet-stream):
- Файл в бинарном формате
Error Response:
HTTP 404 Not Found, если изображение не найдено