openapi: 3.0.0
info:
  description: |-
    The Electrum SUV Service describes an
                      interface for
                      single use voucher transactions.
  version: 1.26.0
  title: SUV Service Interface
  contact:
    name: Electrum Support
    url: https://electrum.co.za/contact
    email: support@electrum.co.za
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
paths:
  /products:
    get:
      summary: lookupProducts
      description: >-
        This operation is used to retrieve a list of products, filtered using
        the query parameter(s).This operation has no financial impact and is
        informative only.
      operationId: lookupProducts
      parameters:
        - name: channelName
          in: query
          description: >-
            The name of the channel to retrieve products for. If set only
            products matching this channel name will be returned. If not set,
            all products will be returned.
          required: false
          schema:
            type: string
        - name: receiverId
          in: query
          description: >-
            The unique Id of the receiving entity from which to retrieve the
            list of products.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductsLookupResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /redemptions:
    post:
      summary: redeemVoucher
      description: >-
        This operation is performed when a voucher is used as a form of tender.
        When used as a form of tender, the recipient redeems the `requestAmount`
        against the voucher. The voucher vendor is responsible for authorizing
        the redemption. Once fully redeemed, the voucher may not be used as a
        form of tender again.
      operationId: redeemVoucher
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RedemptionRequest'
        description: A redemption request.
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RedemptionResponse'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RedemptionResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /redemptions/confirmations:
    post:
      summary: confirmRedeem
      description: >-
        Confirm a voucher redemption request that completed successfully. There
        is typically no need to notify the voucher vendor of the successful
        completion of the sale. However, this API recognises that client
        implementations may be very familiar with dual message APIs and this
        confirmation operation is provided to achieve consistency across the API
        with respect to single vs dual message operations. By performing this
        operation the client indicates that no subsequent reversal of the
        redemption will be performed. Note though that the successful completion
        of the confirmRedemption operation does not guarantee that the voucher
        will not be refunded in future.
      operationId: confirmRedeem
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BasicAdvice'
        description: A voucher redemption confirmation.
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicAdvice'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicAdvice'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /redemptions/reversals:
    post:
      summary: reverseRedeem
      description: >-
        Reverse a voucher redemption request. If a `voucherRedemption` request
        fails with one of the `5xx` HTTP statuses code, or no response was
        received within the timeout period, it must be reversed to ensure the
        vendor does not consider the voucher to be in redeemed state.
        reverseRedemption must be repeated until a final HTTP status code is
        received (i.e. not `5xx`). reverseRedemption may be called repeatedly on
        the same voucher resource without negative effect. If a voucher
        redemption is reversed there is no need to perform a refund against the
        voucher.
      operationId: reverseRedeem
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BasicReversal'
        description: A voucher redemption reversal.
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicReversal'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicReversal'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /redemptions/{requestId}:
    get:
      summary: lookupRedemption
      description: >-
        This operation may be used to obtain the result of a previous redemption
        request. It returns one of five classes of response: the original
        approved response,the original error response, a HTTP status code of
        `102` if the original request is still being processed and no response
        is available yet, a HTTP status code of `403` if the client did not
        submit the original request and is therefore not permitted to obtain the
        response, a HTTP status code of `404` if the original request was not
        received.
      operationId: lookupRedemption
      parameters:
        - name: requestId
          in: path
          description: The randomly generated UUID of this request.
          required: true
          schema:
            type: string
      responses:
        '102':
          description: Processing
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RedemptionResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '403':
          description: Forbidden
        '404':
          description: Not Found
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /refunds:
    post:
      summary: refundVoucher
      description: >-
        This operation is performed when a voucher was previously successfully
        redeemed. Should a consumer request a refund from the merchant, the
        merchant may use the `refundVoucher` operation to request the voucher be
        placed back into an unredeemed state. The voucher vendor is responsible
        for authorizing the refund. Once refunded, the voucher may be used as a
        form of tender again if allowed by the voucher vendor.
      operationId: refundVoucher
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RefundRequest'
        description: A refund request.
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RefundResponse'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RefundResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /refunds/confirmations:
    post:
      summary: confirmRefund
      description: >-
        Once a `refundRequest` has completed successfully there is typically no
        need to notify the voucher vendor of the successful completion of the
        refund. However, this API recognises that client implementations may be
        very familiar with dual message APIs and this confirmation operation is
        provided to achieve consistency across the API with respect to single vs
        dual message operations. However, by performing this operation the
        client indicates that no subsequent reversal of the refund will be
        performed.
      operationId: confirmRefund
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BasicAdvice'
        description: A voucher refund confirmation.
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicAdvice'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicAdvice'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /refunds/reversals:
    post:
      summary: reverseRefund
      description: >-
        If a `voucherRefund` request fails with one of the `5xx` HTTP statuses
        codes, or no response was received within the timeout period, it must be
        reversed to ensure the vendor does not consider the voucher to be in a
        refunded state. `reverseRefund` must be repeated until a final HTTP
        status code is received (i.e. not `5xx`). `reverseRefund` may be called
        repeatedly on the same voucher resource without negative effect.
      operationId: reverseRefund
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BasicReversal'
        description: A voucher refund reversal.
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicReversal'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicReversal'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /vouchers:
    get:
      summary: lookupVoucher
      description: >-
        This operation is used to verify the validity of a voucher and possibly
        establish the value of a previously issued voucher (if supported by the
        server). This operation has no financial impact and is informative only.
      operationId: lookupVoucher
      parameters:
        - name: voucherCode
          in: query
          description: The voucher code to be looked up.
          required: false
          schema:
            type: string
        - name: provisionRequestId
          in: query
          description: >-
            The provision request id that was part of the original provision
            request to obtain a voucher.
          required: false
          schema:
            type: string
        - name: receiverInstId
          in: query
          description: >-
            The institution which issued the voucher. This assists to direct the
            voucher lookup request if the destination cannot be determined from
            the voucher code alone.
          required: false
          schema:
            type: string
        - name: settlementEntityInstId
          in: query
          description: >-
            The institution via which the lookup should be processed. This
            serves to better direct the lookup request in the case that multiple
            upstream parties are able to process the request.
          required: false
          schema:
            type: string
        - name: voucherSerialNumber
          in: query
          description: The serial number of the voucher being looked up.
          required: false
          schema:
            type: string
        - name: originatorInstId
          in: query
          description: The institution ID of the originator of the voucher lookup request.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoucherLookupResponse'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoucherLookupResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
    post:
      summary: provisionVoucher
      description: Request a voucher be provisioned by the voucher vendor.
      operationId: provisionVoucher
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProvisionRequest'
        description: A provision request.
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProvisionResponse'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProvisionResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /vouchers/confirmations:
    post:
      summary: confirmVoucher
      description: >-
        Confirm a voucher provision request that completed successfully. Once a
        consumer has paid for a voucher and received the voucher from the
        merchant the merchant must notify the vendor that the voucher may be
        redeemed at some point in the future as per the voucher vendor's
        instructions. `confirmVoucher` must be repeated until a final HTTP
        status code is received (i.e. not HTTP `5xx`). `confirmVoucher` may be
        called repeatedly on the same voucher resource without negative effect.
      operationId: confirmVoucher
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenderAdvice'
        description: A voucher provision confirmation.
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenderAdvice'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenderAdvice'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /vouchers/reversals:
    post:
      summary: reverseVoucher
      description: >-
        Reverse a voucher provision request that failed or timed out. If a
        `voucherProvision` request fails with one of the `5xx` HTTP statuses
        code, or no response was received within the timeout period, it must be
        reversed to ensure the vendor knows to never expect further messages
        pertaining to the voucher. `reverseVoucher` must be repeated until a
        final HTTP status code is received (i.e. not `5xx`). `reverseVoucher`
        may be called repeatedly on the same voucher resource without negative
        effect.
      operationId: reverseVoucher
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BasicReversal'
        description: A voucher provision reversal.
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicReversal'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicReversal'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
  /vouchers/{provisionId}/retry:
    post:
      summary: retryProvisionVoucher
      description: >-
        If no response was received to a provision request due to a timeout or
        temporary communications failure, the appropriate channel may retry the
        same provision request by calling this resource. Where possible the
        original provision request will be resubmitted to the provider. If the
        provider had received the original request, it will respond by returning
        the voucher that was already issued. If not, then either  a new voucher
        will be issued as per a normal voucher provision or the retry will be
        declined.
      operationId: retryProvisionVoucher
      parameters:
        - name: provisionId
          in: path
          description: The UUID generated for the original voucher provision request.
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProvisionRequest'
        description: The original voucher provision request.
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProvisionResponse'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProvisionResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
      security:
        - httpBasic: []
        - oauth2: []
servers:
  - url: https://[placeholder].dev/suv/v1
components:
  securitySchemes:
    httpBasic:
      description: >-
        HTTP basic authentication. If you are doing a client side integration,
        Electrum will provide the username and password to the client. If you
        are doing a server side implementation, you will be expected to provide
        these credentials.
      type: http
      scheme: basic
    oauth2:
      description: >-
        OAuth2 password authentication, where the token URL, client ID, client
        secret, username, and password will be provided by Electrum if you
        implementing a client side integration. If you are doing a server side
        implementation, you will be expected to provide these credentials.
      type: oauth2
      flows:
        password:
          tokenUrl: >-
            https://auth.electrum.dev/auth/realms/Example-Realm/protocol/openid-connect/token
          scopes: {}
  schemas:
    AccountPayment:
      allOf:
        - $ref: '#/components/schemas/PaymentMethod'
        - type: object
          properties:
            srcAccountId:
              type: string
              description: Source AccountId from which this payment will be made.
            srcCustomerId:
              type: string
              description: Source CustomerId from which this payment will be made.
            destAccountId:
              type: string
              description: Destination AccountId to which this payment will be made.
            destCustomerId:
              type: string
              description: Destination CustomerId to which this payment will be made.
          description: Model for an account-to-account payment method
    AdditionalData:
      type: object
      required:
        - name
        - value
      properties:
        name:
          type: string
          description: Key or label for the metadata item.
        value:
          type: string
          description: Corresponding value for the metadata key.
      description: Represents a key-value pair for optional metadata.
    Address:
      type: object
      properties:
        addressLine1:
          type: string
          description: First line of street address.
          pattern: ^.{1,100}
        addressLine2:
          type: string
          description: Second line of street address (if required).
          pattern: ^.{1,100}
        city:
          type: string
          description: >-
            The city where the owner is located. Note: if this field ever needs
            to be translated to another API with shorter fields, the field will
            be truncated from the right.
          pattern: ^.{1,30}
        region:
          type: string
          description: The state or region where the owner is located.
          pattern: '[A-Z]{2}'
        country:
          type: string
          description: >-
            The owner's resident country expressed as an ISO 3166-1 Alpha-2
            code.
          pattern: '[A-Z]{2}'
        postalCode:
          type: string
          description: The owner's postal code.
          pattern: '[A-Za-z0-9 -]{1,20}'
      description: Details of a customer's address
    Amounts:
      type: object
      properties:
        requestAmount:
          $ref: '#/components/schemas/LedgerAmount'
        approvedAmount:
          $ref: '#/components/schemas/LedgerAmount'
        feeAmount:
          $ref: '#/components/schemas/LedgerAmount'
        balanceAmount:
          $ref: '#/components/schemas/LedgerAmount'
        additionalAmounts:
          type: object
          description: >-
            Any additional amounts that are involved in a transaction which
            don't appropriately fit into the other amount fields.
          additionalProperties:
            $ref: '#/components/schemas/LedgerAmount'
      description: Amounts which make up the transaction. Absent amounts have zero value.
    An32TokenPayment:
      allOf:
        - $ref: '#/components/schemas/PaymentMethod'
        - type: object
          required:
            - token
          properties:
            token:
              type: string
              description: 32 character alphanumeric code which identifies a token
              pattern: '[a-zA-Z0-9]{32}'
          description: Model for token-based payments
    Barcode:
      type: object
      required:
        - data
        - encoding
      properties:
        data:
          type: string
          description: Data to be encoded in the barcode
        encoding:
          type: string
          description: Specifies the encoding used in the barcode
      description: Used to indicate barcode information for a slip line.
    BasicAdvice:
      type: object
      required:
        - id
        - requestId
        - thirdPartyIdentifiers
        - time
      properties:
        id:
          type: string
          description: >-
            The randomly generated UUID identifying this advice, as defined for
            a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)
        requestId:
          type: string
          description: The UUID identifying the request that this advice relates to
        time:
          type: string
          format: date-time
          description: >-
            The date and time of the message as recorded by the sender. The
            format shall be as defined for date-time in [RFC 3339 section
            5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is
            recommended that the optional time-secfrac be included up to
            millisecond precision
        thirdPartyIdentifiers:
          type: array
          description: >-
            The unaltered thirdPartyIdentifiers array as supplied in the related
            BasicResponse message. Required if thirdPartyIdentifiers field was
            present in the BasicResponse. If no thirdPartyIdentifiers was
            received in the BasicResponse or no BasicResponse was received then
            this should be set to the thirdPartyIdentifiers sent in the original
            request.
          items:
            $ref: '#/components/schemas/ThirdPartyIdentifier'
        stan:
          type: string
          description: >-
            The System Trace Audit Number can be used to locate transactions
            across different systems.
        rrn:
          type: string
          description: This is a reference set by the original source of the transaction.
        amounts:
          $ref: '#/components/schemas/Amounts'
      description: The data required in all advice messages
    BasicReversal:
      type: object
      required:
        - id
        - requestId
        - reversalReason
        - thirdPartyIdentifiers
        - time
      properties:
        id:
          type: string
          description: >-
            The randomly generated UUID identifying this advice, as defined for
            a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)
        requestId:
          type: string
          description: The UUID identifying the request that this advice relates to
        time:
          type: string
          format: date-time
          description: >-
            The date and time of the message as recorded by the sender. The
            format shall be as defined for date-time in [RFC 3339 section
            5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is
            recommended that the optional time-secfrac be included up to
            millisecond precision
        thirdPartyIdentifiers:
          type: array
          description: >-
            The unaltered thirdPartyIdentifiers array as supplied in the related
            BasicResponse message. Required if thirdPartyIdentifiers field was
            present in the BasicResponse. If no thirdPartyIdentifiers was
            received in the BasicResponse or no BasicResponse was received then
            this should be set to the thirdPartyIdentifiers sent in the original
            request.
          items:
            $ref: '#/components/schemas/ThirdPartyIdentifier'
        stan:
          type: string
          description: >-
            The System Trace Audit Number can be used to locate transactions
            across different systems.
        rrn:
          type: string
          description: This is a reference set by the original source of the transaction.
        amounts:
          $ref: '#/components/schemas/Amounts'
        reversalReason:
          type: string
          description: The reason for the reversal
          enum:
            - TIMEOUT
            - CANCELLED
            - RESPONSE_NOT_FINAL
      description: >-
        An advice that notifies of the negative completion of a transaction.
        This can be either due to customer cancellation, or as a result of
        receiving a non-final response (or no response) to a request
    BasketItem:
      type: object
      required:
        - itemIdentifier
        - pricePerUnit
        - units
      properties:
        itemIdentifier:
          $ref: '#/components/schemas/ItemIdentifier'
        pricePerUnit:
          $ref: '#/components/schemas/LedgerAmount'
        units:
          type: integer
          format: int32
          description: Number of units of the item purchased.
        additionalData:
          type: array
          description: >-
            Optional metadata for categorisation or tagging (e.g., product
            type).
          items:
            $ref: '#/components/schemas/AdditionalData'
      description: Represents an item in a transaction basket.
    CardPayment:
      allOf:
        - $ref: '#/components/schemas/PaymentMethod'
        - type: object
          required:
            - pan
          properties:
            posInfo:
              $ref: '#/components/schemas/PosInfo'
            pin:
              $ref: '#/components/schemas/Pin'
            pan:
              type: string
              description: Primary account number that uniquely identifies this card.
              pattern: '[0-9]{1,19}'
            expiryDate:
              type: string
              description: The card expiry date, in YYMM format.
              pattern: '[0-9]{4}'
            threeDSecureData:
              $ref: '#/components/schemas/ThreeDSecureData'
            encryptedPin:
              $ref: '#/components/schemas/EncryptedPin'
          description: Model for card-based payments
    ChannelProductListing:
      type: object
      required:
        - channelName
      properties:
        channelName:
          type: string
          description: The name of the channel.
          minLength: 0
          maxLength: 50
        productDisplayName:
          type: string
          description: The name of the product for display purposes.
          minLength: 0
          maxLength: 50
        productDisplayCategory:
          type: string
          description: A category that is meaningful for display purposes.
          minLength: 0
          maxLength: 50
        productDisplaySortOrder:
          type: number
          format: double
          description: A menu sort order that is meaningful for display purposes.
        channelProductIdentifier:
          type: string
          description: A product identifier which is meaningful for the channel.
      description: Product data as it relates to a channel.
    Customer:
      type: object
      properties:
        firstName:
          type: string
          description: The customer's first name(s)
          minLength: 0
          maxLength: 40
        lastName:
          type: string
          description: The customer's last name
          minLength: 0
          maxLength: 40
        address:
          type: string
          description: The customer's address
          minLength: 0
          maxLength: 80
        dateOfBirth:
          type: string
          format: date-time
          description: The customer's date of birth
        status:
          type: string
          description: >-
            The status of this customer on the Giftcard system. For example:
            active, inactive
        msisdn:
          type: string
          description: >-
            This must conform to the ITU E.164 numbering plan
            (https://www.itu.int/rec/T-REC-E.164/en) e.g. 27821234567 for a
            South African number.
          pattern: ^\+?[1-9]\d{0,14}
        emailAddress:
          type: string
          format: email
          description: >-
            The customer's email address. This address must conform to RFC 5322
            3.4.1 addr-spec (https://tools.ietf.org/html/rfc5322#section-3.4.1).
        addressDetails:
          $ref: '#/components/schemas/Address'
        profileId:
          type: string
          description: The customer's profile ID. Used to uniquely identify a customer.
      description: A customer who ultimately requests a transaction be performed.
    EncryptedPin:
      type: object
      required:
        - pinBlock
      properties:
        pinBlock:
          type: string
          description: Hexadecimal string representing the encrypted PIN to be used.
          pattern: '[a-fA-F0-9]{16}'
        encryptionParameters:
          $ref: '#/components/schemas/EncryptionParameters'
      description: >-
        A PIN required to authorise a transaction. EncryptionParameters should
        be provided where the service will be performing operations on the
        encrypted PIN, such as PIN translation. Only the PIN block need be
        provided where the service is expected to forward it to a third party,
        where the calling client and said third party have agreed upon
        encryption parameters beforehand.
    EncryptionParameters:
      type: object
      required:
        - accountNumber
      properties:
        pinBlockFormat:
          type: string
          description: >-
            PIN block format that was used when encrypting the PIN. Defaults to
            ISO_9564_FORMAT_0.
          default: ISO_9564_FORMAT_0
          enum:
            - ISO_9564_FORMAT_0
            - ISO_9564_FORMAT_1
            - ISO_9564_FORMAT_3
            - ISO_9564_FORMAT_4
        accountNumber:
          type: string
          description: >-
            12 digit account number used when encrypting the PIN. When account
            number is a card number (PAN), this is the rightmost 12 digits
            excluding the check digit.
          pattern: '[0-9]{12}'
        keyIndex:
          type: integer
          format: int32
          description: >-
            Index of the key under which the PIN block is encrypted. Where keys
            are exchanged in TR-31 KeyBlock format, this should be set to the
            key version number field of the key used for encryption. If this
            field is not populated, the most recently exchanged key will be
            used. Note that omitting this field may require a higher level of
            synchronization during automated key exchange in some environments.
      description: >-
        Parameters pertaining to the generation of the PIN block. Required if
        the service is to perform any operations on the encrypted PIN, such as
        translation.
    ErrorDetail:
      type: object
      required:
        - errorMessage
        - errorType
        - id
      properties:
        id:
          type: string
          description: >-
            The randomly generated UUID identifying the message which caused the
            ErrorDetail, as defined for a variant 4 UUID in [RFC
            4122](https://tools.ietf.org/html/rfc4122).
        originalId:
          type: string
          description: >-
            The UUID of the original request message in the case of an error
            occurring for an advice message.
        errorType:
          type: string
          description: The type of error that occurred.
          enum:
            - DUPLICATE_RECORD
            - FORMAT_ERROR
            - FUNCTION_NOT_SUPPORTED
            - GENERAL_ERROR
            - INVALID_AMOUNT
            - ROUTING_ERROR
            - TRANSACTION_NOT_SUPPORTED
            - UNABLE_TO_LOCATE_RECORD
            - UPSTREAM_UNAVAILABLE
            - VOUCHER_ALREADY_REDEEMED
            - VOUCHER_ALREADY_PROVISIONED
            - VOUCHER_ALREADY_CONFIRMED
            - VOUCHER_ALREADY_REVERSED
            - VOUCHER_ALREADY_REFUNDED
            - VOUCHER_NOT_REFUNDED
            - VOUCHER_NOT_REDEEMABLE
            - VOUCHER_NOT_REDEEMED
            - VOUCHER_STATUS_UNKNOWN
            - REDEMPTION_ALREADY_CONFIRMED
            - REDEMPTION_NOT_CONFIRMED
            - REDEMPTION_ALREADY_REVERSED
            - REFUND_ALREADY_CONFIRMED
            - REFUND_ALREADY_REVERSED
            - INVALID_MERCHANT
            - INVALID_VOUCHER
            - AUTHENTICATION_ERROR
            - INSUFFICIENT_AMOUNT
            - DO_NOT_HONOUR
            - OUT_OF_STOCK
            - INVALID_PRODUCT
            - INSUFFICIENT_FUNDS
            - INVALID_ACCOUNT
            - TRANSACTION_DECLINED
            - LIMIT_EXCEEDED
        errorMessage:
          type: string
          description: A short description of the error.
          minLength: 0
          maxLength: 80
        providerErrorCode:
          type: string
          description: >-
            The response code received from the voucher vendor in response to an
            operation.
        providerErrorMessage:
          type: string
          description: >-
            The error message received from the voucher vendor in response to an
            operation.
        detailMessage:
          type: object
          description: An optional free-form description of the failure condition.
      description: Represents the reasons an operation has failed.
    HashedPinParameters:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          description: The name of the hashing algorithm.
          minLength: 0
          maxLength: 20
      description: >-
        A collection of parameters required to reliably reproduce the hashed
        value (excluding the actual PIN value).
    Institution:
      type: object
      required:
        - id
        - name
      properties:
        id:
          type: string
          description: >-
            The institution's ID. API implementations should take care to set
            this field as appropriate for the implementation.
        name:
          type: string
          description: The institutions's name
          minLength: 0
          maxLength: 40
      description: Originating, acquiring, processing, or receiving institution details
    ItemIdentifier:
      type: object
      required:
        - identifier
      properties:
        identifier:
          type: string
          description: Represents a unique identifier for the product
        type:
          type: string
          description: >-
            The format or classification of the identifier (e.g., 'SKU', 'EAN',
            etc.).
          enum:
            - SKU
            - EAN
            - OTHER
      description: Represents a unique product identifier and its classification.
    LedgerAmount:
      type: object
      required:
        - amount
        - currency
      properties:
        amount:
          type: integer
          format: int64
          description: Amount in minor denomination, e.g. R799.95 is encoded as 79995
        currency:
          type: string
          description: >-
            Three digit currency number from ISO 4217, e.g. South African Rand
            is encoded as 710
          pattern: '[0-9]{3}'
        ledgerIndicator:
          type: string
          description: >-
            Indicates whether this amount is a debit or a credit. Only required
            when the amount can be either a debit or a credit
          enum:
            - DEBIT
            - CREDIT
      description: >-
        An amount object only containing value and currency, and optionally an
        indicator of DEBIT/CREDIT
    LoyaltyCardPayment:
      allOf:
        - $ref: '#/components/schemas/PaymentMethod'
        - type: object
          required:
            - cardNumber
          properties:
            cardNumber:
              type: string
              description: >-
                Primary account number of the loyalty programme card used to
                make a payment
              pattern: '[0-9]{16}'
          description: Model for payments made using loyalty programme cards
    Merchant:
      type: object
      required:
        - merchantId
        - merchantName
        - merchantType
      properties:
        merchantType:
          type: string
          description: The assigned four digit merchant category code
          pattern: '[0-9]{4}'
        merchantId:
          type: string
          description: The assigned merchant identifier. Also known as card acceptor id
          minLength: 15
          maxLength: 15
        merchantName:
          $ref: '#/components/schemas/MerchantName'
      description: Merchant related data. Must be included if available
    MerchantName:
      type: object
      required:
        - city
        - country
        - name
        - region
      properties:
        name:
          type: string
          description: The merchant or trading as name associated with the merchant
          minLength: 0
          maxLength: 23
        city:
          type: string
          description: The city where the merchant is located
          minLength: 0
          maxLength: 13
        region:
          type: string
          description: The state or region where the merchant is located
          minLength: 0
          maxLength: 2
        country:
          type: string
          description: The country where the merchant is located
          minLength: 0
          maxLength: 2
      description: A container object representing the Merchant Name and Location
    Originator:
      type: object
      required:
        - institution
        - merchant
        - terminalId
      properties:
        institution:
          $ref: '#/components/schemas/Institution'
        terminalId:
          type: string
          description: >-
            The ID that uniquely identifies each device or system in an
            originator's institution capable of sending requests. Required for
            transactions initiated from physical card entry or point-of-sale
            devices
          minLength: 8
          maxLength: 8
        merchant:
          $ref: '#/components/schemas/Merchant'
        operatorId:
          type: string
          description: >-
            The ID that uniquely identifies the person operating the terminal
            specified by the terminalId field.
          minLength: 0
          maxLength: 30
        channelId:
          type: string
          description: >-
            The ID that uniquely identifies the originator's channel that this
            transaction was received through.
          minLength: 0
          maxLength: 50
      description: >-
        The Originator object encapsulates data relating to the originator of
        the transaction
    PaymentMethod:
      type: object
      required:
        - type
      discriminator:
        propertyName: type
      properties:
        type:
          type: string
          description: The general method of payment used
          enum:
            - AN_32_TOKEN
            - LOYALTY_CARD
            - CARD
            - ACCOUNT
            - REWARD
            - WALLET
            - QR
        name:
          type: string
          description: The specific method of payment used
        amount:
          $ref: '#/components/schemas/LedgerAmount'
        issuer:
          $ref: '#/components/schemas/Institution'
        pin:
          $ref: '#/components/schemas/Pin'
        proxy:
          type: string
          description: >-
            An alternative identifier for the customer's source of funds. Acts
            as a stand in for the customer identifier. E.g. a customer's MSISDN
            or email address.
          minLength: 0
          maxLength: 40
        proxyType:
          type: string
          description: An enumerated value describing the type of value used as the proxy.
          enum:
            - MSISDN
            - EMAIL
            - UNKNOWN
      description: Base model for all payment types
    Pin:
      type: object
      required:
        - type
      discriminator:
        propertyName: type
      properties:
        type:
          type: string
          description: Whether the PIN is communicated in the clear or encrypted.
          enum:
            - CLEAR_PIN
            - ENCRYPTED_PIN
            - HASHED_PIN
      description: Base model for capturing either a clear PIN or encrypted PIN
    PinClear:
      allOf:
        - $ref: '#/components/schemas/Pin'
        - type: object
          required:
            - pin
          properties:
            pin:
              type: string
              description: A clear PIN
              pattern: .{0,20}
          description: A clear PIN required to authorise a transaction.
    PinEncrypted:
      allOf:
        - $ref: '#/components/schemas/Pin'
        - type: object
          required:
            - pinBlock
          properties:
            pinBlock:
              type: string
              description: Hexadecimal string representing the encrypted PIN to be used.
              pattern: '[a-fA-F0-9]{16}'
            encryptionParameters:
              $ref: '#/components/schemas/EncryptionParameters'
          description: >-
            A PIN required to authorise a transaction. EncryptionParameters
            should be provided where the service will be performing operations
            on the encrypted PIN, such as PIN translation. Only the PIN block
            need be provided where the service is expected to forward it to a
            third party, where the calling client and said third party have
            agreed upon encryption parameters beforehand.
    PinHashed:
      allOf:
        - $ref: '#/components/schemas/Pin'
        - type: object
          required:
            - hash
          properties:
            hash:
              type: string
              description: A hashed PIN expressed as an ASCII string of hexadecimal values.
              pattern: '[0-9,A-F]{1,512}'
            hashedPinParameters:
              $ref: '#/components/schemas/HashedPinParameters'
          description: >-
            A PIN, required to authorise a transaction, which has been hashed
            according to some hashing algorithm.
    PosEntryMode:
      type: object
      required:
        - panEntryMode
        - pinEntryCapability
      properties:
        panEntryMode:
          type: string
          description: Describes the method by which the PAN was captured.
          enum:
            - UNKNOWN
            - MANUAL
            - MAGSTRIPE_NO_CVV
            - BARCODE
            - OCR
            - ICC_CVV
            - CONTACTLESS_ICC
            - MAGSTRIPE_CVV
            - CONTACTLESS_MAGSTRIPE
            - ICC_NO_CVV
            - ORIG_MODE
            - FALLBACK
        pinEntryCapability:
          type: string
          description: Describes whether the PIN can be entered.
          enum:
            - UNKNOWN
            - CAN_ACCEPT
            - CANNOT_ACCEPT
      description: Describes how the PAN and PIN were captured by the POS.
    PosInfo:
      type: object
      properties:
        entryMode:
          $ref: '#/components/schemas/PosEntryMode'
        posConditionCode:
          type: string
          description: Describes the circumstances of the transaciton at the POS.
          enum:
            - NORMAL_PRESENTMENT
            - CUSTOMER_NOT_PRESENT
            - CUSTOMER_PRESENT_AND_CARD_NOT_PRESENT
            - CUSTOMER_IDENTITY_VERIFIED
            - PUBLIC_UTILITY_TERMINAL
            - CUSTOMER_TERMINAL
            - MANUAL_REVERSAL
            - UNATTENDED_TERMINAL_AND_CARD_CAN_BE_RETAINED
            - UNATTENDED_TERMINAL_AND_CARD_CANNOT_BE_RETAINED
      description: POS related data.
    Product:
      type: object
      required:
        - productId
      properties:
        productId:
          type: string
          description: >-
            A vendor determined code identifying the product the voucher should
            pertain to.
          pattern: '[0-9A-Za-z-]{1,40}'
        barcode:
          type: string
          description: >-
            A barcode code identifying the product. This is an alternative
            identifier for the product but does not supersede the productId.
          pattern: '[0-9A-Za-z]{1,13}'
        name:
          type: string
          description: The name of the product.
          minLength: 1
          maxLength: 40
        amount:
          $ref: '#/components/schemas/LedgerAmount'
        minAmount:
          $ref: '#/components/schemas/LedgerAmount'
        maxAmount:
          $ref: '#/components/schemas/LedgerAmount'
        description:
          type: string
          description: The description associated with the relevant product.
          minLength: 0
          maxLength: 250
        isFixedValue:
          type: boolean
          description: When true, the product can only be purchased for a fixed value.
          readOnly: true
          default: false
        receiver:
          $ref: '#/components/schemas/Institution'
        channelProductListings:
          type: array
          description: >-
            A list of channels on which the product is available. In addition,
            each item includes display information for the product on a given
            channel.
          items:
            $ref: '#/components/schemas/ChannelProductListing'
      description: Product related data.
    ProductsLookupResponse:
      type: object
      properties:
        products:
          type: array
          description: The list of products.
          items:
            $ref: '#/components/schemas/Product'
      description: Contains the list of requested products.
    ProvisionRequest:
      type: object
      required:
        - client
        - id
        - originator
        - thirdPartyIdentifiers
        - time
      properties:
        transactionLabels:
          type: array
          description: >-
            A list containing labels that can be used to discover this
            transaction or group it with other transactions sharing labels with
            the same label name and value. Transaction labels should never be
            used to make transaction processing decisions.
          items:
            $ref: '#/components/schemas/TransactionLabel'
        id:
          type: string
          description: >-
            The randomly generated UUID identifying this transaction, as defined
            for a variant 4 UUID in [RFC
            4122](https://tools.ietf.org/html/rfc4122)
        time:
          type: string
          format: date-time
          description: >-
            The date and time of the message as recorded by the sender. The
            format shall be as defined for date-time in [RFC 3339 section
            5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is
            recommended that the optional time-secfrac be included up to
            millisecond precision
        originator:
          $ref: '#/components/schemas/Originator'
        client:
          $ref: '#/components/schemas/Institution'
        settlementEntity:
          $ref: '#/components/schemas/Institution'
        receiver:
          $ref: '#/components/schemas/Institution'
        thirdPartyIdentifiers:
          type: array
          description: >-
            An array of identifiers which each identify the transaction within
            each entity's system.
          items:
            $ref: '#/components/schemas/ThirdPartyIdentifier'
        slipData:
          $ref: '#/components/schemas/SlipData'
        basketRef:
          type: string
          description: >-
            Used to group multiple transactions which would otherwise be
            considered independent.
        tranType:
          type: string
          description: >-
            Data relating to the type of transaction taking place (i.e. cash
            withdrawal, goods and services etc.).
          enum:
            - GOODS_AND_SERVICES
            - CASH_WITHDRAWAL
            - DEBIT_ADJUSTMENT
            - GOODS_AND_SERVICES_WITH_CASH_BACK
            - NON_CASH
            - RETURNS
            - DEPOSIT
            - CREDIT_ADJUSTMENT
            - GENERAL_CREDIT
            - AVAILABLE_FUNDS_INQUIRY
            - BALANCE_INQUIRY
            - GENERAL_INQUIRY
            - CARD_VERIFICATION_INQUIRY
            - CARDHOLDER_ACCOUNTS_TRANSFER
            - GENERAL_TRANSFER
            - PAYMENT_FROM_ACCOUNT
            - GENERAL_PAYMENT
            - PAYMENT_TO_ACCOUNT
            - PAYMENT_FROM_ACCOUNT_TO_ACCOUNT
            - PLACE_HOLD_ON_CARD
            - GENERAL_ADMIN
            - CHANGE_PIN
            - CARD_HOLDER_INQUIRY
            - POINTS_INQUIRY
        srcAccType:
          type: string
          description: >-
            This specifies the type of source account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        destAccType:
          type: string
          description: >-
            This specifies the type of destination account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        stan:
          type: string
          description: >-
            The System Trace Audit Number can be used to locate transactions
            across different systems.
        rrn:
          type: string
          description: This is a reference set by the original source of the transaction.
        amounts:
          $ref: '#/components/schemas/Amounts'
        tenders:
          type: array
          description: An array of tenders used to pay for the transaction.
          items:
            $ref: '#/components/schemas/Tender'
        voucher:
          $ref: '#/components/schemas/Voucher'
        product:
          $ref: '#/components/schemas/Product'
        posInfo:
          $ref: '#/components/schemas/PosInfo'
        customer:
          $ref: '#/components/schemas/Customer'
        recipient:
          $ref: '#/components/schemas/Customer'
        paymentMethods:
          type: array
          description: >-
            An array of payment methods to be used as payment for the
            transaction. This is used if payment is not tendered at the point of
            sale, but is effected through one or more calls to third party
            payment providers as part of the request. A `PaymentMethod` differs
            from a `Tender` in that the former represents payment that still
            needs to be collected from a third party, whereas the latter
            represents payment that has already been collected at the point of
            sale.
          items:
            $ref: '#/components/schemas/PaymentMethod'
      description: Information about the voucher provision request.
    ProvisionResponse:
      type: object
      required:
        - client
        - id
        - originator
        - thirdPartyIdentifiers
        - time
        - voucher
      properties:
        transactionLabels:
          type: array
          description: >-
            A list containing labels that can be used to discover this
            transaction or group it with other transactions sharing labels with
            the same label name and value. Transaction labels should never be
            used to make transaction processing decisions.
          items:
            $ref: '#/components/schemas/TransactionLabel'
        id:
          type: string
          description: >-
            The randomly generated UUID identifying this transaction, as defined
            for a variant 4 UUID in [RFC
            4122](https://tools.ietf.org/html/rfc4122)
        time:
          type: string
          format: date-time
          description: >-
            The date and time of the message as recorded by the sender. The
            format shall be as defined for date-time in [RFC 3339 section
            5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is
            recommended that the optional time-secfrac be included up to
            millisecond precision
        originator:
          $ref: '#/components/schemas/Originator'
        client:
          $ref: '#/components/schemas/Institution'
        settlementEntity:
          $ref: '#/components/schemas/Institution'
        receiver:
          $ref: '#/components/schemas/Institution'
        thirdPartyIdentifiers:
          type: array
          description: >-
            An array of identifiers which each identify the transaction within
            each entity's system.
          items:
            $ref: '#/components/schemas/ThirdPartyIdentifier'
        slipData:
          $ref: '#/components/schemas/SlipData'
        basketRef:
          type: string
          description: >-
            Used to group multiple transactions which would otherwise be
            considered independent.
        tranType:
          type: string
          description: >-
            Data relating to the type of transaction taking place (i.e. cash
            withdrawal, goods and services etc.).
          enum:
            - GOODS_AND_SERVICES
            - CASH_WITHDRAWAL
            - DEBIT_ADJUSTMENT
            - GOODS_AND_SERVICES_WITH_CASH_BACK
            - NON_CASH
            - RETURNS
            - DEPOSIT
            - CREDIT_ADJUSTMENT
            - GENERAL_CREDIT
            - AVAILABLE_FUNDS_INQUIRY
            - BALANCE_INQUIRY
            - GENERAL_INQUIRY
            - CARD_VERIFICATION_INQUIRY
            - CARDHOLDER_ACCOUNTS_TRANSFER
            - GENERAL_TRANSFER
            - PAYMENT_FROM_ACCOUNT
            - GENERAL_PAYMENT
            - PAYMENT_TO_ACCOUNT
            - PAYMENT_FROM_ACCOUNT_TO_ACCOUNT
            - PLACE_HOLD_ON_CARD
            - GENERAL_ADMIN
            - CHANGE_PIN
            - CARD_HOLDER_INQUIRY
            - POINTS_INQUIRY
        srcAccType:
          type: string
          description: >-
            This specifies the type of source account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        destAccType:
          type: string
          description: >-
            This specifies the type of destination account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        stan:
          type: string
          description: >-
            The System Trace Audit Number can be used to locate transactions
            across different systems.
        rrn:
          type: string
          description: This is a reference set by the original source of the transaction.
        amounts:
          $ref: '#/components/schemas/Amounts'
        voucher:
          $ref: '#/components/schemas/Voucher'
        product:
          $ref: '#/components/schemas/Product'
        posInfo:
          $ref: '#/components/schemas/PosInfo'
        recipient:
          $ref: '#/components/schemas/Customer'
        tenders:
          type: array
          description: An array of tenders used to pay for the transaction.
          items:
            $ref: '#/components/schemas/Tender'
      description: Information about the voucher provisioned.
    QrPayment:
      allOf:
        - $ref: '#/components/schemas/PaymentMethod'
        - type: object
          required:
            - tranId
          properties:
            tranId:
              type: string
              description: >-
                The unique transaction identifier related to this transaction.
                In QRs styled on the EMVCo specification, the tranId is embedded
                in sub-Tag 00 of the Electrum MAIT.
            partnerPaymentToken:
              type: string
              description: A payment token received from the Partner.
          description: >-
            Model for QR-based payments. This payment method should be used when
            a QR code is presented for payment.
    RedemptionRequest:
      type: object
      required:
        - client
        - id
        - originator
        - thirdPartyIdentifiers
        - time
        - voucher
      properties:
        transactionLabels:
          type: array
          description: >-
            A list containing labels that can be used to discover this
            transaction or group it with other transactions sharing labels with
            the same label name and value. Transaction labels should never be
            used to make transaction processing decisions.
          items:
            $ref: '#/components/schemas/TransactionLabel'
        id:
          type: string
          description: >-
            The randomly generated UUID identifying this transaction, as defined
            for a variant 4 UUID in [RFC
            4122](https://tools.ietf.org/html/rfc4122)
        time:
          type: string
          format: date-time
          description: >-
            The date and time of the message as recorded by the sender. The
            format shall be as defined for date-time in [RFC 3339 section
            5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is
            recommended that the optional time-secfrac be included up to
            millisecond precision
        originator:
          $ref: '#/components/schemas/Originator'
        client:
          $ref: '#/components/schemas/Institution'
        settlementEntity:
          $ref: '#/components/schemas/Institution'
        receiver:
          $ref: '#/components/schemas/Institution'
        thirdPartyIdentifiers:
          type: array
          description: >-
            An array of identifiers which each identify the transaction within
            each entity's system.
          items:
            $ref: '#/components/schemas/ThirdPartyIdentifier'
        slipData:
          $ref: '#/components/schemas/SlipData'
        basketRef:
          type: string
          description: >-
            Used to group multiple transactions which would otherwise be
            considered independent.
        tranType:
          type: string
          description: >-
            Data relating to the type of transaction taking place (i.e. cash
            withdrawal, goods and services etc.).
          enum:
            - GOODS_AND_SERVICES
            - CASH_WITHDRAWAL
            - DEBIT_ADJUSTMENT
            - GOODS_AND_SERVICES_WITH_CASH_BACK
            - NON_CASH
            - RETURNS
            - DEPOSIT
            - CREDIT_ADJUSTMENT
            - GENERAL_CREDIT
            - AVAILABLE_FUNDS_INQUIRY
            - BALANCE_INQUIRY
            - GENERAL_INQUIRY
            - CARD_VERIFICATION_INQUIRY
            - CARDHOLDER_ACCOUNTS_TRANSFER
            - GENERAL_TRANSFER
            - PAYMENT_FROM_ACCOUNT
            - GENERAL_PAYMENT
            - PAYMENT_TO_ACCOUNT
            - PAYMENT_FROM_ACCOUNT_TO_ACCOUNT
            - PLACE_HOLD_ON_CARD
            - GENERAL_ADMIN
            - CHANGE_PIN
            - CARD_HOLDER_INQUIRY
            - POINTS_INQUIRY
        srcAccType:
          type: string
          description: >-
            This specifies the type of source account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        destAccType:
          type: string
          description: >-
            This specifies the type of destination account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        stan:
          type: string
          description: >-
            The System Trace Audit Number can be used to locate transactions
            across different systems.
        rrn:
          type: string
          description: This is a reference set by the original source of the transaction.
        voucher:
          $ref: '#/components/schemas/Voucher'
        amounts:
          $ref: '#/components/schemas/Amounts'
        posInfo:
          $ref: '#/components/schemas/PosInfo'
        customer:
          $ref: '#/components/schemas/Customer'
        basketInfo:
          type: array
          description: >-
            An array containing details of the basket items on which discounts
            can potentially be applied to.
          items:
            $ref: '#/components/schemas/BasketItem'
      description: >-
        A description of a request to redeem a voucher. This object supports
        requests for redemptions against amounts different to the value for
        which the voucher was provisioned.
    RedemptionResponse:
      type: object
      required:
        - client
        - id
        - originator
        - thirdPartyIdentifiers
        - time
      properties:
        transactionLabels:
          type: array
          description: >-
            A list containing labels that can be used to discover this
            transaction or group it with other transactions sharing labels with
            the same label name and value. Transaction labels should never be
            used to make transaction processing decisions.
          items:
            $ref: '#/components/schemas/TransactionLabel'
        id:
          type: string
          description: >-
            The randomly generated UUID identifying this transaction, as defined
            for a variant 4 UUID in [RFC
            4122](https://tools.ietf.org/html/rfc4122)
        time:
          type: string
          format: date-time
          description: >-
            The date and time of the message as recorded by the sender. The
            format shall be as defined for date-time in [RFC 3339 section
            5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is
            recommended that the optional time-secfrac be included up to
            millisecond precision
        originator:
          $ref: '#/components/schemas/Originator'
        client:
          $ref: '#/components/schemas/Institution'
        settlementEntity:
          $ref: '#/components/schemas/Institution'
        receiver:
          $ref: '#/components/schemas/Institution'
        thirdPartyIdentifiers:
          type: array
          description: >-
            An array of identifiers which each identify the transaction within
            each entity's system.
          items:
            $ref: '#/components/schemas/ThirdPartyIdentifier'
        slipData:
          $ref: '#/components/schemas/SlipData'
        basketRef:
          type: string
          description: >-
            Used to group multiple transactions which would otherwise be
            considered independent.
        tranType:
          type: string
          description: >-
            Data relating to the type of transaction taking place (i.e. cash
            withdrawal, goods and services etc.).
          enum:
            - GOODS_AND_SERVICES
            - CASH_WITHDRAWAL
            - DEBIT_ADJUSTMENT
            - GOODS_AND_SERVICES_WITH_CASH_BACK
            - NON_CASH
            - RETURNS
            - DEPOSIT
            - CREDIT_ADJUSTMENT
            - GENERAL_CREDIT
            - AVAILABLE_FUNDS_INQUIRY
            - BALANCE_INQUIRY
            - GENERAL_INQUIRY
            - CARD_VERIFICATION_INQUIRY
            - CARDHOLDER_ACCOUNTS_TRANSFER
            - GENERAL_TRANSFER
            - PAYMENT_FROM_ACCOUNT
            - GENERAL_PAYMENT
            - PAYMENT_TO_ACCOUNT
            - PAYMENT_FROM_ACCOUNT_TO_ACCOUNT
            - PLACE_HOLD_ON_CARD
            - GENERAL_ADMIN
            - CHANGE_PIN
            - CARD_HOLDER_INQUIRY
            - POINTS_INQUIRY
        srcAccType:
          type: string
          description: >-
            This specifies the type of source account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        destAccType:
          type: string
          description: >-
            This specifies the type of destination account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        stan:
          type: string
          description: >-
            The System Trace Audit Number can be used to locate transactions
            across different systems.
        rrn:
          type: string
          description: This is a reference set by the original source of the transaction.
        voucher:
          $ref: '#/components/schemas/Voucher'
        amounts:
          $ref: '#/components/schemas/Amounts'
        posInfo:
          $ref: '#/components/schemas/PosInfo'
        customer:
          $ref: '#/components/schemas/Customer'
      description: Information about the voucher redemption outcome.
    RefundRequest:
      type: object
      required:
        - client
        - id
        - originator
        - thirdPartyIdentifiers
        - time
        - voucher
      properties:
        transactionLabels:
          type: array
          description: >-
            A list containing labels that can be used to discover this
            transaction or group it with other transactions sharing labels with
            the same label name and value. Transaction labels should never be
            used to make transaction processing decisions.
          items:
            $ref: '#/components/schemas/TransactionLabel'
        id:
          type: string
          description: >-
            The randomly generated UUID identifying this transaction, as defined
            for a variant 4 UUID in [RFC
            4122](https://tools.ietf.org/html/rfc4122)
        time:
          type: string
          format: date-time
          description: >-
            The date and time of the message as recorded by the sender. The
            format shall be as defined for date-time in [RFC 3339 section
            5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is
            recommended that the optional time-secfrac be included up to
            millisecond precision
        originator:
          $ref: '#/components/schemas/Originator'
        client:
          $ref: '#/components/schemas/Institution'
        settlementEntity:
          $ref: '#/components/schemas/Institution'
        receiver:
          $ref: '#/components/schemas/Institution'
        thirdPartyIdentifiers:
          type: array
          description: >-
            An array of identifiers which each identify the transaction within
            each entity's system.
          items:
            $ref: '#/components/schemas/ThirdPartyIdentifier'
        slipData:
          $ref: '#/components/schemas/SlipData'
        basketRef:
          type: string
          description: >-
            Used to group multiple transactions which would otherwise be
            considered independent.
        tranType:
          type: string
          description: >-
            Data relating to the type of transaction taking place (i.e. cash
            withdrawal, goods and services etc.).
          enum:
            - GOODS_AND_SERVICES
            - CASH_WITHDRAWAL
            - DEBIT_ADJUSTMENT
            - GOODS_AND_SERVICES_WITH_CASH_BACK
            - NON_CASH
            - RETURNS
            - DEPOSIT
            - CREDIT_ADJUSTMENT
            - GENERAL_CREDIT
            - AVAILABLE_FUNDS_INQUIRY
            - BALANCE_INQUIRY
            - GENERAL_INQUIRY
            - CARD_VERIFICATION_INQUIRY
            - CARDHOLDER_ACCOUNTS_TRANSFER
            - GENERAL_TRANSFER
            - PAYMENT_FROM_ACCOUNT
            - GENERAL_PAYMENT
            - PAYMENT_TO_ACCOUNT
            - PAYMENT_FROM_ACCOUNT_TO_ACCOUNT
            - PLACE_HOLD_ON_CARD
            - GENERAL_ADMIN
            - CHANGE_PIN
            - CARD_HOLDER_INQUIRY
            - POINTS_INQUIRY
        srcAccType:
          type: string
          description: >-
            This specifies the type of source account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        destAccType:
          type: string
          description: >-
            This specifies the type of destination account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        stan:
          type: string
          description: >-
            The System Trace Audit Number can be used to locate transactions
            across different systems.
        rrn:
          type: string
          description: This is a reference set by the original source of the transaction.
        amounts:
          $ref: '#/components/schemas/Amounts'
        voucher:
          $ref: '#/components/schemas/Voucher'
        redemptionId:
          type: string
          description: >-
            Carries the value of the `id` field of the `RedemptionRequest` which
            is being refunded. Use of this field is encouraged if the refund
            request is submitted to the same system which processed the original
            redemption.
        receiverTransactionRef:
          type: string
          description: >-
            Carries the value of the receiver's transaction reference for the
            original redemption. Use of this field is specifically encouraged
            if: The voucher alone is not enough to uniquely identify the
            redemption to be refunded or the refund is processed by any system
            which did not process the original redemption. Use of this field is
            generally encouraged as it provides the receiver (who ultimately
            processed the redemption) with their specific transaction reference
            for the redemption. This may aid their processing of the refund.
        posInfo:
          $ref: '#/components/schemas/PosInfo'
      description: >-
        A description of a request to refund a voucher. This object supports
        requests for refunds for amounts different to the value for which the
        voucher was originally redeemed. Refunds are predicated on some prior
        redemption which may be referenced using a variety of mechanisms: the
        voucher used (if a voucher may only ever be used once), the redemption's
        message ID (which links to a specific redemption if a voucher may be
        re-issued by a voucher vendor), or the receiver's transaction reference
        for the redemption (most readily identifies the specific redemption to
        the receiver).
    RefundResponse:
      type: object
      required:
        - client
        - id
        - originator
        - thirdPartyIdentifiers
        - time
      properties:
        transactionLabels:
          type: array
          description: >-
            A list containing labels that can be used to discover this
            transaction or group it with other transactions sharing labels with
            the same label name and value. Transaction labels should never be
            used to make transaction processing decisions.
          items:
            $ref: '#/components/schemas/TransactionLabel'
        id:
          type: string
          description: >-
            The randomly generated UUID identifying this transaction, as defined
            for a variant 4 UUID in [RFC
            4122](https://tools.ietf.org/html/rfc4122)
        time:
          type: string
          format: date-time
          description: >-
            The date and time of the message as recorded by the sender. The
            format shall be as defined for date-time in [RFC 3339 section
            5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is
            recommended that the optional time-secfrac be included up to
            millisecond precision
        originator:
          $ref: '#/components/schemas/Originator'
        client:
          $ref: '#/components/schemas/Institution'
        settlementEntity:
          $ref: '#/components/schemas/Institution'
        receiver:
          $ref: '#/components/schemas/Institution'
        thirdPartyIdentifiers:
          type: array
          description: >-
            An array of identifiers which each identify the transaction within
            each entity's system.
          items:
            $ref: '#/components/schemas/ThirdPartyIdentifier'
        slipData:
          $ref: '#/components/schemas/SlipData'
        basketRef:
          type: string
          description: >-
            Used to group multiple transactions which would otherwise be
            considered independent.
        tranType:
          type: string
          description: >-
            Data relating to the type of transaction taking place (i.e. cash
            withdrawal, goods and services etc.).
          enum:
            - GOODS_AND_SERVICES
            - CASH_WITHDRAWAL
            - DEBIT_ADJUSTMENT
            - GOODS_AND_SERVICES_WITH_CASH_BACK
            - NON_CASH
            - RETURNS
            - DEPOSIT
            - CREDIT_ADJUSTMENT
            - GENERAL_CREDIT
            - AVAILABLE_FUNDS_INQUIRY
            - BALANCE_INQUIRY
            - GENERAL_INQUIRY
            - CARD_VERIFICATION_INQUIRY
            - CARDHOLDER_ACCOUNTS_TRANSFER
            - GENERAL_TRANSFER
            - PAYMENT_FROM_ACCOUNT
            - GENERAL_PAYMENT
            - PAYMENT_TO_ACCOUNT
            - PAYMENT_FROM_ACCOUNT_TO_ACCOUNT
            - PLACE_HOLD_ON_CARD
            - GENERAL_ADMIN
            - CHANGE_PIN
            - CARD_HOLDER_INQUIRY
            - POINTS_INQUIRY
        srcAccType:
          type: string
          description: >-
            This specifies the type of source account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        destAccType:
          type: string
          description: >-
            This specifies the type of destination account being used in the
            transaction (i.e. cheque, savings).
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - GIFT_CARD
            - STORED_VALUE
        stan:
          type: string
          description: >-
            The System Trace Audit Number can be used to locate transactions
            across different systems.
        rrn:
          type: string
          description: This is a reference set by the original source of the transaction.
        amounts:
          $ref: '#/components/schemas/Amounts'
        voucher:
          $ref: '#/components/schemas/Voucher'
        posInfo:
          $ref: '#/components/schemas/PosInfo'
      description: Information about the voucher redemption outcome.
    RewardPayment:
      allOf:
        - $ref: '#/components/schemas/PaymentMethod'
        - type: object
          required:
            - rewardCode
          properties:
            rewardCode:
              type: string
              description: A code used to recognise the reward programme
              minLength: 0
              maxLength: 40
          description: >-
            Model for reward-based payments. This payment method should be used
            when the payment is offset using a reward programme
    SlipData:
      type: object
      properties:
        messageLines:
          type: array
          description: >-
            An array of text lines and optional formatting to be printed on the
            customer slip.
          items:
            $ref: '#/components/schemas/SlipLine'
        slipWidth:
          type: integer
          format: int32
          description: The width of the slip in normal (unformatted) characters.
        issuerReference:
          type: string
          description: >-
            An identifier that is printed on the customer slip and uniquely
            identifies the payment on the service provider's system. This value
            is used by the customer to request a refund when the service
            supports this function, and it is thus important that this number is
            unique.
          pattern: '[A-Z0-9]{1,40}'
      description: Data that may be printed on the customer slip for information purposes
    SlipLine:
      type: object
      required:
        - text
      properties:
        barcode:
          $ref: '#/components/schemas/Barcode'
        text:
          type: string
          description: Text contained on the line
        fontWidthScaleFactor:
          type: number
          format: double
          description: >-
            Scale factor for font width. Assume 1.0 (i.e. normal size) if not
            present.
        fontHeightScaleFactor:
          type: number
          format: double
          description: >-
            Scale factor for font height. Assume 1.0 (i.e. normal size) if not
            present.
        line:
          type: boolean
          description: Denotes a solid line on the slip. Assume false if not present.
          default: false
        cut:
          type: boolean
          description: >-
            Indicates the slip should be cut at this line. Assume false if not
            present.
          default: false
      description: A line of text to be printed on the till slip
    Tender:
      type: object
      required:
        - amount
        - tenderType
      properties:
        accountType:
          type: string
          description: The type of account
          enum:
            - DEFAULT
            - SAVINGS
            - CHEQUE
            - CREDIT
            - UNIVERSAL
            - ELECTRONIC_PURSE
            - STORED_VALUE
        amount:
          $ref: '#/components/schemas/LedgerAmount'
        cardNumber:
          type: string
          description: >-
            A PCI compliant masked card number, with at least the first 6 digits
            in the clear. Only applicable to card based transactions
          pattern: '[0-9]{6}[0-9*]{0,13}'
        reference:
          type: string
          description: A free text reference
          minLength: 0
          maxLength: 40
        tenderType:
          type: string
          description: The type of tender used
          enum:
            - CASH
            - CHEQUE
            - CREDIT_CARD
            - DEBIT_CARD
            - WALLET
            - ROUNDING
            - GIFT_CARD
            - LOYALTY_CARD
            - OTHER
            - REWARD
      description: Details of the Tender used by a customer towards a payment
    TenderAdvice:
      type: object
      required:
        - id
        - requestId
        - tenders
        - thirdPartyIdentifiers
        - time
      properties:
        id:
          type: string
          description: >-
            The randomly generated UUID identifying this advice, as defined for
            a variant 4 UUID in [RFC 4122](https://tools.ietf.org/html/rfc4122)
        requestId:
          type: string
          description: The UUID identifying the request that this advice relates to
        time:
          type: string
          format: date-time
          description: >-
            The date and time of the message as recorded by the sender. The
            format shall be as defined for date-time in [RFC 3339 section
            5.6](https://tools.ietf.org/html/rfc3339#section-5.6). It is
            recommended that the optional time-secfrac be included up to
            millisecond precision
        thirdPartyIdentifiers:
          type: array
          description: >-
            The unaltered thirdPartyIdentifiers array as supplied in the related
            BasicResponse message. Required if thirdPartyIdentifiers field was
            present in the BasicResponse. If no thirdPartyIdentifiers was
            received in the BasicResponse or no BasicResponse was received then
            this should be set to the thirdPartyIdentifiers sent in the original
            request.
          items:
            $ref: '#/components/schemas/ThirdPartyIdentifier'
        stan:
          type: string
          description: >-
            The System Trace Audit Number can be used to locate transactions
            across different systems.
        rrn:
          type: string
          description: This is a reference set by the original source of the transaction.
        amounts:
          $ref: '#/components/schemas/Amounts'
        tenders:
          type: array
          description: An array of tenders used to pay for the transaction
          items:
            $ref: '#/components/schemas/Tender'
      description: An advice that notifies of the successful completion of a transaction.
    ThirdPartyIdentifier:
      type: object
      required:
        - institutionId
        - transactionIdentifier
      properties:
        institutionId:
          type: string
          description: The entity's institution ID.
        transactionIdentifier:
          type: string
          description: >-
            The identifier assigned to this transaction by the institution
            represented in institutionId. This value should be unique within the
            institution's system.
      description: >-
        An identifier assigned by an entity which process the message.
        Identifiers are keyed by institution ID thereby enabling any institution
        to recall a transaction within the entity's own system using the
        entity's own identifier. Entities must not alter the identifier set by
        another entity. Once an identifier has been set by an entity, all other
        entities must send that identifier in subsequent messages.
    ThreeDSecureData:
      type: object
      required:
        - version
      discriminator:
        propertyName: version
      properties:
        authenticationValue:
          type: string
          description: >-
            A 20-byte value that has been Base64 encoded. This value is provided
            by the Access Control Server as a proof of authentication.
        cardHolderAuthVerificationResult:
          type: string
          description: Authentication outcome set by the Access Control Server or Issuer.
          enum:
            - CAVV_VALIDATION_PASSED
            - CAVV_VALIDATION_FAILED_ISSUER_SYSTEM_ERROR
            - CAVV_VALIDATION_FAILED_ISSUER_ATTEMPT_INCOMPLETE
            - CAVV_NOT_VALIDATED
            - CAVV_NOT_VALIDATED_INVALID_DATA
            - CAVV_VALIDATION_FAILED
        version:
          type: string
          description: >-
            The version of the 3-D Secure protocol that was used for cardholder
            authentication. Note that the version determines the format of the
            transaction identifier
          enum:
            - V1
            - V2
        eci:
          type: string
          description: >-
            Electronic Commerce Indicator. This is Payment System-specific value
            provided by the Access Control Server to indicate the results of the
            attempt to authenticate the Cardholder.
          enum:
            - AUTHENTICATION_NOT_ATTEMPTED_OR_UNSUCCESSFUL_00
            - AUTHENTICATION_NOT_ENABLED_01
            - AUTHENTICATION_SUCCESSFUL_02
            - AUTHENTICATION_SUCCESSFUL_05
            - AUTHENTICATION_NOT_ENABLED_06
            - AUTHENTICATION_NOT_ATTEMPTED_OR_UNSUCCESSFUL_07
        transactionStatus:
          type: string
          description: >-
            Indicates whether a transaction qualifies as an authenticated
            transaction or account verification. The values and their meanings
            are as follows: 

            Y = Authentication Verification Successful.
             N = Not Authenticated /Account Not Verified; Transaction denied.
             U = Authentication/ Account Verification Could Not Be Performed; Technical or other problem.
             A = Attempts Processing Performed; Not Authenticated/ Verified, but a proof of attempted authentication/verification is provided.
             C = Challenge Required; Additional authentication is required using the CReq/CRes 
             D = Challenge Required; Decoupled Authentication confirmed. 
             R = Authentication/ Account Verification Rejected; Issuer is rejecting authentication/verification and request that authorisation not be attempted.
             I = Informational Only; 3DS Requestor challenge preference acknowledged.
             S = Challenge using SPC 
             
          enum:
            - 'Y'
            - 'N'
            - U
            - A
            - C
            - D
            - R
            - I
            - S
      description: >-
        Data used to facilitate and communicate the result of 3-D Secure
        cardholder authentication.
    ThreeDSecureDataV1:
      allOf:
        - $ref: '#/components/schemas/ThreeDSecureData'
        - type: object
          properties:
            transactionId:
              type: string
              description: >-
                A 20-byte base 64 encoded string assigned by the 3DS Server to
                identify a single transaction. This ID can be used to prevent
                transaction replay.
          description: >-
            3-D Secure data in which the transaction identifier takes the format
            of a byte string.
    ThreeDSecureDataV2:
      allOf:
        - $ref: '#/components/schemas/ThreeDSecureData'
        - type: object
          properties:
            transactionId:
              type: string
              format: uuid
              description: >-
                A UUID assigned by the 3DS Server to identify a single
                transaction. This ID can be used to prevent transaction replay.
                This is based on version 2 the EMVCo 3-D Secure specification.
          description: >-
            3-D Secure data in which the transaction identifier takes the format
            of a UUID.
    TransactionLabel:
      type: object
      required:
        - name
        - value
      properties:
        name:
          type: string
          description: >-
            Label name that indicates the type and intended use of the
            transaction label. The meaning of label names must be agreed upon by
            the parties involved in transaction processing.
          pattern: ^[a-zA-Z0-9_]{1,100}$
        value:
          type: string
          description: The value assigned to the transaction label.
          pattern: ^[a-zA-Z.-9 _-]{1,100}$
      description: >-
        A label assigned to a transaction by the entity processing the
        transaction. Labels are used for grouping or discovering transactions
        after transaction processing. Note that no transaction processing
        decision is made based on transaction labels.
    Voucher:
      type: object
      properties:
        code:
          type: string
          description: >-
            The voucher's code used by the customer to redeem the voucher. This
            must be present in `ProvisionResponse`, `RedemptionRequest` and
            `RefundRequest` messages. This may be present in a
            `ProvisionRequest` if the voucher vendor allows the client to set
            the voucher code. It is recommended this field not be populated in
            other instances as it may be considered sensitive data.
          minLength: 0
          maxLength: 40
        expiryDate:
          type: string
          format: date-time
          description: >-
            The date and time at which the voucher expires. The format shall be
            as defined for date-time in [RFC 3339 section
            5.6](https://tools.ietf.org/html/rfc3339#section-5.6).
        redeemInstructions:
          type: array
          description: >-
            An array of free text lines which provide the customer with
            information on how to redeem the voucher. These are intended to be
            printed on a customer's receipt slip.
          items:
            type: string
        serialNumber:
          type: string
          description: >-
            The voucher's serial number. This can be used to identify the
            voucher in the vendor's system but cannot be used to redeem the
            voucher.
          minLength: 0
          maxLength: 40
        pin:
          $ref: '#/components/schemas/Pin'
      description: Specifically describes the voucher provisioned by the vendor.
    VoucherLookupResponse:
      type: object
      required:
        - voucher
      properties:
        posInfo:
          $ref: '#/components/schemas/PosInfo'
        settlementEntity:
          $ref: '#/components/schemas/Institution'
        receiver:
          $ref: '#/components/schemas/Institution'
        amounts:
          $ref: '#/components/schemas/Amounts'
        voucher:
          $ref: '#/components/schemas/Voucher'
        product:
          $ref: '#/components/schemas/Product'
        thirdPartyIdentifiers:
          type: array
          description: >-
            An array of identifiers which each identify the transaction within
            each entity's system.
          items:
            $ref: '#/components/schemas/ThirdPartyIdentifier'
        rrn:
          type: string
          description: A reference set by the upstream entity that processed the request.
      description: >-
        Information about a voucher such as its expiry date, its value, and
        which entity the voucher belongs to.
    WalletPayment:
      allOf:
        - $ref: '#/components/schemas/PaymentMethod'
        - type: object
          required:
            - walletId
          properties:
            walletId:
              type: string
              description: The unique identifier of the wallet account making the payment.
              readOnly: true
            walletPocket:
              $ref: '#/components/schemas/WalletPocket'
          description: Model for mobile wallet payments
    WalletPocket:
      type: object
      required:
        - pocketName
      properties:
        pocketName:
          type: string
          description: The name given to this wallet pocket.
        pocketId:
          type: string
          description: >-
            A programmatic ID that can be used to identify this pocket when the
            name is not enough
