openapi: 3.0.1
info:
  title: OMNO API Documentation
  contact:
    email: support@omno.com
  version: 2.0.0
servers:
  - url: https://api.omno.com
    description: Production
  - url: https://api.omno.dev
    description: Sandbox
security:
  - bearerAuth: []
tags:
  - name: Customer
    description: Customer API
  - name: Payout
    description: Payout API
  - name: PSP
    description: PSP API
  - name: Cashier
    description: Cashier API
  - name: PayIn
    description: PayIn API
paths:
  /public/payout/{payoutId}/reject:
    put:
      tags:
        - Payout
      summary: Reject payout transaction
      description: >-
        Reject payout transaction for the given ID and after this transaction
        will not be sent to PSP for processing.
      operationId: rejectPayout
      parameters:
        - name: payoutId
          in: path
          description: Payout ID. Returned by `createPayout` method
          required: true
          schema:
            type: string
          example: 944732c4608c441aa91379478b91f76e
      responses:
        '204':
          description: Payout transaction rejected
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unit'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/payout/{payoutId}/confirm:
    put:
      tags:
        - Payout
      summary: Confirm payout transaction
      description: >-
        Confirm payout transaction for the given ID and after this confirmation
        transaction will start processing.
      operationId: confirmPayout
      parameters:
        - name: payoutId
          in: path
          description: Payout ID. Returned by `createPayout` method
          required: true
          schema:
            type: string
          example: 944732c4608c441aa91379478b91f76e
      responses:
        '204':
          description: Payout transaction confirmed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unit'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/cashier/session/{sessionId}/balance:
    put:
      tags:
        - Cashier
      summary: Update cashier session balance
      description: Updates cashier session balance for customer.
      operationId: updateCashierSessionBalance
      parameters:
        - name: sessionId
          in: path
          description: Cashier Session ID
          required: true
          schema:
            type: string
          example: 944732c4608c441aa91379478b91f76e
      responses:
        '204':
          description: Cashier session balance updated
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/payout:
    post:
      tags:
        - Payout
      summary: Create payout transaction
      description: Creates payout transaction for the given request
      operationId: createPayout
      requestBody:
        description: Create Payout Request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePayoutRequest'
        required: true
      responses:
        '200':
          description: Payout transaction created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/payout/{payoutId}/process/direct-link:
    post:
      tags:
        - Payout
      summary: Start direct link payout processing
      description: >-
        Start direct link payout processing for the given ID and after this
        transaction will start processing.
      operationId: startDirectLinkPayoutProcessing
      parameters:
        - name: payoutId
          in: path
          description: Payout ID. Returned by `createPayout` method
          required: true
          schema:
            type: string
          example: 944732c4608c441aa91379478b91f76e
      requestBody:
        description: Start direct link payout processing request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartDirectLinkPayoutProcessingRequest'
        required: true
      responses:
        '200':
          description: Payout processing started response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutProcessingResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/payin:
    post:
      tags:
        - PayIn
      summary: Create payin transaction
      description: Creates pay-in transaction for the given request
      operationId: createPayIn
      requestBody:
        description: Create payin transaction request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePayInRequest'
        required: true
      responses:
        '200':
          description: Payin transaction created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayInResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/payin/{payinId}/process/saved-card:
    post:
      tags:
        - PayIn
      operationId: processSavedCard
      parameters:
        - name: payinId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartSavedCardProcessingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartCardPayInProcessingResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/payin/{payinId}/process/direct-link:
    post:
      tags:
        - PayIn
      summary: Start direct link payin processing
      description: >-
        Start direct link payin processing for the given ID and after this
        transaction will start processing.
      operationId: startDirectLinkPayinProcessing
      parameters:
        - name: payinId
          in: path
          description: Payin ID. Returned by `createPayIn` method
          required: true
          schema:
            type: string
          example: 944732c4608c441aa91379478b91f76e
      requestBody:
        description: Start direct link payin processing request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartDirectLinkPayinProcessingRequest'
        required: true
      responses:
        '200':
          description: Payin processing started response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartApmPayInProcessingResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/payin/{payinId}/process/card:
    post:
      tags:
        - PayIn
      operationId: processCard
      parameters:
        - name: payinId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartCardProcessingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartCardPayInProcessingResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/customer:
    post:
      tags:
        - Customer
      summary: Crate or update customer
      description: Creates or updates customer for current authenticated merchant
      operationId: createOrUpdateCustomer
      requestBody:
        description: Create customer request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerRequest'
        required: true
      responses:
        '200':
          description: Customer created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/cashier/session:
    post:
      tags:
        - Cashier
      summary: Create cashier session
      description: Creates cashier session for customer.
      operationId: createCashierSession
      requestBody:
        description: Create Cashier Request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCashierSessionRequest'
        required: true
      responses:
        '200':
          description: Cashier session created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateCashierSessionResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/psp/{merchantEnabledPspId}:
    get:
      tags:
        - PSP
      summary: Fetch merchant enabled PSP
      description: Get Merchant enabled PSP Details for the given ID
      operationId: fetchMerchantEnabledPsp
      parameters:
        - name: merchantEnabledPspId
          in: path
          description: Merchant enabled PSP ID
          required: true
          schema:
            type: string
          example: 944732c4608c441aa91379478b91f76e
      responses:
        '200':
          description: Merchant enabled PSP details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MerchantEnabledPsp'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/payout/{payoutId}:
    get:
      tags:
        - Payout
      summary: Fetch payout transaction
      description: Fetch payout transaction for the given ID
      operationId: fetchPayoutTransaction
      parameters:
        - name: payoutId
          in: path
          description: Payout ID. Returned by `createPayout` method
          required: true
          schema:
            type: string
          example: 944732c4608c441aa91379478b91f76e
      responses:
        '200':
          description: Payout transaction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutTransaction'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /public/payin/{payinId}:
    get:
      tags:
        - PayIn
      summary: Fetch payin transaction
      description: Get payin transaction Details for the given ID
      operationId: fetchPayInTransaction
      parameters:
        - name: payinId
          in: path
          description: Payment transaction ID
          required: true
          schema:
            type: string
          example: 944732c4608c441aa91379478b91f76e
      responses:
        '200':
          description: Payment transaction details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayInTransaction'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ErrorResponse:
      type: object
      properties:
        errorKey:
          type: string
        errorMessage:
          type: string
        errorCode:
          type: integer
          format: int32
    Unit:
      type: object
    CreatePayoutRequest:
      required:
        - currency
        - customer
        - kycVerified
        - orderId
        - value
      type: object
      properties:
        orderId:
          type: string
          description: Unique identifier for checkout session
          example: 944732c4608c441aa91379478b91f76e
        value:
          type: number
          description: Payout transaction amount
          example: 100
        currency:
          type: string
          description: >-
            Payout transaction currency. If processor psp doesn't allow this
            currency but if this currency is enabled it will be automatically
            converted to PSP currency and final transaction currency will be set
            respectively.
          example: USD
        kycVerified:
          type: boolean
          description: >-
            Whether or not this customer is KYC verified in your system. This
            flag is required to determine right PSP to process this payout.
          example: false
        customer:
          $ref: '#/components/schemas/CustomerRequest'
        routerId:
          type: string
          description: Specific router ID to process transaction with.
          example: 944732c4608c441aa91379478b91f76e
        directRouteId:
          type: string
          description: Direct link route ID to process transaction with.
          example: 944732c4608c441aa91379478b91f76e
        merchantAdditionalData:
          type: object
          additionalProperties:
            type: object
            description: Additional data for the transaction
          description: Additional data for the transaction
    CustomerBilling:
      required:
        - address
        - city
        - countryCode
        - postalCode
        - state
      type: object
      properties:
        address:
          type: string
          description: Customer billing address
          example: 123 Main St
        city:
          type: string
          description: Customer billing city
          example: Atlanta
        state:
          type: string
          description: Customer billing state
          example: GA
        countryCode:
          type: string
          description: Customer billing country code (ISO 3166-1 alpha-2)
          example: US
        postalCode:
          type: string
          description: Customer billing postal code
          example: '30308'
      description: Customer billing information
    CustomerKyc:
      type: object
      properties:
        idType:
          type: string
        idNumber:
          type: string
        idCountry:
          type: string
        idExpirationDate:
          type: string
          format: date
        nationality:
          type: string
        countryOfBirth:
          type: string
      description: Customer KYC information
    CustomerRequest:
      required:
        - billing
        - dateOfBirth
        - email
        - externalUserId
        - firstName
        - lastName
        - phoneNumber
      type: object
      properties:
        externalUserId:
          type: string
          description: Your defined unique identifier for this customer.
          example: '123456789'
        firstName:
          type: string
          description: Customer first name
          example: John
        lastName:
          type: string
          description: Customer last name
          example: Doe
        email:
          type: string
          description: Customer email
          example: john.doe@example.com
        phoneNumber:
          type: string
          description: Customer phone number
          example: 1 1234567890
        dateOfBirth:
          type: string
          description: Customer date of birth
          format: date
          example: '1990-12-01'
        billing:
          $ref: '#/components/schemas/CustomerBilling'
        kyc:
          $ref: '#/components/schemas/CustomerKyc'
      description: Customer information
    IframeUrls:
      required:
        - apm
        - card
      type: object
      properties:
        card:
          type: string
          description: Card IFrame URL
          example: >-
            https://checkout.omno.com/payments/<transactionType>/<paymentId>/card
        apm:
          type: string
          description: Alternate Payment Method IFrame URL
          example: https://checkout.omno.com/payments/<transactionType>/<paymentId>/apm
      description: Payment Iframe URLs
    PayoutResponse:
      required:
        - iframeUrls
        - payoutId
        - status
      type: object
      properties:
        payoutId:
          type: string
          description: Payout ID
          example: 944732c4608c441aa91379478b91f76e
        status:
          type: string
          description: Payout status
          example: CREATED
          enum:
            - CREATED
            - WAITING_FOR_CONFIRMATION
            - PENDING
            - PROCESSED
            - REJECTED
            - FAILED
            - TIMEOUT
        iframeUrls:
          $ref: '#/components/schemas/IframeUrls'
    Browser:
      type: object
      properties:
        acceptHeader:
          type: string
        userAgent:
          type: string
        language:
          type: string
        timeZoneOffset:
          type: integer
          format: int32
        timeZone:
          type: string
        colorDepth:
          type: integer
          format: int32
        screenHeight:
          type: integer
          format: int32
        screenWidth:
          type: integer
          format: int32
        windowHeight:
          type: integer
          format: int32
        windowWidth:
          type: integer
          format: int32
        javaEnabled:
          type: boolean
        javascriptEnabled:
          type: boolean
        customerIp:
          type: string
    StartDirectLinkPayoutProcessingRequest:
      required:
        - additionalData
        - browser
      type: object
      properties:
        browser:
          $ref: '#/components/schemas/Browser'
        additionalData:
          type: object
          additionalProperties:
            type: object
    PayoutProcessingResponse:
      required:
        - payoutId
        - status
      type: object
      properties:
        payoutId:
          type: string
        status:
          type: string
          enum:
            - CREATED
            - WAITING_FOR_CONFIRMATION
            - PENDING
            - PROCESSED
            - REJECTED
            - FAILED
            - TIMEOUT
        redirectUrl:
          type: string
        message:
          type: string
    CreatePayInRequest:
      required:
        - amount
        - currency
        - customer
        - kycVerified
        - orderId
        - previousTransactionCount
        - returnUrls
      type: object
      properties:
        orderId:
          type: string
          description: Unique identifier for payin session
          example: 944732c4608c441aa91379478b91f76e
        amount:
          type: number
          description: PayIn transaction amount
          example: 100
        currency:
          type: string
          description: >-
            PayIn transaction currency. If processor psp doesn't allow this
            currency but if this currency is enabled it will be automatically
            converted to PSP currency and final transaction currency will be set
            respectively.
          example: USD
        kycVerified:
          type: boolean
          description: >-
            Whether or not this customer is KYC verified in your system. This
            flag is required to determine right PSP to process this payin.
          example: false
        customer:
          $ref: '#/components/schemas/CustomerRequest'
        previousTransactionCount:
          type: integer
          description: Number of previous transactions in different payment system.
          format: int32
          example: 1
        returnUrls:
          $ref: '#/components/schemas/ReturnUrls'
        routerId:
          type: string
          description: Specific router ID to process transaction with.
          example: 944732c4608c441aa91379478b91f76e
        directRouteId:
          type: string
          description: Direct link route ID to process transaction with.
          example: 944732c4608c441aa91379478b91f76e
        merchantAdditionalData:
          type: object
          additionalProperties:
            type: object
            description: Additional data for the transaction
          description: Additional data for the transaction
    ReturnUrls:
      required:
        - failure
        - success
      type: object
      properties:
        success:
          type: string
          description: Url where user will be redirected after successful transaction.
          example: https://example.com/success
        failure:
          type: string
          description: Url where user will be redirected after failed transaction.
          example: https://example.com/failure
      description: Return URLs after transaction is finished.
    PayInResponse:
      required:
        - iframeUrls
        - paymentId
        - status
      type: object
      properties:
        paymentId:
          type: string
          description: Payment ID
          example: 944732c4608c441aa91379478b91f76e
        status:
          type: string
          description: Payment status
          example: CREATED
          enum:
            - CREATED
            - PENDING
            - PENDING_3DS
            - SUCCESS
            - REFUNDED
            - PARTIALLY_REFUNDED
            - DECLINED
            - FAILED
            - TIMEOUT
            - REFUND_FAILED
            - REFUND_PENDING
        iframeUrls:
          $ref: '#/components/schemas/IframeUrls'
    SavedCardData:
      required:
        - cardId
        - cvv
      type: object
      properties:
        cardId:
          type: string
        cvv:
          type: string
    StartSavedCardProcessingRequest:
      required:
        - browser
        - savedCardData
      type: object
      properties:
        browser:
          $ref: '#/components/schemas/Browser'
        savedCardData:
          $ref: '#/components/schemas/SavedCardData'
    StartCardPayInProcessingResponse:
      required:
        - paymentId
        - status
      type: object
      properties:
        paymentId:
          type: string
        status:
          type: string
          enum:
            - CREATED
            - PENDING
            - PENDING_3DS
            - SUCCESS
            - REFUNDED
            - PARTIALLY_REFUNDED
            - DECLINED
            - FAILED
            - TIMEOUT
            - REFUND_FAILED
            - REFUND_PENDING
    StartDirectLinkPayinProcessingRequest:
      required:
        - additionalData
        - browser
      type: object
      properties:
        browser:
          $ref: '#/components/schemas/Browser'
        additionalData:
          type: object
          additionalProperties:
            type: object
    StartApmPayInProcessingResponse:
      required:
        - paymentId
        - status
      type: object
      properties:
        paymentId:
          type: string
        status:
          type: string
          enum:
            - CREATED
            - PENDING
            - PENDING_3DS
            - SUCCESS
            - REFUNDED
            - PARTIALLY_REFUNDED
            - DECLINED
            - FAILED
            - TIMEOUT
            - REFUND_FAILED
            - REFUND_PENDING
        redirectUrl:
          type: string
    CardData:
      required:
        - cardNumber
        - cardholderName
        - cvv
        - expirationMonth
        - expirationYear
      type: object
      properties:
        cardNumber:
          type: string
        expirationMonth:
          type: string
        expirationYear:
          type: string
        cvv:
          type: string
        cardholderName:
          type: string
    StartCardProcessingRequest:
      required:
        - browser
        - cardData
        - saveCard
      type: object
      properties:
        browser:
          $ref: '#/components/schemas/Browser'
        cardData:
          $ref: '#/components/schemas/CardData'
        saveCard:
          type: boolean
    CustomerResponse:
      required:
        - dateOfBirth
        - email
        - externalUserId
        - firstName
        - id
        - lastName
        - merchantId
        - phoneNumber
      type: object
      properties:
        id:
          type: string
          description: Customer ID
          example: '123456789'
        firstName:
          type: string
          description: Customer first name
          example: John
        lastName:
          type: string
          description: Customer last name
          example: Doe
        externalUserId:
          type: string
          description: Customer external User ID (merchant specified)
          example: '123456789'
        merchantId:
          type: string
          description: Merchant ID associated with the customer
          example: '123456789'
        email:
          type: string
          description: Customer email
          example: john.doe@example.com
        phoneNumber:
          type: string
          description: Customer phone number
          example: 1 1234567890
        dateOfBirth:
          type: string
          description: Customer date of birth in format (YYYY-MM-DD)c
          example: '1990-12-01'
    CreateCashierSessionRequest:
      required:
        - currency
        - customer
        - kycVerified
        - previousTransactionCount
        - returnUrls
      type: object
      properties:
        customer:
          $ref: '#/components/schemas/CustomerRequest'
        returnUrls:
          $ref: '#/components/schemas/ReturnUrls'
        currency:
          type: string
          description: >-
            Currency for the cashier session, in which all payin/payout
            transaction will be created
          example: USD
        kycVerified:
          type: boolean
          description: Whether or not this customer is KYC verified in your system.
          example: false
        previousTransactionCount:
          type: integer
          description: Number of previous transactions in different payment system.
          format: int32
          example: 0
        balance:
          type: number
          description: >-
            Current balance of the customer. Balance will be shown on withdrawal
            widget.
          example: 100
    CreateCashierSessionResponse:
      required:
        - checkoutUrl
        - sessionId
      type: object
      properties:
        sessionId:
          type: string
          description: Session ID
          example: 944732c4608c441aa91379478b91f76e
        checkoutUrl:
          type: string
          description: Checkout URL
          example: https://checkout.omno.com/payments/cashier/<sessionId>
    FTDConfiguration:
      required:
        - configurationType
        - initialTransactionSupported
      type: object
      properties:
        configurationType:
          type: string
          description: FTD configuration type. Per card or per Customer
          example: LIMIT_PER_CARD
          enum:
            - LIMIT_PER_CARD
            - LIMIT_PER_CUSTOMER
        initialTransactionSupported:
          type: boolean
          description: Setting for supporting initial transaction
          example: true
        allowAfterTimesOfDeposit:
          type: integer
          description: Setting to allow deposit only after specified number of transaction
          format: int64
          example: 5
      description: Restrictions on first-time deposits
    MerchantEnabledPsp:
      required:
        - authorized
        - constraints
        - feature
        - ftdConfigurations
        - id
        - merchantId
        - name
        - paymentServiceProviderId
        - paymentServiceProviderName
        - restrictions
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for merchant enabled psp
          example: 944732c4608c441aa91379478b91f76e
        merchantId:
          type: string
          description: Unique identifier for Merchant
          example: 944732c4608c441aa91379478b91f76e
        name:
          type: string
          description: merchant assigned name for PSP
        paymentServiceProviderId:
          type: string
          description: Unique identifier for PSP
          example: 944732c4608c441aa91379478b91f76e
        paymentServiceProviderName:
          type: string
          description: PSP name
        feature:
          type: string
          description: Feature. Pay in or Pay out
          example: PAY_IN
          enum:
            - PAY_IN
            - PAY_OUT
        limits:
          $ref: '#/components/schemas/PspLimits'
        kycRequired:
          type: boolean
          description: Setting for requiring Kyc
          example: true
        defaultCurrency:
          type: string
          description: >-
            Currency that will be used by default if currency isn't specified in
            the transaction
          example: USD
        enabledCurrencies:
          uniqueItems: true
          type: array
          description: Currencies that are supported
          items:
            type: string
            description: Currencies that are supported
        constraints:
          type: array
          description: >-
            List of constraints. Country and card brands for which this
            constraint will be applied.
          items:
            $ref: '#/components/schemas/MerchantEnabledPspConstraint'
        ftdConfigurations:
          type: array
          description: Restrictions on first-time deposits
          items:
            $ref: '#/components/schemas/FTDConfiguration'
        restrictions:
          type: array
          description: Restrictions on max number of transactions per card or per customer
          items:
            $ref: '#/components/schemas/RestrictionConfiguration'
        authorized:
          type: boolean
          description: Setting for psp authorization
          example: true
        displayLogo:
          type: string
    MerchantEnabledPspConstraint:
      required:
        - cardBrand
        - country
      type: object
      properties:
        country:
          type: array
          description: List of countries for which constraint will be applied
          example:
            - DE
          items:
            type: string
            description: List of countries for which constraint will be applied
            example: '["DE"]'
        cardBrand:
          type: array
          description: List of Card brands for which constraint will be applied
          example:
            - VISA
          items:
            type: string
            description: List of Card brands for which constraint will be applied
            example: '["VISA"]'
      description: >-
        List of constraints. Country and card brands for which this constraint
        will be applied.
    PspLimitByTypeAndTimeframe:
      required:
        - amount
        - count
        - timeframe
        - type
      type: object
      properties:
        amount:
          type: number
          description: Total amount limit for transactions in a time frame
          example: 100
        count:
          type: integer
          description: limit for total number of transactions in a time frame
          format: int64
          example: 100
        type:
          type: string
          description: limit type
          example: TRANSACTION_LIMIT
          enum:
            - CARD_LIMIT
            - TRANSACTION_LIMIT
        timeframe:
          type: string
          description: Time frame for which the limit will be checked
          example: MONTH
          enum:
            - DAY
            - WEEK
            - MONTH
      description: List of limits for CARD/TRANSACTION for specified time frame
    PspLimits:
      required:
        - baseCurrency
        - maxAmount
        - minAmount
        - pspLimitsByTypeAndTimeframe
      type: object
      properties:
        baseCurrency:
          type: string
          description: Currency for specified limit
          example: USD
        minAmount:
          type: number
          description: Min transaction amount for specified limit
          example: 100
        maxAmount:
          type: number
          description: Max transaction amount for specified limit
          example: 100
        pspLimitsByTypeAndTimeframe:
          type: array
          description: List of limits for CARD/TRANSACTION for specified time frame
          items:
            $ref: '#/components/schemas/PspLimitByTypeAndTimeframe'
      description: List of limits
    RestrictionConfiguration:
      required:
        - configurationType
        - enabled
        - maxSuccessfulTransactions
      type: object
      properties:
        configurationType:
          type: string
          description: Restriction configuration type. Per card or per Customer
          example: LIMIT_PER_CARD
          enum:
            - LIMIT_PER_CARD
            - LIMIT_PER_CUSTOMER
        enabled:
          type: boolean
          description: Setting for enabling/disabling restriction configuration
          example: true
        maxSuccessfulTransactions:
          type: integer
          description: Number of max successful transactions
          format: int32
          example: 10
      description: Restrictions on max number of transactions per card or per customer
    DomainAge:
      type: object
      properties:
        human:
          type: string
        timestamp:
          type: integer
          format: int64
        iso:
          type: string
    EmailValidationResponse:
      type: object
      properties:
        valid:
          type: boolean
        disposable:
          type: boolean
        timed_out:
          type: boolean
        deliverability:
          type: string
        catch_all:
          type: boolean
        leaked:
          type: boolean
        suspect:
          type: boolean
        smtp_score:
          type: integer
          format: int32
        overall_score:
          type: integer
          format: int32
        first_name:
          type: string
        common:
          type: boolean
        generic:
          type: boolean
        dns_valid:
          type: boolean
        honeypot:
          type: boolean
        spam_trap_score:
          type: string
        recent_abuse:
          type: boolean
        fraud_score:
          type: number
          format: float
        frequent_complainer:
          type: boolean
        suggested_domain:
          type: string
        domain_velocity:
          type: string
        domain_trust:
          type: string
        user_activity:
          type: string
        mx_records:
          type: array
          items:
            type: string
        a_records:
          type: array
          items:
            type: string
        risky_tld:
          type: boolean
        spf_record:
          type: boolean
        dmarc_record:
          type: boolean
        first_seen:
          $ref: '#/components/schemas/FirstSeen'
        domain_age:
          $ref: '#/components/schemas/DomainAge'
        sanitized_email:
          type: string
        request_id:
          type: string
        success:
          type: boolean
        message:
          type: string
        errors:
          type: array
          items:
            type: string
    FirstSeen:
      type: object
      properties:
        human:
          type: string
        timestamp:
          type: integer
          format: int64
        iso:
          type: string
    IpInfo:
      type: object
      properties:
        country:
          type: string
        asn:
          type: string
        vpn:
          type: boolean
        proxy:
          type: boolean
        anonymousIp:
          type: boolean
    PayoutStatusWithReason:
      type: object
      properties:
        reason:
          type: string
        detailedStatus:
          type: string
          enum:
            - NO_PROVIDER_AVAILABLE
            - AMOUNT_TOO_LOW
            - AMOUNT_TOO_HIGH
            - OTHER
            - PROVIDER_NOT_SUITABLE
            - PROVIDER_NOT_IN_ROUTE
            - FRAUD_SCORE_ABOVE_THRESHOLD
            - BLACKLISTED
            - BLOCKED_CARD
            - BLOCKED_CUSTOMER
            - REJECTED_BY_MERCHANT
            - PSP_CHANGED_AFTER_APPROVAL
            - INVALID_CREDENTIALS
            - AUTHENTICATION_FAILED
            - ACCESS_DENIED
            - CARD_DECLINED
            - TRANSACTION_NOT_ALLOWED
            - VALIDATION_ERROR
            - INVALID_CARD_NUMBER
            - INVALID_EXPIRY_DATE
            - CVV_MISMATCH
            - SYSTEM_ERROR
            - DUPLICATE_TRANSACTION
            - MARKED_AS_FRAUD
            - PSP_UNREACHABLE
            - INVALID_REQUEST_FORMAT
            - OTHER_FAILURES
            - UNMAPPED_ERRORS
            - INSUFFICIENT_FUNDS
            - TRANSACTION_REJECTED_BY_PROVIDER
        status:
          type: string
          enum:
            - CREATED
            - WAITING_FOR_CONFIRMATION
            - PENDING
            - PROCESSED
            - REJECTED
            - FAILED
            - TIMEOUT
    PayoutTransaction:
      required:
        - amount
        - createdAt
        - currency
        - customerId
        - id
        - initialAmount
        - initialCurrency
        - merchantId
        - orderId
        - status
        - updatedAt
      type: object
      properties:
        id:
          type: string
        amount:
          type: number
        merchantId:
          type: string
        customerId:
          type: string
        orderId:
          type: string
        currency:
          type: string
        status:
          type: string
          enum:
            - CREATED
            - WAITING_FOR_CONFIRMATION
            - PENDING
            - PROCESSED
            - REJECTED
            - FAILED
            - TIMEOUT
        initialAmount:
          type: number
        initialCurrency:
          type: string
        routerId:
          type: string
        cardId:
          type: string
        cardMask:
          type: string
        cardBrand:
          type: string
        cardHash:
          type: string
        predictedPspId:
          type: string
        processorPspId:
          type: string
        pspTransactionId:
          type: string
        previousTransactionCount:
          type: integer
          format: int32
        statusReason:
          $ref: '#/components/schemas/PayoutStatusWithReason'
        metadata:
          $ref: '#/components/schemas/TransactionMetadata'
        transactionType:
          type: string
          enum:
            - CARD
            - BANK
            - WALLET
            - CASH
            - CRYPTO
            - OTHER
        browser:
          $ref: '#/components/schemas/Browser'
        additionalData:
          type: object
          additionalProperties:
            type: object
        pspAdditionalData:
          type: object
          additionalProperties:
            type: object
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    PhoneValidationResponse:
      type: object
      properties:
        valid:
          type: boolean
        active:
          type: boolean
        formatted:
          type: string
        local_format:
          type: string
        fraud_score:
          type: integer
          format: int32
        recent_abuse:
          type: boolean
        VOIP:
          type: boolean
        prepaid:
          type: boolean
        risky:
          type: boolean
        name:
          type: string
        carrier:
          type: string
        line_type:
          type: string
        country:
          type: string
        region:
          type: string
        city:
          type: string
        accurate_country_code:
          type: boolean
        zip_code:
          type: string
        timezone:
          type: string
        dialing_code:
          type: integer
          format: int32
        do_not_call:
          type: boolean
        leaked:
          type: boolean
        spammer:
          type: boolean
        active_status:
          type: string
        user_activity:
          type: string
        mcc:
          type: string
        mnc:
          type: string
        message:
          type: string
        success:
          type: boolean
        request_id:
          type: string
        errors:
          type: array
          items:
            type: string
    ProxyDetectionResponse:
      type: object
      properties:
        proxy:
          type: boolean
        host:
          type: string
        ISP:
          type: string
        Organization:
          type: string
        ASN:
          type: integer
          format: int32
        country_code:
          type: string
        city:
          type: string
        region:
          type: string
        timezone:
          type: string
        latitude:
          type: number
          format: float
        longitude:
          type: number
          format: float
        zip_code:
          type: string
        is_crawler:
          type: boolean
        connection_type:
          type: string
        recent_abuse:
          type: boolean
        abuse_velocity:
          type: string
        bot_status:
          type: boolean
        vpn:
          type: boolean
        tor:
          type: boolean
        active_vpn:
          type: boolean
        active_tor:
          type: boolean
        mobile:
          type: boolean
        fraud_score:
          type: number
          format: float
        frequent_abuser:
          type: boolean
        high_risk_attacks:
          type: boolean
        shared_connection:
          type: boolean
        dynamic_connection:
          type: boolean
        security_scanner:
          type: boolean
        trusted_network:
          type: boolean
        request_id:
          type: string
        operating_system:
          type: string
        browser:
          type: string
        device_brand:
          type: string
        device_model:
          type: string
        success:
          type: boolean
        message:
          type: string
        errors:
          type: array
          items:
            type: string
    TransactionMetadata:
      type: object
      properties:
        ipAddress:
          type: string
        ipInfo:
          $ref: '#/components/schemas/IpInfo'
        deviceType:
          type: string
          enum:
            - MOBILE
            - DESKTOP
            - TABLET
            - UNKNOWN
        proxyDetection:
          $ref: '#/components/schemas/ProxyDetectionResponse'
        emailValidation:
          $ref: '#/components/schemas/EmailValidationResponse'
        phoneValidation:
          $ref: '#/components/schemas/PhoneValidationResponse'
      description: Transaction metadata
    PayInStatusWithReason:
      type: object
      properties:
        reason:
          type: string
        detailedStatus:
          type: string
          enum:
            - GENERAL_DECLINE
            - BANK_ISSUES
            - PSP_ISSUES
            - CUSTOMER_ISSUES
            - CVV_INVALID
            - CARD_EXPIRED
            - CARD_BLOCKED
            - CARD_NOT_SUPPORTED
            - NO_PROVIDER_AVAILABLE
            - OTHER
            - PROVIDER_NOT_SUITABLE
            - PROVIDER_NOT_IN_ROUTE
            - FRAUD_SCORE_ABOVE_THRESHOLD
            - BLACKLISTED
            - BLOCKED_CARD
            - BLOCKED_CUSTOMER
            - INVALID_CREDENTIALS
            - AUTHENTICATION_FAILED
            - ACCESS_DENIED
            - CARD_DECLINED
            - TRANSACTION_NOT_ALLOWED
            - VALIDATION_ERROR
            - INVALID_CARD_NUMBER
            - INVALID_EXPIRY_DATE
            - CVV_MISMATCH
            - SYSTEM_ERROR
            - DUPLICATE_TRANSACTION
            - MARKED_AS_FRAUD
            - PSP_UNREACHABLE
            - INVALID_REQUEST_FORMAT
            - OTHER_FAILURES
            - UNMAPPED_ERRORS
            - INSUFFICIENT_FUNDS
            - THREE_DS_NOT_SUPPORTED
            - TRANSACTION_TIMEOUT
            - REFUND_ERROR
            - REFUND_ALREADY_PROCESSED
            - PARTIAL_REFUND_NOT_ALLOWED
        status:
          type: string
          enum:
            - CREATED
            - PENDING
            - PENDING_3DS
            - SUCCESS
            - REFUNDED
            - PARTIALLY_REFUNDED
            - DECLINED
            - FAILED
            - TIMEOUT
            - REFUND_FAILED
            - REFUND_PENDING
      description: PayIn transaction status with reason
    PayInTransaction:
      required:
        - amount
        - createdAt
        - currency
        - customerId
        - id
        - initialAmount
        - initialCurrency
        - merchantId
        - orderId
        - returnUrls
        - status
        - updatedAt
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for payin transaction
          example: 944732c4608c441aa91379478b91f76e
        amount:
          type: number
          description: PayIn transaction amount
          example: 100
        merchantId:
          type: string
          description: Unique identifier current merchant
          example: 944732c4608c441aa91379478b91f76e
        customerId:
          type: string
          description: Unique identifier for create/updated customer
          example: 944732c4608c441aa91379478b91f76e
        orderId:
          type: string
          description: Merchant specified order identifier
          example: 944732c4608c441aa91379478b91f76e
        currency:
          type: string
          description: >-
            PayIn transaction currency. If processor psp doesn't allow this
            currency but if this currency is enabled it will be automatically
            converted to PSP currency and final transaction currency will be set
            respectively.
        status:
          type: string
          description: PayIn transaction status
          example: CREATED
          enum:
            - CREATED
            - PENDING
            - PENDING_3DS
            - SUCCESS
            - REFUNDED
            - PARTIALLY_REFUNDED
            - DECLINED
            - FAILED
            - TIMEOUT
            - REFUND_FAILED
            - REFUND_PENDING
        initialAmount:
          type: number
          description: Transaction initial amount
          example: 100
        initialCurrency:
          type: string
          description: Transaction initial currency
          example: USD
        routerId:
          type: string
          description: Router id in which transaction was processed
        returnUrls:
          $ref: '#/components/schemas/ReturnUrls'
        cardId:
          type: string
          description: Unique identifier for card if card was saved
          example: 944732c4608c441aa91379478b91f76e
        cardMask:
          type: string
          description: Card mask if card was used during transaction
          example: 1234 56** **** 1234
        cardBrand:
          type: string
          description: Card brand if card was used during transaction
          example: VISA
        cardHash:
          type: string
          description: Card hash if card was used during transaction
          example: 7094c34678b3a4e29bcb5149266d1c811de2b6fc9370be9d5acdd7a334d8852b
        merchantPspId:
          type: string
          description: Merchant specified PSP id
          example: 944732c4-608c-441a-a913-79478b91f76e
        pspTransactionId:
          type: string
          description: Last psp transaction id
          example: 944732c4-608c-441a-a913-79478b91f76e
        statusReason:
          $ref: '#/components/schemas/PayInStatusWithReason'
        previousTransactionCount:
          type: integer
          description: Number of previous transactions in different payment system.
          format: int32
        metadata:
          $ref: '#/components/schemas/TransactionMetadata'
        transactionType:
          type: string
          description: Transaction type
          example: CARD
          enum:
            - CARD
            - BANK
            - WALLET
            - CASH
            - CRYPTO
            - OTHER
        additionalData:
          type: object
          additionalProperties:
            type: object
            description: User provided additional data for Alternative Payment Methods
          description: User provided additional data for Alternative Payment Methods
        pspAdditionalData:
          type: object
          additionalProperties:
            type: object
            description: >-
              Additional data obtained from Payment Service Provider during
              transaction processing
          description: >-
            Additional data obtained from Payment Service Provider during
            transaction processing
        createdAt:
          type: string
          description: Transaction creation time in UTC
          format: date-time
        updatedAt:
          type: string
          description: Transaction last update time in UTC
          format: date-time
  securitySchemes:
    bearerAuth:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://sso.omno.com/realms/omno/protocol/openid-connect/token
          scopes: {}
x-tagGroups:
  - name: Payments
    tags:
      - Cashier
      - PayIn
      - Payout
