Описание 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, если изображение не найдено