В данный момент находиться в процессе разработки

API может (и будет) дополняться и изменяться в будущем


Доступно с версии 0.84 и выше


Чтобы включить API нужно прописать $conf{API_ENABLE} в файле config.pl

В системе реализован RESTfull интерфейс управления услугами и абонентами. Интерфейс находит по адресу api.cgi. Оправка, получение данных производится по протоколу HTTP POST/GET/PUT/DELETE. Все взаимодействие по интерфейсу выполняется по принципам REST (ресурс определяться по средствам задания имени в URL).

Для сохранение совместимости с стандартом REST все ключи автоматически переводятся в camelCase, но поскольку несоответствие названий в Базе Данных может усложнить разработку – существует возможность отключить такое превращение используя несколько вариантов:

  1. Параметр $conf{API_FILDS_CAMELIZE} в конфигурационном файле
  2. Задать в заголовках запроса CAMELIZE в соответствующие значение (имеет приоритет над значением в конфигурационном файле)
ЗначениеРезультат
1Все ключи превращаются в camelCase
0Ключи в исходном виде, как в базе данных (snake_case)


Авторизация

Для подтверждения личности при выполнении запросов, некоторые пути требуют соответствующий привилегии:

  • Авторизация администратора выполняется через API_KEY (можно задать в веб-интерфейсе). Ключ нужно передать в заголовке запроса KEY в значении API_KEY.
  • Пользователям нужно использовать идентификатор сессии (sid), передавая его значение в заголовке USERSID. Для получения sid можно
    воспользоваться авторизацией через API используя маршрут авторизация абонента (/users/login).

swagger: '2.0'
info:
  version: 1.0.0
  title: Abills admins API
host: demo.abills.net.ua:9443
basePath: /api.cgi
tags:
  - name: users
    description: Работа с пользователями
  - name: groups
    description: Группы пользователей
  - name: tp
    description: Тарифные планы
  - name: msgs
    description: Msgs
  - name: internet
    description: Internet
  - name: iptv
    description: Iptv
  - name: abon
    description: Abon
  - name: districts
    description: Районы
  - name: streets
    description: Улицы
  - name: builds
    description: Дома
  - name: payments
    description: Оплаты
  - name: fees
    description: Списания
  - name: online
    description: Сессии пользователя
  - name: version
    description: Версии
schemes:
  - https
paths:
  /users/login:
    post:
      tags:
        - users
      summary: Авторизация пользователя
      operationId: loginUser
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/UserLogin'
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/inline_response_200'
  /users/:
    post:
      tags:
        - users
      summary: Добавить нового пользователя
      operationId: addUser
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: Параметры, которые нужно указать
          required: true
          schema:
            $ref: '#/definitions/User'
      responses:
        '200':
          description: успешное выполнение
          schema:
            $ref: '#/definitions/UserCreated'
      security:
        - KEY: []
  /users/all:
    get:
      tags:
        - users
      summary: Получить всех пользователей
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: query
          name: fio
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: fio2
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: fio3
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: deposit
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: extDeposit
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: extBillId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: credit
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: creditDate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: loginStatus
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: phone
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: email
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: floor
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: entrance
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: addressFlat
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: pasportDate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: pasportNum
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: pasportGrant
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: city
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: zip
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: gid
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: companyId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: companyName
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: contractId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: contractSufix
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: contractDate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: expire
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: reduction
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: lastPayment
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: lastFees
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: registration
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: reductionDate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: comments
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: billId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: activate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: acceptRules
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: password
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: birthDate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: taxNumber
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: pageRows
          description: Количество записей
          type: integer
          default: 100000
        - in: query
          name: sort
          description: Сортировка по одному параметру выше
          type: string
      responses:
        '200':
          description: успешное выполнение
          schema:
            $ref: '#/definitions/UserList'
      security:
        - KEY: []
  /users/{UID}:
    get:
      tags:
        - users
      summary: Получить пользователя по UID
      description: Возвращает пользователя
      operationId: getUserByUID
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя в биллинге
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/User'
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
    put:
      tags:
        - users
      summary: Обновить информацию о пользователе
      operationId: updateUser
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователь
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/User'
      responses:
        '400':
          description: Invalid ID supplied
      security:
        - KEY: []
    delete:
      tags:
        - users
      summary: Удалить пользователя
      operationId: deleteUser
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя
          required: true
          type: integer
          format: int64
      responses:
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /users/{UID}/pi:
    get:
      tags:
        - users
      summary: Получить персональную информацию о пользователе
      description: Возвращает персональную информацию пользователя
      operationId: getUserPiByUID
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя в биллинге
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/UserPi'
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
    post:
      tags:
        - users
      summary: Добавление персональной информации пользователю
      operationId: addUserPi
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователь
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/UserPi'
      responses:
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
    put:
      tags:
        - users
      summary: Изменение персональной информации пользователю
      operationId: changeUserPi
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователь
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/UserPi'
      responses:
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /users/{UID}/contacts:
    get:
      tags:
        - users
      summary: Получить контакты пользователя по UID
      description: Возвращает контакты пользователя
      operationId: getUserContactsByUID
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя в биллинге
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/ContactsArray'
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
    post:
      tags:
        - users
      summary: Добавление контакта пользователю
      operationId: updateUserContact
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователь
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/User'
      responses:
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /users/{UID}/contacts/{ID}:
    put:
      tags:
        - users
      summary: Обновить контакт пользователю
      operationId: updateUserConctact
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователь
          required: true
          type: integer
          format: int64
        - name: ID
          in: path
          description: ID контакта
          required: true
          type: integer
          format: int64
      responses:
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
    delete:
      tags:
        - users
      summary: Удалить контакт пользователя
      operationId: deleteUserContact
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя
          required: true
          type: integer
          format: int64
        - name: ID
          in: path
          description: ID контакта
          required: true
          type: integer
          format: int64
      responses:
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /users/contacts:
    post:
      tags:
        - users
      summary: Получить контакты
      description: Возвращает контакты пользователей
      operationId: getContacts
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: Параметры для фильтрации контактов
          required: true
          schema:
            $ref: '#/definitions/Contacts'
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/ContactsArray'
      security:
        - KEY: []
  /users/internet/all:
    get:
      tags:
        - internet
      summary: Получить всех пользователей
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: query
          name: cid
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: cpe_mac
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: vlan
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: server_vlan
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0


        - in: query
          name: joinService
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: simultaneonsly
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: speed
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: nasId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: port
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: allFilterId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: filterId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: tpId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: tpNum
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: tpName
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: monthFee
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: abonDistribution
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: dayFee
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: personalTp
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: paymentType
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: disable
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: ipnActivate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: dayTrafLimit
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: weekTrafLimit
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: totalTrafLimit
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: feesMethod
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: nasIp
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: fio
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: fio2
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: fio3
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: deposit
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: extDeposit
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: extBillId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: credit
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: creditDate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: loginStatus
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: phone
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: email
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: floor
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: entrance
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: addressFlat
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: pasportDate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: pasportNum
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: pasportGrant
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: city
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: zip
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: gid
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: companyId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: companyName
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: contractId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: contractSufix
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: contractDate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: expire
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: reduction
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: lastPayment
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: lastFees
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: registration
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: reductionDate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: comments
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: billId
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: activate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: acceptRules
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: password
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: birthDate
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: taxNumber
          description: Параметр который возвращает биллинг
          type: boolean
          default: 0
        - in: query
          name: pageRows
          description: Количество записей
          type: integer
          default: 100000
        - in: query
          name: sort
          description: Сортировка по одному параметру выше
          type: string
      responses:
        '200':
          description: успешное выполнение
          schema:
            $ref: '#/definitions/UserInternetList'
      security:
        - KEY: [ ]
  /users/{UID}/internet:
    get:
      tags:
        - internet
      summary: Получить список ТП Internet пользователя
      description: Возвращает ТП интернет пользователя
      operationId: getUserInternetByUID
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя в биллинге
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/UserInternetList'
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
    post:
      tags:
        - internet
      summary: Добавление ТП Internet пользователю
      operationId: addUserInternet
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователь
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/UserInternet'
      responses:
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /users/{UID}/internet/{ID}:
    get:
      tags:
        - internet
      summary: Информация об интернет услуге пользователя по ID услуги
      operationId: internetInfoUser
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователь
          required: true
          type: integer
          format: int64
        - name: ID
          in: path
          description: ID услуги
          required: true
          type: integer
          format: int64
      responses:
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /users/{UID}/iptv:
    get:
      tags:
        - iptv
      summary: Получить список ТП Iptv пользователя
      description: Возвращает ТП Iptv пользователя
      operationId: getUserIptvByUID
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя в биллинге
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/UserIptvList'
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /users/{UID}/iptv/{ID}:
    get:
      tags:
        - iptv
      summary: Информация об Iptv услуге пользователя по ID услуги
      operationId: iptvInfoUser
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователь
          required: true
          type: integer
          format: int64
        - name: ID
          in: path
          description: ID услуги
          required: true
          type: integer
          format: int64
      responses:
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /msgs/:
    post:
      tags:
        - msgs
      summary: Добавить сообщение
      operationId: addMsgs
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: Параметры, которые нужно указать
          required: true
          schema:
            $ref: '#/definitions/Msgs'
      responses:
        '200':
          description: успешное выполнение
          schema:
            $ref: '#/definitions/ApiSuccessAddResponse'
      security:
        - KEY: []
  /msgs/{ID}:
    get:
      tags:
        - msgs
      summary: Получить сообщение по ID
      description: Возвращает сообщение
      operationId: getMsgsInfoByID
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID сообщения
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/Msgs'
        '404':
          description: Сообщение не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /msgs/list:
    post:
      tags:
        - msgs
      summary: Получить список сообщений
      operationId: msgsList
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: Параметры, по которым можно фильтровать сообщения
          required: true
          schema:
            $ref: '#/definitions/Msgs'
      responses:
        '200':
          description: успешное выполнение
          schema:
            $ref: '#/definitions/ApiSuccessAddResponse'
      security:
        - KEY: []
  /msgs/{ID}/reply:
    get:
      tags:
        - msgs
      summary: Ответы на сообщение
      operationId: repliesListToMsgs
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID сообщения
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: успешное выполнение
          schema:
            $ref: '#/definitions/MsgsRepliesList'
      security:
        - KEY: []
    post:
      tags:
        - msgs
      summary: Ответить на сообщение
      operationId: addReplyToMsgs
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID сообщения
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          description: Параметры, которые нужно указать
          required: true
          schema:
            $ref: '#/definitions/MsgsReply'
      responses:
        '200':
          description: успешное выполнение
          schema:
            $ref: '#/definitions/ApiSuccessAddResponse'
      security:
        - KEY: []
  /msgs/reply/{REPLY_ID}/attachment:
    post:
      tags:
        - msgs
      summary: Прикрепление файла к ответу
      operationId: addAttachmentToReply
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: REPLY_ID
          in: path
          description: ID ответа на сообщение
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          description: Параметры, которые нужно указать
          required: true
          schema:
            $ref: '#/definitions/MsgsReplyAttachment'
      responses:
        '200':
          description: успешное выполнение
          schema:
            $ref: '#/definitions/ApiSuccessAddResponse'
      security:
        - KEY: []
  /msgs/chapters:
    get:
      tags:
        - msgs
      summary: Получить список разделов
      operationId: chaptersList
      consumes:
        - application/json
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: успешное выполнение
          schema:
            $ref: '#/definitions/MsgsChapter'
      security:
        - KEY: []
  /groups:
    get:
      tags:
        - groups
      summary: Получить группы пользователей
      description: Возвращает группы пользователей
      operationId: getGroupsList
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/Groups'
      security:
        - KEY: []
  /tp/{tpID}:
    get:
      tags:
        - tp
      summary: Получить информацию по тарифному плану
      description: Возвращает тарифный план
      operationId: getTpInfo
      produces:
        - application/json
      parameters:
        - name: tpID
          in: path
          description: tpID тарифного плана
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/Tp'
        '404':
          description: Тарифный план не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /tp/{tpID}/intervals/:
    get:
      tags:
        - tp
      summary: Получить информацию по интервалам ТП
      description: Возвращает интервалы ТП
      operationId: getTpIntervalsInfo
      produces:
        - application/json
      parameters:
        - name: tpID
          in: path
          description: tpID тарифного плана
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/TpIntervals'
        '404':
          description: Тарифный план не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /districts:
    get:
      tags:
        - districts
      summary: Получить районы
      description: Возвращает список районов
      operationId: getDistricts
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/DistrictsArray'
      security:
        - KEY: []
    post:
      tags:
        - districts
      summary: Добавление района
      operationId: addDistrict
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/Districts'
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/ApiSuccessAddResponse'
      security:
        - KEY: []
  /districts/{ID}:
    get:
      tags:
        - districts
      summary: Получить информацию о районе
      operationId: getDistrictInfo
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID района
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/Districts'
      security:
        - KEY: []
    put:
      tags:
        - districts
      summary: Обновить информацию о районе
      operationId: updateDistrict
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID района
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/Districts'
      responses:
        '400':
          description: Invalid ID supplied
      security:
        - KEY: []
  /streets:
    get:
      tags:
        - streets
      summary: Получить улицы
      description: Возвращает список улиц
      operationId: getStreets
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/StreetsArray'
      security:
        - KEY: []
    post:
      tags:
        - streets
      summary: Добавление района
      operationId: addStreet
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/Streets'
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/ApiSuccessAddResponse'
      security:
        - KEY: []
  /streets/{ID}:
    get:
      tags:
        - streets
      summary: Получить информацию о улице
      description: Возвращает улицу
      operationId: getStreetInfo
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID улицы
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/Streets'
      security:
        - KEY: []
    put:
      tags:
        - streets
      summary: Обновить информацию о улице
      operationId: updateStreet
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID улицы
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/Streets'
      responses:
        '400':
          description: Invalid ID supplied
      security:
        - KEY: []
  /builds:
    get:
      tags:
        - builds
      summary: Получить дома
      description: Возвращает список домов
      operationId: getBuilds
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/BuildsArray'
      security:
        - KEY: []
    post:
      tags:
        - builds
      summary: Добавление дома
      operationId: addBuild
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/Builds'
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/ApiSuccessAddResponse'
      security:
        - KEY: []
  /builds/{ID}:
    get:
      tags:
        - builds
      summary: Получить информацию о доме
      description: Возвращает дом
      operationId: getBuildInfo
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID дома
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/Builds'
      security:
        - KEY: []
    put:
      tags:
        - builds
      summary: Обновить информацию о доме
      operationId: updateBuild
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID дома
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/Builds'
      responses:
        '400':
          description: Invalid ID supplied
      security:
        - KEY: []
  /payments/types:
    get:
      tags:
        - payments
      summary: Получить список типов оплат
      description: Возвращает список типов оплат
      operationId: getPaymentTypesList
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/PaymentTypesArray'
      security:
        - KEY: []
  /payments/users/{UID}:
    get:
      tags:
        - payments
      summary: Получить список оплат пользователя
      description: Возвращает список оплат пользователя
      operationId: getUserPayments
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/UserPaymentsArray'
      security:
        - KEY: []
    post:
      tags:
        - payments
      summary: Добавление оплаты пользователю
      operationId: addUserPayment
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/UserPaymentAdd'
      responses:
        '400':
          description: Invalid ID supplied
      security:
        - KEY: []
  /fees/types:
    get:
      tags:
        - fees
      summary: Получить список типов списания
      description: Возвращает список типов списания
      operationId: getFeesTypesList
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/FeesTypesArray'
      security:
        - KEY: []
  /fees/users/{UID}:
    get:
      tags:
        - fees
      summary: Получить список списаний пользователя
      description: Возвращает список списаний пользователя
      operationId: getUserFees
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/UserFeesArray'
      security:
        - KEY: []
  /fees/users/{UID}/{SUM}:
    post:
      tags:
        - fees
      summary: Добавление списания пользователю
      operationId: addUserFee
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя
          required: true
          type: integer
          format: int64
        - name: SUM
          in: path
          description: Сумма списания
          required: true
          type: integer
          format: int64
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/UserFeeAdd'
      responses:
        '400':
          description: Invalid ID supplied
      security:
        - KEY: []
  /abon/tariffs:
    get:
      tags:
        - abon
      summary: Получить список ТП
      description: Возвращает список ТП
      operationId: getAbonTps
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/AbonTpsArray'
      security:
        - KEY: []
    post:
      tags:
        - abon
      summary: Добавление ТП
      operationId: addAbonTp
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/AbonAddTp'
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/ApiSuccessAddResponse'
      security:
        - KEY: []
  /abon/tariffs/{ID}:
    get:
      tags:
        - abon
      summary: Получить информацию о ТП
      description: Возвращает информацию о ТП
      operationId: getAbonTp
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID ТП
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/AbonTp'
      security:
        - KEY: []
  /abon/tariffs/{ID}/users/{UID}:
    post:
      tags:
        - abon
      summary: Добавление ТП пользователю
      operationId: addAbonTpToUser
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID ТП
          required: true
          type: integer
          format: int64
        - name: UID
          in: path
          description: UID пользователя
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/ApiSuccessAddResponse'
      security:
        - KEY: []
    delete:
      tags:
        - abon
      summary: Удаление ТП пользователя
      description: Удаление ТП пользователя
      operationId: getUserAbonTps
      produces:
        - application/json
      parameters:
        - name: ID
          in: path
          description: ID ТП
          required: true
          type: integer
          format: int64
        - name: UID
          in: path
          description: UID пользователя
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
      security:
        - KEY: []
  /abon/users:
    get:
      tags:
        - abon
      summary: Получить список пользователей Abon
      description: Возвращает список пользователей Abon
      operationId: getUsersAbon
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/AbonUsersArray'
      security:
        - KEY: []
  /online/{UID}:
    get:
      tags:
        - online
      summary: Получить сессии пользователя по UID
      description: Возвращает сессии пользователя
      operationId: getUserSessions
      produces:
        - application/json
      parameters:
        - name: UID
          in: path
          description: UID пользователя в биллинге
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/OnlineSessionsArray'
        '404':
          description: Пользователь не найден
          schema:
            $ref: '#/definitions/ApiResponse'
      security:
        - KEY: []
  /version:
    get:
      tags:
        - version
      summary: Получить версии биллинга и API
      operationId: getVersion
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: Успешное выполнение
          schema:
            $ref: '#/definitions/Version'
      security:
        - KEY: []
securityDefinitions:
  KEY:
    type: apiKey
    name: KEY
    in: header
definitions:
  User:
    type: object
    properties:
      login:
        type: string
        example: testUser
      password:
        type: string
        example: '123456'
      createBill:
        type: integer
  UserPi:
    type: object
    properties:
      fio:
        type: string
        example: Петренко
        description: Фамилия
      fio2:
        type: string
        example: Иван
        description: Имя
      fio3:
        type: string
        example: Петрович
        description: Отчество
      comments:
        type: string
      email:
        type: string
      phone:
        type: string
  UserCreated:
    type: object
    properties:
      preAdd:
        type: integer
        example: 1
      total:
        type: integer
        example: 0
      insertId:
        type: string
        example: '17'
      uid:
        type: string
        example: '32'
      affected:
        type: integer
        example: 1
      login:
        type: string
        example: testUser
  UserInternetList:
    type: array
    items:
      $ref: '#/definitions/UserInternetList_inner'
  UserInternet:
    type: object
    properties:
      tpId:
        type: integer
        example: 41
      cid:
        type: string
        example: 14:11:11:11:11:c1
      activate:
        type: string
        example: '0000-00-00'
      expire:
        type: string
        example: '0000-00-00'
  UserIptvList:
    type: array
    items:
      $ref: '#/definitions/UserIptvList_inner'
  Contacts:
    type: object
    properties:
      value:
        type: string
        example: test@gmail.com
      type:
        type: string
        example: _SHOW
        description: _SHOW - отобразить поле
      typeName:
        type: string
        example: _SHOW
  ContactsArray:
    type: array
    items:
      $ref: '#/definitions/ContactsArray_inner'
  Tp:
    type: object
    properties:
      id:
        type: integer
        example: 2
      tpId:
        type: integer
        example: 83
      dayFee:
        type: integer
      monthFee:
        type: integer
      module:
        type: string
        example: Internet
      changePrice:
        type: integer
      activPrice:
        type: integer
      serviceId:
        type: integer
      status:
        type: integer
  TpIntervals:
    type: array
    items:
      $ref: '#/definitions/TpIntervals_inner'
  Groups:
    type: array
    items:
      $ref: '#/definitions/Groups_inner'
  Msgs:
    type: object
    properties:
      uid:
        type: integer
        example: 11135
      chapter:
        type: integer
        example: 2
      message:
        type: string
        example: Test message
      state:
        type: integer
        example: 0
      subject:
        type: string
        example: Message subject
      priority:
        type: integer
        example: 2
  MsgsReply:
    type: object
    properties:
      aid:
        type: integer
        example: 2
      reply_text:
        type: string
        example: Reply text
  MsgsRepliesList:
    type: array
    items:
      $ref: '#/definitions/MsgsRepliesList_inner'
  MsgsReplyAttachment:
    type: object
    properties:
      filename:
        type: string
        example: Test.txt
      filesize:
        type: integer
        example: 12
      content:
        type: string
        example: '  Test content'
      content_type:
        type: string
        example: text/plain
      message_type:
        type: integer
        example: 1
  MsgsChapter:
    type: array
    items:
      $ref: '#/definitions/MsgsChapter_inner'
  Districts:
    type: object
    properties:
      name:
        type: string
        example: пос.Зуевка
      city:
        type: string
        example: Харцызск
      zip:
        type: string
  DistrictsArray:
    type: array
    items:
      $ref: '#/definitions/DistrictsArray_inner'
  Streets:
    type: object
    properties:
      name:
        type: string
        example: ул.Цэемовская
      district_id:
        type: integer
        example: 2
      second_name:
        type: string
  StreetsArray:
    type: array
    items:
      $ref: '#/definitions/StreetsArray_inner'
  Builds:
    type: object
    properties:
      street_id:
        type: integer
        example: 2
      number:
        type: string
  BuildsArray:
    type: array
    items:
      $ref: '#/definitions/BuildsArray_inner'
  PaymentTypesArray:
    type: array
    items:
      $ref: '#/definitions/PaymentTypesArray_inner'
  UserPaymentsArray:
    type: array
    items:
      $ref: '#/definitions/UserPaymentsArray_inner'
  UserPaymentAdd:
    type: object
    properties:
      sum:
        type: integer
        example: 500
      method:
        type: integer
        example: 6
      bill_id:
        type: integer
        example: 10
  FeesTypesArray:
    type: array
    items:
      $ref: '#/definitions/FeesTypesArray_inner'
  UserFeesArray:
    type: array
    items:
      $ref: '#/definitions/UserFeesArray_inner'
  UserFeeAdd:
    type: object
    properties:
      method:
        type: integer
        example: 6
      bill_id:
        type: integer
        example: 10
      describe:
        type: string
  AbonTpsArray:
    type: array
    items:
      $ref: '#/definitions/AbonTpsArray_inner'
  AbonAddTp:
    type: object
    properties:
      price:
        type: integer
        example: 100
      period:
        type: integer
        example: 1
      name:
        type: string
        example: Test abon TP
      description:
        type: string
        example: Test description
  AbonTp:
    type: object
    properties:
      id:
        type: integer
        example: 1
      name:
        type: string
        example: Test abon TP
      price:
        type: integer
        example: 100
      userPortal:
        type: integer
        example: 0
      userCount:
        type: integer
        example: 10
      discount:
        type: integer
        example: 0
      paymentType:
        type: integer
        example: 0
      periodAlignment:
        type: integer
        example: 1
      nextAbonDate:
        type: string
        example: '2021-10-01'
      description:
        type: string
  AbonUsersArray:
    type: array
    items:
      $ref: '#/definitions/AbonUsersArray_inner'
  OnlineSessionsArray:
    type: array
    items:
      $ref: '#/definitions/OnlineSessionsArray_inner'
  Version:
    type: object
    properties:
      version:
        type: string
        example: 0.91.0
      apiVersion:
        type: string
        example: '0.01'
      billing:
        type: string
        example: Abills
  ApiResponse:
    type: object
    properties:
      errstr:
        type: string
        example: ERROR_NOT_EXIST
      errno:
        type: integer
        example: 2
  ApiSuccessAddResponse:
    type: object
    properties:
      total:
        type: integer
        example: 0
      affected:
        type: integer
        example: 1
      insertId:
        type: integer
        example: 37
  UserLogin:
    type: object
    properties:
      login:
        type: string
        example: testuser
      password:
        type: string
        example: testuser
  inline_response_200:
    type: object
    properties:
      login:
        type: string
        example: testuser
      sid:
        type: string
        example: sW44EJZLyWDMeXAV
      uid:
        type: string
        example: '5690'
  UserInternetList_inner:
    type: object
    properties:
      id:
        type: integer
        example: 2
      tpName:
        type: string
        example: Премиум до 100м
      tpId:
        type: integer
        example: 41
      internetStatus:
        type: integer
        example: 0
      cid:
        type: string
        example: 14:11:11:11:11:c1
      monthFee:
        type: integer
        example: 250
      dayFee:
        type: integer
        example: 0
  UserIptvList_inner:
    type: object
    properties:
      id:
        type: integer
        example: 2
      tpName:
        type: string
        example: Премиум Iptvportal
      tpId:
        type: integer
        example: 41
      serviceStatus:
        type: integer
        example: 0
      monthFee:
        type: integer
        example: 250
      dayFee:
        type: integer
        example: 0
      serviceId:
        type: integer
        example: 0
      subscribeId:
        type: integer
        example: 0
      filterId:
        type: integer
        example: 0
  ContactsArray_inner:
    type: object
    properties:
      id:
        type: integer
        example: 1
      uid:
        type: string
        example: '132'
      value:
        type: string
        example: test@gmail.com
      typeName:
        type: string
        example: Email
  TpIntervals_inner:
    type: object
    properties:
      begin:
        type: string
        example: '00:00:00'
      end:
        type: string
        example: '23:59:59'
      id:
        type: integer
        example: 2
      tarif:
        type: string
      trafficClasses:
        type: string
      day:
        type: integer
  Groups_inner:
    type: object
    properties:
      id:
        type: integer
        example: 53
      name:
        type: string
        example: Должники
      descr:
        type: string
      domainId:
        type: integer
      disableChgTp:
        type: integer
        example: 1
  MsgsRepliesList_inner:
    type: object
    properties:
      id:
        type: integer
        example: 2
      text:
        type: string
        example: Reply text
      aid:
        type: integer
        example: 2
      admin:
        type: string
        example: abills
      datetime:
        type: string
        example: '2021-08-09 13:25:41'
      mainMsg:
        type: integer
        example: 40
  MsgsChapter_inner:
    type: object
    properties:
      id:
        type: integer
        example: 2
      name:
        type: string
        example: Первый раздел
      responsible:
        type: integer
        example: 1
      innerChapter:
        type: integer
        example: 0
      autoclose:
        type: integer
        example: 50
  DistrictsArray_inner:
    type: object
    properties:
      id:
        type: integer
        example: 10
      name:
        type: string
        example: пос.Зуевка
      city:
        type: string
        example: Харцызск
      zip:
        type: string
      streetCount:
        type: integer
        example: 31
  StreetsArray_inner:
    type: object
    properties:
      id:
        type: integer
        example: 10
      streetName:
        type: string
        example: ул.Цэемовская
      districtId:
        type: integer
        example: 2
      buildCount:
        type: integer
        example: 31
  BuildsArray_inner:
    type: object
    properties:
      id:
        type: integer
        example: 10
      streetName:
        type: string
        example: ул.Цэемовская
      streetId:
        type: integer
        example: 2
      number:
        type: string
        example: '31'
  PaymentTypesArray_inner:
    type: object
    properties:
      id:
        type: integer
        example: 10
      name:
        type: string
        example: Credit card
      feesType:
        type: integer
        example: 0
      color:
        type: string
  UserPaymentsArray_inner:
    type: object
    properties:
      id:
        type: integer
        example: 10
      sum:
        type: integer
        example: 500
      regDate:
        type: string
        example: '2021-07-02 07:46:01'
      method:
        type: integer
        example: 6
      innerDescribe:
        type: string
  FeesTypesArray_inner:
    type: object
    properties:
      id:
        type: integer
        example: 10
      name:
        type: string
        example: Пеня
      sum:
        type: integer
        example: 500
      defaultDescribe:
        type: string
  UserFeesArray_inner:
    type: object
    properties:
      id:
        type: integer
        example: 10
      sum:
        type: integer
        example: 500
      regDate:
        type: string
        example: '2021-07-02 07:46:01'
      method:
        type: integer
        example: 2
      dsc:
        type: string
        example: 'Internet: М/А Премиум до 100м (41) - Распределение абонплаты'
  AbonTpsArray_inner:
    type: object
    properties:
      tpId:
        type: integer
        example: 1
      name:
        type: string
        example: Test abon TP
      price:
        type: integer
        example: 100
      userPortal:
        type: integer
        example: 0
      userCount:
        type: integer
        example: 10
      discount:
        type: integer
        example: 0
      paymentType:
        type: integer
        example: 0
      periodAlignment:
        type: integer
        example: 1
      nextAbonDate:
        type: string
        example: '2021-10-01'
      description:
        type: string
  AbonUsersArray_inner:
    type: object
    properties:
      tpId:
        type: integer
        example: 1
      tpName:
        type: string
        example: Test abon TP
      price:
        type: integer
        example: 100
      serviceCount:
        type: integer
        example: 1
      date:
        type: string
        example: '2021-08-11'
      nextAbon:
        type: string
        example: '2021-09-01'
      uid:
        type: integer
        example: 11135
      login:
        type: string
        example: '3433'
  OnlineSessionsArray_inner:
    type: object
    properties:
      clientIpNum:
        type: integer
        example: 3232238092
      nasId:
        type: integer
        example: 12
      duration:
        type: string
        example: '838:59:59'
      status:
        type: integer
        example: 10
      userName:
        type: string
        example: userName
      clientIp:
        type: string
        example: 192.168.10.12
      acctSessionId:
        type: string
        example: Akie6VpiYU
  UserList:
    type: array
    items:
      type: object
      properties:
        deposit:
          type: number
          example: 36579.21
        fio:
          type: string
          example: Иванов Иван
        uid:
          type: integer
          example: 1
        gid:
          type: integer
          example: 1
        login:
            type: string
            example: testuser
        billId:
          type: integer
          example: 12

{
  "swagger": "2.0",
  "info": {
    "version": "1.0.0",
    "title": "Abills user API"
  },
  "host": "demo.abills.net.ua:9443",
  "basePath": "/api.cgi",
  "tags": [
    {
      "name": "user",
      "description": "Работа с пользователем"
    },
    {
      "name": "internet",
      "description": "Работа с услугой Интернет"
    },
    {
      "name": "msgs",
      "description": "Работа с заявками пользователя"
    },
    {
      "name": "abon",
      "description": "Работа с периодическими списаниями"
    }
  ],
  "schemes": [
    "https"
  ],
  "paths": {
    "/user/{UID}": {
      "get": {
        "tags": [
          "user"
        ],
        "summary": "Информация о пользователе",
        "operationId": "userInfo",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/User"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/pi": {
      "get": {
        "tags": [
          "user"
        ],
        "summary": "Персональная информация пользователя",
        "operationId": "userPersonalInfo",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/UserPi"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/credit": {
      "get": {
        "tags": [
          "user"
        ],
        "summary": "Информация об установке кредита",
        "operationId": "userCreditInfo",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/UserCreditInfo"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      },
      "post": {
        "tags": [
          "user"
        ],
        "summary": "Установка кредита пользователю",
        "operationId": "userSetCredit",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/UserCredit"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/internet": {
      "get": {
        "tags": [
          "internet"
        ],
        "summary": "Информация об интернет услугах пользователя",
        "operationId": "userInternetInfo",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/UserInternet"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/internet/{ID}": {
      "put": {
        "tags": [
          "internet"
        ],
        "summary": "Смена ТП",
        "operationId": "userChangeInternetTP",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          },
          {
            "name": "ID",
            "in": "path",
            "description": "ID услуги Интернет",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/body"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/InternetChangeTPSuccess"
            }
          },
          "400": {
            "description": "Ошибка",
            "schema": {
              "$ref": "#/definitions/InternetChangeTPError"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/internet/{ID}/speed": {
      "get": {
        "tags": [
          "internet"
        ],
        "summary": "Скорость ТП",
        "operationId": "userTpSpeed",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          },
          {
            "name": "ID",
            "in": "path",
            "description": "ID услуги Интернет",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/InternetSpeed"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/internet/{ID}/holdup": {
      "post": {
        "tags": [
          "internet"
        ],
        "summary": "Приостановление услуги Интернет",
        "operationId": "userInternetHoldup",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          },
          {
            "name": "ID",
            "in": "path",
            "description": "ID услуги Интернет",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/body_1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/HoldupReply"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      },
      "delete": {
        "tags": [
          "internet"
        ],
        "summary": "Удаление рассписания на приостановление услуги Интернет",
        "operationId": "userDeleteInternetHoldup",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          },
          {
            "name": "ID",
            "in": "path",
            "description": "ID услуги Интернет",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/HoldupReply"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/internet/tariffs": {
      "get": {
        "tags": [
          "internet"
        ],
        "summary": "Доступные для изменения ТП, на которые хватает денег",
        "operationId": "userInternetAvailableToChangeTariffs",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/UserAvailableTariffs"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
 	"/user/{UID}/internet/tariffs/all": {
      "get": {
        "tags": [
          "internet"
        ],
        "summary": "Все доступные для изменения ТП",
        "operationId": "userInternetAvailableToChangeTariffsAll",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/UserAvailableTariffs"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },

    "/user/{UID}/internet/{ID}/warnings": {
      "get": {
        "tags": [
          "internet"
        ],
        "summary": "Информация о списаниях",
        "operationId": "userInternetWarnings",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          },
          {
            "name": "ID",
            "in": "path",
            "description": "ID услуги",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/InternetWarnings"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/abon": {
      "get": {
        "tags": [
          "abon"
        ],
        "summary": "Информация об периодических списаниях пользователя",
        "operationId": "userAbonInfo",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/UserAbon"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/msgs": {
      "get": {
        "tags": [
          "msgs"
        ],
        "summary": "Список заявок пользователя",
        "operationId": "userMsgsList",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/MsgsArray"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      },
      "post": {
        "tags": [
          "msgs"
        ],
        "summary": "Создание заявки",
        "operationId": "userAddMessage",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MsgsAdd"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/MsgsAdded"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/msgs/{ID}": {
      "get": {
        "tags": [
          "msgs"
        ],
        "summary": "Информация о заявке пользователя",
        "operationId": "userMsgs",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          },
          {
            "name": "ID",
            "in": "path",
            "description": "ID заявки",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/MsgsInfo"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    },
    "/user/{UID}/msgs/{ID}/reply": {
      "get": {
        "tags": [
          "msgs"
        ],
        "summary": "Список заявок пользователя",
        "operationId": "userMsgReplyList",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          },
          {
            "name": "ID",
            "in": "path",
            "description": "ID заявки",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение",
            "schema": {
              "$ref": "#/definitions/MsgsReplyArray"
            }
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      },
      "post": {
        "tags": [
          "msgs"
        ],
        "summary": "Создание заявки",
        "operationId": "userAddReply",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "UID",
            "in": "path",
            "description": "UID пользователя",
            "required": true,
            "type": "string"
          },
          {
            "name": "ID",
            "in": "path",
            "description": "ID заявки",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MsgsReplyAdd"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Успешное выполнение"
          }
        },
        "security": [
          {
            "USER_SID": []
          }
        ]
      }
    }
  },
  "securityDefinitions": {
    "USER_SID": {
      "type": "apiKey",
      "name": "USERSID",
      "in": "header"
    }
  },
  "definitions": {
    "User": {
      "properties": {
        "login": {
          "type": "string",
          "example": "3433"
        },
        "deposit": {
          "type": "integer",
          "example": 1600
        },
        "credit": {
          "type": "integer",
          "example": 100
        },
        "creditDate": {
          "type": "string",
          "example": "2021-08-13"
        },
        "billId": {
          "type": "integer",
          "example": 12
        },
        "gid": {
          "type": "integer",
          "example": 57
        },
        "disable": {
          "type": "integer",
          "example": 0
        },
        "deleted": {
          "type": "integer",
          "example": 0
        }
      }
    },
    "UserPi": {
      "properties": {
        "fio": {
          "type": "string",
          "example": "Иванов Иван Иванович"
        },
        "addressFull": {
          "type": "string",
          "example": "ул.Адамца, 121, 3"
        },
        "age": {
          "type": "integer",
          "example": 33
        },
        "locationId": {
          "type": "integer",
          "example": 1444
        },
        "contractId": {
          "type": "string",
          "example": "575493"
        },
        "email": {
          "type": "array",
          "items": {
            "type": "string",
            "example": "test@gmail.com"
          }
        },
        "phone": {
          "type": "array",
          "items": {
            "type": "string",
            "example": "380976574568"
          }
        }
      }
    },
    "UserInternet": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/UserInternet_inner"
      }
    },
    "InternetSpeed": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/InternetSpeed_inner"
      }
    },
    "UserAbon": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/UserAbon_inner"
      }
    },
    "UserCredit": {
      "properties": {
        "creditSum": {
          "type": "integer",
          "example": 500
        },
        "creditChangePrice": {
          "type": "integer",
          "example": 100
        },
        "uid": {
          "type": "integer",
          "example": 11135
        },
        "creditDays": {
          "type": "string",
          "example": "3"
        },
        "creditMonthChanges": {
          "type": "string",
          "example": "1"
        }
      }
    },
    "UserCreditInfo": {
      "properties": {
        "creditChgPrice": {
          "type": "string",
          "example": "500"
        },
        "creditMonthChanges": {
          "type": "string",
          "example": "1"
        },
        "creditSum": {
          "type": "string",
          "example": "800"
        },
        "creditDays": {
          "type": "string",
          "example": "3"
        }
      }
    },
    "UserAvailableTariffs": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/UserAvailableTariffs_inner"
      }
    },
    "HoldupReply": {
      "properties": {
        "success": {
          "type": "integer",
          "example": 1
        },
        "msg": {
          "type": "string"
        }
      }
    },
    "InternetWarnings": {
      "properties": {
        "messageType": {
          "type": "string",
          "example": "success"
        },
        "warning": {
          "type": "string",
          "example": "следующее списание через 7 дней"
        },
        "daysToFee": {
          "type": "string",
          "example": "2"
        },
        "sum": {
          "type": "integer",
          "example": 150
        },
        "abonDate": {
          "type": "string",
          "example": "2021-10-01"
        }
      }
    },
    "InternetChangeTPSuccess": {
      "properties": {
        "success": {
          "type": "integer",
          "example": 1
        },
        "uid": {
          "type": "integer"
        }
      }
    },
    "InternetChangeTPError": {
      "properties": {
        "error": {
          "type": "integer",
          "example": 145
        },
        "message": {
          "type": "string"
        },
        "messageType": {
          "type": "string"
        },
        "messageTitle": {
          "type": "string"
        }
      }
    },
    "MsgsAdd": {
      "properties": {
        "chapter": {
          "type": "integer",
          "example": 3
        },
        "message": {
          "type": "string",
          "example": "Some message"
        },
        "subject": {
          "type": "string",
          "example": "Message subject"
        },
        "priority": {
          "type": "integer",
          "example": 2
        }
      }
    },
    "MsgsAdded": {
      "properties": {
        "insertId": {
          "type": "integer",
          "example": 43
        },
        "msgId": {
          "type": "integer",
          "example": 43
        },
        "affected": {
          "type": "integer",
          "example": 1
        }
      }
    },
    "MsgsInfo": {
      "properties": {
        "subject": {
          "type": "string",
          "example": "Message user api subject"
        },
        "message": {
          "type": "string",
          "example": "Test message from user api"
        },
        "chapterName": {
          "type": "string",
          "example": "Второй раздел"
        },
        "chapter": {
          "type": "integer",
          "example": 3
        },
        "priority": {
          "type": "integer",
          "example": 2
        },
        "state": {
          "type": "integer",
          "example": 0
        },
        "date": {
          "type": "string",
          "example": "2021-09-02 13:20:37"
        }
      }
    },
    "MsgsArray": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/MsgsInfo"
      }
    },
    "MsgsReply": {
      "properties": {
        "uid": {
          "type": "integer",
          "example": 0
        },
        "aid": {
          "type": "integer",
          "example": 2
        },
        "id": {
          "type": "integer",
          "example": 54
        },
        "text": {
          "type": "string",
          "example": "some reply text"
        },
        "datetime": {
          "type": "string",
          "example": "2021-09-02 12:50:47"
        }
      }
    },
    "MsgsReplyAdd": {
      "properties": {
        "reply_text": {
          "type": "string",
          "example": "Some reply text"
        },
        "reply_subject": {
          "type": "string",
          "example": "Subject"
        }
      }
    },
    "MsgsReplyArray": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/MsgsReply"
      }
    },
    "body": {
      "properties": {
        "tp_id": {
          "type": "integer",
          "example": 4
        },
        "date": {
          "type": "string",
          "example": "2021-09-17"
        },
        "period": {
          "type": "integer",
          "example": "2 (0 - моментальное изменение ТП, если разрешено, 1 - изменение ТП в след. учётный период, 2 - изменение ТП по указаной дате)"
        }
      }
    },
    "body_1": {
      "properties": {
        "from_date": {
          "type": "string",
          "example": "2021-08-14"
        },
        "to_date": {
          "type": "string",
          "example": "2021-08-17"
        }
      }
    },
    "UserInternet_inner": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "example": 2
        },
        "tpName": {
          "type": "string",
          "example": "Премиум до 100м"
        },
        "tpId": {
          "type": "integer",
          "example": 41
        },
        "internetStatus": {
          "type": "integer",
          "example": 0
        },
        "cid": {
          "type": "string",
          "example": "14:11:11:11:11:c1"
        },
        "monthFee": {
          "type": "integer",
          "example": 250
        },
        "dayFee": {
          "type": "integer",
          "example": 0
        }
      }
    },
    "InternetSpeed_inner": {
      "type": "object",
      "properties": {
        "inSpeed": {
          "type": "integer",
          "example": 2999
        },
        "outSpeed": {
          "type": "integer",
          "example": 3000
        },
        "tpNum": {
          "type": "integer",
          "example": 155
        }
      }
    },
    "UserAbon_inner": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "example": 2
        },
        "name": {
          "type": "string",
          "example": "Test abon TP"
        },
        "price": {
          "type": "integer",
          "example": 100
        },
        "period": {
          "type": "integer",
          "example": 1
        },
        "nextAbon": {
          "type": "string",
          "example": "2021-09-01"
        },
        "comments": {
          "type": "string"
        },
        "description": {
          "type": "string",
          "example": "Test description"
        }
      }
    },
    "UserAvailableTariffs_inner": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "example": 2
        },
        "name": {
          "type": "string",
          "example": "Премиум до 100м"
        },
        "tpId": {
          "type": "integer",
          "example": 41
        },
        "monthFee": {
          "type": "integer",
          "example": 250
        },
        "dayFee": {
          "type": "integer",
          "example": 0
        },
        "comments": {
          "type": "string"
        }
      }
    }
  }
}