openapi: 3.0.3
info:
  title: simpay-api
  description: '[English version](/en/apis)'
  version: 1.0.0
  x-logo:
    url: https://simpay.pl/assets/svg/logo-main.svg
    altText: SimPay
  termsOfService: https://simpay.pl/uploads/download/documents/regulamin.pdf
  contact:
    name: Support
    url: https://simpay.pl/kontakt
    email: kontakt@simpay.pl
servers:
  - url: https://api.simpay.pl
tags:
  - name: SMS
  - name: DirectBilling
  - name: Payment
    x-displayName: Płatności online
paths:
  /sms:
    get:
      security:
        - bearerAuth:
            - sms.services
      summary: Lista usług
      operationId: smsServiceList
      description: Pobieranie listy dostępnych usług SMS na koncie
      tags:
        - SMS
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/smsGetServices'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /sms/{serviceId}:
    get:
      security:
        - bearerAuth:
            - sms.services.show
      summary: Pobieranie informacji o usłudze
      operationId: smsServiceShow
      tags:
        - SMS
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/smsGetService'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      security:
        - bearerAuth:
            - sms.services.code
      summary: Weryfikacja poprawności kodu
      operationId: smsServiceCheckCode
      tags:
        - SMS
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      requestBody:
        $ref: '#/components/requestBodies/smsServiceCheckCode'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/smsServiceCheckCodeUsed'
                  - $ref: '#/components/schemas/smsServiceCheckCodeNotUsed'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /sms/{serviceId}/transactions:
    get:
      security:
        - bearerAuth:
            - sms.services.transactions
      summary: Pobieranie listy transakcji
      operationId: smsTransactionsList
      tags:
        - SMS
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/smsGetServiceTransactions'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /sms/{serviceId}/transactions/{transactionId}:
    get:
      security:
        - bearerAuth:
            - sms.services.transactions.show
      summary: Pobieranie informacji o transakcji
      operationId: smsTransactionsShow
      tags:
        - SMS
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: path
          name: transactionId
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/smsGetServiceTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /sms/{serviceId}/numbers:
    get:
      security:
        - bearerAuth:
            - sms.services.numbers
      summary: Pobieranie informacji o numerach dla usługi
      operationId: smsServiceNumbers
      tags:
        - SMS
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/smsServiceNumbers'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /sms/{serviceId}/numbers/{number}:
    get:
      security:
        - bearerAuth:
            - sms.services.numbers.show
      summary: Pobieranie informacji o numerze dla usługi
      operationId: smsServiceNumber
      tags:
        - SMS
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: path
          name: number
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/smsServiceNumber'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /sms/numbers:
    get:
      security:
        - bearerAuth:
            - sms.numbers
      summary: Pobieranie wszystkich dostępnych numerów
      operationId: smsNumbers
      tags:
        - SMS
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/smsServiceNumbers'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /sms/numbers/{number}:
    get:
      security:
        - bearerAuth:
            - sms.numbers.show
      summary: Pobieranie numeru
      operationId: smsNumber
      tags:
        - SMS
      parameters:
        - in: path
          name: number
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/smsServiceNumber'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /directbilling:
    get:
      security:
        - bearerAuth:
            - directbilling.services
      summary: Pobieranie listy usług
      operationId: directbillingGetServices
      description: ''
      tags:
        - DirectBilling
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/directbillingGetServicesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /directbilling/{serviceId}:
    get:
      security:
        - bearerAuth:
            - directbilling.services.show
      summary: Pobieranie informacji o usłudze
      operationId: directbillingService
      description: ''
      tags:
        - DirectBilling
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/directbillingGetServiceResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /directbilling/{serviceId}/calculate:
    get:
      security:
        - bearerAuth:
            - directbilling.services
      summary: Kalkulacja prowizji
      operationId: directbillingServiceCalculate
      description: ''
      tags:
        - DirectBilling
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: query
          name: amount
          required: true
          description: Kwota jaką chcemy otrzymać “na czysto”
          schema:
            type: number
            format: float
          allowReserved: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/directbillingServiceCalculateResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /directbilling/{serviceId}/transactions:
    get:
      security:
        - bearerAuth:
            - directbilling.transactions
      summary: Pobieranie listy transakcji
      operationId: directbillingTransactions
      description: ''
      tags:
        - DirectBilling
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - name: filter[status]
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/directbillingTransactionStatus'
        - name: filter[phoneNumber]
          in: query
          required: false
          schema:
            type: string
            description: Numer telefonu z jakiego została przeprowadzona trasnakcja
            example: '48123123123'
        - name: filter[control]
          in: query
          required: false
          schema:
            type: string
            description: Pole kontrolne z systemu partnera
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/directbillingGetTransactionsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      security:
        - bearerAuth:
            - directbilling.transactions.create
      summary: Generowanie transakcji
      operationId: directbillingTransactionCreate
      description: ''
      tags:
        - DirectBilling
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      requestBody:
        $ref: '#/components/requestBodies/directbillingTransactionCreateOnlyNecessary'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/directbillingTransactionCreateResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableContent'
  /directbilling/{serviceId}/transactions/{transactionId}:
    get:
      security:
        - bearerAuth:
            - directbilling.transactions.show
      summary: Pobieranie informacji o transakcji
      operationId: directbillingTransaction
      description: ''
      tags:
        - DirectBilling
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: path
          name: transactionId
          required: true
          schema:
            $ref: '#/components/schemas/TransactionId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/directbillingGetTransactionResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /payment:
    get:
      security:
        - bearerAuth:
            - payment.services
      summary: Pobieranie listy usług
      operationId: paymentGetServices
      description: ''
      tags:
        - Payment
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentGetServicesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /payment/{serviceId}:
    get:
      security:
        - bearerAuth:
            - payment.service
      summary: Pobieranie szczegółów usługi
      operationId: paymentGetService
      description: ''
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentGetServiceResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /payment/{serviceId}/channels:
    get:
      security:
        - bearerAuth:
            - payment.channels
      summary: Pobieranie listy kanałów dla usługi
      operationId: paymentGetChannels
      description: ''
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentGetServiceChannelsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /payment/{serviceId}/transactions:
    get:
      security:
        - bearerAuth:
            - payment.transactions
      summary: Pobieranie listy transakcji
      operationId: paymentGetTransactions
      description: ''
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentGetTransactionsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      security:
        - bearerAuth:
            - payment.transactions.create
      summary: Generowanie transakcji
      operationId: paymentTransactionCreate
      description: ''
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/paymentCreateTransactionRequest'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentTransactionCreateResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableContent'
  /payment/{serviceId}/transactions/{transactionId}:
    get:
      security:
        - bearerAuth:
            - payment.transaction
      summary: Pobieranie szczegółów transakcji
      operationId: paymentGetTransaction
      description: ''
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: path
          name: transactionId
          required: true
          schema:
            $ref: '#/components/schemas/TransactionId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentGetTransactionResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /payment/{serviceId}/transactions/{transactionId}/refunds:
    get:
      security:
        - bearerAuth:
            - payment.transactions.create
      summary: Pobieranie listy zwrotów dla transakcji
      operationId: paymentGetTransactionRefunds
      description: ''
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: path
          name: transactionId
          required: true
          schema:
            $ref: '#/components/schemas/TransactionId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentGetTransactionRefundsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      security:
        - bearerAuth:
            - payment.transactions.create
      summary: Utworzenie zwrotu dla transakcji
      operationId: paymentMakeTransactionRefund
      description: ''
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: path
          name: transactionId
          required: true
          schema:
            $ref: '#/components/schemas/TransactionId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentMakeTransactionRefundResponse'
        '400':
          description: Błąd
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - message
                properties:
                  success:
                    type: boolean
                    description: Request status
                  errorCode:
                    type: string
                    description: Error status code
                  message:
                    type: string
                    description: Error message
                example:
                  success: false
                  message: The wallet balance is smaller than the transaction amount.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Błąd
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - message
                properties:
                  success:
                    type: boolean
                    description: Request status
                  errorCode:
                    type: string
                    description: Error status code
                  message:
                    type: string
                    description: Error message
                example:
                  success: false
                  errorCode: TRANSACTION_NOT_PAID
                  message: Transaction is not paid.
  /payment/{serviceId}/transactions/{transactionId}/refunds/{refundId}:
    get:
      security:
        - bearerAuth:
            - payment.transactions.create
      summary: Pobieranie pojedynczego zwrotu w transakcji
      operationId: paymentTransactionRefundShow
      description: ''
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: path
          name: transactionId
          required: true
          schema:
            $ref: '#/components/schemas/TransactionId'
        - in: path
          name: refundId
          required: true
          schema:
            $ref: '#/components/schemas/RefundId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentShowTransactionRefundResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /payment/{serviceId}/currencies:
    get:
      security:
        - bearerAuth:
            - payment.services
      summary: Pobieranie listy walut dla usługi
      operationId: paymentGetCurrencies
      description: ''
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentGetCurrenciesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /payment/{serviceId}/blik/level0/{transactionId}:
    post:
      security:
        - bearerAuth:
            - payment.transactions
      summary: Podanie kodu BLIK do transakcji Level 0
      operationId: paymentBlikLevel0
      description: Zobacz https://docs.simpay.pl/payment/blik-level0 po więcej informacji.
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: path
          name: transactionId
          required: true
          schema:
            $ref: '#/components/schemas/TransactionId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/paymentBlik0TransactionRequest'
      responses:
        '204':
          description: Payment confirmation sent to Payers Banking App
        '400':
          description: Invalid BLIK code or BLIK ticket related error
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - errorCode
                  - message
                properties:
                  success:
                    type: boolean
                    description: Request status
                  errorCode:
                    type: string
                    description: Error status code
                  message:
                    type: string
                    description: Error message
                example:
                  success: false
                  errorCode: INVALID_BLIK_CODE
                  message: Invalid BLIK code.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableContent'
        '429':
          description: >-
            Zbyt wiele nieudanych prób kodu BLIK w przeciągu minuty (per
            płacący)
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - errorCode
                  - message
                  - data
                properties:
                  success:
                    type: boolean
                    description: Request status
                  errorCode:
                    type: string
                    description: Error status code
                  message:
                    type: string
                    description: Error message
                  data:
                    type: object
                    properties:
                      retryAfter:
                        type: integer
                        description: Next attempt available in seconds (for this payer)
                example:
                  success: false
                  errorCode: TOO_MANY_FAILED_ATTEMPTS
                  message: >-
                    Too many failed attempts with providing BLIK ticket for this
                    user.
                  data:
                    retryAfter: 17
  /payment/{serviceId}/subscriptions:
    get:
      security:
        - bearerAuth:
            - payment.transactions
      summary: Pobieranie listy subskrypcji
      operationId: paymentSubscriptionIndex
      description: >-
        Zobacz https://docs.simpay.pl/payment/blik-recurrent po więcej
        informacji.
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: query
          name: filter[status]
          required: false
          schema:
            $ref: '#/components/schemas/subscriptionStatus'
          example: subscription_active
        - in: query
          name: filter[mode]
          required: false
          schema:
            $ref: '#/components/schemas/subscriptionMode'
          example: BLIK
        - in: query
          name: filter[uuid]
          required: false
          schema:
            $ref: '#/components/schemas/SubscriptionId'
          example: 019970c6-3d3e-708c-9313-5f89e251e2c0
        - in: query
          name: page
          required: false
          description: Numer strony
          example: 1
          schema:
            type: integer
            minimum: 1
            default: 1
        - in: query
          name: perPage
          required: false
          description: Ile wyników na stronę pokazać
          example: 20
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 20
        - in: query
          name: sort
          required: false
          schema:
            type: string
            enum:
              - '-created_at'
              - created_at
          description: >-
            Pokazuj w kolejności od (-created_at = najnowszych, created_at =
            najstarszych)
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentGetSubscriptionsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableContent'
  /payment/{serviceId}/blik/subscriptions:
    post:
      security:
        - bearerAuth:
            - payment.transactions
      summary: Utworzenie subskrypcji
      operationId: paymentBlikSubscriptionCreate
      description: >-
        Zobacz https://docs.simpay.pl/payment/blik-recurrent po więcej
        informacji.
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/paymentBlikSubscriptionCreateRequest'
            examples:
              modelA:
                summary: Model A
                value:
                  transactionId: bda2d37c-e64d-4855-af7c-91aac91a0d6a
                  ticket:
                    T6: '462755'
                  alias:
                    value: AABBCC
                    type: PAYID
                    label: Płatność za plan premium w serwisie aaa
                  options:
                    model: A
                    expiresAt: '2030-09-22'
                    frequency: 30D
                    amountLimitPerTransaction: 30
                    initiationDate: '2025-09-22'
                    amountLimitTotal: 30000
              modelO:
                summary: Model O
                value:
                  transactionId: bda2d37c-e64d-4855-af7c-91aac91a0d6a
                  ticket:
                    T6: '462755'
                  alias:
                    value: AABBCC
                    type: PAYID
                    label: Płatność za plan premium w serwisie aaa
                  options:
                    model: O
                    expiresAt: '2030-09-22'
                    initiationDate: '2025-09-22'
              modelM:
                summary: Model M
                value:
                  transactionId: bda2d37c-e64d-4855-af7c-91aac91a0d6a
                  ticket:
                    T6: '462755'
                  alias:
                    value: AABBCC
                    type: PAYID
                    label: Płatność za plan premium w serwisie aaa
                  options:
                    model: M
                    expiresAt: '2030-09-22'
                    initiationDate: '2025-09-22'
                    frequency: 30D
      responses:
        '201':
          description: Subskrypcja oraz alias utworzone
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                properties:
                  success:
                    type: boolean
                    description: Status zapytania
                  data:
                    type: object
                    required:
                      - subscriptionId
                      - aliasId
                    properties:
                      subscriptionId:
                        $ref: '#/components/schemas/SubscriptionId'
                      aliasId:
                        $ref: '#/components/schemas/AliasId'
                    example:
                      subscriptionId: 019970c6-3d3e-708c-9313-5f89e251e2c0
                      aliasId: 019970c6-3ce8-71e7-8214-20fd635532fb
                example:
                  success: true
                  data:
                    subscriptionId: 019970c6-3d3e-708c-9313-5f89e251e2c0
                    aliasId: 019970c6-3ce8-71e7-8214-20fd635532fb
        '400':
          description: Błędny kod BLIK lub inny podobny błąd
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - errorCode
                  - message
                properties:
                  success:
                    type: boolean
                    description: Request status
                  errorCode:
                    type: string
                    description: Error status code
                  message:
                    type: string
                    description: Error message
                example:
                  success: false
                  errorCode: INVALID_BLIK_CODE
                  message: Invalid BLIK code.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Alias już istnieje
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - errorCode
                  - message
                properties:
                  success:
                    type: boolean
                    description: Request status
                  errorCode:
                    type: string
                    description: Error status code
                  message:
                    type: string
                    description: Error message
                example:
                  success: false
                  errorCode: ALIAS_ALREADY_EXISTS
                  message: >-
                    Selected alias value has been already in our system. You
                    must pass unique alias value, for example subscription id.
        '422':
          $ref: '#/components/responses/UnprocessableContent'
  /payment/{serviceId}/blik/subscriptions/{subscriptionId}/autopayment:
    post:
      security:
        - bearerAuth:
            - payment.transactions
      summary: Dokonaj Płatności Powtarzalnej BLIK
      operationId: paymentBlikSubscriptionExecuteAutoPayment
      description: >-
        Zobacz https://docs.simpay.pl/payment/blik-recurrent po więcej
        informacji.
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: path
          name: subscriptionId
          required: true
          schema:
            $ref: '#/components/schemas/SubscriptionId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/paymentBlikSubscriptionExecuteAutoPaymentRequest
            example:
              transactionId: 9475bfd4-0935-4945-8621-2ec22e561ac9
              descriptions:
                line1: Subskrypcja na muzykę za wrzesień
              alias:
                label: Płatność za plan Gold
                noDelay: true
      responses:
        '200':
          description: Subskrypcja przekazana do realizacji
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                properties:
                  success:
                    type: boolean
                    description: Status zapytania
                  data:
                    type: object
                    required:
                      - needsUserConfirmation
                    properties:
                      needsUserConfirmation:
                        type: boolean
                        description: >-
                          Jeśli wartość false - transakcja przekazana od razu do
                          BLIK. Jeśli true - system antifraud wykrył ryzyko i
                          transakcja czeka na ręczne potwierdzenie przez
                          płacącego
                    example:
                      needsUserConfirmation: false
                example:
                  success: true
                  data:
                    needsUserConfirmation: false
        '400':
          description: Błąd przy realizacji Płatności Powtarzalnej
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - errorCode
                  - message
                properties:
                  success:
                    type: boolean
                    description: Request status
                  errorCode:
                    type: string
                    description: Error status code
                  message:
                    type: string
                    description: Error message
                example:
                  success: false
                  errorCode: INVALID_BLIK_CODE
                  message: Invalid BLIK code.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableContent'
  /payment/{serviceId}/blik/aliases:
    get:
      security:
        - bearerAuth:
            - payment.transactions
      summary: Pobieranie listy aliasów BLIK
      operationId: paymentBlikAliasesIndex
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
        - in: query
          name: filter[status]
          required: false
          schema:
            $ref: '#/components/schemas/blikAliasStatus'
          example: alias_active
        - in: query
          name: filter[type]
          required: false
          schema:
            $ref: '#/components/schemas/blikAliasType'
          example: PAYID
        - in: query
          name: filter[uuid]
          required: false
          schema:
            $ref: '#/components/schemas/AliasId'
          example: 019970c6-3ce8-71e7-8214-20fd635532fb
        - in: query
          name: filter[value]
          required: false
          schema:
            type: string
            description: Wartość aliasu BLIK
            maxLength: 64
            example: AABBCC
          example: 019970c6-3ce8-71e7-8214-20fd635532fb
        - in: query
          name: page
          required: false
          description: Numer strony
          example: 1
          schema:
            type: integer
            minimum: 1
            default: 1
        - in: query
          name: perPage
          required: false
          description: Ile wyników na stronę pokazać
          example: 20
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 20
        - in: query
          name: sort
          required: false
          schema:
            type: string
            enum:
              - '-created_at'
              - created_at
          description: >-
            Pokazuj w kolejności od (-created_at = najnowszych, created_at =
            najstarszych)
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/paymentGetBlikAliasesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableContent'
    delete:
      security:
        - bearerAuth:
            - payment.transactions
      summary: Usuwanie/wyrejestrowanie aliasu
      operationId: paymentBlikAliasUnregister
      description: >-
        Zobacz https://docs.simpay.pl/payment/blik-recurrent po więcej
        informacji.
      tags:
        - Payment
      parameters:
        - in: path
          name: serviceId
          required: true
          schema:
            $ref: '#/components/schemas/ServiceId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/paymentBlikAliasUnregisterRequest'
            examples:
              simpayId:
                summary: Wyrejestrowanie przez ID aliasu SimPay
                value:
                  uuid: 0198a54d-05d9-7177-9ac6-5d9831bc988d
                  reason: Anulowanie planu
              aliasValueAndType:
                summary: Wyrejestrowanie przez value + type aliasu
                value:
                  value: AABBCC
                  type: PAYID
                  reason: Anulowanie planu
      responses:
        '204':
          description: >-
            Alias został wyrejestrowany. Zostanie wysłany IPN
            `blik:alias_status_changed`
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableContent'
x-webhooks:
  directbillingTransactionNotification:
    post:
      summary: Odbieranie informacji o transakcji DirectBilling
      description: >
        # Sygnatura


        ## Obliczanie sygnatury przy odbieraniu notyfikacji

        Sygnature generujemy za pomocą zestawienia ze sobą wszystkich odebranych
        parametrów (oprócz signature) do API w kolejności z dostępnej powyżej
        tabli oddzielając je seperatorem | i dodając na końcu klucz dostępny w
        panelu klienta w usłudze.<br/>

        Hashowanie musi odbyć się za pomocą sha256.<br/>

        Przykład: <br/>

        `dc261d4f-31ef-4728-bfd6-97bbe2a5ef0a|e14f8074|transaction_db_payed|11.07|13.67|5.00|https://www.simpay.pl/complete|https://www.simpay.pl/failure|test|123123123|1|klucz`


        Notyfikacja wysyłana jest metodą `POST` i wymaga od Ciebie odpowiedzi w
        body `OK` oraz Http Code `200`
      operationId: directbillingTransactionNotification
      tags:
        - DirectBilling
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/directbillingTransactionNotification'
      responses:
        '200':
          description: >-
            Return a 200 status to indicate that the data was received
            successfully
          content:
            text/plain:
              schema:
                type: string
                default: OK
              examples:
                test_request:
                  value: OK
  paymentTransactionNotification:
    post:
      summary: Odbieranie informacji o transakcji płatności online
      description: |
        # Zapoznaj się z linkiem poniżej. Tam uzyskasz wszystkie szczegóły:
        https://docs.simpay.pl/notifications/payment
      operationId: paymentTransactionNotification
      tags:
        - Payment
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/paymentTransactionNotification'
      responses:
        '200':
          description: >-
            Return a 200 status to indicate that the data was received
            successfully
          content:
            text/plain:
              schema:
                type: string
                default: OK
              examples:
                test_request:
                  value: OK
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
  schemas:
    ServiceId:
      type: string
      description: Id usługi
      pattern: ^[0-9a-f]{8}$
      minLength: 8
      maxLength: 8
    ServiceType:
      type: string
      description: Typ usługi SMS
      enum:
        - ONE_TIME_CODE
        - CODE_PACK
        - API_URL
    ServiceStatus:
      type: string
      description: Status usługi
      enum:
        - service_new
        - service_active
        - service_blocked
        - service_rejected
        - service_verify
        - service_ongoing_registration
    DateTime:
      type: string
      format: date-time
      description: 'Data utworzenia w formacie: ISO 8601'
    smsServiceList:
      type: object
      required:
        - id
        - type
        - status
        - name
        - prefix
        - suffix
        - adult
        - created_at
      properties:
        id:
          $ref: '#/components/schemas/ServiceId'
        type:
          $ref: '#/components/schemas/ServiceType'
        status:
          $ref: '#/components/schemas/ServiceStatus'
        name:
          type: string
          description: Nazwa usługi
        prefix:
          type: string
          description: Prefix usługi, czyli pierwszy człon treści SMS np. SIM
        suffix:
          type: string
          description: Suffix usługi, czyli drugi człon treści SMS
        description:
          type: string
          description: Opis usługi
        adult:
          type: boolean
          description: Informacja o tym czy usługa jest 18+
        created_at:
          $ref: '#/components/schemas/DateTime'
    Pagination:
      type: object
      required:
        - total
        - count
        - per_page
        - current_page
        - total_pages
        - links
      properties:
        total:
          type: integer
          description: Liczba wszystkich rekordów
          example: 1
        count:
          type: integer
          description: Liczba rekordów na danej stronie
          example: 1
        per_page:
          type: integer
          description: Maksymalna ilość rekordów na strone
          example: 15
        current_page:
          type: integer
          description: Aktualna strona
          example: 1
        total_pages:
          type: integer
          description: Ilość stron
          example: 1
        links:
          type: object
          description: Adresy URL do stron
          required:
            - next_page
            - prev_page
          properties:
            next_page:
              nullable: true
              type: string
              format: url
              example: null
              description: Adres URL do następnej strony
            prev_page:
              nullable: true
              type: string
              format: url
              example: null
              description: Adres URL do poprzedniej strony
    smsGetServices:
      type: object
      required:
        - success
        - data
        - pagination
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            $ref: '#/components/schemas/smsServiceList'
        pagination:
          $ref: '#/components/schemas/Pagination'
      example:
        success: true
        data:
          - id: d151e4f9
            type: ONE_TIME_CODE
            status: service_active
            name: TEST
            prefix: SIM
            suffix: TESTSIMPAY
            adult: false
            created_at: '2021-11-08T18:18:53+01:00'
        pagination:
          total: 1
          count: 1
          per_page: 15
          current_page: 1
          total_pages: 1
          links:
            next_page: null
            prev_page: null
    ErrorResponseUnauthorized:
      type: object
      required:
        - success
        - errorCode
      properties:
        success:
          type: boolean
          description: Request status
          default: false
        errorCode:
          type: string
          description: Error status code
          enum:
            - UNAUTHORIZED
    ErrorResponseForbidden:
      type: object
      required:
        - success
        - errorCode
      properties:
        success:
          type: boolean
          description: Request status
          default: false
        errorCode:
          type: string
          description: Error status code
          enum:
            - INVALID_ABILITY_PROVIDED
            - IP_ADDRESS_NOT_WHITELISTED
    ErrorResponseNotFound:
      type: object
      required:
        - success
        - errorCode
      properties:
        success:
          type: boolean
          description: Request status
          default: false
        errorCode:
          type: string
          description: Error status code
          enum:
            - SERVICE_NOT_FOUND
            - TRANSACTION_NOT_FOUND
            - ROUTE_NOT_FOUND
    ServicesNumbers:
      type: array
      items:
        type: integer
        enum:
          - 7055
          - 7155
          - 7255
          - 7355
          - 7455
          - 7555
          - 7636
          - 77464
          - 78464
          - 7936
          - 91055
          - 91155
          - 91455
          - 91664
          - 91955
          - 92055
          - 92555
    smsService:
      type: object
      required:
        - id
        - type
        - status
        - name
        - prefix
        - suffix
        - adult
        - numbers
        - created_at
      properties:
        id:
          $ref: '#/components/schemas/ServiceId'
        type:
          $ref: '#/components/schemas/ServiceType'
        status:
          $ref: '#/components/schemas/ServiceStatus'
        name:
          type: string
          description: Nazwa usługi
        prefix:
          type: string
          description: Prefix usługi, czyli pierwszy człon treści SMS np. SIM
        suffix:
          type: string
          description: Suffix usługi, czyli drugi człon treści SMS
        description:
          type: string
          description: Opis usługi
        adult:
          type: boolean
          description: Informacja o tym czy usługa jest 18+
        numbers:
          $ref: '#/components/schemas/ServicesNumbers'
        created_at:
          $ref: '#/components/schemas/DateTime'
    smsGetService:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            $ref: '#/components/schemas/smsService'
      example:
        success: true
        data:
          id: d151e4f9
          type: ONE_TIME_CODE
          status: service_active
          name: TEST
          prefix: SIM
          suffix: TESTSIMPAY
          adult: false
          numbers:
            - 7055
            - 7155
            - 7255
          created_at: '2021-11-08T18:18:53+01:00'
    SmsCode:
      type: string
      description: Kod z wiadomości SMS
      pattern: ^[A-Z0-9]{6}$
      minimum: 6
      maximum: 6
    ServiceNumbers:
      type: integer
      description: Numer do wysyłki wiadomości SMS
      enum:
        - 7055
        - 7155
        - 7255
        - 7355
        - 7455
        - 7555
        - 7636
        - 77464
        - 78464
        - 7936
        - 91055
        - 91155
        - 91455
        - 91664
        - 91955
        - 92055
        - 92555
    smsCodeWithNumber:
      type: object
      required:
        - code
        - number
      properties:
        code:
          $ref: '#/components/schemas/SmsCode'
        number:
          $ref: '#/components/schemas/ServiceNumbers'
      example:
        code: AB12D6
        number: 7055
    smsCodeWithoutNumber:
      type: object
      required:
        - code
      properties:
        code:
          $ref: '#/components/schemas/SmsCode'
      example:
        code: AB12D6
    smsServiceCheckCodeUsedData:
      type: object
      required:
        - used
        - code
        - test
        - from
        - number
        - value
        - used_at
      properties:
        used:
          type: boolean
          description: Informacja czy kod został wykorzystany
        code:
          type: string
          description: Kod z SMS
        test:
          type: boolean
          description: Informacja czy kod testowy
        from:
          type: integer
          description: Numer z jakiego wysłano SMS
        number:
          $ref: '#/components/schemas/ServiceNumbers'
        value:
          type: number
          format: float
          description: Kwota netto SMSa
        used_at:
          $ref: '#/components/schemas/DateTime'
    smsServiceCheckCodeUsed:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            $ref: '#/components/schemas/smsServiceCheckCodeUsedData'
      example:
        success: true
        data:
          used: true
          code: ABC1D6
          test: true
          from: '48123123123'
          number: 7055
          value: 0.5
          send_at: '2021-11-14T19:00:36+01:00'
    smsServiceCheckCodeNotUsedData:
      type: object
      required:
        - used
        - code
        - test
        - from
        - number
        - value
      properties:
        used:
          type: boolean
          description: Informacja czy kod został wykorzystany
        code:
          type: string
          description: Kod z SMS
        test:
          type: boolean
          description: Informacja czy kod testowy
        from:
          type: integer
          description: Numer z jakiego wysłano SMS
        number:
          $ref: '#/components/schemas/ServiceNumbers'
        value:
          type: number
          format: float
          description: Kwota netto SMSa
    smsServiceCheckCodeNotUsed:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            $ref: '#/components/schemas/smsServiceCheckCodeNotUsedData'
      example:
        success: true
        data:
          used: false
          code: ABC1D6
          test: true
          from: '48123123123'
          number: 7055
          value: 0.5
    ServiceTransaction:
      type: object
      required:
        - id
        - from
        - code
        - used
        - send_number
        - value
        - send_at
      properties:
        id:
          type: integer
          description: Id transakcji SMS
        from:
          type: integer
          description: Numer z jakiego wysłano SMS
        code:
          type: string
          description: Kod z SMS
        used:
          type: boolean
          description: Informacja czy kod został wykorzystany
        send_number:
          $ref: '#/components/schemas/ServiceNumbers'
        value:
          type: number
          format: float
          description: Kwota netto SMSa
        send_at:
          $ref: '#/components/schemas/DateTime'
    smsGetServiceTransactions:
      type: object
      required:
        - success
        - data
        - pagination
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            $ref: '#/components/schemas/ServiceTransaction'
        pagination:
          $ref: '#/components/schemas/Pagination'
      example:
        success: true
        data:
          - id: 1
            from: 48123123123
            code: ABC1D6
            used: false
            send_number: 7055
            value: 0.5
            send_at: '2021-11-14T19:00:36+01:00'
        pagination:
          total: 1
          count: 1
          per_page: 15
          current_page: 1
          total_pages: 1
          links:
            next_page: null
            prev_page: null
    smsGetServiceTransaction:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          $ref: '#/components/schemas/ServiceTransaction'
      example:
        success: true
        data:
          id: 1
          from: 48123123123
          code: ABC1D6
          used: false
          send_number: 7055
          value: 0.5
          send_at: '2021-11-14T19:00:36+01:00'
    smsNumber:
      type: object
      required:
        - number
        - value
        - value_net
        - adult
      properties:
        number:
          $ref: '#/components/schemas/ServiceNumbers'
        value:
          type: number
          format: float
        value_net:
          type: number
          format: float
        adult:
          type: boolean
    smsServiceNumbers:
      type: object
      required:
        - success
        - data
        - pagination
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            $ref: '#/components/schemas/smsNumber'
        pagination:
          $ref: '#/components/schemas/Pagination'
      example:
        success: true
        data:
          - number: 7055
            value: 2
            value_net: 2.46
            adult: false
        pagination:
          total: 1
          count: 1
          per_page: 15
          current_page: 1
          total_pages: 1
          links:
            next_page: null
            prev_page: null
    smsServiceNumber:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
        data:
          $ref: '#/components/schemas/smsNumber'
      example:
        success: true
        data:
          number: 7055
          value: 2
          value_net: 2.46
          adult: false
    directbillingServiceItem:
      type: object
      required:
        - id
        - name
        - suffix
        - status
        - created_at
      properties:
        id:
          $ref: '#/components/schemas/ServiceId'
        name:
          type: string
          description: Nazwa usługi
        suffix:
          type: string
          description: Tytuł w raporcie
        status:
          $ref: '#/components/schemas/ServiceStatus'
        created_at:
          $ref: '#/components/schemas/DateTime'
    directbillingGetServicesResponse:
      type: object
      required:
        - success
        - data
        - pagination
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            $ref: '#/components/schemas/directbillingServiceItem'
        pagination:
          $ref: '#/components/schemas/Pagination'
      example:
        success: true
        data:
          - id: d151e4f9
            name: Usługa testowa
            suffix: Test1
            status: service_active
            created_at: '2021-11-08T18:19:16+01:00'
        pagination:
          total: 1
          count: 1
          per_page: 15
          current_page: 1
          total_pages: 1
          links:
            next_page: null
            prev_page: null
    directbillingGetServiceResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: object
          properties:
            id:
              $ref: '#/components/schemas/ServiceId'
            name:
              type: string
              description: Nazwa usługi
            suffix:
              type: string
              description: Tytuł w raporcie
            status:
              $ref: '#/components/schemas/ServiceStatus'
            created_at:
              $ref: '#/components/schemas/DateTime'
      example:
        success: true
        data:
          id: d151e4f9
          name: Usługa testowa
          suffix: Test1
          status: service_active
          created_at: '2021-11-08T18:19:16+01:00'
    directbillingCalculationOperatorItem:
      type: object
      nullable: true
      properties:
        net:
          type: number
          format: float
        gross:
          type: number
          format: float
    directbillingServiceCalculateResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: object
          required:
            - orange
            - play
            - t-mobile
            - plus
          properties:
            orange:
              $ref: '#/components/schemas/directbillingCalculationOperatorItem'
            play:
              $ref: '#/components/schemas/directbillingCalculationOperatorItem'
            t-mobile:
              $ref: '#/components/schemas/directbillingCalculationOperatorItem'
            plus:
              $ref: '#/components/schemas/directbillingCalculationOperatorItem'
      example:
        success: true
        data:
          orange:
            net: 285.72
            gross: 351.44
          play:
            net: 285.72
            gross: 351.44
          t-mobile: null
          plus: null
    directbillingTransactionStatus:
      type: string
      description: Status transakcji
      enum:
        - transaction_db_new
        - transaction_db_confirmed
        - transaction_db_payed
        - transaction_db_rejected
    directbillingTransactionItem:
      type: object
      required:
        - id
        - status
        - value
        - value_netto
        - operator
        - created_at
        - updated_at
      properties:
        id:
          $ref: '#/components/schemas/ServiceId'
        status:
          $ref: '#/components/schemas/directbillingTransactionStatus'
        value:
          type: number
          format: float
        value_netto:
          type: number
          format: float
        operator:
          type: string
        created_at:
          $ref: '#/components/schemas/DateTime'
          description: Data utworzenia transakcji
        updated_at:
          $ref: '#/components/schemas/DateTime'
          description: Data aktualizacji transakcji
    directbillingGetTransactionsResponse:
      type: object
      required:
        - success
        - data
        - pagination
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            $ref: '#/components/schemas/directbillingTransactionItem'
        pagination:
          $ref: '#/components/schemas/Pagination'
      example:
        success: true
        data:
          - id: dc261d4f-31ef-4728-bfd6-97bbe2a5ef0a
            status: transaction_db_payed
            value: 0.34
            value_netto: 0.24
            created_at: '2023-02-16T14:52:11+01:00'
            updated_at: '2023-02-16T14:52:11+01:00'
        pagination:
          total: 1
          count: 1
          per_page: 15
          current_page: 1
          total_pages: 1
          links:
            next_page: null
            prev_page: null
    directbillingTransactionCreateAll:
      type: object
      required:
        - amount
      properties:
        amount:
          type: number
          format: float
          description: Kwota transakcji
        amountType:
          type: string
          enum:
            - required
            - net
            - gross
          default: gross
          description: >
            Typ kwoty transakcji

            - `required` - ryczałtowa kwota jaką chce uzykać partner, końcowa
            kwota do zapłaty będzie widoczna na bramce i zależna od operatora

            - `net` - kwota netto

            - `gross` - kwota brutto
        description:
          type: string
          maximum: 128
          description: Opis transakcji widoczny na bramce płatniczej
        control:
          type: string
          maximum: 128
          description: >-
            Parametr do wykorzystania przez partnera w celu np. identyfikacji
            transakcji
        returns:
          type: object
          description: Adresy URL do przekierowania klienta po transakcji
          properties:
            success:
              type: string
              format: url
              description: >-
                Adres na jaki klient miał zostać przekierowany po prawidłowej
                transakcji
            failure:
              type: string
              format: url
              description: >-
                Adres na jaki klient miał zostać przekierowany po nie
                prawidłowej transakcji
        phoneNumber:
          type: string
          description: Wymuszony numer telefonu
        steamid:
          type: string
          format: steamId64
          description: Opcjonalne pole ( steamid64 )
      example:
        amount: 19.99
        amountType: gross
        description: Płatność za wirtualne produkty
        control: 96125f23-d549-4bfc-a845-b781b5f1ad03
        returns:
          success: https://www.simpay.pl/success
          failure: https://www.simpay.pl/failure
        phoneNumber: '48123123123'
    directbillingTransactionCreateOnlyNecessary:
      type: object
      required:
        - amount
      properties:
        amount:
          type: number
          format: float
          description: Kwota transakcji
      example:
        amount: 19.99
    TransactionId:
      type: string
      format: uuid
      description: Id transakcji
      pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
      minLength: 36
      maxLength: 36
    RefundId:
      type: string
      format: uuid
      description: Id zwrotu
      pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
      minLength: 36
      maxLength: 36
    SubscriptionId:
      type: string
      format: uuid
      description: Id subskrypcji
      pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
      minLength: 36
      maxLength: 36
    AliasId:
      type: string
      format: uuid
      description: Id aliasu
      pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
      minLength: 36
      maxLength: 36
    directbillingTransactionCreateResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: object
          required:
            - transactionId
            - redirectUrl
          properties:
            transactionId:
              $ref: '#/components/schemas/TransactionId'
            redirectUrl:
              type: string
              format: url
      example:
        success: true
        data:
          transactionId: 1d87a1b3-18f8-4146-bcb1-c0c9f293b04f
          redirectUrl: https://db.simpay.pl/1d87a1b3-18f8-4146-bcb1-c0c9f293b04f
    ErrorUnprocessableContent:
      type: object
      required:
        - success
        - errorCode
        - errors
      properties:
        success:
          type: boolean
          description: Request status
        errorCode:
          type: string
          description: Error status code
          enum:
            - VALIDATION_ERROR
        errors:
          type: object
          properties:
            amount:
              type: array
              items:
                type: string
      example:
        success: false
        errorCode: VALIDATION_ERROR
        errors:
          amount:
            - The amount field is required.
          currency:
            - The selected currency is invalid.
    directbillingGetTransactionResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: object
          required:
            - id
            - status
            - value
            - value_netto
            - notify
            - created_at
            - updated_at
          properties:
            id:
              $ref: '#/components/schemas/TransactionId'
            status:
              $ref: '#/components/schemas/directbillingTransactionStatus'
            phoneNumber:
              type: string
              format: phone
              nullable: true
            control:
              type: string
              nullable: true
            value:
              type: number
              format: float
            value_netto:
              type: number
              format: float
            operator:
              type: string
              nullable: true
              enum:
                - orange
                - plus
                - play
                - t-mobile
            notify:
              type: object
              required:
                - is_send
                - last_send_at
                - count
              properties:
                is_send:
                  type: boolean
                last_send_at:
                  description: Data ostatniej wysyłki
                  $ref: '#/components/schemas/DateTime'
                count:
                  type: integer
            created_at:
              $ref: '#/components/schemas/DateTime'
            updated_at:
              $ref: '#/components/schemas/DateTime'
      example:
        success: true
        data:
          id: dc261d4f-31ef-4728-bfd6-97bbe2a5ef0a
          status: transaction_db_payed
          phoneNumber: null
          control: 1d87a1b3-18f8-4146-bcb1-c0c9f293b04f
          value: 16.67
          value_netto: 10
          operator: t-mobile
          notify:
            is_send: false
            last_send_at: '2023-02-16T14:52:11+01:00'
            count: 1
          created_at: '2023-02-16T14:52:11+01:00'
          updated_at: '2023-02-16T14:52:11+01:00'
    paymentGetServicesResponse:
      type: object
      required:
        - success
        - data
        - pagination
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            type: object
            required:
              - id
              - name
              - status
              - created_at
            properties:
              id:
                $ref: '#/components/schemas/ServiceId'
              name:
                type: string
                description: Nazwa usługi
              status:
                $ref: '#/components/schemas/ServiceStatus'
              created_at:
                $ref: '#/components/schemas/DateTime'
        pagination:
          $ref: '#/components/schemas/Pagination'
      example:
        success: true
        data:
          - id: d151e4f9
            name: Usługa testowa
            status: service_active
            created_at: '2021-11-08T18:19:16+01:00'
        pagination:
          total: 1
          count: 1
          per_page: 15
          current_page: 1
          total_pages: 1
          links:
            next_page: null
            prev_page: null
    paymentGetServiceResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: object
          required:
            - id
            - name
            - status
            - created_at
          properties:
            id:
              $ref: '#/components/schemas/ServiceId'
            name:
              type: string
              description: Nazwa usługi
            status:
              $ref: '#/components/schemas/ServiceStatus'
            created_at:
              $ref: '#/components/schemas/DateTime'
      example:
        success: true
        data:
          id: d151e4f9
          name: Usługa testowa
          status: service_active
          created_at: '2021-11-08T18:19:16+01:00'
    paymentGetServiceChannelsResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            type: object
            required:
              - id
              - name
              - type
              - img
              - commission
              - currencies
              - amount
            properties:
              id:
                type: string
                description: Id kanału płatności
              name:
                type: string
                description: Nazwa kanału
              type:
                type: string
                description: Typ kanału
              img:
                type: string
                format: url
                description: Adres URL do grafiki kanału płatności
              commission:
                type: number
                format: float
                description: Prowizja pobierana przez SimPay z płatności
              currencies:
                type: array
                description: Tablica z dostępnymi walutami
                items:
                  type: string
              amount:
                type: object
                description: Kwoty dostępne dla kanłu
                items:
                  type: object
                  required:
                    - min
                    - max
                properties:
                  min:
                    type: number
                    format: float
                    description: Kwota minimalna do płatności
                  max:
                    type: number
                    format: float
                    description: Kwota maksymalna do płatności
      example:
        success: true
        data:
          - id: blik
            name: BLIK
            type: blik
            img: https://img.simpay.pl/transfer/banks/blik.png
            commission: 1.5
            currencies:
              - PLN
            amount:
              min: 1
              max: 20000
          - id: mbank
            name: mBank
            type: transfer
            img: https://img.simpay.pl/transfer/banks/mbank.png
            commission: 1.5
            currencies:
              - PLN
            amount:
              min: 1
              max: 20000
    paymentTransactionStatus:
      type: string
      description: Status transakcji
      enum:
        - transaction_new
        - transaction_confirmed
        - transaction_generated
        - transaction_paid
        - transaction_failure
        - transaction_expired
        - transaction_canceled
        - transaction_refunded
        - transaction_fraud
        - transaction_fraud_possibility
    paymentTransactionRefundStatus:
      type: string
      description: Status zwrotu
      enum:
        - refund_new
        - refund_pending
        - refund_completed
        - refund_rejected
        - refund_failed
    subscriptionStatus:
      type: string
      description: Status subskrypcji
      enum:
        - subscription_pending
        - subscription_active
        - subscription_cancelled
        - subscription_expired
        - subscription_finished
        - subscription_fraudulent
    blikAliasType:
      type: string
      description: Typ aliasu BLIK
      enum:
        - PAYID
        - UID
    blikAliasStatus:
      type: string
      description: Status aliasu BLIK
      enum:
        - alias_pending_registration
        - alias_active
        - alias_expired
        - alias_unregistered
    blikSubscriptionModel:
      type: string
      description: Model Płatności Powtarzalnej BLIK
      enum:
        - A
        - O
        - M
    subscriptionMode:
      type: string
      description: Tryb subskrypcji
      enum:
        - BLIK
        - CARD
    subscriptionCancelledBy:
      type: string
      description: Subskrypcja anulowana przez
      enum:
        - system
        - antifraud
        - merchant
        - payer
        - blik
    paymentGetTransactionsResponse:
      type: object
      required:
        - success
        - data
        - pagination
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            type: object
            required:
              - id
              - status
              - amount
              - control
              - channel
              - paid_at
              - created_at
              - updated_at
            properties:
              id:
                $ref: '#/components/schemas/TransactionId'
              status:
                $ref: '#/components/schemas/paymentTransactionStatus'
              amount:
                type: number
                format: float
              control:
                type: string
              channel:
                type: string
              paid_at:
                $ref: '#/components/schemas/DateTime'
              created_at:
                $ref: '#/components/schemas/DateTime'
              updated_at:
                $ref: '#/components/schemas/DateTime'
        pagination:
          $ref: '#/components/schemas/Pagination'
      example:
        success: true
        data:
          - id: 528bd43f-d08a-43f5-9462-861e54db37bf
            status: transaction_paid
            amount: 24.99
            control: null
            channel: nest
            paid_at: '2023-12-07T05:21:50+01:00'
            created_at: '2023-12-07T05:20:30+01:00'
            updated_at: '2023-12-07T05:21:50+01:00'
          - id: 0238d92e-0dd9-469a-9aa9-0505974336a3
            status: transaction_paid
            amount: 24.99
            control: null
            channel: blik
            paid_at: '2023-12-07T06:21:50+01:00'
            created_at: '2023-12-07T06:20:30+01:00'
            updated_at: '2023-12-07T06:21:50+01:00'
        pagination:
          total: 2
          count: 2
          per_page: 15
          current_page: 1
          total_pages: 1
          links:
            next_page: null
            prev_page: null
    paymentGetTransactionRefundsResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            type: object
            required:
              - id
              - status
              - amount
              - currency
              - wallet_amount
              - wallet_currency
              - created_at
              - updated_at
            properties:
              id:
                $ref: '#/components/schemas/RefundId'
              status:
                $ref: '#/components/schemas/paymentTransactionRefundStatus'
              amount:
                type: number
                format: float
                description: Kwota zwrotu w walucie płacącego
              currency:
                type: string
                minLength: 3
                maxLength: 3
                description: Waluta płacącego
              wallet_amount:
                type: number
                format: float
                description: Kwota zwrotu pobrana z portfela
              wallet_currency:
                type: string
                minLength: 3
                maxLength: 3
                description: Waluta portfela
              created_at:
                $ref: '#/components/schemas/DateTime'
              updated_at:
                $ref: '#/components/schemas/DateTime'
      example:
        success: true
        data:
          - id: 019483a5-885e-70f7-9b5b-94387a6690da
            status: refund_completed
            amount: 1
            currency: PLN
            wallet_amount: 1
            wallet_currency: PLN
            created_at: '2025-01-20T13:17:31+01:00'
            updated_at: '2025-01-20T13:17:59+01:00'
    paymentShowTransactionRefundResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: object
          required:
            - id
            - status
            - amount
            - currency
            - wallet_amount
            - wallet_currency
            - created_at
            - updated_at
          properties:
            id:
              $ref: '#/components/schemas/RefundId'
            status:
              $ref: '#/components/schemas/paymentTransactionRefundStatus'
            amount:
              type: number
              format: float
              description: Kwota zwrotu w walucie płacącego
            currency:
              type: string
              minLength: 3
              maxLength: 3
              description: Waluta płacącego
            wallet_amount:
              type: number
              format: float
              description: Kwota zwrotu pobrana z portfela
            wallet_currency:
              type: string
              minLength: 3
              maxLength: 3
              description: Waluta portfela
            created_at:
              $ref: '#/components/schemas/DateTime'
            updated_at:
              $ref: '#/components/schemas/DateTime'
      example:
        success: true
        data:
          id: 019483a5-885e-70f7-9b5b-94387a6690da
          status: refund_completed
          amount: 1
          currency: PLN
          wallet_amount: 1
          wallet_currency: PLN
          created_at: '2025-01-20T13:17:31+01:00'
          updated_at: '2025-01-20T13:17:59+01:00'
    paymentMakeTransactionRefundResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: object
          required:
            - refund_id
          properties:
            refund_id:
              $ref: '#/components/schemas/RefundId'
      example:
        success: true
        data:
          refund_id: 019483a5-885e-70f7-9b5b-94387a6690da
    paymentGetSubscriptionsResponse:
      type: object
      required:
        - success
        - data
        - pagination
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            type: object
            required:
              - id
              - status
              - mode
              - created_at
              - updated_at
            properties:
              id:
                $ref: '#/components/schemas/SubscriptionId'
              status:
                $ref: '#/components/schemas/subscriptionStatus'
              mode:
                $ref: '#/components/schemas/subscriptionMode'
              blik:
                type: object
                required:
                  - model
                  - alias
                properties:
                  model:
                    $ref: '#/components/schemas/blikSubscriptionModel'
                  alias:
                    type: object
                    required:
                      - id
                      - type
                      - value
                      - label
                      - status
                      - created_at
                      - updated_at
                    properties:
                      id:
                        $ref: '#/components/schemas/AliasId'
                      type:
                        $ref: '#/components/schemas/blikAliasType'
                      value:
                        type: string
                        description: Wartość aliasu
                        example: AABBCC
                        maxLength: 64
                      label:
                        type: string
                        description: Etykieta wyświetlana w aplikacji mobilnej
                        example: Płatność za pakiet premium w serwisie aaa
                        maxLength: 35
                      blik_key:
                        type: string
                        description: >-
                          Identyfikator aliasu w BLIK (w przypadku aliasu PAYID
                          będzie pusty)
                        nullable: true
                        example: null
                      status:
                        $ref: '#/components/schemas/blikAliasStatus'
                      expires_at:
                        $ref: '#/components/schemas/DateTime'
                      created_at:
                        $ref: '#/components/schemas/DateTime'
                      updated_at:
                        $ref: '#/components/schemas/DateTime'
              frequency:
                type: string
                nullable: true
                description: Częstotliwość subskrypcji
                example: 1M
              initiation_date:
                type: string
                nullable: true
                description: Data pierwszej możliwej Płatności Powtarzalnej
                example: '2025-08-13T23:15:13+02:00'
              total_amount_limit:
                type: number
                nullable: true
                description: Całkowita kwota, która jest dla tej Płatności Powtarzalnej
                example: 4000
              total_transactions_limit:
                type: integer
                nullable: true
                description: >-
                  Całkowita ilość możliwych transakcji dla Płatności
                  Powtarzalnej
                example: 12
              cancelled:
                type: object
                nullable: true
                required:
                  - by
                properties:
                  by:
                    $ref: '#/components/schemas/subscriptionCancelledBy'
                  reason:
                    type: string
                    nullable: true
                    description: Powód anulowania subskrypcji
                    maxLength: 32
              created_at:
                $ref: '#/components/schemas/DateTime'
              updated_at:
                $ref: '#/components/schemas/DateTime'
        pagination:
          $ref: '#/components/schemas/Pagination'
      example:
        success: true
        data:
          - id: 019970c6-3d3e-708c-9313-5f89e251e2c0
            status: subscription_active
            mode: BLIK
            blik:
              model: O
              alias:
                id: 019970c6-3ce8-71e7-8214-20fd635532fb
                type: PAYID
                value: AABBCC
                label: Płatność za pakiet premium
                blik_key: null
                status: alias_active
                expires_at: '2035-07-15T00:00:00+02:00'
                created_at: '2025-09-22T11:34:23+02:00'
                updated_at: '2025-09-22T11:34:32+02:00'
            frequency: null
            initiation_date: null
            total_amount_limit: null
            total_transactions_limit: null
            cancelled: null
            created_at: '2025-09-22T11:34:24+02:00'
            updated_at: '2025-09-22T11:34:32+02:00'
          - id: 0198a54d-05e1-72b8-b835-f2258609bb52
            status: subscription_cancelled
            mode: BLIK
            blik:
              model: O
              alias:
                id: 0198a54d-05d9-7177-9ac6-5d9831bc988d
                type: PAYID
                value: CCBBAA
                label: Subskrypcja za muzykę
                blik_key: null
                status: alias_unregistered
                expires_at: null
                created_at: '2025-08-13T23:19:05+02:00'
                updated_at: '2025-08-13T23:19:16+02:00'
            frequency: 1M
            initiation_date: '2025-08-13T23:15:13+02:00'
            total_amount_limit: null
            total_transactions_limit: null
            cancelled:
              by: merchant
              reason: Rezygnacja przez użytkownika
            created_at: '2025-08-13T23:19:05+02:00'
            updated_at: '2025-08-13T23:19:16+02:00'
        pagination:
          total: 2
          count: 2
          per_page: 20
          current_page: 1
          total_pages: 1
          links:
            next_page: null
            prev_page: null
    paymentGetBlikAliasesResponse:
      type: object
      required:
        - success
        - data
        - pagination
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            type: object
            required:
              - id
              - type
              - value
              - label
              - status
              - created_at
              - updated_at
            properties:
              id:
                $ref: '#/components/schemas/AliasId'
              type:
                $ref: '#/components/schemas/blikAliasType'
              value:
                type: string
                description: Wartość aliasu
                example: AABBCC
                maxLength: 64
              label:
                type: string
                description: Etykieta wyświetlana w aplikacji mobilnej
                example: Płatność za pakiet premium w serwisie aaa
                maxLength: 35
              blik_key:
                type: string
                description: >-
                  Identyfikator aliasu w BLIK (w przypadku aliasu PAYID będzie
                  pusty)
                nullable: true
                example: null
              status:
                $ref: '#/components/schemas/blikAliasStatus'
              expires_at:
                $ref: '#/components/schemas/DateTime'
              created_at:
                $ref: '#/components/schemas/DateTime'
              updated_at:
                $ref: '#/components/schemas/DateTime'
              subscription:
                type: object
                required:
                  - id
                  - status
                  - mode
                  - created_at
                  - updated_at
                properties:
                  id:
                    $ref: '#/components/schemas/SubscriptionId'
                  status:
                    $ref: '#/components/schemas/subscriptionStatus'
                  mode:
                    $ref: '#/components/schemas/subscriptionMode'
                  blik:
                    type: object
                    required:
                      - model
                    properties:
                      model:
                        $ref: '#/components/schemas/blikSubscriptionModel'
                  frequency:
                    type: string
                    nullable: true
                    description: Częstotliwość subskrypcji
                    example: 1M
                  initiation_date:
                    type: string
                    nullable: true
                    description: Data pierwszej możliwej Płatności Powtarzalnej
                    example: '2025-08-13T23:15:13+02:00'
                  total_amount_limit:
                    type: number
                    nullable: true
                    description: Całkowita kwota, która jest dla tej Płatności Powtarzalnej
                    example: 4000
                  total_transactions_limit:
                    type: integer
                    nullable: true
                    description: >-
                      Całkowita ilość możliwych transakcji dla Płatności
                      Powtarzalnej
                    example: 12
                  cancelled:
                    type: object
                    nullable: true
                    required:
                      - by
                    properties:
                      by:
                        $ref: '#/components/schemas/subscriptionCancelledBy'
                      reason:
                        type: string
                        nullable: true
                        description: Powód anulowania subskrypcji
                        maxLength: 32
                  created_at:
                    $ref: '#/components/schemas/DateTime'
                  updated_at:
                    $ref: '#/components/schemas/DateTime'
        pagination:
          $ref: '#/components/schemas/Pagination'
      example:
        success: true
        data:
          - id: 019970c6-3ce8-71e7-8214-20fd635532fb
            type: PAYID
            value: AABBCC
            label: Płatność za pakiet premium
            blik_key: null
            status: alias_active
            expires_at: '2035-07-15T00:00:00+02:00'
            created_at: '2025-09-22T11:34:23+02:00'
            updated_at: '2025-09-22T11:34:32+02:00'
            subscription:
              id: 019970c6-3d3e-708c-9313-5f89e251e2c0
              status: subscription_active
              mode: BLIK
              blik:
                model: O
              frequency: null
              initiation_date: null
              total_amount_limit: null
              total_transactions_limit: null
              cancelled: null
              created_at: '2025-09-22T11:34:24+02:00'
              updated_at: '2025-09-22T11:34:32+02:00'
          - id: 0198a54d-05d9-7177-9ac6-5d9831bc988d
            type: PAYID
            value: CCBBAA
            label: Subskrypcja za muzykę
            blik_key: null
            status: alias_unregistered
            expires_at: null
            created_at: '2025-08-13T23:19:05+02:00'
            updated_at: '2025-08-13T23:19:16+02:00'
            subscription:
              id: 0198a54d-05e1-72b8-b835-f2258609bb52
              status: subscription_cancelled
              mode: BLIK
              blik:
                model: O
              frequency: 1M
              initiation_date: '2025-08-13T23:15:13+02:00'
              total_amount_limit: null
              total_transactions_limit: null
              cancelled:
                by: merchant
                reason: Rezygnacja przez użytkownika
              created_at: '2025-08-13T23:19:05+02:00'
              updated_at: '2025-08-13T23:19:16+02:00'
        pagination:
          total: 2
          count: 2
          per_page: 20
          current_page: 1
          total_pages: 1
          links:
            next_page: null
            prev_page: null
    paymentCustomerFull:
      nullable: true
      type: object
      required:
        - name
        - surname
        - street
        - city
        - postalCode
        - country
      properties:
        name:
          type: string
          nullable: true
          minLength: 5
          maxLength: 64
        surname:
          type: string
          nullable: true
          maxLength: 64
        street:
          type: string
          nullable: true
          maxLength: 64
        building:
          type: string
          nullable: true
          maxLength: 16
        flat:
          type: string
          nullable: true
          maxLength: 16
        city:
          type: string
          nullable: true
          maxLength: 32
        region:
          type: string
          nullable: true
          maxLength: 32
        postalCode:
          type: string
          nullable: true
          description: Kod pocztowy, format zależny od pola `country`
        country:
          type: string
          nullable: true
          format: ISO 3166-1 alpha-2
          description: Kraj
        company:
          type: string
          nullable: true
          description: Nazwa firmy
    paymentCartItem:
      type: object
      description: Obiekt pojedyńczego przedmoiotu koszyka
      required:
        - name
        - quantity
        - price
        - producer
        - category
        - code
      properties:
        name:
          type: string
          minLength: 3
          maxLength: 64
          description: Nazwa produktu
        quantity:
          type: number
          format: integer
          minimum: 1
          description: Ilość danego produktu
        price:
          type: number
          format: float
          minimum: 0.01
          description: Kwota jednego produktu
        producer:
          type: string
          nullable: true
          maxLength: 64
          description: Marka producneta produktu
        category:
          type: string
          nullable: true
          maxLength: 64
          description: Kategoria produktu
        code:
          type: string
          nullable: true
          maxLength: 64
          description: Kod produktu
    paymentCreateTransactionRequest:
      type: object
      required:
        - amount
      properties:
        amount:
          type: number
          format: float
          description: Kwota transakcji
          minimum: 1
        currency:
          type: string
          description: Waluta transakcji
          default: PLN
        description:
          type: string
          description: >-
            Opis transakcji nadany przez partnera, prezentowany na bramce
            płatności
          maxLength: 64
        control:
          type: string
          description: Pole do wykorzystania przez partnera
          maxLength: 255
        customer:
          type: object
          nullable: true
          description: Obiekt podstawowych informacji o płacącym
          properties:
            name:
              type: string
              maxLength: 64
            email:
              type: string
              format: email
              maxLength: 64
            ip:
              type: string
              format: ip
              description: Adres IP kupującego. Wymagany przy używaniu directChannel.
            countryCode:
              type: string
              format: country
              description: Kod ISO kupującego. Wymagany przy używaniu directChannel.
              example: PL
        antifraud:
          type: object
          nullable: true
          description: Obiekt informacji do antifrauda
          properties:
            useragent:
              type: string
              description: UserAgent kupującego. Wymagany przy używaniu directChannel.
              maxLength: 255
            steamid:
              type: integer
              format: int64
              description: STEAMID64 kupującego
              maxLength: 64
            mcusername:
              type: string
              description: Nick gracza Minecraft
              maxLength: 64
            mcid:
              type: string
              description: UUID gracza Minecraft
              maxLength: 64
        billing:
          $ref: '#/components/schemas/paymentCustomerFull'
        shipping:
          $ref: '#/components/schemas/paymentCustomerFull'
        cart:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/paymentCartItem'
        returns:
          type: object
          nullable: true
          properties:
            success:
              type: string
              format: url
            failure:
              type: string
              format: url
        directChannel:
          type: string
          description: >
            W tym polu można przesłać Id kanału, wtedy płacący zostanie
            przekierowany od razu na stronę podanego kanału

            np. przy podaniu `blik` zostanie przekierowany od razu na bramkę
            płatności BLIK. Wymagane jest wtedy przesłanie `antifraud.useragent`
            oraz `customer.ip`.
        channels:
          type: array
          nullable: true
          description: >
            Tablica z Id kanałów płatności, które zostaną wyświetlone płacącemu
            na bramce po przekierowaniu na url transakcji<br/>

            Listę dostępnych kanałów wraz z ich Id możemy uzyskać tutaj
            [Pobieranie listy kanałów dla
            usługi](#tag/Payment/operation/paymentGetChannels)
          items:
            type: string
        channelTypes:
          type: object
          nullable: true
          description: >
            Obiekt w którym możemy zdefiniować które typu kanłów mają być
            dostępne na bramce płatności
          properties:
            blik:
              type: boolean
              description: Płatność BLIK
            transfer:
              type: boolean
              description: Płatności przelewami online
            cards:
              type: boolean
              description: Płatności kartami
            ewallets:
              type: boolean
              description: Płatności wirtualnymi portfelami (Google Pay, Apple Pay)
            paypal:
              type: boolean
              description: Płatność PayPal
            paysafe:
              type: boolean
              description: Płatności od grupy Paysafe (Skrill, PaysafeCard)
            latam:
              type: boolean
              description: Płatności Ameryki Południowej (PIX, Boleto, BoletoFlash)
        referer:
          type: string
          minLength: 6
          maxLength: 64
    paymentTransactionCreateResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: object
          required:
            - transactionId
            - redirectUrl
          properties:
            transactionId:
              $ref: '#/components/schemas/TransactionId'
            redirectUrl:
              type: string
              format: url
      example:
        success: true
        data:
          transactionId: 1d87a1b3-18f8-4146-bcb1-c0c9f293b04f
          redirectUrl: https://pay.simpay.pl/1d87a1b3-18f8-4146-bcb1-c0c9f293b04f
    paymentGetTransactionResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: object
          required:
            - id
            - payer_transaction_id
            - status
            - amount
            - channel
            - control
            - description
            - redirect
            - customer
            - billing
            - shipping
            - cart
            - paid_at
            - expires_at
            - created_at
            - updated_at
          properties:
            id:
              $ref: '#/components/schemas/TransactionId'
            payer_transaction_id:
              type: string
              description: Identyfikator transakcji udostępniony płacącemu
            status:
              $ref: '#/components/schemas/paymentTransactionStatus'
            amount:
              type: object
              required:
                - value
                - currency
                - commission
                - commission_currency
              properties:
                value:
                  type: number
                  format: float
                  description: Kwota płatności w walucie kupującego
                currency:
                  type: string
                  format: ISO-4217
                  description: Waluta kupującego
                commission:
                  type: number
                  format: float
                  nullable: true
                  description: Kwota prowizji dla SimPay
                commission_currency:
                  type: string
                  format: ISO-4217
                  description: Waluta prowizji (PLN/EUR)
                original:
                  type: object
                  description: Oryginalne kwoty zadeklarowane przy inicjacji
                  properties:
                    value:
                      type: number
                      format: float
                      nullable: true
                      description: Kwota płatności
                    currency:
                      type: string
                      format: ISO-4217
                      nullable: true
                      description: Waluta płatności
                    pln_rate:
                      type: number
                      format: float
                      nullable: true
                      description: Kurs NBP waluty
            channel:
              type: string
              nullable: true
            control:
              type: string
              nullable: true
            description:
              type: string
              nullable: true
            redirect:
              type: object
              required:
                - success
                - failure
              properties:
                success:
                  type: string
                  format: url
                  nullable: true
                failure:
                  type: string
                  format: url
                  nullable: true
            customer:
              type: object
              required:
                - name
                - email
              properties:
                name:
                  type: string
                  nullable: true
                email:
                  type: string
                  format: email
                  nullable: true
                ip:
                  type: string
                  format: ip
                  nullable: true
                country:
                  type: string
                  format: CountryCode
                  nullable: true
            billing:
              $ref: '#/components/schemas/paymentCustomerFull'
            shipping:
              $ref: '#/components/schemas/paymentCustomerFull'
            cart:
              type: array
              nullable: true
              items:
                $ref: '#/components/schemas/paymentCartItem'
            paid_at:
              $ref: '#/components/schemas/DateTime'
            expires_at:
              $ref: '#/components/schemas/DateTime'
            created_at:
              $ref: '#/components/schemas/DateTime'
            updated_at:
              $ref: '#/components/schemas/DateTime'
      example:
        success: true
        data:
          id: 328bd42d-d08b-43f6-9463-869e5bd32b4
          payer_transaction_id: 477YDX14
          status: transaction_paid
          amount:
            value: 7.55
            currency: BRL
            commission: 0.12
            commission_currency: EUR
            original:
              value: 5
              currency: PLN
              pln_rate: 1
          channel: nest
          control: null
          description: null
          redirect:
            success: null
            failure: null
          customer:
            name: null
            email: kontakt@simpay.pl
            ip: 192.168.0.1
            country: PL
          billing:
            name: null
            surname: null
            street: null
            building: null
            flat: null
            city: null
            region: null
            postalCode: null
            country: null
            company: null
          shipping:
            name: null
            surname: null
            street: null
            building: null
            flat: null
            city: null
            region: null
            postalCode: null
            country: null
            company: null
          cart: null
          paid_at: '2023-12-07T05:21:50+01:00'
          expires_at: null
          created_at: '2023-12-07T05:20:30+01:00'
          updated_at: '2023-12-07T05:21:50+01:00'
    paymentGetCurrenciesResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          description: Request status
        data:
          type: array
          items:
            type: object
            required:
              - iso
              - pln_rate
              - nbp_table
              - updated_at
            properties:
              iso:
                type: string
                description: Kod ISO waluty (PLN, USD, EUR, BRL etc.)
              pln_rate:
                type: string
                description: Kurs waluty według kursu NBP
              nbp_table:
                type: string
                description: Tabela do kursu NBP
              prefix:
                type: string
                nullable: true
                description: Prefiks waluty
              suffix:
                type: string
                nullable: true
                description: Sufiks waluty
              updated_at:
                type: string
                format: date
                description: Data ostatniej aktualizacji waluty
      example:
        success: true
        data:
          - iso: PLN
            pln_rate: '1.0000000000'
            nbp_table: A
            prefix: null
            suffix: ' zł'
            updated_at: '2025-05-10T13:04:32+02:00'
          - iso: EUR
            pln_rate: '4.3238000000'
            nbp_table: A
            prefix: €
            suffix: null
            updated_at: '2025-05-10T13:04:32+02:00'
          - iso: ARS
            pln_rate: '0.0034150000'
            nbp_table: B
            prefix: ARS$
            suffix: null
            updated_at: '2025-05-10T13:04:32+02:00'
    paymentBlik0TransactionRequest:
      type: object
      required:
        - ticket
      properties:
        ticket:
          type: object
          nullable: false
          description: Obiekt kodu BLIK
          required:
            - T6
          properties:
            T6:
              type: string
              maxLength: 6
              minLength: 6
              description: 6-cyfrowy Kod BLIK
      example:
        ticket:
          T6: '123123'
    paymentBlikSubscriptionCreateRequest:
      type: object
      required:
        - transactionId
        - ticket
        - alias
        - options
      properties:
        transactionId:
          $ref: '#/components/schemas/TransactionId'
        ticket:
          type: object
          nullable: false
          description: Obiekt kodu BLIK
          required:
            - T6
          properties:
            T6:
              type: string
              maxLength: 6
              minLength: 6
              description: 6-cyfrowy Kod BLIK
          example:
            T6: '462755'
        alias:
          type: object
          nullable: false
          description: Informacje o Aliasie BLIK
          required:
            - value
            - type
          properties:
            value:
              type: string
              maxLength: 64
              minLength: 1
              description: Wartość aliasu (np. ID subskrypcji)
            type:
              type: string
              enum:
                - PAYID
              description: Typ aliasu (dla subskrypcji - PAYID)
            label:
              type: string
              maxLength: 35
              minLength: 1
              description: Etykieta widoczna w aplikacji bankowej płacącego
          example:
            value: AAABBCC
            type: PAYID
            label: Płatność za plan premium w serwisie aaa
        options:
          oneOf:
            - type: object
              title: Model A
              description: Opcje dla modelu A
              properties:
                model:
                  type: string
                  enum:
                    - A
                expiresAt:
                  type: string
                  format: datetime
                  description: Data wygaśnięcia aliasu, max +10 lat
                frequency:
                  type: string
                  minLength: 2
                  maxLength: 4
                  description: Częstotliwość subskrypcji
                amountLimitPerTransaction:
                  type: number
                  minimum: 1
                  maximum: 4000
                  description: Limit kwoty na pojedynczą transakcję
                initiationDate:
                  type: string
                  format: date
                  description: Data pierwszej dozwolonej Płatności Powtarzalnej
                amountLimitTotal:
                  type: number
                  minimum: 1
                  description: Całościowy limit kwoty subskrypcji
                transactionsCountLimit:
                  type: number
                  minimum: 1
                  description: >-
                    Limit ilościowy Płatności Powtarzalnych w ramach jednego
                    aliasu
              required:
                - model
                - expiresAt
                - frequency
                - amountLimitPerTransaction
                - initiationDate
                - amountLimitTotal
              example:
                model: A
                expiresAt: '2030-09-22'
                frequency: 30D
                amountLimitPerTransaction: 30
                initiationDate: '2025-09-22'
                amountLimitTotal: 30000
            - type: object
              title: Model O
              description: Opcje dla modelu O
              properties:
                model:
                  type: string
                  enum:
                    - O
                initiationDate:
                  type: string
                  format: date
                  description: Data pierwszej dozwolonej Płatności Powtarzalnej
                expiresAt:
                  type: string
                  format: datetime
                  description: Data wygaśnięcia aliasu, max +10 lat
              required:
                - model
              example:
                model: O
                expiresAt: '2030-09-22'
                initiationDate: '2025-09-22'
            - type: object
              title: Model M
              description: Opcje dla modelu M
              properties:
                model:
                  type: string
                  enum:
                    - M
                frequency:
                  type: string
                  minLength: 2
                  maxLength: 4
                  description: Częstotliwość subskrypcji
                expiresAt:
                  type: string
                  format: datetime
                  description: Data wygaśnięcia aliasu, max +10 lat
                initiationDate:
                  type: string
                  format: date
                  description: Data pierwszej dozwolonej Płatności Powtarzalnej
              required:
                - model
              example:
                model: O
                expiresAt: '2030-09-22'
                initiationDate: '2025-09-22'
                frequency: 30D
        descriptions:
          type: object
          nullable: true
          description: Dodatkowe opisy przekazywane do banku płacącego
          properties:
            line1:
              type: string
              nullable: true
              description: Linijka nr 1
              maxLength: 35
            line2:
              type: string
              nullable: true
              description: Linijka nr 2
              maxLength: 35
            line3:
              type: string
              nullable: true
              description: Linijka nr 3
              maxLength: 35
    paymentBlikAliasUnregisterRequest:
      type: object
      additionalProperties: false
      properties:
        reason:
          type: string
          maxLength: 20
          nullable: true
          description: Powód wyrejestrowania - zostanie wysłany do BLIK oraz płacącego
      oneOf:
        - type: object
          title: Wyrejestrowanie przez ID aliasu SimPay
          required:
            - uuid
          properties:
            uuid:
              $ref: '#/components/schemas/AliasId'
        - type: object
          title: Wyrejestrowanie przez value + type aliasu
          required:
            - value
            - type
          properties:
            value:
              type: string
              maxLength: 64
              nullable: false
              description: Wartość aliasu
            type:
              $ref: '#/components/schemas/blikAliasType'
    paymentBlikSubscriptionExecuteAutoPaymentRequest:
      type: object
      required:
        - transactionId
      properties:
        transactionId:
          $ref: '#/components/schemas/TransactionId'
        attempt:
          type: integer
          nullable: true
          description: Numer ponowienia Płatności Powtarzalnej
          minimum: 0
          maximum: 9
        descriptions:
          type: object
          nullable: true
          description: Dodatkowe opisy przekazywane do banku płacącego
          properties:
            line1:
              type: string
              nullable: true
              description: Linijka nr 1
              maxLength: 35
            line2:
              type: string
              nullable: true
              description: Linijka nr 2
              maxLength: 35
            line3:
              type: string
              nullable: true
              description: Linijka nr 3
              maxLength: 35
        alias:
          type: object
          nullable: true
          description: Informacje do aliasu
          properties:
            label:
              type: string
              nullable: true
              maxLength: 35
              description: >-
                Nowa wartość etykiety subskrypcji widoczna w aplikacji bankowej
                płacącego
            noDelay:
              type: boolean
              nullable: true
              description: >-
                Flaga noDelay (zobacz więcej w zakładce BLIK Płatności
                Powtarzalne)
    directbillingTransactionNotification:
      type: object
      required:
        - id
        - serviceId
        - status
        - values
        - number_from
        - provider
        - signature
      properties:
        id:
          $ref: '#/components/schemas/TransactionId'
        serviceId:
          $ref: '#/components/schemas/ServiceId'
        status:
          $ref: '#/components/schemas/directbillingTransactionStatus'
        values:
          type: object
          description: Kwoty transakcji
          required:
            - net
            - gross
            - partner
          properties:
            net:
              type: number
              format: float
              description: Kwota transakcji netto
            gross:
              type: number
              format: float
              description: Kwota transakcji brutto
            partner:
              type: number
              format: float
              description: Prowizja dla partnera z transakcji
        returns:
          type: object
          properties:
            complete:
              type: string
              format: url
              description: >-
                Adres na jaki klient miał zostać przekierowany po prawidłowej
                transakcji
            failure:
              type: string
              format: url
              description: >-
                Adres na jaki klient miał zostać przekierowany po nie
                prawidłowej transakcji
        control:
          type: string
        number_from:
          type: string
          description: Numer telefonu z jakiego została przeprowadzona transakcja
        provider:
          type: integer
        signature:
          type: string
          description: >-
            Sygnatura notyfikacji [Przeczytaj jak wygenerować
            sygnature](#tag/DirectBilling/Sygnatura/Obliczanie-sygnatury-przy-odbieraniu-notyfikacji)
      example:
        id: dc261d4f-31ef-4728-bfd6-97bbe2a5ef0a
        serviceId: e14f8074
        status: transaction_db_payed
        values:
          net: 11.07
          gross: 13.61
          partner: 5
        returns:
          complete: https://www.simpay.pl/complete
          failure: https://www.simpay.pl/failure
        number_from: '48123123123'
        provider: 1
        signature: a3116cf4f1e960223c2cc3088bf387278b6675255209bdeaf96a2f316a2fadc1
    paymentTransactionNotification:
      type: object
  responses:
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseUnauthorized'
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseForbidden'
    NotFound:
      description: NotFound
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponseNotFound'
    UnprocessableContent:
      description: Unprocessable Content
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorUnprocessableContent'
  requestBodies:
    smsServiceCheckCode:
      description: ''
      required: true
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/smsCodeWithNumber'
              - $ref: '#/components/schemas/smsCodeWithoutNumber'
    directbillingTransactionCreateOnlyNecessary:
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/directbillingTransactionCreateAll'
              - $ref: >-
                  #/components/schemas/directbillingTransactionCreateOnlyNecessary
