openapi: 3.0.4
info:
  title: Integration API
  version: v1
paths:
  /integration/api/v1/customer/appointments/cancel:
    post:
      tags:
        - IntegrationApi
      summary: Отмена предварительной записи
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelAppointmentRequest'
            example:
              appointmentId: 75ee8a60-7cf6-4ecc-b17e-bb53db3035b4
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CancelAppointmentResponse'
              example:
                success: true
                successMessage: Успешно
                failReasonMessage: Бронирование уже было отменено ранее
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/customer/appointments/create:
    post:
      tags:
        - IntegrationApi
      summary: Создание предварительной записи
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAppointmentRequest'
            example:
              customerId: e3c53333-2552-46ce-b2de-752c094b9cf6
              affiliatedApplicant:
                firstName: Томас
                middleName: Брюс
                lastName: Уэйн
                phone: '+79991115500'
                email: batman@ya.ru
                companyName: Wayne Enterprises, Inc.
              officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
              lineId: 33add1ef-2d42-4d67-b098-56d87a2f988f
              serviceId: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
              units: 10
              comment: Комментарий
              timeSlotId: 123245346346
              deviceType: Browser
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateAppointmentResponse'
              example:
                appointment:
                  id: 75ee8a60-7cf6-4ecc-b17e-bb53db3035b4
                  shortCode: С7Я6
                  affiliatedApplicant:
                    firstName: Томас
                    middleName: Брюс
                    lastName: Уэйн
                    phone: '+79991115500'
                    email: batman@ya.ru
                    companyName: Wayne Enterprises, Inc.
                  officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
                  lineId: 33add1ef-2d42-4d67-b098-56d87a2f988f
                  date: '2025-02-12'
                  time: '00:00:00'
                  serviceId: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
                  serviceName: Бронирование
                  units: 10
                  comment: Комментарий
                success: true
                successMessage: Успешно
                failReasonMessage: Бронирование уже было отменено ранее
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/customer/appointments/get:
    post:
      tags:
        - IntegrationApi
      summary: Получение информации о предварительной записи
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetAppointmentRequest'
            example:
              appointmentId: 75ee8a60-7cf6-4ecc-b17e-bb53db3035b4
              loadDeleted: true
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAppointmentResponse'
              example:
                isDeleted: false
                customer:
                  firstName: Томас
                  middleName: Брюс
                  lastName: Уэйн
                  phone: '+79991115500'
                  email: batman@ya.ru
                  companyName: Wayne Enterprises, Inc.
                appointment:
                  id: 75ee8a60-7cf6-4ecc-b17e-bb53db3035b4
                  shortCode: С7Я6
                  affiliatedApplicant:
                    firstName: Томас
                    middleName: Брюс
                    lastName: Уэйн
                    phone: '+79991115500'
                    email: batman@ya.ru
                    companyName: Wayne Enterprises, Inc.
                  officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
                  lineId: 33add1ef-2d42-4d67-b098-56d87a2f988f
                  date: '2025-02-12'
                  time: '00:00:00'
                  serviceId: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
                  serviceName: Бронирование
                  units: 10
                  comment: Комментарий
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/customer/appointments/update:
    post:
      tags:
        - IntegrationApi
      summary: Изменение предварительной записи
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAppointmentRequest'
            example:
              appointmentId: 75ee8a60-7cf6-4ecc-b17e-bb53db3035b4
              officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
              lineId: 33add1ef-2d42-4d67-b098-56d87a2f988f
              serviceId: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
              units: 10
              comment: Комментарий
              timeSlotId: 123245346346
              deviceType: Browser
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateAppointmentResponse'
              example:
                appointment:
                  id: 75ee8a60-7cf6-4ecc-b17e-bb53db3035b4
                  shortCode: С7Я6
                  affiliatedApplicant:
                    firstName: Томас
                    middleName: Брюс
                    lastName: Уэйн
                    phone: '+79991115500'
                    email: batman@ya.ru
                    companyName: Wayne Enterprises, Inc.
                  officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
                  lineId: 33add1ef-2d42-4d67-b098-56d87a2f988f
                  date: '2025-02-12'
                  time: '00:00:00'
                  serviceId: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
                  serviceName: Бронирование
                  units: 10
                  comment: Комментарий
                success: true
                successMessage: Успешно
                failReasonMessage: Бронирование уже было отменено ранее
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/customer/get:
    post:
      tags:
        - IntegrationApi
      summary: >-
        Получение данных о заявителе, его активных предварительных записей и
        истории прошлых бронирований
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetCustomerRequest'
            example:
              customerId: 75ee8a60-7cf6-4ecc-b17e-bb53db3035b4
              historyDepthInMonths: 1
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCustomerResponse'
              example:
                customer:
                  firstName: Томас
                  middleName: Брюс
                  lastName: Уэйн
                  phone: '+79991115500'
                  email: batman@ya.ru
                  companyName: Wayne Enterprises, Inc.
                appointments:
                  - id: 75ee8a60-7cf6-4ecc-b17e-bb53db3035b4
                    shortCode: С7Я6
                    affiliatedApplicant:
                      firstName: Томас
                      middleName: Брюс
                      lastName: Уэйн
                      phone: '+79991115500'
                      email: batman@ya.ru
                      companyName: Wayne Enterprises, Inc.
                    officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
                    lineId: 33add1ef-2d42-4d67-b098-56d87a2f988f
                    date: '2025-02-12'
                    time: '00:00:00'
                    serviceId: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
                    serviceName: Бронирование
                    units: 10
                    comment: Комментарий
                history:
                  - officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
                    officeName: Главный офис МФЦ
                    officeAddress: ул. Ленина, д. 10
                    date: '2025-02-12'
                    time: '00:00:00'
                    serviceName: Бронирование
                    units: 10
                    affiliatedApplicant:
                      firstName: Томас
                      middleName: Брюс
                      lastName: Уэйн
                      phone: '+79991115500'
                      email: batman@ya.ru
                      companyName: Wayne Enterprises, Inc.
                    finalState: CancelledByCustomer
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/customer/upsert:
    post:
      tags:
        - IntegrationApi
      summary: Создание или обновление данных о заявителе
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsertCustomerRequest'
            example:
              customerId: e3c53333-2552-46ce-b2de-752c094b9cf6
              externalId: ad690eac-8108-4f69-a37c-6c407999dd59
              person:
                firstName: Томас
                middleName: Брюс
                lastName: Уэйн
                phone: '+79991115500'
                email: batman@ya.ru
                companyName: Wayne Enterprises, Inc.
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpsertCustomerResponse'
              example:
                customerId: e3c53333-2552-46ce-b2de-752c094b9cf6
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/dates:
    post:
      tags:
        - IntegrationApi
      summary: >-
        Получение дат, на которые есть доступные интервалы времени для создания
        предварительной записи
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatesRequest'
            example:
              officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
              lineId: 33add1ef-2d42-4d67-b098-56d87a2f988f
              serviceId: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
              units: 2
              appointmentId: 75ee8a60-7cf6-4ecc-b17e-bb53db3035b4
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatesResponse'
              example:
                dates:
                  - date: '2023-05-11'
                    fromTime: '13:20'
                    toTime: '18:20'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/office:
    post:
      tags:
        - IntegrationApi
      summary: Получение информации о конкретном офисе обслуживания
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OfficeRequest'
            example:
              officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OfficeResponse'
              example:
                office:
                  id: 0fcab951-92e8-49a0-af78-f95c459f74bc
                  name: Главный офис МФЦ
                  city: Екатеринбург
                  address: ул. Ленина, д. 10
                  openTime: '08:00'
                  closeTime: '20:00'
                  latitude: 56.8355
                  longitude: 60.6057
                  tags:
                    - МФЦ
                    - г. Екатеринбург
                    - Физические лица
                  lines:
                    - id: 33add1ef-2d42-4d67-b098-56d87a2f988f
                      name: Физические лица
                      isActive: true
                      openTime: '08:00'
                      closeTime: '19:45'
                      isVisible: true
                      services:
                        - id: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
                          name: Оформление паспорта
                          maxUnits: 1
                          nearestDate: '2025-03-15'
                          nearestTime: '13:20'
                        - id: 33e8c7f0-9579-4c05-a205-34687731b830
                          name: Оформление СНИЛС
                          maxUnits: 1
                          nearestDate: '2025-03-15'
                          nearestTime: '13:20'
                      tags:
                        - Основная очередь
                        - Приём документов
                    - id: 93018719-e277-4fb6-915d-16a9df4c2b4c
                      name: Юридические лица
                      isActive: false
                      openTime: '09:00'
                      closeTime: '18:00'
                      isVisible: false
                      services:
                        - id: e20d6a52-81d5-4716-a3a9-096794e9dc7e
                          name: Регистрация ООО
                          maxUnits: 1
                          nearestDate: '2025-05-10'
                          nearestTime: '10:00'
                      tags:
                        - Бизнес
                        - Юридическое сопровождение
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/office/statistics:
    post:
      tags:
        - IntegrationApi
      summary: Статистическая информация об офисе
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetOfficeStatisticsRequest'
            example:
              officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetOfficeStatisticsResponse'
              example:
                officeInfo:
                  id: 0fcab951-92e8-49a0-af78-f95c459f74bc
                  name: Главный офис МФЦ
                  city: Екатеринбург
                  address: ул. Ленина, д. 10
                  openTime: '08:00'
                  closeTime: '20:00'
                  latitude: 56.8355
                  longitude: 60.6057
                linesStatistics:
                  - lineName: 33add1ef-2d42-4d67-b098-56d87a2f988f
                    customersInLine: 5
                    customersInService: 1
                    customersFinished: 2
                    loadLevel: Low
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/offices:
    post:
      tags:
        - IntegrationApi
      summary: Получение информации о всех доступных офисах обслуживания
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OfficesRequest'
            example:
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OfficesResponse'
              example:
                offices:
                  - id: 0fcab951-92e8-49a0-af78-f95c459f74bc
                    name: Главный офис МФЦ
                    city: Екатеринбург
                    address: ул. Ленина, д. 10
                    openTime: '08:00'
                    closeTime: '20:00'
                    latitude: 56.8355
                    longitude: 60.6057
                    tags:
                      - МФЦ
                      - г. Екатеринбург
                      - Физические лица
                    lines:
                      - id: 33add1ef-2d42-4d67-b098-56d87a2f988f
                        name: Физические лица
                        isActive: true
                        openTime: '08:00'
                        closeTime: '19:45'
                        isVisible: true
                        services:
                          - id: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
                            name: Оформление паспорта
                            maxUnits: 1
                            nearestDate: '2025-03-15'
                            nearestTime: '13:20'
                          - id: 33e8c7f0-9579-4c05-a205-34687731b830
                            name: Оформление СНИЛС
                            maxUnits: 1
                            nearestDate: '2025-03-15'
                            nearestTime: '13:20'
                        tags:
                          - Основная очередь
                          - Приём документов
                      - id: 93018719-e277-4fb6-915d-16a9df4c2b4c
                        name: Юридические лица
                        isActive: false
                        openTime: '09:00'
                        closeTime: '18:00'
                        isVisible: false
                        services:
                          - id: e20d6a52-81d5-4716-a3a9-096794e9dc7e
                            name: Регистрация ООО
                            maxUnits: 1
                            nearestDate: '2025-05-10'
                            nearestTime: '10:00'
                        tags:
                          - Бизнес
                          - Юридическое сопровождение
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/ping:
    get:
      tags:
        - IntegrationApi
      summary: Проверка доступности сервиса
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/process/activeTalon:
    post:
      tags:
        - IntegrationApi
      summary: >-
        Получение информации об обслуживаемой на текущий момент оператором
        записи
      requestBody:
        description: test
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ActiveTalonRequest'
            example:
              operator: operator@example.com
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActiveTalonResponse'
              example:
                talon:
                  id: a3b09ecb-0715-459e-bc49-8de76f606490
                  fio: Уэйн Томас Брюс
                  phone: '+79991115500'
                  email: batman@ya.ru
                  officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
                  lineId: 33add1ef-2d42-4d67-b098-56d87a2f988f
                  serviceName: Оформление паспорта
                  units: 10
                  creationTimeUtc: '2023-05-11T12:50:22'
                  appointmentTimeUtc: '2023-05-11T12:50:22'
                  operatorLogin: operator@example.com
                  operatorFio: Оператор Оператов Операторович
                  servicePoint: Окно 1
                  callTimeUtc: '2023-05-11T12:50:22'
                  serviceStartTimeUtc: '2023-05-11T12:50:22'
                  complexity: Simple
                  issuePlace: Booking
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/service/nearestTimeSlots:
    post:
      tags:
        - IntegrationApi
      summary: >-
        Получение ближайших офисов и ближайших временных интервалов, доступных
        для предварительной записи на выбранную услугу с заданным количеством
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NearestTimeSlotsRequest'
            example:
              serviceId: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
              serviceUnits: 10
              latitude: 56.8355
              longitude: 60.6057
              officeCount: 2
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NearestTimeSlotsResponse'
              example:
                serviceName: Оформление паспорта
                serviceUnits: 1
                offices:
                  - officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
                    officeName: Главный офис МФЦ
                    address: ул. Ленина, д. 10
                    city: Екатеринбург
                    latitude: 56.8355
                    longitude: 60.6057
                    lineId: 33add1ef-2d42-4d67-b098-56d87a2f988f
                    lineName: Физические лица
                    serviceId: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
                    nearestDate: '2025-03-15'
                    nearestTime: '13:20'
                    distance: 100
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
  /integration/api/v1/timeSlots:
    post:
      tags:
        - IntegrationApi
      summary: >-
        Получение временных интервалов, доступных для предварительной записи на
        выбранную услугу
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TimeSlotsRequest'
            example:
              officeId: 0fcab951-92e8-49a0-af78-f95c459f74bc
              lineId: 33add1ef-2d42-4d67-b098-56d87a2f988f
              serviceId: da204cee-98ad-4a3e-872d-9f9b7c5d89e7
              units: 10
              date: '2023-05-11'
              appointmentId: 75ee8a60-7cf6-4ecc-b17e-bb53db3035b4
              apiKey: 3dfdc1ed-ce72-46d1-89c9-376df0f83237
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimeSlotsResponse'
              example:
                timeSlots:
                  - id: 123245346346
                    startTime: '13:20'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IError'
        '403':
          description: Возвращается если переданный API ключ некорректен
components:
  schemas:
    ActiveTalonRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        operator:
          type: string
          description: "ФИО или email оператора.\r\n- Если передается ФИО, система ищет оператора, у которого ФИО полностью совпадает с переданным значением.\r\n- Если передается email, система ищет оператора, у которого логин (email) полностью совпадает с переданным значением."
          nullable: true
      additionalProperties: false
    ActiveTalonResponse:
      type: object
      properties:
        talon:
          $ref: '#/components/schemas/Talon'
      additionalProperties: false
    Appointment:
      type: object
      properties:
        id:
          type: string
          description: Идентификатор записи.
          nullable: true
        shortCode:
          type: string
          description: Короткий код записи.
          nullable: true
        affiliatedApplicant:
          $ref: '#/components/schemas/Person'
        officeId:
          type: string
          description: Идентификатор места, в котором осуществляется запись.
          nullable: true
        lineId:
          type: string
          description: Идентификатор очереди.
          nullable: true
        date:
          type: string
          description: Дата визита в формате ГГГГ-ММ-ДД.
          nullable: true
        time:
          type: string
          description: Время визита в формате ЧЧ:ММ.
          nullable: true
        serviceId:
          type: string
          description: Идентификатор услуги, на которую оформлена запись.
          nullable: true
        serviceName:
          type: string
          description: Название услуги.
          nullable: true
        units:
          type: integer
          description: Количество единиц услуги, указанное пользователем при записи.
          format: int32
        comment:
          type: string
          description: Не актуальный параметр.
          nullable: true
      additionalProperties: false
    AppointmentFinalState:
      enum:
        - CancelledByCustomer
        - RemovedByOperator
        - Finished
      type: string
    AppointmentHistoryItem:
      type: object
      properties:
        officeId:
          type: string
          description: Идентификатор места, в котором была запись.
          nullable: true
        officeName:
          type: string
          description: Наименование места.
          nullable: true
        officeAddress:
          type: string
          description: Адрес места.
          nullable: true
        date:
          type: string
          description: Дата визита в формате ГГГГ-ММ-ДД.
          nullable: true
        time:
          type: string
          description: Время визита в формате ЧЧ:ММ.
          nullable: true
        serviceName:
          type: string
          description: Название услуги.
          nullable: true
        units:
          type: integer
          description: Количество единиц услуги, указанное пользователем при записи.
          format: int32
        affiliatedApplicant:
          $ref: '#/components/schemas/Person'
        finalState:
          $ref: '#/components/schemas/AppointmentFinalState'
      additionalProperties: false
    BookingDate:
      type: object
      properties:
        date:
          type: string
          description: "Дата, доступная для записи на указанную услугу.\r\n\r\nФормат: год-месяц-день, например 2023-05-11."
          nullable: true
        fromTime:
          type: string
          description: "Самое раннее время, доступное для записи.\r\n\r\nФормат: час:минуты, например 13:20."
          nullable: true
        toTime:
          type: string
          description: "Самое позднее время, доступное для записи.\r\n\r\nФормат: час:минуты, например 18:20."
          nullable: true
      additionalProperties: false
    CancelAppointmentRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        appointmentId:
          type: string
          description: "Идентификатор записи, которую необходимо изменить.\r\n\r\nЕсли хотим найти существующую запись среди всех записей заявителя отменить ее - получаем идентификатор из метода \"Получение данных о заявителе,\r\nего активных записях и истории прошлых записей\" (поле appointments.id).\r\n\r\nили\r\n\r\nЕсли только что создали запись и хотим сразу отменить её - получаем идентификатор из метода \"Создание записи\" (поле appointments.id)."
          nullable: true
      additionalProperties: false
    CancelAppointmentResponse:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Признак успешности отмены записи. true, если запись успешно
            отменена.
        successMessage:
          type: string
          description: >-
            В случае успешной отмены записи, в данном поле будет сообщение для
            пользователя.
          nullable: true
        failReasonMessage:
          type: string
          description: >-
            В случае неудачи, в данном поле будет сообщение о причине. Например,
            "Запись уже была отменена ранее".
          nullable: true
      additionalProperties: false
    CreateAppointmentRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        customerId:
          type: string
          description: >-
            Внутрисистемный идентификатор заявителя. Из метода "Создание или
            обновление данных о заявителе".
          nullable: true
        affiliatedApplicant:
          $ref: '#/components/schemas/Person'
        officeId:
          type: string
          description: >-
            Идентификатор места, в котором оформляется запись. Получается из
            метода "Получение информации о всех доступных местах" (поле
            offices.id).
          nullable: true
        lineId:
          type: string
          description: >-
            Идентификатор очереди, в рамках которой оформляется запись.
            Получается из метода "Получение информации о всех доступных местах"
            (поле lines.id внутри объекта offices).
          nullable: true
        serviceId:
          type: string
          description: >-
            Идентификатор услуги, для которой создается запись. Получается из
            метода "Получение информации о всех доступных местах" (поле
            services.id внутри объекта lines).
          nullable: true
        units:
          type: integer
          description: Количество единиц услуги, указанное пользователем при записи.
          format: int32
        comment:
          type: string
          description: Не актуальный параметр.
          nullable: true
        timeSlotId:
          type: integer
          description: >-
            Идентификатор выбранного временного слота для записи. Получается из
            метода "Получение доступных временных интервалов для записи" (поле
            timeSlots.id)
          format: int64
        deviceType:
          $ref: '#/components/schemas/DeviceType'
      additionalProperties: false
    CreateAppointmentResponse:
      type: object
      properties:
        appointment:
          $ref: '#/components/schemas/Appointment'
        success:
          type: boolean
          description: "Признак успешности создания записи.\r\n\r\ntrue, если создание прошло успешно, иначе false"
        successMessage:
          type: string
          description: Сообщение для пользователя в случае успешного создания.
          nullable: true
        failReasonMessage:
          type: string
          description: >-
            Сообщение о причине неудачного создания. Например, "К сожалению,
            указанное время уже было кем-то занято".
          nullable: true
      additionalProperties: false
    DatesRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        officeId:
          type: string
          description: >-
            Идентификатор запрашиваемого места. Из метода “Получение информации
            о всех доступных местах” поле offices.id
          nullable: true
        lineId:
          type: string
          description: >-
            Идентификатор выбранной очереди при создании записи. Из метода
            “Получение информации о всех доступных местах” поле lines.id
          nullable: true
        serviceId:
          type: string
          description: >-
            Идентификатор выбранной услуги, для которой необходимо получить
            доступные даты и время записи. Из метода “Получение информации о
            всех доступных местах” поле services.id
          nullable: true
        units:
          type: integer
          description: >-
            Количество единиц услуги, указанное пользователем при записи. Если
            параметр не задан, будет выполнен поиск доступных дат для одной
            единицы услуги.
          format: int32
          nullable: true
        appointmentId:
          type: string
          description: "Идентификатор существующей записи. Передается, если необходимо изменить дату или время уже созданной записи.\r\n\r\nЕсли редактируем существующую запись - получаем идентификатор из метода \"Получение данных о заявителе, его активных записях и истории прошлых записей\" (поле appointments.id).\r\n\r\nили\r\n\r\nЕсли создаем запись - получаем идентификатор из метода \"Создание записи\" (поле appointments.id)."
          nullable: true
      additionalProperties: false
    DatesResponse:
      type: object
      properties:
        dates:
          type: array
          items:
            $ref: '#/components/schemas/BookingDate'
          description: "Список дат, доступных для записи на указанную услугу. Отсортирован по возрастанию.\r\n\r\nФормат: год-месяц-день, например 2023-05-11."
          nullable: true
      additionalProperties: false
    DeviceType:
      enum:
        - Browser
        - Android
        - iOS
      type: string
    GetAppointmentRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        appointmentId:
          type: string
          description: "Идентификатор записи.\r\n\r\nЕсли хотим найти существующую запись среди всех записей заявителя - получаем идентификатор из метода \"Получение данных о заявителе, его активных записях и истории прошлых записей\" (поле appointments.id).\r\n\r\nили\r\n\r\nЕсли только что создали запись - получаем идентификатор из метода \"Создание записи\" (поле appointments.id)."
          nullable: true
        loadDeleted:
          type: boolean
          description: >-
            Нужно ли искать запись среди ранее удаленных. Данный функционал не
            работает.
      additionalProperties: false
    GetAppointmentResponse:
      type: object
      properties:
        isDeleted:
          type: boolean
          description: Признак удаления записи. true, если запись было удалена.
        customer:
          $ref: '#/components/schemas/Person'
        appointment:
          $ref: '#/components/schemas/Appointment'
      additionalProperties: false
    GetCustomerRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        customerId:
          type: string
          description: >-
            Внутрисистемный идентификатор заявителя. Из метода "Создание или
            обновление данных о заявителе".
          nullable: true
        historyDepthInMonths:
          type: integer
          description: >-
            Глубина загрузки истории записей в месяцах. Например, если передано
            значение 6, то в ответе вернется история за последние полгода.
          format: int32
      additionalProperties: false
    GetCustomerResponse:
      type: object
      properties:
        customer:
          $ref: '#/components/schemas/Person'
        appointments:
          type: array
          items:
            $ref: '#/components/schemas/Appointment'
          description: >-
            Список активных записей. Упорядочен по дате и времени планируемого
            визита.
          nullable: true
        history:
          type: array
          items:
            $ref: '#/components/schemas/AppointmentHistoryItem'
          description: История записей. Упорядочена по дате посещения в обратном порядке.
          nullable: true
      additionalProperties: false
    GetOfficeStatisticsRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        officeId:
          type: string
          description: >-
            Идентификатор запрашиваемого места. Получается из метода "Получение
            информации о всех доступных местах" (поле offices.id).
          nullable: true
      additionalProperties: false
    GetOfficeStatisticsResponse:
      type: object
      properties:
        officeInfo:
          $ref: '#/components/schemas/OfficeInfo'
        linesStatistics:
          type: array
          items:
            $ref: '#/components/schemas/LineStatistics'
          description: Список очередей со статистикой.
          nullable: true
      additionalProperties: false
    IError:
      type: object
      properties:
        type:
          type: string
          nullable: true
          readOnly: true
        data:
          type: object
          additionalProperties: {}
          nullable: true
          readOnly: true
      additionalProperties: false
    Line:
      type: object
      properties:
        id:
          type: string
          description: Уникальный идентификатор очереди.
          nullable: true
        name:
          type: string
          description: >-
            Название очереди. Данные берутся из настройки очереди, параметр
            “Название”.
          nullable: true
        isActive:
          type: boolean
          description: "Активна ли очередь.\r\n1. Условия, при которых очередь считается неактивной:\r\n  - Место имеет выходной день (OffDay):\r\n\r\n    Если у места, к которому относится очередь, установлен выходной день (OffDay), то очередь считается неактивной.\r\n  - Дискретная очередь с количеством позиций > 9900:\r\n\r\n    Если очередь является дискретной (работает с фиксированным количеством позиций) и количество позиций превышает 9900, то очередь считается неактивной.\r\n  - Нет открытых точек обслуживания:\r\n\r\n    Если ни одна из точек обслуживания, связанных с очередью, не открыта, то очередь считается неактивной.\r\n2. Условия, при которых точка обслуживания считается активной:\r\n  - Поддержка PostponedCall (если пользователь выбрал конкретное время при записи):\r\n\r\n    Если очередь поддерживает функционал PostponedCall, то точка обслуживания считается активной, если текущее время находится в интервале:\r\n    - От времени открытия предзаписи.\r\n    - До времени закрытия точки обслуживания.\r\n  - Текущее время находится в рабочем интервале точки обслуживания:\r\n\r\n    Точка обслуживания считается активной, если текущее время находится между временем открытия и временем закрытия точки. При этом точка должна быть открыта и не находиться в процессе закрытия.\r\n  - Наличие хотя бы одной активной точки обслуживания:\r\n\r\n    Если хотя бы одна точка обслуживания, связанная с очередью, активна в текущий момент, то очередь считается активной."
        openTime:
          type: string
          description: Время открытия очереди. Берется из настроек очереди (режим работы).
          nullable: true
        closeTime:
          type: string
          description: Время закрытия очереди. Берется из настроек очереди (режим работы).
          nullable: true
        isVisible:
          type: boolean
          description: >-
            Видимость очереди для записи через веб-портал. Если активно, клиенты
            могут записываться через браузер на компьютере или другом
            устройстве. Берется из настроек очереди (параметр "веб-портал для
            записи").
        services:
          type: array
          items:
            $ref: '#/components/schemas/Service'
          description: >-
            Упорядоченный список услуг, доступных в данной очереди. Берется из
            настроек очереди раздел: услуги.
          nullable: true
        tags:
          type: array
          items:
            type: string
          description: "Список тегов, относящихся к очереди (например, \"МФЦ г. Екатеринбурга для физических лиц\").\r\nДанные берутся из раздела теги. У тега указывается место и очередь."
          nullable: true
      additionalProperties: false
      description: Очередь.
    LineLoadLevel:
      enum:
        - Closed
        - Low
        - Medium
        - High
      type: string
    LineStatistics:
      type: object
      properties:
        lineName:
          type: string
          description: Название очереди.
          nullable: true
        customersInLine:
          type: integer
          description: >-
            Количество заявителей, которые записаны на текущий день и еще не
            начинают обслуживание. Соответствует параметру "В очереди" из
            аналитической панели. Если значение недоступно, возвращается 0.
          format: int32
        customersInService:
          type: integer
          description: >-
            Количество заявителей, которые в настоящий момент обслуживаются.
            Соответствует параметру "Обслуживается" из аналитической панели.
            Если значение недоступно, возвращается 0.
          format: int32
        customersFinished:
          type: integer
          description: >-
            Количество заявителей, которые завершили обслуживание в текущий
            день. Если значение недоступно, возвращается 0.
          format: int32
        loadLevel:
          $ref: '#/components/schemas/LineLoadLevel'
      additionalProperties: false
    NearestTimeSlotsRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        serviceId:
          type: string
          description: >-
            Идентификатор услуги, для которой требуется получить доступные
            временные слоты для записи. Из метода “Получение информации о всех
            доступных местах” поле services.id
          nullable: true
        serviceUnits:
          type: integer
          description: Количество единиц услуги, на которое требуется записаться.
          format: int32
        latitude:
          type: number
          description: Широта местоположения пользователя.
          format: double
          nullable: true
        longitude:
          type: number
          description: Долгота местоположения пользователя.
          format: double
          nullable: true
        officeCount:
          type: integer
          description: >-
            Максимальное количество мест, в которых есть свободные слоты для
            записи на указанную услугу.
          format: int32
          nullable: true
      additionalProperties: false
    NearestTimeSlotsResponse:
      type: object
      properties:
        serviceName:
          type: string
          description: Наименование услуги, выбранной пользователем при записи.
          nullable: true
        serviceUnits:
          type: integer
          description: Количество единиц услуги, указанное пользователем при записи.
          format: int32
        offices:
          type: array
          items:
            $ref: '#/components/schemas/OfficeWithTimeSlot'
          description: "Список мест, где найдено свободное время для записи на указанную услугу с указанным количеством. Сортировка зависит от наличия геопозиции в теле запроса:\r\n\r\nесли указана – по расстоянию,\r\n\r\nесли нет – по ближайшему доступному времени и алфавиту.\r\n\r\nКоличество элементов не превышает указанного в Тело запросае ограничения."
          nullable: true
      additionalProperties: false
    Office:
      type: object
      properties:
        id:
          type: string
          description: Уникальный идентификатор места.
          nullable: true
        name:
          type: string
          description: >-
            Название места. Данные берутся из настройки места, параметр
            “Название”.
          nullable: true
        city:
          type: string
          description: Город. Данные берутся из настройки места, параметр “Город”.
          nullable: true
        address:
          type: string
          description: Адрес. Данные берутся из настройки места, параметр “Адрес”.
          nullable: true
        openTime:
          type: string
          description: "Время открытия места. Определяется как самое раннее время начала работы из всех очередей.\r\nНачало работы очереди это самое раннее время работы из точек обслуживания."
          nullable: true
        closeTime:
          type: string
          description: "Время закрытия места. Определяется как самое позднее время окончания работы из всех очередей.\r\nОкончание работы очереди это самое позднее время работы из точек обслуживания."
          nullable: true
        latitude:
          type: number
          description: Широта. Данные берутся из настройки места, параметр “Широта”.
          format: double
        longitude:
          type: number
          description: Долгота. Данные берутся из настройки места, параметр “Долота”.
          format: double
        tags:
          type: array
          items:
            type: string
          description: "Список тегов, относящихся к месту (например, \"МФЦ г. Екатеринбурга для физических лиц\").\r\nДанные берутся из раздела теги. У тега указывается место и очередь."
          nullable: true
        lines:
          type: array
          items:
            $ref: '#/components/schemas/Line'
          description: "Список очередей, доступных в данном месте.\r\nНапример: \"Физические лица\", \"Юридические лица\". Очереди создаются внутри места."
          nullable: true
      additionalProperties: false
      description: Офис обслуживания
    OfficeInfo:
      type: object
      properties:
        id:
          type: string
          description: Уникальный идентификатор места.
          nullable: true
        name:
          type: string
          description: >-
            Название места. Данные берутся из настройки места, параметр
            “Название”.
          nullable: true
        city:
          type: string
          description: Город. Данные берутся из настройки места, параметр “Город”.
          nullable: true
        address:
          type: string
          description: Адрес. Данные берутся из настройки места, параметр “Адрес”.
          nullable: true
        openTime:
          type: string
          description: >-
            Время открытия места. Определяется как самое раннее время начала
            работы из всех очередей. Начало работы очереди это самое раннее
            время работы из точек обслуживания.
          nullable: true
        closeTime:
          type: string
          description: >-
            Время закрытия места. Определяется как самое позднее время окончания
            работы из всех очередей. Окончание работы очереди это самое позднее
            время работы из точек обслуживания.
          nullable: true
        latitude:
          type: number
          description: Широта. Данные берутся из настройки места, параметр “Широта”.
          format: double
        longitude:
          type: number
          description: Долгота. Данные берутся из настройки места, параметр “Долота”.
          format: double
      additionalProperties: false
      description: Офис обслуживания
    OfficeRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        officeId:
          type: string
          description: >-
            Идентификатор запрашиваемого места. Из метода “Получение информации
            о всех доступных местах” поле offices.id
          nullable: true
      additionalProperties: false
    OfficeResponse:
      type: object
      properties:
        office:
          $ref: '#/components/schemas/Office'
      additionalProperties: false
    OfficeWithTimeSlot:
      type: object
      properties:
        officeId:
          type: string
          description: Уникальный идентификатор места.
          nullable: true
        officeName:
          type: string
          description: >-
            Название места. Данные берутся из настройки места, параметр
            “Название”.
          nullable: true
        address:
          type: string
          description: Адрес. Данные берутся из настройки места, параметр “Адрес”.
          nullable: true
        city:
          type: string
          description: Город. Данные берутся из настройки места, параметр “Город”.
          nullable: true
        latitude:
          type: number
          description: Широта. Данные берутся из настройки места, параметр “Широта”.
          format: double
        longitude:
          type: number
          description: Долгота. Данные берутся из настройки места, параметр “Долота”.
          format: double
        lineId:
          type: string
          description: Идентификатор очереди в данном месте.
          nullable: true
        lineName:
          type: string
          description: Наименование очереди.
          nullable: true
        serviceId:
          type: string
          description: Идентификатор запрашиваемой услуги в данном месте.
          nullable: true
        nearestDate:
          type: string
          description: >-
            Дата ближайшего свободного временного интервала для записи. Формат:
            год-месяц-день (например, 2023-05-11).
          nullable: true
        nearestTime:
          type: string
          description: >-
            Время ближайшего доступного временного интервала для записи. Формат:
            час:минуты (например, 13:20).
          nullable: true
        distance:
          type: number
          description: >-
            Расстояние до места от запрошенной геопозиции. Если геопозиция не
            указана, значение равно 0.
          format: double
      additionalProperties: false
    OfficesRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
      additionalProperties: false
    OfficesResponse:
      type: object
      properties:
        offices:
          type: array
          items:
            $ref: '#/components/schemas/Office'
          description: Список доступных мест.
          nullable: true
      additionalProperties: false
    Person:
      type: object
      properties:
        firstName:
          type: string
          description: Имя заявителя.
          nullable: true
        middleName:
          type: string
          description: Отчество заявителя.
          nullable: true
        lastName:
          type: string
          description: Фамилия заявителя.
          nullable: true
        phone:
          type: string
          description: Контактный номер телефона.
          nullable: true
        email:
          type: string
          description: Адрес электронной почты.
          nullable: true
        companyName:
          type: string
          description: Название организации (для юридических лиц).
          nullable: true
      additionalProperties: false
    Service:
      type: object
      properties:
        id:
          type: string
          description: Уникальный идентификатор услуги.
          nullable: true
        name:
          type: string
          description: >-
            Название услуги. Берется из настроек очереди раздел: услуги,
            название параметра “Название услуги”.
          nullable: true
        maxUnits:
          type: integer
          description: "Максимальное значение, которое пользователь может указать в поле выбора количества при записи на услугу.\r\nБерется из настроек очереди раздел: услуги, название параметра “Максимальное значение поля количество”."
          format: int32
        nearestDate:
          type: string
          description: >-
            Ближайшая доступная дата для записи на услугу (формат: YYYY-MM-DD,
            например, "2023-05-11").
          nullable: true
        nearestTime:
          type: string
          description: >-
            Ближайшее доступное время записи на услугу для даты nearestDate
            (формат: HH:MM, например, "13:20").
          nullable: true
      additionalProperties: false
    Talon:
      type: object
      properties:
        id:
          type: string
          description: Идентификатор записи.
          nullable: true
        fio:
          type: string
          description: ФИО заявителя.
          nullable: true
        phone:
          type: string
          description: Номер телефона заявителя, если был указан при записи.
          nullable: true
        email:
          type: string
          description: Email заявителя, если был указан при записи.
          nullable: true
        officeId:
          type: string
          description: Идентификатор места.
          nullable: true
        lineId:
          type: string
          description: Идентификатор очереди.
          nullable: true
        serviceName:
          type: string
          description: Наименование услуги.
          nullable: true
        units:
          type: integer
          description: Количество единиц услуги, указанное пользователем при записи.
          format: int32
        creationTimeUtc:
          type: string
          description: >-
            UTC дата и время создания записи. Округляется до секунд. Передается
            в формате ISO 8601 (например, 2023-05-03T08:21:01Z).
          format: date-time
        appointmentTimeUtc:
          type: string
          description: >-
            UTC дата и время приёма. Округляется до секунд. Передается в формате
            ISO 8601 (например, 2023-05-11T12:50:22Z).
          format: date-time
        operatorLogin:
          type: string
          description: Логин (email) оператора.
          nullable: true
        operatorFio:
          type: string
          description: ФИО оператора, который вызвал и обслужил запись.
          nullable: true
        servicePoint:
          type: string
          description: Название окна обслуживания.
          nullable: true
        callTimeUtc:
          type: string
          description: >-
            UTC дата и время вызова к окну обслуживания. Округляется до секунд.
            Передается в формате ISO 8601 (например, 2023-05-11T12:50:22Z).
          format: date-time
        serviceStartTimeUtc:
          type: string
          description: >-
            UTC дата и время начала обслуживания, если оно началось. Округляется
            до секунд. Передается в формате ISO 8601 (например,
            2023-05-11T12:50:22Z).
          format: date-time
          nullable: true
        complexity:
          $ref: '#/components/schemas/TalonComplexity'
        issuePlace:
          $ref: '#/components/schemas/TalonIssuePlace'
      additionalProperties: false
    TalonComplexity:
      enum:
        - Simple
        - Complex
      type: string
    TalonIssuePlace:
      enum:
        - Office
        - Booking
      type: string
    TimeSlot:
      type: object
      properties:
        id:
          type: integer
          description: Идентификатор временного слота.
          format: int64
        startTime:
          type: string
          description: 'Доступное время для записи. Формат: час:минуты, например 13:20.'
          nullable: true
      additionalProperties: false
    TimeSlotsRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        officeId:
          type: string
          description: >-
            Идентификатор места, в котором осуществляется запись. Из метода
            “Получение информации о всех доступных местах” поле offices.id
          nullable: true
        lineId:
          type: string
          description: >-
            Идентификатор выбранной очереди при создании записи. Из метода
            “Получение информации о всех доступных местах” поле lines.id
          nullable: true
        serviceId:
          type: string
          description: >-
            Идентификатор выбранной услуги, для которой необходимо получить
            доступные даты и время записи. Из метода “Получение информации о
            всех доступных местах” поле services.id
          nullable: true
        units:
          type: integer
          description: Количество единиц услуги, указанное пользователем при записи.
          format: int32
        date:
          type: string
          description: "Дата, на которую требуется получить доступное время записи.\r\n\r\nФормат: год-месяц-день (например, 2023-05-11)"
          nullable: true
        appointmentId:
          type: string
          description: "Идентификатор существующей записи. Передается, если необходимо изменить дату или время уже созданной записи.\r\n\r\nЕсли редактируем существующую запись - получаем идентификатор из метода \"Получение данных о заявителе, его активных записях и истории прошлых записей\" (поле appointments.id).\r\n\r\nили\r\n\r\nЕсли создаем запись - получаем идентификатор из метода \"Создание записи\" (поле appointments.id)."
          nullable: true
      additionalProperties: false
    TimeSlotsResponse:
      type: object
      properties:
        timeSlots:
          type: array
          items:
            $ref: '#/components/schemas/TimeSlot'
          description: >-
            Список доступных временных слотов для записи на выбранную услугу и
            дату. Отсортирован по возрастанию времени.
          nullable: true
      additionalProperties: false
    UpdateAppointmentRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        appointmentId:
          type: string
          description: "Идентификатор существующей записи. Передается, если необходимо изменить дату или время уже созданной записи.\r\n\r\nЕсли редактируем существующую запись - получаем идентификатор из метода \"Получение данных о заявителе, его активных записях и истории прошлых записей\" (поле appointments.id).\r\n\r\nили\r\n\r\nЕсли создаем запись - получаем идентификатор из метода \"Создание записи\" (поле appointments.id)."
          nullable: true
        officeId:
          type: string
          description: "Идентификатор офиса, который был выбран при изменении записи.\r\n\r\nПолучается из метода \"Получение информации о всех доступных местах\" (поле offices.id)."
          nullable: true
        lineId:
          type: string
          description: "Идентификатор очереди, которая была выбрана при изменении записи.\r\n\r\nПолучается из метода \"Получение информации о всех доступных местах\" (поле lines.id внутри объекта offices)."
          nullable: true
        serviceId:
          type: string
          description: "Идентификатор услуги, которая была выбрана при изменении записи.\r\n\r\nПолучается из метода \"Получение информации о всех доступных местах\" (поле services.id внутри объекта lines)."
          nullable: true
        units:
          type: integer
          description: Количество единиц услуги, указанное при изменении записи.
          format: int32
        comment:
          type: string
          description: Не актуальный параметр.
          nullable: true
        timeSlotId:
          type: integer
          description: "Идентификатор временного интервала, выбранного при изменении записи.\r\n\r\nПолучается из метода \"Получение доступных временных интервалов для записи\" (поле timeSlots.id)."
          format: int64
        deviceType:
          $ref: '#/components/schemas/DeviceType'
      additionalProperties: false
    UpdateAppointmentResponse:
      type: object
      properties:
        appointment:
          $ref: '#/components/schemas/Appointment'
        success:
          type: boolean
          description: true, если изменение записи прошло успешно.
        successMessage:
          type: string
          description: >-
            В случае удачного изменения записи, содержит сообщение для
            пользователя.
          nullable: true
        failReasonMessage:
          type: string
          description: >-
            В случае неудачного изменения записи, содержит сообщение о причине
            ошибки. Например, "К сожалению, указанное время уже было кем-то
            занято".
          nullable: true
      additionalProperties: false
    UpsertCustomerRequest:
      type: object
      properties:
        apiKey:
          type: string
          description: Ключ доступа к API.
          nullable: true
        customerId:
          type: string
          description: "Внутрисистемный идентификатор заявителя.\r\n\r\nnull если запись создается. Генерируется системой при создании нового заявителя через метод \"Создание или обновление данных о заявителе\"."
          nullable: true
        externalId:
          type: string
          description: "Внешний идентификатор заявителя, который соответствует DeviceId пользователя.\r\n\r\nИспользуется для поиска пользователя в системе, если customerId не был передан. Если пользователь не найден по externalId, создается новый пользователь.\r\n\r\nВажно отметить, что DeviceId нигде не возвращается в ответах API, поэтому получить его извне не представляется возможным."
          nullable: true
        person:
          $ref: '#/components/schemas/Person'
      additionalProperties: false
    UpsertCustomerResponse:
      type: object
      properties:
        customerId:
          type: string
          description: Внутрисистемный идентификатор заявителя.
          nullable: true
      additionalProperties: false
