openapi: 3.0.3
info:
  title: Публичный API LTESocks
  version: "2.0"
  description: Управляйте мобильными прокси-портами LTESocks, настройками аккаунта, платежами,
    тарифами, серверами и сигнатурами сети.
  contact:
    name: LTESocks support
    url: https://ltesocks.io/
tags:
  - name: user
    description: Просмотр текущего аккаунта и изменение его настроек.
  - name: port
    description: Заказ, просмотр, фильтрация и управление мобильными прокси-портами.
  - name: payment
    description: Просмотр платежей аккаунта и создание платежных запросов.
  - name: general
    description: Получение тарифов, серверов, сигнатур и информации о токене.
paths:
  /user:
    get:
      summary: Получить текущего пользователя
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
      tags:
        - user
      operationId: getUser
      description: Возвращает аккаунт, связанный с bearer-токеном, включая настройки и статус.
      security:
        - bearerAuth: []
  /user/preferences:
    post:
      summary: Обновить настройки пользователя
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UserPreferences"
        description: Объект настроек пользователя
        required: true
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - user
      operationId: updateUserPreferences
      description: Обновляет поддерживаемые настройки текущего аккаунта и возвращает обновленный объект
        пользователя.
      security:
        - bearerAuth: []
  /ports:
    get:
      summary: Получить список портов
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Port"
                  page:
                    type: integer
                    example: 1
                  pageSize:
                    type: integer
                    example: 20
                  total:
                    type: integer
                    example: 7
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: listPorts
      description: Возвращает первую страницу мобильных прокси-портов текущего аккаунта.
      security:
        - bearerAuth: []
    post:
      summary: Фильтровать порты
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                plan:
                  type: string
                  example: O2
                  description: Точный идентификатор тарифа
                countryCode:
                  type: string
                  example: GB
                tags:
                  type: array
                  maxLength: 30
                  items:
                    type: string
                    maxLength: 50
                page:
                  type: integer
                  example: 1
                pageSize:
                  type: integer
                  maximum: 100
                  example: 20
        description: Параметры пагинации
        required: true
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Port"
                  page:
                    type: integer
                    example: 1
                  pageSize:
                    type: integer
                    example: 20
                  total:
                    type: integer
                    example: 7
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: filterPorts
      description: Возвращает постраничный список портов с фильтрацией по тарифу, стране и тегам.
      security:
        - bearerAuth: []
  /ports/{id}:
    get:
      summary: Получить порт
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: getPort
      description: Возвращает один мобильный прокси-порт по идентификатору в рамках аккаунта.
      security:
        - bearerAuth: []
    delete:
      summary: Удалить порт
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            "*/*":
              schema:
                type: object
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            "*/*":
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: deletePort
      description: Безвозвратно удаляет порт из текущего аккаунта. Используйте операцию только после
        проверки идентификатора.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/{id}/delete:
    post:
      summary: Удалить порт методом POST
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            "*/*":
              schema:
                type: object
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            "*/*":
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: deletePortWithPost
      description: Совместимый эндпоинт, который безвозвратно удаляет порт методом POST.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/{id}/log:
    get:
      summary: Получить последние события порта
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/PortLog"
                  page:
                    type: integer
                    example: 1
                  pageSize:
                    type: integer
                    example: 20
                  total:
                    type: integer
                    example: 7
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: getPortLog
      description: Возвращает первую страницу событий подключения и статуса порта.
      security:
        - bearerAuth: []
    post:
      summary: Фильтровать журнал порта
      requestBody:
        $ref: "#/components/requestBodies/Body"
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/PortLog"
                  page:
                    type: integer
                    example: 1
                  pageSize:
                    type: integer
                    example: 20
                  total:
                    type: integer
                    example: 7
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: filterPortLog
      description: Возвращает события порта за указанный период с пагинацией.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/{id}/vpn:
    get:
      summary: Скачать конфигурацию VPN
      responses:
        "200":
          description: Операция выполнена успешно
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/zip:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: getPortVpn
      description: Скачивает архив VPN-конфигурации, связанный с портом.
      security:
        - bearerAuth: []
    post:
      summary: Скачать конфигурацию VPN методом POST
      responses:
        "200":
          description: Операция выполнена успешно
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/zip:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: downloadPortVpnWithPost
      description: Совместимый эндпоинт, который скачивает архив VPN-конфигурации методом POST.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/order:
    post:
      summary: Заказать мобильный порт
      requestBody:
        $ref: "#/components/requestBodies/Body2"
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: orderPorts
      description: Создает мобильный прокси-порт с выбранными тарифом и вариантом тарификации.
      security:
        - bearerAuth: []
  /ports/{id}/extend:
    post:
      summary: Продлить порт
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: extendPort
      description: Продлевает срок действия порта согласно выбранному тарифу.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/{id}/plan:
    post:
      summary: Изменить тариф порта
      requestBody:
        $ref: "#/components/requestBodies/Body2"
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: changePortPlan
      description: Изменяет тарифный план, назначенный порту.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/{id}/tags:
    post:
      summary: Обновить теги порта
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                tags:
                  type: array
                  maxLength: 30
                  items:
                    type: string
                    maxLength: 50
        description: Теги
        required: true
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: updatePortTags
      description: Заменяет теги порта. Теги удобно использовать для группировки и фильтрации.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/{id}/autorenew:
    post:
      summary: Настроить автопродление
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                autoRenew:
                  type: boolean
                  example: true
        description: Параметры автопродления
        required: true
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: updatePortAutorenew
      description: Включает или отключает автоматическое продление порта.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/{id}/signature:
    post:
      summary: Изменить сигнатуру порта
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                signature:
                  type: string
                  example: Linux
        description: Параметры сигнатуры
        required: true
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: updatePortSignature
      description: Изменяет сигнатуру мобильной сети, назначенную порту.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/{id}/credentials:
    post:
      summary: Обновить учетные данные прокси
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PortCredentials"
        description: Параметры учетных данных
        required: true
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: updatePortCredentials
      description: Заменяет имя пользователя и пароль для подключения к порту.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/{id}/autoreset:
    post:
      summary: Настроить автосброс
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                autoResetInterval:
                  type: integer
                  example: 600
                  description: Интервал автосброса в секундах; 0 отключает автосброс
        description: Параметры интервала автосброса
        required: true
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: updatePortAutoreset
      description: Включает или отключает автоматический сброс IP порта по расписанию.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /ports/{id}/reset:
    post:
      summary: Сбросить порт
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: resetPort
      description: Запрашивает немедленный сброс мобильного подключения и смену IP порта.
      security:
        - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        description: Идентификатор порта в рамках аккаунта.
        schema:
          type: string
  /tokens/{token}:
    get:
      summary: Разрешить токен сброса порта
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - port
      operationId: resolveResetToken
      description: Возвращает порт, связанный с токеном сброса.
      security:
        - bearerAuth: []
    parameters:
      - name: token
        in: path
        required: true
        description: Токен сброса порта для разрешения.
        schema:
          type: string
  /payments:
    get:
      summary: Получить список платежей
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/PaymentHistoryRecord"
                  page:
                    type: integer
                    example: 1
                  pageSize:
                    type: integer
                    example: 20
                  total:
                    type: integer
                    example: 7
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - payment
      operationId: listPayments
      description: Возвращает первую страницу платежей текущего аккаунта.
      security:
        - bearerAuth: []
    post:
      summary: Фильтровать платежи
      requestBody:
        $ref: "#/components/requestBodies/Body"
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/PaymentHistoryRecord"
                  page:
                    type: integer
                    example: 1
                  pageSize:
                    type: integer
                    example: 20
                  total:
                    type: integer
                    example: 7
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - payment
      operationId: filterPayments
      description: Возвращает платежи с учетом пагинации и доступных фильтров.
      security:
        - bearerAuth: []
  /payments/currencies:
    get:
      summary: Получить валюты платежей
      responses:
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: В разработке
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DevelopmentError"
      tags:
        - payment
      operationId: listPaymentCurrencies
      description: Зарезервированный эндпоинт валют платежей. В контракте v2 операция отмечена как
        находящаяся в разработке.
      security:
        - bearerAuth: []
  /payments/request:
    post:
      summary: Создать платежный запрос
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                amount:
                  type: integer
                  example: 10000
                  description: Сумма платежа в центах (всегда USD)
                currency:
                  type: string
                  example: btc
                  description: Валюта оплаты; указанная сумма будет автоматически конвертирована из USD
        description: Параметры платежного запроса
        required: true
      responses:
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: В разработке
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DevelopmentError"
      tags:
        - payment
      operationId: requestPayment
      description: Зарезервированный эндпоинт платежных запросов. В контракте v2 операция отмечена как
        находящаяся в разработке.
      security:
        - bearerAuth: []
  /plans:
    get:
      summary: Получить список тарифов
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                type: object
                properties:
                  plans:
                    type: array
                    items:
                      $ref: "#/components/schemas/Plan"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - general
      operationId: listPlans
      description: Возвращает тарифы мобильных прокси, доступные текущему аккаунту.
      security:
        - bearerAuth: []
  /servers:
    get:
      summary: Получить список серверов
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                type: object
                properties:
                  vpnServers:
                    type: array
                    items:
                      $ref: "#/components/schemas/Server"
                  proxyServers:
                    type: array
                    items:
                      $ref: "#/components/schemas/Server"
                  proxyProtocols:
                    type: array
                    items:
                      type: string
                      enum:
                        - http
                        - https
                        - socks5
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - general
      operationId: listServers
      description: Возвращает доступные прокси-серверы и поддерживаемые ими локации.
      security:
        - bearerAuth: []
  /signatures:
    get:
      summary: Получить список сигнатур
      responses:
        "200":
          description: Операция выполнена успешно
          content:
            application/json:
              schema:
                type: object
                properties:
                  signatures:
                    type: array
                    items:
                      type: string
                      example: Windows
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - general
      operationId: listSignatures
      description: Возвращает сигнатуры мобильных сетей, доступные при заказе или обновлении порта.
      security:
        - bearerAuth: []
servers:
  - url: https://api.ltesocks.io/v2
    description: Рабочий API
components:
  requestBodies:
    Body:
      content:
        application/json:
          schema:
            type: object
            properties:
              from:
                type: string
                format: date-time
                example: 2022-04-02T00:40:44
              to:
                type: string
                format: date-time
                example: 2022-04-02T00:40:44
              page:
                type: integer
                example: 1
              pageSize:
                type: integer
                maximum: 100
                example: 20
      description: Параметры пагинации
      required: true
    Body2:
      content:
        application/json:
          schema:
            type: object
            properties:
              plan:
                type: string
                example: 5349b4ddd2781d08c09890f3
                description: Идентификатор тарифа
              tarification:
                $ref: "#/components/schemas/PlanTarification"
      description: Параметры тарифа
      required: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API token
      description: "Создайте или сбросьте API-токен в панели LTESocks, затем передавайте его как
        `Authorization: Bearer <token>`."
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          example: example error
          description: Текстовое описание ошибки
    DevelopmentError:
      type: object
      properties:
        error:
          type: string
          example: Under Development
          description: Текстовое описание ошибки
    GeoIP:
      type: object
      properties:
        continentCode:
          type: string
          example: NA
        continentName:
          type: string
          example: North America
        countryCode2:
          type: string
          example: US
        countryCode3:
          type: string
          example: United States
        stateProv:
          type: string
        district:
          type: string
        city:
          type: string
        zipcode:
          type: string
        latitude:
          type: string
          example: "38.89037"
        longitude:
          type: string
          example: "-77.03196"
        isp:
          type: string
          example: T-Mobile USA, Inc.
    Server:
      type: object
      properties:
        host:
          type: string
          example: vpn1.ltesocks.io
        countryCode:
          type: string
          example: NL
    Plan:
      type: object
      properties:
        id:
          type: string
          example: 5349b4ddd2781d08c09890f3
        name:
          type: string
          example: UK Three
        available:
          type: boolean
          example: true
        availablePorts:
          type: integer
          example: 10
        description:
          type: string
          example: Plan description
        countryCode:
          type: string
          example: UK
        vpnAccess:
          type: boolean
          example: true
        tarifications:
          type: array
          items:
            $ref: "#/components/schemas/PlanTarification"
    PlanTarification:
      type: object
      properties:
        time:
          type: integer
          example: 2592000
          description: Срок действия тарифа в секундах
        traffic:
          type: integer
          example: 51200
          description: Объем трафика тарифа в мегабайтах
        price:
          type: integer
          example: 14500
          description: Стоимость тарифа в центах
    User:
      type: object
      properties:
        login:
          type: string
          example: user
          description: Логин пользователя
        email:
          type: string
          format: email
          example: user@example.com
          description: Адрес электронной почты пользователя
        balance:
          type: integer
          example: 10000
          description: Баланс пользователя в центах (100 USD = 10000)
        portsCount:
          type: integer
          example: 3
          description: Общее количество портов
        portsLimit:
          type: integer
          example: 10
          description: Максимально допустимое количество портов
        discountPercent:
          type: integer
          example: 10
          description: Скидка пользователя в процентах
        preferences:
          $ref: "#/components/schemas/UserPreferences"
    UserPreferences:
      type: object
      properties:
        vpnServer:
          type: string
          format: host
          example: vpn1.ltesocks.io
          description: Имя сервера по умолчанию для подключения через OpenVPN
        proxyServer:
          type: string
          format: host
          example: ap1.ltesocks.io
          description: Имя сервера по умолчанию для подключения через прокси
        proxyProtocol:
          type: string
          example: socks5
          description: Прокси-протокол по умолчанию
          enum:
            - http
            - https
            - socks5
    Port:
      type: object
      properties:
        port:
          type: string
          example: 10000
          description: Номер порта
        ip:
          type: string
          example: 1.1.1.1
          description: Текущий IP-адрес порта (0.0.0.0, если недоступен)
        geoip:
          $ref: "#/components/schemas/GeoIP"
        status:
          type: string
          example: active
          description: Статус порта
          enum:
            - active
            - reset
            - suspended
            - disconnected
            - outoftraffic
        resetToken:
          type: string
          example: 6015510d206e4d7b023e5f978a56e3cf49d7e79bc26cf28c69b75314e098a61b
          description: Токен сброса порта
        signature:
          type: string
          example: Windows
          description: Сигнатура порта
        vpnAccess:
          type: boolean
          example: true
          description: Показывает, имеет ли порт доступ к VPN-серверу
        autoResetInterval:
          type: integer
          description: Интервал автосброса порта в секундах; 0 отключает автосброс
        tags:
          type: array
          maxLength: 30
          description: Теги порта
          items:
            type: string
            minLength: 1
            maxLength: 50
            pattern: (?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])
        plan:
          $ref: "#/components/schemas/PortPlan"
        credentials:
          $ref: "#/components/schemas/PortCredentials"
    PortPlan:
      type: object
      properties:
        id:
          type: string
          example: 5349b4ddd2781d08c09890f3
          description: Идентификатор тарифа
        name:
          type: string
          example: UK Three
          description: Название тарифа
        countryCode:
          type: string
          example: UK
          description: Код страны тарифа
        enabled:
          type: boolean
          example: true
          description: Показывает, активен ли тариф
        autoRenew:
          type: boolean
          example: true
          description: Показывает, включено ли автопродление тарифа
        activatedAt:
          type: string
          format: date-time
          example: 2022-04-02T05:57:29.054Z
          description: Время активации тарифа
        expiresAt:
          type: string
          format: date-time
          example: 2022-05-02T05:57:29.054Z
          description: Время окончания тарифа
        trafficRemains:
          type: integer
          example: 51200
          description: Оставшийся трафик в мегабайтах
        tarification:
          $ref: "#/components/schemas/PlanTarification"
    PortCredentials:
      type: object
      properties:
        ip:
          type: array
          maxLength: 20
          items:
            type: string
            example: 2.2.2.2
            description: IP-адрес, с которого разрешен доступ
        password:
          type: array
          maxLength: 20
          items:
            type: object
            properties:
              login:
                type: string
                example: login
              password:
                type: string
                example: password
    PortLog:
      type: object
      properties:
        action:
          type: string
          example: update
        cause:
          type: string
          example: admin
        source:
          type: string
          example: adminDashboard
        extra:
          type: string
          example: extra info
        createdAt:
          type: string
          format: date-time
          example: 2022-04-03T01:13:50.182Z
    PaymentHistoryRecord:
      type: object
      properties:
        date:
          type: string
          format: date-time
          example: 2022-04-03T01:13:50.182Z
        status:
          type: string
          enum:
            - success
            - failed
        port:
          type: string
          example: 10000
          description: Номер порта
        amount:
          type: integer
          example: -10000
          description: Сумма платежа в центах
        balance:
          type: integer
          example: 25000
          description: Баланс на момент платежа
        description:
          type: string
          example: Port 10000 subscription fee
          description: Описание платежа
  responses:
    Unauthorized:
      description: Bearer-токен отсутствует, недействителен или больше не активен.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    RateLimited:
      description: Превышен настроенный лимит запросов.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
externalDocs:
  description: Руководства по интеграции LTESocks
  url: https://docs.ltesocks.io/
security:
  - bearerAuth: []
