openapi: 3.1.0
info:
  version: 1.0.0
  title: Документация Haskaplan API
  description: >
    Хаскаплан помогает бизнесу автоматизировать массовые выплаты и
    документооборот с физлицами и самозанятыми, например, с клиентами или
    исполнителями.


    Возможности OpenAPI Хаскаплан: 

    * создание выплат и получение информации по выплатам бизнеса;

    * получение информации по банковским счетам;

    * получение информации об исполнителях;

    * получение информации о подписанных документах (договорах, актах, выбитых
    чеках);

    * управление группами исполнителей и комиссиями на вывод.
servers:
  - url: https://client-api.dev.haskaplan.net
security:
  - clientID: []
    clientSecret: []
    requestSignature: []
tags:
  - name: Балансы и исполнители
    description: >
      Методы предназначены для проверки баланса по счетам и получения карточек
      исполнителей.


      Исполнители выполняют работы и получают за это вознаграждение. В Хаскаплан
      исполнители создаются автоматически при первом начислении средств.
  - name: Выплаты
    description: >-
      Методы предназначены для проведения платежей исполнителям — на баланс в
      приложении Хаскаплан или напрямую на карту или через СБП
  - name: Группы исполнителей
    description: >-
      Группы определяют условия комиссии для исполнителей. У компании может быть
      только одна “группа по умолчанию” - в нее автоматически попадают все новые
      исполнители
  - name: Работа с документами
    description: >
      В Хаскаплан документы исполнителей создаются автоматически: договоры —
      перед получением первого начисления, акты и чеки — при выводе средств.


      Все типы документов можно отфильтровать по дате от / до и исполнителю
      performer_id.
paths:
  /v1/accounts/balances:
    get:
      tags:
        - Балансы и исполнители
      operationId: GetAllAccountBalances
      summary: Получить балансы по банковским счетам
      description: >-
        Балансы банковских счетов обновляются в системе при открытии страниц
        личного кабинета (не чаще одного раза в 3 минуты) и каждые 15 минут без
        захода в ЛК.
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AccountBalance'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/performers:
    get:
      tags:
        - Балансы и исполнители
      operationId: GetAllPerformers
      summary: Получить список и балансы исполнителей
      description: >-
        Возвращает краткую информацию по всем исполнителям, включая их балансы в
        приложении Хаскаплан, статус регистрации в приложении и статус
        подписания договора
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PerformersList'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/performers/{performer_id}:
    get:
      tags:
        - Балансы и исполнители
      operationId: GetPerformerDetails
      summary: Получить данные по исполнителю
      description: >-
        Возвращает детальную информацию по исполнителю, включая данные по
        договору, группе, а также платежи с актами
      parameters:
        - name: performer_id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PerformerDetails'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/performers/self-employed/status:
    post:
      tags:
        - Балансы и исполнители
      operationId: CheckSelfEmployedStatusPost
      summary: Проверка статуса самозанятого
      description: >-
        Отправляет запрос в налоговую для проверки актуальности статуса
        самозанятого, а также чтобы убедиться, что он подтвердил необходимые
        разрешения
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                performer_id:
                  type: string
                  example: test
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SelfEmployedStatus'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/payments:
    get:
      tags:
        - Выплаты
      operationId: GetAllPayments
      summary: Получить список всех выплат
      description: >-
        Возвращает все выплаты, совершенные от лица компании. Можно
        отфильтровать по дате от / до, исполнителю performer_id, а также типу
        платежа
      parameters:
        - $ref: '#/components/parameters/FromDateParam'
        - $ref: '#/components/parameters/ToDateParam'
        - name: performer_id
          in: query
          schema:
            type: string
        - name: payment_type
          in: query
          schema:
            type: string
            enum:
              - card_direct
              - sbp_direct
              - sbp_mp
              - card_mp
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentsList'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/payments/registry:
    post:
      tags:
        - Выплаты
      operationId: CreatePaymentRegistry
      summary: Создать выплату через приложение с одновременным созданием исполнителя
      description: >
        Исполнителю автоматически отправится приглашение на номер телефона для
        подписания договора. Далее исполнитель сможет зайти в мобильное
        приложение Хаскаплан, пройти верификацию, подписать договор и вывести
        средства себе на карту или по СБП. 


        После создания реестра выплат необходимо проверить статус начислений
        методом /v1/payments/registry/{request_id}. Метод отобразит статус
        начисления реестра в приложение; для проверки списаний из приложения
        воспользуйтесь методом /v1/payments.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentRegistryRequest'
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRegistryResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/payments/direct:
    post:
      tags:
        - Выплаты
      operationId: CreateDirectPayment
      summary: Создать выплату исполнителю напрямую на карту или через СБП
      description: >
        Для каждого исполнителя необходимо передать тип платежного метода и
        реквизиты. 


        После создания реестра выплат необходимо проверить статус выплат методом
        /v1/payments/registry/{request_id}. 
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DirectPaymentRequest'
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DirectPaymentResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/payments/registry/{request_id}:
    get:
      tags:
        - Выплаты
      operationId: GetPaymentRegistryStatus
      summary: Получить статус выплат
      description: Возвращает список платежей в реестре и их статусов с кодом ошибки
      parameters:
        - name: request_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRegistryStatus'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/documents/agreements:
    get:
      tags:
        - Работа с документами
      operationId: GetSignedAgreements
      summary: Получить все подписанные договоры
      description: Получить все подписанные договоры
      parameters:
        - $ref: '#/components/parameters/FromDateParam'
        - $ref: '#/components/parameters/ToDateParam'
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignedAgreementsList'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/documents/acts:
    get:
      tags:
        - Работа с документами
      operationId: GetSignedActs
      summary: Получить все подписанные акты выполненных работ
      description: Получить все подписанные акты выполненных работ
      parameters:
        - $ref: '#/components/parameters/FromDateParam'
        - $ref: '#/components/parameters/ToDateParam'
        - name: performer_id
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignedActsList'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/documents/self-employed/receipts:
    get:
      tags:
        - Работа с документами
      operationId: GetSelfEmployedReceipts
      summary: Получить все выставленные чеки
      description: Получить все выставленные чеки
      parameters:
        - $ref: '#/components/parameters/FromDateParam'
        - $ref: '#/components/parameters/ToDateParam'
        - name: performer_id
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SelfEmployedReceiptsList'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/documents/{document_type}/{id}/file:
    get:
      tags:
        - Работа с документами
      operationId: DownloadDocumentFile
      summary: Скачать документ по идентификатору
      description: Скачать документ по идентификатору
      parameters:
        - name: document_type
          in: path
          required: true
          schema:
            type: string
            enum:
              - acts
              - agreements
              - receipts
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Document file
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/groups:
    get:
      tags:
        - Группы исполнителей
      operationId: GetAllGroups
      summary: Получить список всех групп исполнителей
      description: Получить список всех групп исполнителей
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupsList'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
    post:
      tags:
        - Группы исполнителей
      operationId: CreateGroup
      summary: Создать новую группу исполнителей
      description: Метод также позволяет отредактировать существующую группу
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GroupCreateRequest'
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupCreateResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/groups/{group_id}:
    delete:
      tags:
        - Группы исполнителей
      operationId: DeleteGroup
      summary: Удалить группу исполнителей
      description: >-
        Удалить можно только пустую группу - перед выполнением действия
        необходимо перенести всех исполнителей в другие группы. Группу по
        умолчанию удалить нельзя
      parameters:
        - name: group_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Группа успешно удалена
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
    get:
      tags:
        - Группы исполнителей
      operationId: GetGroupPerformers
      summary: Получить список исполнителей в группе
      description: Получить список исполнителей в группе
      parameters:
        - name: group_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Успешный запрос
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupPerformersList'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
  /v1/groups/transfer:
    post:
      tags:
        - Группы исполнителей
      operationId: TransferPerformersToGroup
      summary: Перенести исполнителей в другую группу
      description: Перенести исполнителей в другую группу
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PerformersTransferRequest'
      responses:
        '200':
          description: Операция успешно
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PerformersTransferResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
components:
  schemas:
    AccountBalance:
      type: object
      required:
        - account_id
        - account
        - balanceWithHolds
        - balance
        - performers_balances
      properties:
        account_id:
          type: string
          example: '000000'
        account:
          type: string
          example: '30232810277700700001'
        balanceWithHolds:
          type: number
          example: 20000
          description: >-
            Баланс счета за вычетом невыведенных исполнителями средств из
            приложения. Может быть отрицательным
        balance:
          type: number
          example: 30000
        performers_balances:
          type: number
          example: 10000
          description: >-
            Сумма всех остатков по балансам исполнителей в мобильном приложении
            Хаскаплан
    PerformersList:
      type: object
      properties:
        performers:
          type: array
          items:
            $ref: '#/components/schemas/PerformerInfo'
    PerformerInfo:
      type: object
      required:
        - performer_id
        - phone
        - TIN
        - agreement_type
        - balance
        - is_logged_in
        - is_signed
      properties:
        performer_id:
          type: string
          example: uuid
          description: Идентификатор баланса исполнителя
        phone:
          type: string
          example: '+79012345678'
        TIN:
          type: string
          example: '123456789012'
          description: ИНН исполнителя
        agreement_type:
          type: string
          example: ФЛ
          description: Тип договора, заключенного с исполнителем для работы с балансом
        balance:
          type: number
          example: 1500
          description: Баланс по договору в приложении Хаскаплан
        is_logged_in:
          type: boolean
          example: true
          description: Флаг первого входа в приложение Хаскаплан
        is_signed:
          type: boolean
          example: false
          description: Флаг подписания договора для вывода средств
    PerformerDetails:
      type: object
      properties:
        performer:
          $ref: '#/components/schemas/PerformerInfo'
        agreement:
          type: object
          properties:
            id:
              type: string
              example: uuid
            number:
              type: string
              example: test
            date:
              type: string
              format: date
              example: '2025-10-10'
        group:
          type: object
          properties:
            id:
              type: string
              example: uuid
            name:
              type: string
              example: name
            fee_rate:
              type: number
              example: 10.25
            min_fee:
              type: number
              example: 10.25
        payments:
          type: array
          items:
            $ref: '#/components/schemas/PaymentInfo'
    SelfEmployedStatus:
      type: object
      required:
        - is_self_employed
        - checked_at
      properties:
        is_self_employed:
          type: boolean
          example: true
        checked_at:
          type: string
          format: date-time
          example: '2025-10-10 00:00:00'
        details:
          type: object
    PaymentsList:
      type: object
      properties:
        payments:
          type: array
          items:
            $ref: '#/components/schemas/PaymentInfo'
    PaymentInfo:
      type: object
      required:
        - id
        - date
        - amount
        - performer_id
        - performer_name
        - status
        - type
      properties:
        id:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
        date:
          type: string
          format: date-time
          example: '2025-10-10 00:00:00'
        amount:
          type: number
          example: 10.25
        performer_id:
          type: string
          example: uuid
        performer_name:
          type: string
          example: name
        status:
          type: string
          example: pending
          enum:
            - pending
            - processed
            - failed
            - refunded
        type:
          type: string
          example: card_direct
          description: Тип списания
          enum:
            - card_direct
            - sbp_direct
            - sbp_mp
            - card_mp
        act_id:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
          description: Идентификатор акта по платежу
        receipt_id:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
          description: Идентификатор чека по платежу
    PaymentRegistryRequest:
      type: object
      required:
        - requestID
        - sourceAccountID
        - payments
      properties:
        requestID:
          type: string
          format: uuid
          example: 4faeea50-d2bb-4f73-8888-f9034d6cc804
          description: Идентификатор реестра
        sourceAccountID:
          type: string
          example: b318731d-d2bb-4f73-bd85-f9034d6cc404
          description: Идентификатор банковского счета для списания
        payments:
          type: array
          items:
            $ref: '#/components/schemas/PaymentRegistryItem'
    PaymentRegistryItem:
      type: object
      required:
        - paymentID
        - amount
        - currency
        - purpose
        - performer
      properties:
        paymentID:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
          description: Идентификатор платежа
        amount:
          type: string
          example: '10000'
        currency:
          type: string
          example: '643'
        purpose:
          type: string
          example: Оплата по договору №12345 от 01.01.2024
        performer:
          $ref: '#/components/schemas/PerformerDetailsForPayment'
    PerformerDetailsForPayment:
      type: object
      required:
        - phone
        - agreementType
      properties:
        firstName:
          type: string
          example: Иван
        middleName:
          type: string
          example: Иванович
        lastName:
          type: string
          example: Иванов
        TIN:
          type: string
          example: '789012345678'
          description: ИНН исполнителя
        phone:
          type: string
          example: '+79012345678'
        country:
          type: string
          example: RUS
        agreementType:
          type: string
          example: ФЛ
          description: Тип договора, заключенного с исполнителем для работы с балансом
    PaymentRegistryResponse:
      type: object
      required:
        - requestID
        - status
      properties:
        requestID:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
          description: Идентификатор реестра платежей
        status:
          type: string
          example: created
          enum:
            - created
            - processing
            - completed
            - partially_completed
            - failed
        payments_count:
          type: integer
          example: 0
          description: Количество успешно обработанных платежей
    PaymentRegistryStatus:
      type: object
      required:
        - requestID
        - status
        - payments
      properties:
        requestID:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
          description: Идентификатор реестра платежей
        status:
          type: string
          example: created
          enum:
            - created
            - processing
            - completed
            - partially_completed
            - failed
        payments:
          type: array
          items:
            $ref: '#/components/schemas/PaymentStatusItem'
    PaymentStatusItem:
      type: object
      required:
        - paymentID
        - status
      properties:
        paymentID:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
          description: Идентификатор платежа
        status:
          type: string
          example: created
          enum:
            - created
            - processing
            - completed
            - failed
        error_message:
          type: string
          example: uuid
    DirectPaymentRequest:
      type: object
      required:
        - requestID
        - sourceAccountID
        - payments
      properties:
        requestID:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
          description: Идентификатор реестра платежей
        sourceAccountID:
          type: string
          example: uuid
          description: Идентификатор банковского счета для списания
        payments:
          type: array
          items:
            $ref: '#/components/schemas/DirectPaymentItem'
    DirectPaymentItem:
      type: object
      required:
        - paymentID
        - amount
        - currency
        - purpose
        - performer
      properties:
        paymentID:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
        amount:
          type: string
          example: card
        currency:
          type: string
          example: card
        purpose:
          type: string
          example: card
        performer:
          $ref: '#/components/schemas/DirectPaymentPerformer'
    DirectPaymentPerformer:
      type: object
      required:
        - firstName
        - lastName
        - country
        - agreementType
        - paymentMethod
      properties:
        firstName:
          type: string
          example: Иван
        middleName:
          type: string
          example: Иванович
        lastName:
          type: string
          example: Иванов
        TIN:
          type: string
          example: '123456789012'
        phone:
          type: string
          example: '+79012345678'
        country:
          type: string
          example: RUS
        agreementType:
          type: string
          example: ФЛ
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethodDetails'
    PaymentMethodDetails:
      type: object
      required:
        - paymentMethodType
      properties:
        paymentMethodType:
          type: string
          example: card
          enum:
            - card
            - sbp
        cardPan:
          type: string
          example: '2200700122223333'
        sbpPhone:
          type: string
          example: '+79012345678'
    DirectPaymentResponse:
      type: object
      required:
        - requestID
        - status
      properties:
        requestID:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
        status:
          type: string
          example: created
          enum:
            - created
            - processing
            - completed
            - failed
        payments_count:
          type: integer
          example: 0
          description: Количество успешно обработанных платежей
    SignedActsList:
      type: object
      properties:
        acts:
          type: array
          items:
            $ref: '#/components/schemas/SignedActInfo'
    SignedActInfo:
      type: object
      required:
        - id
        - name
        - performer_id
        - performer_name
        - date
        - amount
      properties:
        id:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
        name:
          type: string
          example: name
        performer_id:
          type: string
          example: uuid
        performer_name:
          type: string
          example: name
        date:
          type: string
          format: date-time
          example: '2025-10-10 00:00:00'
        amount:
          type: number
          example: 10.25
    SignedAgreementsList:
      type: object
      properties:
        agreements:
          type: array
          items:
            $ref: '#/components/schemas/SignedAgreementInfo'
    SignedAgreementInfo:
      type: object
      required:
        - id
        - name
        - performer_id
        - performer_name
        - date
      properties:
        id:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
        name:
          type: string
          example: name
        performer_id:
          type: string
          example: uuid
        performer_name:
          type: string
          example: name
        date:
          type: string
          format: date-time
          example: '2025-10-10 00:00:00'
    SelfEmployedReceiptsList:
      type: object
      properties:
        receipts:
          type: array
          items:
            $ref: '#/components/schemas/SelfEmployedReceiptInfo'
    SelfEmployedReceiptInfo:
      type: object
      required:
        - id
        - performer_id
        - performer_name
        - date
        - amount
      properties:
        id:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
        performer_id:
          type: string
          example: uuid
        performer_name:
          type: string
          example: name
        date:
          type: string
          format: date-time
          example: '2025-10-10 00:00:00'
        amount:
          type: number
          example: 10.25
    GroupsList:
      type: object
      properties:
        groups:
          type: array
          items:
            $ref: '#/components/schemas/GroupInfo'
    GroupInfo:
      type: object
      required:
        - id
        - name
        - fee_rate
        - min_fee
        - is_default
        - performers_count
      properties:
        id:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
        name:
          type: string
          example: name
        fee_rate:
          type: number
          example: 10.25
        min_fee:
          type: number
          example: 10.25
        is_default:
          type: boolean
          example: true
        performers_count:
          type: integer
          example: 0
    GroupCreateRequest:
      type: object
      required:
        - name
      properties:
        id:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
          description: Required for edit, null for create
        name:
          type: string
          example: name
        fee_rate:
          type: number
          example: 10.25
        min_fee:
          type: number
          example: 10.25
    GroupCreateResponse:
      type: object
      required:
        - id
      properties:
        id:
          type: string
          format: uuid
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
    GroupPerformersList:
      type: object
      properties:
        performers:
          type: array
          items:
            $ref: '#/components/schemas/PerformerInfo'
    PerformersTransferRequest:
      type: object
      required:
        - group_id
        - performer_ids
      properties:
        group_id:
          example: 4b41b0ee-c144-40b4-87c0-6d2f59cb2915
          type: string
          format: uuid
        performer_ids:
          type: array
          items:
            type: string
    PerformersTransferResponse:
      type: object
      required:
        - transferred_count
        - failed_count
      properties:
        transferred_count:
          type: integer
          example: 0
        failed_count:
          type: integer
          example: 0
        failed_performers:
          type: array
          items:
            type: string
  parameters:
    FromDateParam:
      name: from
      in: query
      description: Start date for filtering
      schema:
        type: string
        format: date
    ToDateParam:
      name: to
      in: query
      description: End date for filtering
      schema:
        type: string
        format: date
  responses:
    ErrorResponse:
      description: Error response
      content:
        application/json:
          schema:
            type: object
            required:
              - code
              - message
            properties:
              code:
                type: integer
                example: 0
              message:
                type: string
                example: message
  securitySchemes:
    clientID:
      type: apiKey
      in: header
      name: client-id
    clientSecret:
      type: apiKey
      in: header
      name: client-secret
    requestSignature:
      type: apiKey
      in: header
      name: request-signature
