openapi: 3.0.1
info:
  title: Spar Konnekt - Sparkasse Bank Malta PSD2 API
  version: "1.2"
  description: |
    # Feature Set Overview
    
    **Feature Wave 2019-09-11**
    * PSD2 Next Gen Framework compatiblity 1.2_17-08-2018
    * Initial version
    
    **Upcoming - Feature Wave 2022-07-14 - will be deployed on 2022-07-14**
    * PSD2 Next Gen Framework compatiblity 1.2_17-08-2018
    * Create Consent - **/v1/consents**
      * Extend consent validUntil max days in the future from 90 to 180 days
    * Read Transaction List - **/v1/accounts/{account-id}/transactions/**
      * Limit dateFrom from unlimited to max 90 days in the past  
    
    # Summary

    **Spar Konnekt** is derived from the Berlin Group **NextGenPSD2** *Framework Version 1.2* (1.2_17-08-2018).
    Wherever possible the suggested API Endpoints, arguments and return values remain unchanged to what is proposed by NextGenPSD2.

    Here is an overview on the modifications and restrictions implemented in Spar Konnekt:

      * Allowed Authentication Approach: Redirect SCA Approach
      * HTTP Message Signature is mandatory in Spar Konnekt, see headers Digest, Signature and TPP-Signature-Certificate

    ## Some General Remarks Related to this version of the OpenAPI Specification:
    * **This API definition is based on the Implementation Guidelines of the Berlin Group PSD2 API.**
      It is not a replacement in any sense.
      The main specification is (at the moment) always the Implementation Guidelines of the Berlin Group PSD2 API.
    * **This API definition contains the REST-API for requests from the PISP to the ASPSP.**
    * **This API definition contains the messages for all different approaches defined in the Implementation Guidelines.**
    * According to the OpenAPI-Specification [https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.1.md]

        "If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition SHALL be ignored."

      The element "Accept" will not be defined in this file at any place.

      The elements "Content-Type" and "Authorization" are implicitly defined by the OpenApi tags "content" and "security".

    * There are several predefined types which might occur in payment initiation messages,
      but are not used in the standard JSON messages in the Implementation Guidelines.
      Therefore they are not used in the corresponding messages in this file either.
      We added them for the convenience of the user.
      If there is a payment product, which need these field, one can easily use the predefined types.
      But the ASPSP need not to accept them in general.

    * **We omit the definition of all standard HTTP header elements (mandatory/optional/conditional)
      except they are mentioned in the Implementation Guidelines.**

    ## General Remarks on Data Types

    The Berlin Group definition of UTF-8 strings in context of the PSD2 API have to support at least the following characters

    a b c d e f g h i j k l m n o p q r s t u v w x y z

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

    0 1 2 3 4 5 6 7 8 9

    / - ? : ( ) . , ' +

    Space



    ## Digest and Signature Header
    **What does the signature header contain?**
    * keyId - This is the serial number of the certificate as defined in 'TPP-Signing-Certificate' header format in hex format (SN=) followed by the certificate distinguished names (RFC2253) marked with (CA=)
    * algorithm - The algorithm parameter is used to specify the digital signature algorithm to use when generating the signature. MUST be SHA-256 ( or SHA-512).
    * headers - lowercased list of header fields to sign, must include, no more, no less:
        * Date
        * Digest
        * X-Request-ID
        * PSU-ID (optional / if and only if included as a header of the HTTP request)
        * PSU-Corporate-ID (optional / if and only if included as a header of the HTTP request)
        * TPP-Redirect-URI (optional / if and only if included as a header of the HTTP request)
        * Signature - is a signed text (signed by TPP certificate private key) of the above headers fields.
        Signature="Base64(RSA-SHA256(signing string))", note you MUST sign the string with your private key + algorithm (Should be SHA-256 or SHA-512).

    **What does the HTTP request look like:**
    * Content-Type: Application/json
    * X-Request-ID:76432c25-e641-478f-a92a-f53ef31a7fdb
    * PSU-ID:123456
    * PSU-Corporate-ID:123456789
    * TPP-Redirect-Preferred:true
    * TPP-Redirect-URI:https://sparkasse-bank-malta.com
    * Date:Mon, 06 May 2019 16:47:08 CEST
    * Digest:SHA-256=s6dLK9EazcApsqUpgPR5SazmKtFC1svmHEM3SeQc3Mg=
    * Signature:keyId="SN=b,CA=2.5.4.97=#13105053444d542d4653412d313233343536,1.2.840.113549.1.9.1=#160d7465737440746573742e636f6d,CN=Test TPP,OU=Test TPP,O=Test TPP,L=Vomp,ST=AT,C=AT",algorithm="SHA-256",headers="date digest
    x-request-id psu-id psu-corporate-id tpp-redirect-uri",signature="avgKe6ebG9OprbXPzA/+VbW7xXQBaE3z6AWNk5Le56FGsF5sLK/fnhlfSiFUqXPFlaTdfTl3uLt2TJyi4bPm8JuirD3olvMgtpozG7IG3e3ub/BOJ/vTII46d/1797sIm4kEd71t/xIplMfDgDt0cpT
    0N9rM3GJZdRDjw+cDRoAEQ+h5BcMjI+DaJUQPL5meT0ZXu0hHO/kAbvlPRt7onDCCn/fpIPY6g9CbYkM8DZKBtRRAXE+AhxL2L+kmb/7WHQ5o1ljV7/NNFgvDl9ogeDIL/skOL/00/Duxlrb6Sqh1X1HuVu9qmV8nMptbkZnQM4GeqNTjmSb5SIc8MKrnKw=="
    * TPP-Signature-Certificate:MIIFKDCCBBCgAwIBAgIBCzANBgkqhkiG9w0BAQsFAD.....r9mQ1jvw==

    **The signing string is composed as:**

    >"date: Mon, 06 May 2019 16:47:08 CEST\n
    digest: SHA-256=s6dLK9EazcApsqUpgPR5SazmKtFC1svmHEM3SeQc3Mg=\n
    x-request-id: 76432c25-e641-478f-a92a-f53ef31a7fdb\n
    psu-id: 123456\n
    psu-corporate-id: 123456789\n
    tpp-redirect-uri: https://sparkasse-bank-malta.com"


    Note that the components are separated with "\n". Header fields are lowercased followed by ":" and a whitespace. The field content itself is not modified.

    **How is the digest generated?**
    * Digest is the hash/checksum of the body, digest = "Algorithm=Base64(SHA256 OR SHA512(signing string, which is the json body))". Only SHA-256 or SHA-512 hashing algorithm are allowed.

    *Example Digest header text:* SHA-256=s6dLK9EazcApsqUpgPR5SazmKtFC1svmHEM3SeQc3Mg=

    ## TPP Application- and Transport Layer Certificate
    **Which certificates does a TPP need to provide?**
    * Transport layer certificate which is used on transport layer for client authentication
    * Application layer certificate to generate digest and signature header

    **What does a TPP certificate need to contain?**
    * PSP-Identifier in both certificates has to be identical. The identifier is defined in certificate subject 2.5.4.97 (e.g. 2.5.4.97 = PSDMT-FSA-123456)
    * TPP roles in QC Statement need to be set according to the invoked service (PSP_IC, PSP_AS, PSP_AI)
    * TPP authority in QC Statement needs to be the same in both provided certificates (e.g. Malta Financial Services Authority, MT-MFSA)

    ## TPP Application- and Transport Layer Certificate in Test Sandbox

    **What certificates can be used on our test system?**
    * Official certificate signed by a QTSP
    * Test certificate which will be signed by our internal CA and will be provided under [**spar.key@Sparkasse-Bank-Malta.com**](mailto:spar.key@Sparkasse-Bank-Malta.com).

  license:
    name: Creative Commons Attribution 4.0 International Public License
    url: https://creativecommons.org/licenses/by/4.0/
  #termsOfService: URL for Terms of Service of the API
  contact:
    name: Sparkasse Bank Malta plc
    url: https://www.sparkasse-bank-malta.com/
    email: online@sparkasse-bank-malta.com

externalDocs:
  description: |
    Full Documentation of NextGenPSD2 Access to Account Interoperability Framework
    (General Introduction Paper, Operational Rules, Implementation Guidelines)
  url: https://www.berlin-group.org/nextgenpsd2-downloads

servers:
  - url: https://sparkonnekt.sbm.services/FungusBE
    description: PSD2 XS2A Production

  - url: https://sparkonnekt-sandbox.sbm.services/FungusBE
    description: PSD2 XS2A Sandbox

paths:

  #####################################################
  # Payment Information Service
  #####################################################

  /v1/{payment-service}/{payment-product}:

    post:
      summary: Payment initiation request
      description: |
        This method is used to initiate a payment at the ASPSP.

        ## Variants of Payment Initiation Requests

        The method to initiate a payment initiation at the ASPSP has to be sent with a JSON body.

        There are the following **payment products**:

          - Payment products with payment information in *JSON* format:
            - ***sepa-credit-transfers***
            - ***target-2-payments***
            - ***cross-border-credit-transfers***

        Furthermore the request body depends on the type of **payment-service**
          * ***payments***: A single payment initiation request.

        This is the first step in the API to initiate the related recurring/periodic payment.

        ## Behaviour in Test Sandbox

        In the test system the interaction of a PSU will be simulated by the sandbox itself. Thereby the test system will behave in the following way:

        | **Debtor Account IBAN is one of** |
        | ----- |
        | MT14SBMT55505000010000900001000 |
        | MT67SBMT55505000010000900004120 |
        | MT17SBMT55505000010000900003080 |
        | MT64SBMT55505000010000900002040 |

        | **InstructedAmount** | **Status** |
        | ----- | ----- |
        | 0 < Amount < 100 | RCVD |
        | 100 <= Amount < 1000 | PDNG |
        | 1000 <= Amount < 5000 | ACTC |
        | 5000 <= Amount < 10000 | RJCT |
        | 10000 <= Amount | CANC |

        **All payment initiation requests with debtor account IBANs from Sparkasse Bank Malta plc different to the list above will lead to status RCVD.**

        **Example ACTC:**
         ```
        {
          "endToEndIdentification":"1234567890",
          "instructedAmount":{"currency":"USD", "amount":"4000"},
          "debtorAccount":{"iban":"MT14SBMT55505000010000900001000"},
          "creditorName":"John Doe",
          "creditorAccount":{"iban":"DE12500105170648489890"},
          "creditorAddress":{
             "street":"Test street",
             "buildingNumber":"1",
             "city":"Test city",
             "postalCode":"1234",
             "country":"MT"},
          "creditorAgent":"SBMTMTMTXXX",
          "remittanceInformationUnstructured":"Test Payment"
        }
        ```

      operationId: initiatePayment
      tags:
        - Payment Initiation Service (PIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
      #path
        - $ref: "#/components/parameters/paymentService"
        - $ref: "#/components/parameters/paymentProduct"
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #method specific header elements
        - $ref: "#/components/parameters/PSU-ID"
        - $ref: "#/components/parameters/PSU-ID-Type"
        - $ref: "#/components/parameters/PSU-Corporate-ID"
        - $ref: "#/components/parameters/PSU-Corporate-ID-Type"
        - $ref: "#/components/parameters/consentId_HEADER_optional"
        - $ref: "#/components/parameters/PSU-IP-Address_mandatory"
        - $ref: "#/components/parameters/TPP-Redirect-Preferred"
        - $ref: "#/components/parameters/TPP-Redirect-URI"
        - $ref: "#/components/parameters/TPP-Nok-Redirect-URI"
          # Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"

      requestBody:
        $ref: "#/components/requestBodies/paymentInitiation"

      responses:
        '201':
          $ref: "#/components/responses/CREATED_201_PaymentInitiation"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"

  /v1/{payment-service}/{paymentId}:

    get:
      summary: Get Payment Information
      description: Returns the content of a payment object
      operationId: getPaymentInformation
      tags:
        - Payment Initiation Service (PIS)
      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}

      parameters:
      #path
        - $ref: "#/components/parameters/paymentService"
        - $ref: "#/components/parameters/paymentId"
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
          # Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_PaymentInitiationInformation"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"

    delete:
      summary: Payment Cancellation Request
      description: |
        This method initiates the cancellation of a payment.

        Cancels the addressed payment with resource identification paymentId if applicable to the payment-service, payment-product and received in product related timelines (e.g. before end of business day for scheduled payments of the last business day before the scheduled execution day). Note: Payments fully authorized by the PSU can't be cancelled by the TPP.

        The response to this DELETE command will tell the TPP whether the
          * access method was rejected
          * access method was successful, or
          * access method is generally applicable, but further authorisation processes are needed.
      operationId: cancelPayment
      tags:
        - Payment Initiation Service (PIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
      #path
        - $ref: "#/components/parameters/paymentService"
        - $ref: "#/components/parameters/paymentId"
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
         # Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_PaymentInitiationCancel"
          #If the DELETE is sufficient for cancelling the payment
        '202':
          $ref: "#/components/responses/RECEIVED_202_PaymentInitiationCancel"
          #Sparkasse Bank Malta plc modified: PSU consent is not requested
          #If the DELETE is not sufficient for cancelling the payment since an authorisation of the cancellation by the PSU is needed.

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"


  /v1/{payment-service}/{paymentId}/status:

    get:
      summary: Payment initiation status request
      description: Check the transaction status of a payment initiation.
      operationId: getPaymentInitiationStatus
      tags:
        - Payment Initiation Service (PIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
      #path
        - $ref: "#/components/parameters/paymentService"
        - $ref: "#/components/parameters/paymentId"
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
           # Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_PaymentInitiationStatus"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"

  #####################################################
  # Account Information Service
  #####################################################

      #####################################################
      # Accounts
      #####################################################


  /v1/accounts:
    get:
      summary: Read Account List
      description: |
        Read the identifiers of the available payment account together with
        booking balance information, depending on the consent granted.

        It is assumed that a consent of the PSU to this access is already given and stored on the ASPSP system.
        The addressed list of accounts depends then on the PSU ID and the stored consent addressed by consentId.

        Returns all identifiers of the accounts, to which an account access has been granted to through
        the /consents endpoint by the PSU.
        In addition, relevant information about the accounts and hyperlinks to corresponding account
        information resources are provided if a related consent has been already granted.

        Remark: Note that the /consents endpoint optionally offers to grant an access on all available
        payment accounts of a PSU.
        In this case, this endpoint will deliver the information about all available payment accounts
        of the PSU at this ASPSP.
      operationId: getAccountList
      tags:
        - Account Information Service (AIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}

      parameters:
      #path # NO PATH PARAMETER
      #query
        - $ref: "#/components/parameters/withBalanceQuery"
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #method specific header elements
        - $ref: "#/components/parameters/consentId_HEADER_mandatory"
          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
          #Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_AccountList"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"

  /v1/accounts/{account-id}:
    get:
      summary: Read Account Details
      description: |
        Reads details about an account, with balances where required.
        It is assumed that a consent of the PSU to
        this access is already given and stored on the ASPSP system.
        The addressed details of this account depends then on the stored consent addressed by consentId.
      operationId: readAccountDetails
      tags:
        - Account Information Service (AIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
      #path
        - $ref: "#/components/parameters/accountId"
      #query
        - $ref: "#/components/parameters/withBalanceQuery"
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #method specific header elements
        - $ref: "#/components/parameters/consentId_HEADER_mandatory"
          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
          #Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_AccountDetails"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"

  /v1/accounts/{account-id}/balances:

    get:
      summary: Read Balance
      description: |
        Reads account data from a given account addressed by "account-id".

        **Remark:** This account-id is a tokenised identification due to data protection reason since the path
        information might be logged on intermediary servers within the ASPSP sphere.
        This account-id then can be retrieved by the "GET Account List" call.

        The account-id is constant at least throughout the lifecycle of a given consent.

        ## Behaviour in Test Sandbox
        The account balances will not be updated in the test system and are hard coded to default values. (Also refer to section "/v1/funds-confirmations" for further information)

      operationId: getBalances
      tags:
        - Account Information Service (AIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
      #path
        - $ref: "#/components/parameters/accountId"
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #method specific header elements
        - $ref: "#/components/parameters/consentId_HEADER_mandatory"
          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
          #Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_Balances"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"

  /v1/accounts/{account-id}/transactions/:
    get:
      summary: Read Transaction List
      description: |
        Read transaction reports or transaction lists of a given account ddressed by "account-id".
        
        **Feature Wave 2019-09-11**
        * dateFrom and dateTo is mandadory
        * entryReferenceFrom is not supported
        * deltaList is not supported
        * Max date range (dateFrom - dateTo) of 90 days is supported!
        * bookingStatus is ignored, only booked transactions are shown

        **Feature Wave 2022-07-14**
        * dateFrom and dateTo is mandadory
        * entryReferenceFrom is not supported
        * deltaList is not supported
        * Max date range (dateFrom - dateTo) of 180 days is supported!
        * Max dateFrom is 90 days in the past!
        * bookingStatus is ignored, only booked transactions are shown

      operationId: getTransactionList
      tags:
        - Account Information Service (AIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
      #path
        - $ref: "#/components/parameters/accountId"
      #query
        - $ref: "#/components/parameters/dateFrom"
        - $ref: "#/components/parameters/dateTo"
        - $ref: "#/components/parameters/entryReferenceFrom"
        - $ref: "#/components/parameters/bookingStatus"
        - $ref: "#/components/parameters/deltaList"
        - $ref: "#/components/parameters/withBalanceQuery"
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #method specific header elements
        - $ref: "#/components/parameters/consentId_HEADER_mandatory"
        #- $ref: "#/components/parameters/Accept" #Can not defined in Open API. See general comments in the description attached to the top level of the file. # Sparkasse Bank Malta plc: We only support JSON for now
          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
          #Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_Transactions"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"


  /v1/accounts/{account-id}/transactions/{resourceId}:
    get:
      summary: Read Transaction Details
      description: |
        Reads transaction details from a given transaction addressed by "resourceId" on a given account addressed by "account-id".
        This call is only available on transactions as reported in a JSON format.

        **Remark:** Please note that the PATH might be already given in detail by the corresponding entry of the response of the
        "Read Transaction List" call within the _links subfield.
      operationId: getTransactionDetails
      tags:
        - Account Information Service (AIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}

      parameters:
      #path
        - $ref: "#/components/parameters/accountId"
        - $ref: "#/components/parameters/resourceId"
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #method specific header elements
        - $ref: "#/components/parameters/consentId_HEADER_mandatory"
          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
          # Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_TransactionDetails"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"


      #####################################################
      # Card Accounts
      #####################################################

#TODO INCLUDED FOR LATER USE WITH CARD-ACCOUNTS
#  /card-accounts:
#
#TODO INCLUDED FOR LATER USE WITH CARD-ACCOUNTS
#    get:
#      # Remark for Future: This endpoint will deliver credit card account related account information. It will be sub-structured analogously to the /accounts interface with similar sub-endpoints. Further details will be published with the next version of the specification.
#      Remark: Note that the {card-account-id} parameters can be tokenised by the ASPSP such that the actual account numbers like IBANs or PANs are not part of the path definitions of the API for data protection reasons. This tokenisation is managed by the ASPSP


      #####################################################
      # Consents
      #####################################################

  /v1/consents:
    post:
      summary: Create consent
      description: |
        This method creates a consent resource, defining access rights to the dedicated accounts of
        a given PSU-ID. These accounts are addressed explicitly in the method as
        parameters as a core function.
        The frequencyPerDay parameter will be currently not evaluated. That means that a consent can be used as often as required per day.

        **Side Effects**
        When this Consent Request is a request where the "recurringIndicator" equals "true",
        and if it exists already a former consent for recurring access on account information
        for the addressed PSU, then the former consent automatically expires as soon as the new
        consent request is authorised by the PSU.

        **Feature Wave 2019-09-11**
        * Max validUntil date is 90 days in the future

        **Feature Wave 2022-07-14**
        * Max validUntil date is 180 days in the future
        
        ## Behaviour in Test Sandbox

        In the test system the interaction of a PSU will be simulated by the sandbox itself. Thereby the test system will behave in the following way:

        | **Debtor Account IBAN is one of** |
        | ----- |
        | MT14SBMT55505000010000900001000 |
        | MT67SBMT55505000010000900004120 |
        | MT17SBMT55505000010000900003080 |
        | MT64SBMT55505000010000900002040 |


        | **Frequency Per Day** | **Consent Status** |
        |-----|-------|
        | 0 <= Frequency Per Day < 100 | RECEIVED |
        | 100 <= Frequency Per Day < 1000 | VALID |
        | 1000 <= Frequency Per Day < 5000 | REJECTED |
        | 5000 <= Frequency Per Day < 10000 | REVOKEDBYPSU |
        | 10000 <= Frequency Per Day | EXPIRED |

        **All consent creation requests with debtor account IBANs from Sparkasse Bank Malta plc different to the list above will lead to status RECEIVED.**

        **Example VALID:**
         ```
        {
          "access":{
             "accounts":[{"iban":"MT14SBMT55505000010000900001000"},
             {"iban":"MT67SBMT55505000010000900004120"}],
             "balances":[{"iban":"MT17SBMT55505000010000900003080"}],
             "transactions":[{"iban":"MT64SBMT55505000010000900002040"}],
             "allPsd2":"",
             "availableAccounts":""
           },
           "recurringIndicator":"true",
           "validUntil":"2019-07-26",
           "frequencyPerDay":"500",
           "combinedServiceIndicator":"false"
        }
        ```

      operationId: createConsent
      tags:
        - Account Information Service (AIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
        #path # NO PATH PARAMETER
        #query # NO QUERY PARAMETER
        #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #method specific header elements
        - $ref: "#/components/parameters/PSU-ID"
        - $ref: "#/components/parameters/PSU-ID-Type"
        - $ref: "#/components/parameters/PSU-Corporate-ID"
        - $ref: "#/components/parameters/PSU-Corporate-ID-Type"
        - $ref: "#/components/parameters/TPP-Redirect-Preferred"
        - $ref: "#/components/parameters/TPP-Redirect-URI"
        - $ref: "#/components/parameters/TPP-Nok-Redirect-URI"
        - $ref: "#/components/parameters/TPP-Explicit-Authorisation-Preferred"
          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
          # Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"

      requestBody:
        $ref: "#/components/requestBodies/consents"

      responses:
        '201':
          $ref: "#/components/responses/CREATED_201_Consents"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"


  /v1/consents/{consentId}:

    get:
      summary: Get Consent Request
      description: |
        Returns the content of an account information consent object.
        This is returning the data for the TPP especially in cases,
        where the consent was directly managed between ASPSP and PSU e.g. in a re-direct SCA Approach.

      operationId: getConsentInformation
      tags:
        - Account Information Service (AIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
      #path
        - $ref: "#/components/parameters/consentId_PATH"
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
          #Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_ConsentInformation"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"


    delete:
      summary: Delete Consent
      description: The TPP can delete an account information consent object if needed.
      operationId: deleteConsent
      tags:
        - Account Information Service (AIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
      #path
        - $ref: "#/components/parameters/consentId_PATH"
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
          #Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '204':
          $ref: "#/components/responses/NO_CONTENT_204_Consents"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"


  /v1/consents/{consentId}/status:
    get:
      summary: Consent status request
      description: Read the status of an account information consent resource.
      operationId: getConsentStatus
      tags:
        - Account Information Service (AIS)

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
      #path
        - $ref: "#/components/parameters/consentId_PATH"
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #optional additional PSU Information in header
        - $ref: "#/components/parameters/PSU-IP-Address_optional"
        - $ref: "#/components/parameters/PSU-IP-Port"
        - $ref: "#/components/parameters/PSU-Accept"
        - $ref: "#/components/parameters/PSU-Accept-Charset"
        - $ref: "#/components/parameters/PSU-Accept-Encoding"
        - $ref: "#/components/parameters/PSU-Accept-Language"
        - $ref: "#/components/parameters/PSU-User-Agent"
        - $ref: "#/components/parameters/PSU-Http-Method"
        - $ref: "#/components/parameters/PSU-Device-ID"
        - $ref: "#/components/parameters/PSU-Geo-Location"
          # Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_ConsentsStatus"
        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"


  #####################################################
  # Funds Confirmation Service
  #####################################################

  /v1/funds-confirmations:
    post:
      summary: Confirmation of Funds Request
      description: |
        This aspect of the API creates a confirmation of funds request at the ASPSP.
        Checks whether a specific amount is available at point of time
        of the request on an account linked to a given tuple card issuer(TPP)/card number,
        or addressed by IBAN and TPP respectively

        ## Behaviour in Test Sandbox

        In the test system the interaction of a PSU will be simulated by the sandbox itself. Thereby the test system will behave in the following way:

        | **Account IBAN is one of** | **Account Balance (hard coded)** |
        | ----- | ----- |
        | MT14SBMT55505000010000900001000 | EUR 53783.80 |
        | MT67SBMT55505000010000900004120 | CAD 101485.58|
        | MT17SBMT55505000010000900003080 | GBP 1275.24 |
        | MT64SBMT55505000010000900002040 | USD 5886.45 |


        **The related found confirmation consent will be granted if the related request contains an account IBAN from the list above. For all other requests with account IBANs from Sparkasse Bank Malta plc  the consent will not be granted.**
        Further be aware that fictional exchange rates will be used and that the account balances are not updated.

        **Example:**
         ```
        {
          "account":{"iban":"MT17SBMT55505000010000900003080"},
          "instructedAmount":{"currency":"GBP", "amount":"1275.24"}
        }
        ```
      operationId: checkAvailabilityOfFunds
      tags:
        - Confirmation of Funds Service

      parameters:
      #path # NO PATH PARAMETER
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"

      requestBody:
        $ref: "#/components/requestBodies/confirmationOfFunds"

      responses:
        '200':
          $ref: "#/components/responses/OK_200_ConfirmationOfFunds"

        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"


  #Sparkasse Bank Malta plc added
  /v1/funds-confirmations-interactive:
    post:
      summary: Confirmation of Funds Request Interactive
      description: |
        This aspect of the API creates a confirmation of funds request which will be send out to the PSU at the ASPSP.
        After positive confirmation by the PSU it checks whether a specific amount is available at point of time
        of the request on an account linked to a given IBAN and TPP respectively

        ## Behaviour in Test Sandbox

        In the test system the interaction of a PSU will be simulated by the sandbox itself. Thereby the test system will behave in the following way:

        | **Account IBAN is one of** | **Account Balance (hard coded)** |
        | ----- | ----- |
        | MT14SBMT55505000010000900001000 | Any Amount | YES
        | MT67SBMT55505000010000900004120 | Any Amount | TIMOUT
        | MT17SBMT55505000010000900003080 | GBP 1275.24 | YES / NO (depends upon request)
        | MT64SBMT55505000010000900002040 | Any Amount | DECLINED


        **The related interactive found confirmation request will be handled as stated above if request contains an account IBAN from the list above. For all other requests with account IBANs from Sparkasse Bank Malta plc the request will not be handled **
        Further be aware that fictional exchange rates will be used and that the account balances are not updated.

        **Example:**
         ```
        {
          "account":{"iban":"MT17SBMT55505000010000900003080"},
          "instructedAmount":{"currency":"GBP", "amount":"1275.24"}
        }
        ```
      operationId: createAvailabilityOfFundsRequest
      tags:
        - Interactive Confirmation of Funds Service

      parameters:
      #path # NO PATH PARAMETER
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          #Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"

      requestBody:
        $ref: "#/components/requestBodies/confirmationOfFunds"

      responses:
        '201':
          $ref: "#/components/responses/CREATED_201_FundConfirmationInteractive"
        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"

  #Sparkasse Bank Malta plc added
  /v1/funds-confirmations-interactive/{fundConfirmationInteractiveId}/status:
    get:
      summary: Fund Confirmation Interactive status request
      description: Read the status of a fund confirmation interative resource.
      operationId: retrieveAvailabilityOfFundsRequestStatus
      tags:
        - Interactive Confirmation of Funds Service

      security:
      #####################################################
      # REMARKS ON SECURITY IN THIS OPENAPI FILE
      #In this file only the basic security element to transport
      # the bearer token of an an OAuth2 process, which has to
      # be included inthe HTTP header ist described.
      #
      # WARNING:
      # If you want to use this file for a productive implementation,
      # it is recommandes to adjust the security schemes according to
      # your system enviroments and security policies.
      #####################################################
        - {}


      parameters:
      #path
        - $ref: "#/components/parameters/fundConfirmationInteractiveId_PATH"
      #query # NO QUERY PARAMETER
      #header
          #common header parameter
        - $ref: "#/components/parameters/X-Request-ID"
          #header to support the signature function
        - $ref: "#/components/parameters/Digest"
        - $ref: "#/components/parameters/Signature"
        - $ref: "#/components/parameters/TPP-Signature-Certificate"

          # Added by Sparkasse Bank Malta plc
        - $ref: "#/components/parameters/Date"
      #NO REQUEST BODY

      responses:
        '200':
          $ref: "#/components/responses/OK_200_FundConfirmationInteractiveResponse"
        '400':
          $ref: "#/components/responses/BAD_REQUEST_400"
        '401':
          $ref: "#/components/responses/UNAUTHORIZED_401"
        '403':
          $ref: "#/components/responses/FORBIDDEN_403"
        '404':
          $ref: "#/components/responses/NOT_FOUND_404"
        '405':
          $ref: "#/components/responses/METHOD_NOT_ALLOWED_405"
        '406':
          $ref: "#/components/responses/NOT_ACCEPTABLE_406"
        '408':
          $ref: "#/components/responses/REQUEST_TIMEOUT_408"
        '415':
          $ref: "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415"
        '429':
          $ref: "#/components/responses/TOO_MANY_REQUESTS_429"
        '500':
          $ref: "#/components/responses/INTERNAL_SERVER_ERROR_500"
        '503':
          $ref: "#/components/responses/SERVICE_UNAVAILABLE_503"

  #####################################################
  # Card Account Information Service
  #####################################################

#TODO INCLUDED FOR LATER USE WITH CARD-ACCOUNTS
#  /card-accounts:
#    get:
#      summary:
#      description: |
#        This endpoint will deliver credit card account related account information.
#        It will be sub-structured analogously to the /accounts interface with similar sub-endpoints.
#        Further details will be published with the next version of the specification.


components:
#####################################################
# Predefined Components
#####################################################


  schemas:
  #####################################################
  # Predefined Schemas
  #####################################################

   #Sparkasse Bank Malta plc added
    cofstatus:
      name: cofstatus
      in: path
      description: |
        Fund Confirmation Interactive respose values
        Valid values are:
        * YES
        * NO
        * PROCESSING_ERROR
        * PROCESSING_PENDING
        * DECLINED
        * TIMEOUT
      schema:
        type: string
        enum:
          - "YES"
          - "NO"
          - "PROCESSING_ERROR"
          - "PROCESSING_PENDING"
          - "DECLINED"
          - "TIMEOUT"
    required: true

    #Sparkasse Bank Malta plc added
    fundConfirmationInteractiveId:
      name: fundConfirmationInteractiveId
      in: path
      description: |
        Resource identification of the generated Fund Confirmation Interactive resource.
      required: true
      example: "99391c7e-ad88-49ec-a2ad-99ddcb1f7721"
      schema:
        type: string
        format: uuid

    paymentId:
      description:
        Resource identification of the generated payment initiation resource.
      type: string
      example: "1234-wertiq-983"


    paymentIdList:
      description: A list of paymentIds
      type: array
      items:
        $ref: "#/components/schemas/paymentId"


    basketId:
      description:
        Resource identification of the generated signing basket resource.
      type: string
      example: "1234-basket-567"


    authorisationId:
      description: Resource identification of the related SCA
      type: string
      example: "123auth456"


    authenticationMethodId:
      description: |
            An identification provided by the ASPSP for the later identification of the authentication method selection.
      type: string
      maxLength: 35
      example: "myAuthenticationID"


    accountId:
      description: This identification is denoting the addressed account, where the transaction has been performed.
      type: string
      example: "qwer3456tzui7890"


    consentId:
      description: |
        ID of the corresponding consent object as returned by an Account Information Consent Request.
      type: string


    consentIdList:
      description: A list of consentIds
      type: array
      items:
        $ref: "#/components/schemas/consentId"


    resourceId:
      description: |
        This identification is given by the attribute resourceId of the corresponding entry of a transaction list.
      type: string
      example: "3dc3d5b3-7023-4848-9853-f5400a64e80f"


    cancellationId:
      description: Identification for cancellation resource
      type: string
      example: "123auth456"


#TODO INCLUDED FOR LATER USE WITH CARD-ACCOUNTS
#    cardTransactionId:
#      description: Unique end to end identity.
#      type: string
#      maxLength: 35


#TODO INCLUDED FOR LATER USE WITH CARD-ACCOUNTS
#    terminalId:
#      description: Terminal ID
#      type: string
#      maxLength: 35


    entryReference:
      description: |
        Is the identification of the transaction as used e.g. for reference for deltafunction on application level.
      type: string
      maxLength: 35


#TODO INCLUDED FOR LATER USE WITH CARD-ACCOUNTS
#    merchantCategoryCode:
#      description: Merchant category code
#      type: string


    transactionStatus:
      description: |
        The transaction status is filled with codes of the ISO 20022 data table:
        - 'ACCP': 'AcceptedCustomerProfile' -
          Preceding check of technical validation was successful.
          Customer profile check was also successful.
        - 'ACSC': 'AcceptedSettlementCompleted' -
          Settlement on the debtor’s account has been completed.

          **Usage:** this can be used by the first agent to report to the debtor that the transaction has been completed.

          **Warning:** this status is provided for transaction status reasons, not for financial information.
          It can only be used after bilateral agreement.
        - 'ACSP': 'AcceptedSettlementInProcess' -
          All preceding checks such as technical validation and customer profile were successful and therefore the payment initiation has been accepted for execution.
        - 'ACTC': 'AcceptedTechnicalValidation' -
          Authentication and syntactical and semantical validation are successful.
        - 'ACWC': 'AcceptedWithChange' -
          Instruction is accepted but a change will be made, such as date or remittance not sent.
        - 'ACWP': 'AcceptedWithoutPosting' -
          Payment instruction included in the credit transfer is accepted without being posted to the creditor customer's account.
        - 'RCVD': 'Received' -
          Payment initiation has been received by the receiving agent.
        - 'PDNG': 'Pending' -
          Payment initiation or individual transaction included in the payment initiation is pending.
          Further checks and status update will be performed.
        - 'RJCT': 'Rejected' -
          Payment initiation or individual transaction included in the payment initiation has been rejected.
        - 'CANC': 'Cancelled'
          Payment initiation has been cancelled before execution

          **Remark:** *Change Request to ISO20022 is still needed.*
      type: string
      enum:
        - "ACCP"
        - "ACSC"
        - "ACSP"
        - "ACTC"
        - "ACWC"
        - "ACWP"
        - "RCVD"
        - "PDNG"
        - "RJCT"
        - "CANC"
      example: "ACCP"

    scaStatus:
      description: |
        This data element is containing information about the status of the SCA method applied.

        The following codes are defined for this data type.

          * 'received':
            An authorisation or cancellation-authorisation resource has been created successfully.
          * 'psuIdentified':
            The PSU related to the authorisation or cancellation-authorisation resource has been identified.
          * 'psuAuthenticated':
            The PSU related to the authorisation or cancellation-authorisation resource has been identified and authenticated e.g. by a password or by an access token.
          * 'scaMethodSelected':
            The PSU/TPP has selected the related SCA routine.
            If the SCA method is chosen implicitly since only one SCA method is available,
            then this is the first status to be reported instead of 'received'.
          * 'started':
            The addressed SCA routine has been started.
          * 'finalised':
            The SCA routine has been finalised successfully.
          * 'failed':
            The SCA routine failed
          * 'exempted':
            SCA was exempted for the related transaction, the related authorisation is successful.
      type: string
      enum:
        - "received"
        - "psuIdentified"
        - "psuAuthenticated"
        - "scaMethodSelected"
        - "started"
        - "finalised"
        - "failed"
        - "exempted"

      example: "psuAuthenticated"

#TODO INCLUDED FOR LATER USE WITH CARD-ACCOUNTS
#    cardTransactionStatus: #TODO  CARD-ACCOUNTS No final definition of cardTransactionStatus in spec contained. Has to be added later.
#      description: |
#        No final detaileddefinition in spec contained
#        "booked",
#        "pending"###
#        structure: two lists
#      type: object
#      properties:
#        booked:
#          type: array
#          items:
#            type: string
#        pending:
#          type: array
#          items:
#            type: string

    scaAuthenticationData:
      description: |
        SCA authentication data, depending on the chosen authentication method.
        If the data is binary, then it is base64 encoded.
      type: string

    consentStatus:
      description: |
        This is the overall lifecycle status of the consent.

        Valid values are:
          - 'received': The consent data have been received and are technically correct.
            The data is not authorised yet.
          - 'rejected': The consent data have been rejected e.g. since no successful authorisation has taken place.
          - 'valid': The consent is accepted and valid for GET account data calls and others as specified in the consent object.
          - 'revokedByPsu': The consent has been revoked by the PSU towards the ASPSP.
          - 'expired': The consent expired.
          - 'terminatedByTpp': The corresponding TPP has terminated the consent by applying the DELETE method to the consent resource.

        The ASPSP might add further codes. These codes then shall be contained in the ASPSP's documentation of the XS2A interface
        and has to be added to this API definition as well.
      type: string
      enum:
        - "received"
        - "rejected"
        - "valid"
        - "revokedByPsu"
        - "expired"
        - "terminatedByTpp"


    transactionFeeIndicator:
      description: |
        If equals 'true', the transaction will involve specific transaction cost as shown by the ASPSP in
        their public price list or as agreed between ASPSP and PSU.
        If equals 'false', the transaction will not involve additional specific transaction costs to the PSU.

      type: boolean

    recurringIndicator:
      description: |
        "true", if the consent is for recurring access to the account data.

        "false", if the consent is for one access to the account data.
      type: boolean
      example: false

    combinedServiceIndicator:
      description: |
        If "true" indicates that a payment initiation service will be addressed in the same "session".
      type: boolean
      example: false

    batchBookingPreferred:
      description: |
        If this element equals 'true', the PSU prefers only one booking entry.
        If this element equals 'false', the PSU prefers individual booking of all contained individual transactions.

        The ASPSP will follow this preference according to contracts agreed on with the PSU.
      type: boolean
      example: false

    scaMethods:
      description: |
        This data element might be contained, if SCA is required and if the PSU has a choice between different
        authentication methods.

        Depending on the risk management of the ASPSP this choice might be offered before or after the PSU
        has been identified with the first relevant factor, or if an access token is transported.

        If this data element is contained, then there is also an hyperlink of type 'startAuthorisationWithAuthenticationMethodSelection'
        contained in the response body.

        These methods shall be presented towards the PSU for selection by the TPP.

      type: array
      items:
        $ref: "#/components/schemas/authenticationObject"

    chosenScaMethod:
      # description: |
      #  This data element is only contained in the response if the APSPS has chosen the Embedded SCA Approach,
      #  if the PSU is already identified e.g. with the first relevant factor or alternatively an access token,
      #  if SCA is required and if the authentication method is implicitly selected.
      $ref: "#/components/schemas/authenticationObject"

    authenticationType:
      description: |
        Type of the authentication method.

        More authentication types might be added during implementation projects and documented in the ASPSP documentation.

          - 'SMS_OTP': An SCA method, where an OTP linked to the transaction to be authorised is sent to the PSU through a SMS channel.
          - 'CHIP_OTP': An SCA method, where an OTP is generated by a chip card, e.g. an TOP derived from an EMV cryptogram.
            To contact the card, the PSU normally needs a (handheld) device.
            With this device, the PSU either reads the challenging data through a visual interface like flickering or
            the PSU types in the challenge through the device key pad.
            The device then derives an OTP from the challenge data and displays the OTP to the PSU.
          - 'PHOTO_OTP': An SCA method, where the challenge is a QR code or similar encoded visual data
            which can be read in by a consumer device or specific mobile app.
            The device resp. the specific app than derives an OTP from the visual challenge data and displays
            the OTP to the PSU.
          - 'PUSH_OTP': An OTP is pushed to a dedicated authentication APP and displayed to the PSU.

      type: string
      enum:
        - "SMS_OTP"
        - "CHIP_OTP"
        - "PHOTO_OTP"
        - "PUSH_OTP"

    authenticationObject:
      description: |
        Authentication Object
      type: object
      required:
        - authenticationType
        - authenticationMethodId
      properties:
        authenticationType:
          $ref: "#/components/schemas/authenticationType"

        authenticationVersion:
          description: |
            Depending on the "authenticationType".
            This version can be used by differentiating authentication tools used within performing OTP generation in the same authentication type.
            This version can be referred to in the ASPSP?s documentation.
          type: string

        authenticationMethodId:
          $ref: "#/components/schemas/authenticationMethodId"

        name:
          description: |
            This is the name of the authentication method defined by the PSU in the Online Banking frontend of the ASPSP.
            Alternatively this could be a description provided by the ASPSP like "SMS OTP on phone +49160 xxxxx 28".
            This name shall be used by the TPP when presenting a list of authentication methods to the PSU, if available.
          type: string
          example: "SMS OTP on phone +49160 xxxxx 28"

        explanation:
          description: |
            Detailed information about the SCA method for the PSU.
          type: string
          example: Detailed information about the SCA method for the PSU.


    signingBasket:
      description: |
        JSON Body of a establish signing basket request
      type: object
      required:
        - paymentIds
        - consentIds
      properties:
        paymentIds:
          $ref: "#/components/schemas/paymentIdList"
        consentIds:
          $ref: "#/components/schemas/consentIdList"

    challengeData:
      description: |
        It is contained in addition to the data element 'chosenScaMethod' if challenge data is needed for SCA.
        In rare cases this attribute is also used in the context of the 'startAuthorisationWithPsuAuthentication' link.
      type: object
      properties:
        image:
          type: string
          format: byte
          description: |
            PNG data (max. 512 kilobyte) to be displayed to the PSU,
            Base64 encoding, cp. [RFC4648].
            This attribute is used only, when PHOTO_OTP or CHIP_OTP
            is the selected SCA method.
        data:
          type: string
          description: String challenge data
        imageLink:
          type: string
          format: url
          description: A link where the ASPSP will provides the challenge image for the TPP.
        otpMaxLength:
          type: integer
          description: The maximal length for the OTP to be typed in by the PSU.
        otpFormat:
          type: string
          description: The format type of the OTP to be typed in. The admitted values are "characters" or "integer".
          enum:
            - "characters"
            - "integer"
        additionalInformation:
          type: string
          description: |
            Additional explanation for the PSU to explain
            e.g. fallback mechanism for the chosen SCA method.
            The TPP is obliged to show this to the PSU.

    hrefType:
      description: Link to a resource
      type: string
      example: "/v1/payments/sepa-credit-transfers/1234-wertiq-983"


    messageCodeTextUnspecific:
      type: string
      enum:
        - "CERTIFICATE_INVALID"
        - "CERTIFICATE_EXPIRED"
        - "CERTIFICATE_BLOCKED"
        - "CERTIFICATE_REVOKED"
        - "CERTIFICATE_MISSING"
        - "SIGNATURE_INVALID"
        - "SIGNATURE_MISSING"
        - "FORMAT_ERROR"
        - "PARAMETER_NOT_SUPPORTED"
        - "PSU_CREDENTIALS_INVALID"
        - "SERVICE_INVALID"
        - "SERVICE_BLOCKED"
        - "CORPORATE_ID_INVALID"
        - "CONSENT_UNKNOWN"
        - "CONSENT_INVALID"
        - "CONSENT_EXPIRED"
        - "TOKEN_UNKNOWN"
        - "TOKEN_INVALID"
        - "TOKEN_EXPIRED"
        - "RESOURCE_UNKNOWN"
        - "RESOURCE_EXPIRED"
        - "TIMESTAMP_INVALID"
        - "PERIOD_INVALID"
        - "SCA_METHOD_UNKNOWN"

    messageCodeTextPisSpecific:
      type: string
      enum:
        - "PRODUCT_INVALID"
        - "PRODUCT_UNKNOWN"
        - "PAYMENT_FAILED"
        - "REQUIRED_KID_MISSING"
        - "EXECUTION_DATE_INVALID"

    messageCodeTextAisSpecific:
      type: string
      enum:
        - "CONSENT_INVALID"
        - "SESSIONS_NOT_SUPPORTED"
        - "ACCESS_EXCEEDED"
        - "REQUESTED_FORMATS_INVALID"

    messageCodeTextPiisSpecific:
      type: string
      enum:
        - "CARD_INVALID"
        - "NO_PIIS_ACTIVATION"

    authorisationsList:
      description: An array of all authorisationIds
      type: array
      items:
        $ref: "#/components/schemas/authorisationId"

    authorisations:
      description: An array of all authorisationIds
      type: object
      required:
        - authorisationIds
      properties:
        authorisationIds:
          $ref: "#/components/schemas/authorisationsList"

    accountReferenceIban:
      type: object
      description: |
        Reference to an account by the Primary Account Number (PAN) in form of an IBAN.
      required:
        - iban
      properties:
        iban:
          $ref: "#/components/schemas/iban"
        currency:
          $ref: "#/components/schemas/currencyCode"

    accountReferenceBban:
      type: object
      description: |
        Reference to an Account.

        This data elements is used for payment accounts which have no IBAN.
      required:
        - bban
      properties:
        bban:
          $ref: "#/components/schemas/bban"
        currency:
          $ref: "#/components/schemas/currencyCode"

    accountReferencePan:
      type: object
      description: |
        Reference to an account by the Primary Account Number (PAN) of a card,
        can be tokenised by the ASPSP due to PCI DSS requirements.
      required:
        - pan
      properties:
        pan:
          $ref: "#/components/schemas/pan"
        currency:
          $ref: "#/components/schemas/currencyCode"

    accountReferenceMaskedPan:
      type: object
      description: |
        Reference to an account by the Primary Account Number (PAN) of a card in a masked form.
      required:
        - maskedPan
      properties:
        maskedPan:
          $ref: "#/components/schemas/maskedPan"
        currency:
          $ref: "#/components/schemas/currencyCode"

    accountReferenceMsisdn:
      type: object
      description: |
        An alias to access a payment account via a registered mobile phone number.
      required:
        - msisdn
      properties:
        msisdn:
          $ref: "#/components/schemas/msisdn"
        currency:
          $ref: "#/components/schemas/currencyCode"

    balanceType:
      description: |
        The following balance types are defined:
          - "closingBooked":
            Balance of the account at the end of the pre-agreed account reporting period.
            It is the sum of the opening booked balance at the beginning of the period and all entries booked
            to the account during the pre-agreed account reporting period.

            For card-accounts, this is composed of

              - invoiced, but not yet paid entries

          - "expected":
            Balance composed of booked entries and pending items known at the time of calculation,
            which projects the end of day balance if everything is booked on the account and no other entry is posted.

            For card accounts, this is composed of
              - invoiced, but not yet paid entries,
              - not yet invoiced but already booked entries and
              - pending items (not yet booked)

          - "authorised":
            The expected balance together with the value of a pre-approved credit line the ASPSP makes permanently available to the user.

            For card-accounts:

            "money to spend with the value of a pre-approved credit limit on the card account"

          - "openingBooked":
            Book balance of the account at the beginning of the account reporting period.
            It always equals the closing book balance from the previous report.
          - "interimAvailable":
            Available balance calculated in the course of the account servicer’s business day,
            at the time specified, and subject to further changes during the business day.
            The interim balance is calculated on the basis of booked credit and debit items during the calculation
            time/period specified.

            For card-accounts, this is composed of
              - invoiced, but not yet paid entries,
              - not yet invoiced but already booked entries
          - "forwardAvailable":
            Forward available balance of money that is at the disposal of the account owner on the date specified.
          - "nonInvoiced":
            Only for card accounts, to be checked yet. #TODO CARD-ACCOUNTS nonInvoiced New in spec. detailes needed
          - "available": #TODO MISSING IN SPEC: 'available' New in spec. Detailes needed.
      type: string
      enum:
          - "closingBooked"
          - "expected"
          - "authorised"
          - "openingBooked"
          - "interimAvailable"
          - "forwardAvailable"
          - "nonInvoiced"
          - "available"

    accountAccess:
      description: |
        Requested access services for a consent.
      type: object
      properties:
        accounts:
          description: |
            Is asking for detailed account information.

            If the array is empty, the TPP is asking for an accessible account list.
            This may be restricted in a PSU/ASPSP authorization dialogue.
            If the array is empty, also the arrays for balances or transactions shall be empty, if used.
          type: array
          items:
            #oneOf:
            #Sparkasse Bank Malta plc modified
              $ref: "#/components/schemas/accountReferenceIban"
              #- $ref: "#/components/schemas/accountReferenceBban"
              #- $ref: "#/components/schemas/accountReferencePan"
              #- $ref: "#/components/schemas/accountReferenceMaskedPan"
              #- $ref: "#/components/schemas/accountReferenceMsisdn"
        balances:
          description: |
            Is asking for balances of the addressed accounts.

            If the array is empty, the TPP is asking for the balances of all accessible account lists.
            This may be restricted in a PSU/ASPSP authorization dialogue.
            If the array is empty, also the arrays for accounts or transactions shall be empty, if used.
          type: array
          items:
            #oneOf:
            #Sparkasse Bank Malta plc modified
              $ref: "#/components/schemas/accountReferenceIban"
              #- $ref: "#/components/schemas/accountReferenceBban"
              #- $ref: "#/components/schemas/accountReferencePan"
              #- $ref: "#/components/schemas/accountReferenceMaskedPan"
              #- $ref: "#/components/schemas/accountReferenceMsisdn"
        transactions:
          description: |
            Is asking for transactions of the addressed accounts.

            If the array is empty, the TPP is asking for the transactions of all accessible account lists.
            This may be restricted in a PSU/ASPSP authorization dialogue.
            If the array is empty, also the arrays for accounts or balances shall be empty, if used.
          type: array
          items:
            #oneOf:
            #Sparkasse Bank Malta plc modified
              $ref: "#/components/schemas/accountReferenceIban"
              #- $ref: "#/components/schemas/accountReferenceBban"
              #- $ref: "#/components/schemas/accountReferencePan"
              #- $ref: "#/components/schemas/accountReferenceMaskedPan"
              #- $ref: "#/components/schemas/accountReferenceMsisdn"
        availableAccounts:
          description: |
            Not supported.

            Only the values "allAccounts" or "allAccountsWithBalances" is admitted.
            #Sparkasse Bank Malta plc modified not supported
          type: string
          enum:
            - "allAccounts"
            - "allAccountsWithBalances"
        allPsd2:
          description: |
            Not supported.
            Optional if supported by API provider.

            Only the value "allAccounts" is admitted.
            #Sparkasse Bank Malta plc modified not supported
          type: string
          enum:
            - "allAccounts"

    cashAccountType:
      description: |
        ExternalCashAccountType1Code from ISO 20022.
      type: string

    accountStatus:
      description: |
        Account status. The value is one of the following:
          - "enabled": account is available
          - "deleted": account is terminated
          - "blocked": account is blocked e.g. for legal reasons
        If this field is not used, than the account is available in the sense of this specification.
      type: string
      enum:
        - "enabled"
        - "deleted"
        - "blocked"

    accountDetails:
      description: |
        The ASPSP shall give at least one of the account reference identifiers:
          - iban
          - bban
          - pan
          - maskedPan
          - msisdn
        If the account is a multicurrency account currency code in "currency" is set to "XXX".
      type: object
      properties:
        resourceId:
          description: This shall be filled, if addressable resource are created by the ASPSP on the /accounts or /card-accounts endpoint.
          type: string
          maxLength: 35
        iban:
          $ref: "#/components/schemas/iban"
        bban:
          $ref: "#/components/schemas/bban"
        msisdn:
          $ref: "#/components/schemas/msisdn"
        currency:
          $ref: "#/components/schemas/currencyCode"
        name:
          description: Name of the account given by the bank or the PSU in online-banking.
          type: string
          maxLength: 35
        product:
          description: Product name of the bank for this account, proprietary definition.
          type: string
          maxLength: 35
        cashAccountType:
          $ref: "#/components/schemas/cashAccountType"
        status:
          $ref: "#/components/schemas/accountStatus"
        bic:
          $ref: "#/components/schemas/bicfi"
        linkedAccounts:
          description: Case of a set of pending card transactions, the APSP will provide the relevant cash account the card is set up on.
          type: string
          maxLength: 70
        usage:
          description: |
            Specifies the usage of the account
              * PRIV: private personal account
              * ORGA: professional account
          type: string
          maxLength: 140
          enum:
            - "PRIV"
            - "ORGA"
        details:
          description: |
            Specifications that might be provided by the ASPSP
              - characteristics of the account
              - characteristics of the relevant card
          type: string
          maxLength: 140
        balances:
          $ref: "#/components/schemas/balanceList"
        _links:
          $ref: "#/components/schemas/_linksAccountDetails"


#TODO INCLUDED FOR LATER USE WITH CARD-ACCOUNTS
#    cardAccountDetails:
#      description: |
#        The ASPSP shall give at least one of the account reference identifiers:
#          - pan
#          - maskedPan
#      type: object
#      properties:
#        resourceId:
#          description: This shall be filled, if addressable resource are created by the ASPSP on the /accounts or /card-accounts endpoint.
#          type: string
#          maxLength: 35
#        pan:
#          $ref: "#/components/schemas/pan"
#        maskedPan:
#          $ref: "#/components/schemas/maskedPan"
#        currency:
#          $ref: "#/components/schemas/currencyCode"
#        name:
#          description: Name of the account given by the bank or the PSU in online-banking.
#          type: string
#          maxLength: 35
#        product:
#          description: Product name of the bank for this account, proprietary definition.
#          type: string
#          maxLength: 35
#        cardAccountType:
#          $ref: "#/components/schemas/cashAccountType"
#        status:
#          $ref: "#/components/schemas/accountStatus"
#        linkedAccounts:
#          description: Case of a set of pending card transactions, the APSP will provide the relevant cash account the card is set up on.
#          type: string
#          maxLength: 70
#        usage:
#          description: |
#            Specifies the usage of the account
#              * PRIV: private personal account
#              * ORGA: professional account
#          type: string
#          maxLength: 140
#          enum:
#            - "PRIV"
#            - "ORGA"
#        details:
#          description: |
#            Specifications that might be provided by the ASPSP
#              - characteristics of the account
#              - characteristics of the relevant card
#          type: string
#          maxLength: 140
#        creditLimit:
#          $ref: "#/components/schemas/amount"
#        balances:
#          $ref: "#/components/schemas/balanceList"
#        _links:
#          $ref: "#/components/schemas/_linksAccountDetails"


    accountList:
      description: |
        List of accounts with details.
      type: object
      required:
        - accounts
      properties:
        accounts:
          type: array
          items:
            $ref: "#/components/schemas/accountDetails"


    accountReport:
      description: JSON based account report.
      type: object
      required:
        - booked
        - _links
      properties:
        booked:
          $ref: "#/components/schemas/transactionList"
        pending:
          $ref: "#/components/schemas/transactionList"
        _links:
          $ref: "#/components/schemas/_linksAccountReport"


    transactionList:
      description: Array of transaction details
      type: array
      items:
        $ref: "#/components/schemas/transactionDetails"


    transactionDetails:
      description: Transaction details
      type: object
      required:
        - transactionAmount
      properties:
        transactionId:
          description: |
            the Transaction Id can be used as access-ID in the API, where more details on an transaction is offered.
            If this data attribute is provided this shows that the AIS can get access on more details about this
            transaction using the GET Transaction Details Request
          type: string
        entryReference:
          description: |
            Is the identification of the transaction as used e.g. for reference for deltafunction on application level.
            The same identification as for example used within camt.05x messages.
          type: string
          maxLength: 35
        endToEndId:
          description: Unique end to end identity.
          type: string
          maxLength: 35
        mandateId:
          description: Identification of Mandates, e.g. a SEPA Mandate ID.
          type: string
          maxLength: 35
        checkId:
          description: Identification of a Cheque.
          type: string
          maxLength: 35
        creditorId:
          description: Identification of Creditors, e.g. a SEPA Creditor ID.
          type: string
          maxLength: 35
        bookingDate:
          $ref: "#/components/schemas/bookingDate"
        valueDate:
          description: The Date at which assets become available to the account owner in case of a credit.
          type: string
          format: date
        transactionAmount:
          $ref: "#/components/schemas/amount"
        exchangeRate:
          $ref: "#/components/schemas/exchangeRateList"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        ultimateCreditor:
          $ref: "#/components/schemas/ultimateCreditor"
        debtorName:
          $ref: "#/components/schemas/debtorName"
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        ultimateDebtor:
          $ref: "#/components/schemas/ultimateDebtor"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
        remittanceInformationStructured:
          description: |
            Reference as contained in the structured remittance reference structure (without the surrounding XML structure).

            Different from other places the content is containt in plain form not in form of a structered field.
          type: string
          maxLength: 140
        purposeCode:
          $ref: "#/components/schemas/purposeCode"
        bankTransactionCode:
          $ref: "#/components/schemas/bankTransactionCode"
        proprietaryBankTransactionCode:
          $ref: "#/components/schemas/proprietaryBankTransactionCode"
        _links:
          $ref: "#/components/schemas/_linksTransactionDetails"


#TODO INCLUDED FOR LATER USE WITH CARD-ACCOUNTS
#    cardTransaction:
#      description: TODO CARD-ACCOUNTS Description cardTransaction
#      type: object
#      required:
#        - transactionAmount
#      properties:
#        entryReference:
#          $ref: "#/components/schemas/entryReference"
#        cardTransactionId:
#          $ref: "#/components/schemas/cardTransactionId"
#        terminalId:
#          $ref: "#/components/schemas/terminalId"
#        transactionDate:
#          $ref: "#/components/schemas/transactionDate"
#        bookingDate:
#          $ref: "#/components/schemas/bookingDate"
#        transactionAmount:
#          $ref: "#/components/schemas/amount"
#        exchangeRate:
#          $ref: "#/components/schemas/exchangeRateList"
#        instructedAmount:
#          $ref: "#/components/schemas/amount"
#        markupFee:
#          $ref: "#/components/schemas/amount" #TODO CARD-ACCOUNTS Check Type. NO Type for markupFee in Spec. defined
#        cardAcceptorId:
#          type: string
#          maxLength: 35
#        cardAcceptorAddress:
#          $ref: "#/components/schemas/address"
#        merchantCategoryCode:
#          $ref: "#/components/schemas/merchantCategoryCode"
#        maskedPAN:
#          $ref: "#/components/schemas/maskedPan"
#        PAN:
#          $ref: "#/components/schemas/pan"
#        transactionDetails:
#          type: string
#          maxLength: 140
#          #TODO CARD-ACCOUNTS Check At other places there is a complex type.
#        status:
#          $ref: "#/components/schemas/cardTransactionStatus"
#          #TODO CARD-ACCOUNTS No final definition of cardTransactionStatus in spec contained
#        invoiced:
#          type: boolean
#        proprietaryBankTransactionCode:
#          $ref: "#/components/schemas/proprietaryBankTransactionCode"

    exchangeRateList:
      description: Array of exchange rates
      type: array
      items:
        $ref: "#/components/schemas/exchangeRate"


    exchangeRate:
      description: Exchange Rate
      type: object
      required:
        - currencyFrom
        - rateFrom
        - currencyTo
        - rateTo
        - rateDate
      properties:
        currencyFrom:
          $ref: "#/components/schemas/currencyCode"
        rateFrom:
          type: string
        currencyTo:
          $ref: "#/components/schemas/currencyCode"
        rateTo:
          type: string
        rateDate:
          type: string
          format: date
        rateContract:
          type: string


    balance:
      description: |
        A single balance element
      type:
        object
      required:
        - balanceAmount
        - balanceType
      properties:
        balanceAmount:
          $ref: "#/components/schemas/amount"
        balanceType:
          $ref: "#/components/schemas/balanceType"
        lastChangeDateTime:
          description: |
            This data element might be used to indicate e.g. with the expected or booked balance that no action is known
            on the account, which is not yet booked.
          type: string
          format: date-time
        referenceDate:
          description: Reference date of the balance
          type: string
          format: date
        lastCommittedTransaction:
          description: |
            "entryReference" of the last commited transaction to support the TPP in identifying whether all
            PSU transactions are already known.
          type: string
          maxLength: 35


    balanceList:
      description: |
        A list of balances regarding this account, e.g. the current balance, the last booked balance.
        The list migght be restricted to the current ballance.
      type: array
      items:
        $ref: "#/components/schemas/balance"


    cancellationList:
      description: An array of all cancellationIds connected to this resource.
      type: array
      items:
        $ref: "#/components/schemas/cancellationId"


    bicfi:
      description: |
        BICFI
      type: string
      pattern: "[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"
      example: "AAAADEBBXXX"


    pan:
      description: |
        Primary Account Number according to ISO/IEC 7812.
      type: string
      maxLength: 35
      #According to ISO the following should be valid.
      #maxLength: 19
      #minLength: 8
      #pattern: "[0-9]{8,19}"
      example: "5409050000000000"


    maskedPan:
      description: |
        Masked Primary Account Number
      type: string
      maxLength: 35
      example: "123456xxxxxx1234"


    bban:
      description: |
        Basic Bank Account Number (BBAN) Identifier

        This data element can be used in the body of the Consent Request
          Message for retrieving Account access Consent from this Account. This
          data elements is used for payment Accounts which have no IBAN.
          ISO20022: Basic Bank Account Number (BBAN).

          Identifier used nationally by financial institutions, i.e., in individual countries,
          generally as part of a National Account Numbering Scheme(s),
          which uniquely identifies the account of a customer.
      type: string
      pattern: "[a-zA-Z0-9]{1,30}"
      example: "BARC12345612345678"


    msisdn:
      type: string
      maxLength: 35
      description: Mobile phone number.
      example: "+49 170 1234567"


    iban:
      type: string
      description: IBAN of an account
      pattern: "[A-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}"
      example: "FR7612345987650123456789014"


    address:
      type: object
      required:
        - country
        # Sparkasse Bank Malta plc Modified
        - street
        - buildingnNumber
        - city
        - postalCode
      properties:
        street:
          type: string
          maxLength: 70
        buildingNumber:
          type: string
          #Sparkasse Bank Malta plc Modified
          maxLength: 10
        city:
          type: string
          #Sparkasse Bank Malta plc Modified
          maxLength: 35
        postalCode:
          type: string
          #Sparkasse Bank Malta plc Modified
          maxLength: 15
        country:
          $ref: "#/components/schemas/countryCode"
      example:
        {
          street: "rue blue",
          buildingnNumber: "89",
          city: "Paris",
          postalCode: "75000",
          country: "FR"
        }


    countryCode:
      description: ISO 3166 ALPHA2 country code
      type: string
      pattern: "[A-Z]{2}"
      example: "SE"


    amount:
      type: object
      required:
        - currency
        - amount
      properties:
        currency:
          $ref: "#/components/schemas/currencyCode"
        amount:
          $ref: "#/components/schemas/amountValue"
      example:
        {
          "currency": "EUR",
          "amount": "123"
        }


    currencyCode:
      description: |
        ISO 4217 Alpha 3 currency code
      type: string
      pattern: "[A-Z]{3}"
      example: "EUR"


    amountValue:
      description: |
        The amount given with fractional digits, where fractions must be compliant to the currency definition.
        Up to 14 significant figures. Negative amounts are signed by minus.
        The decimal separator is a dot.

        **Example:**
        Valid representations for EUR with up to two decimals are:

          * 1056
          * 5768.2
          * -1.50
          * 5877.78
      type: string
      pattern: "-?[0-9]{1,14}(\\.[0-9]{1,3})?"
      example: "5877.78"


    remittanceInformationStructured:
      description: |
        Structured remittance information
      type: object
      required:
        - reference
      properties:
        reference:
          type: string
          maxLength: 35
        referenceType:
          type: string
          maxLength: 35
        referenceIssuer:
          type: string
          maxLength: 35


    remittanceInformationUnstructured:
      description: |
        Unstructured remittance information
      type: string
      maxLength: 140
      example: "Ref Number Merchant"


    #####################################################
    # Predefined Text Formats
    #####################################################

    purposeCode:
      description: |
        ExternalPurpose1Code from ISO 20022.

        Values from ISO 20022 External Code List ExternalCodeSets_1Q2018 June 2018.

      type: string
      enum:
        - "BKDF"
        - "BKFE"
        - "BKFM"
        - "BKIP"
        - "BKPP"
        - "CBLK"
        - "CDCB"
        - "CDCD"
        - "CDCS"
        - "CDDP"
        - "CDOC"
        - "CDQC"
        - "ETUP"
        - "FCOL"
        - "MTUP"
        - "ACCT"
        - "CASH"
        - "COLL"
        - "CSDB"
        - "DEPT"
        - "INTC"
        - "LIMA"
        - "NETT"
        - "BFWD"
        - "CCIR"
        - "CCPC"
        - "CCPM"
        - "CCSM"
        - "CRDS"
        - "CRPR"
        - "CRSP"
        - "CRTL"
        - "EQPT"
        - "EQUS"
        - "EXPT"
        - "EXTD"
        - "FIXI"
        - "FWBC"
        - "FWCC"
        - "FWSB"
        - "FWSC"
        - "MARG"
        - "MBSB"
        - "MBSC"
        - "MGCC"
        - "MGSC"
        - "OCCC"
        - "OPBC"
        - "OPCC"
        - "OPSB"
        - "OPSC"
        - "OPTN"
        - "OTCD"
        - "REPO"
        - "RPBC"
        - "RPCC"
        - "RPSB"
        - "RPSC"
        - "RVPO"
        - "SBSC"
        - "SCIE"
        - "SCIR"
        - "SCRP"
        - "SHBC"
        - "SHCC"
        - "SHSL"
        - "SLEB"
        - "SLOA"
        - "SWBC"
        - "SWCC"
        - "SWPT"
        - "SWSB"
        - "SWSC"
        - "TBAS"
        - "TBBC"
        - "TBCC"
        - "TRCP"
        - "AGRT"
        - "AREN"
        - "BEXP"
        - "BOCE"
        - "COMC"
        - "CPYR"
        - "GDDS"
        - "GDSV"
        - "GSCB"
        - "LICF"
        - "MP2B"
        - "POPE"
        - "ROYA"
        - "SCVE"
        - "SERV"
        - "SUBS"
        - "SUPP"
        - "TRAD"
        - "CHAR"
        - "COMT"
        - "MP2P"
        - "ECPG"
        - "ECPR"
        - "ECPU"
        - "EPAY"
        - "CLPR"
        - "COMP"
        - "DBTC"
        - "GOVI"
        - "HLRP"
        - "HLST"
        - "INPC"
        - "INPR"
        - "INSC"
        - "INSU"
        - "INTE"
        - "LBRI"
        - "LIFI"
        - "LOAN"
        - "LOAR"
        - "PENO"
        - "PPTI"
        - "RELG"
        - "RINP"
        - "TRFD"
        - "FORW"
        - "FXNT"
        - "ADMG"
        - "ADVA"
        - "BCDM"
        - "BCFG"
        - "BLDM"
        - "BNET"
        - "CBFF"
        - "CBFR"
        - "CCRD"
        - "CDBL"
        - "CFEE"
        - "CGDD"
        - "CORT"
        - "COST"
        - "CPKC"
        - "DCRD"
        - "DSMT"
        - "DVPM"
        - "EDUC"
        - "FACT"
        - "FAND"
        - "FCPM"
        - "FEES"
        - "GOVT"
        - "ICCP"
        - "IDCP"
        - "IHRP"
        - "INSM"
        - "IVPT"
        - "MCDM"
        - "MCFG"
        - "MSVC"
        - "NOWS"
        - "OCDM"
        - "OCFG"
        - "OFEE"
        - "OTHR"
        - "PADD"
        - "PTSP"
        - "RCKE"
        - "RCPT"
        - "REBT"
        - "REFU"
        - "RENT"
        - "REOD"
        - "RIMB"
        - "RPNT"
        - "RRBN"
        - "RVPM"
        - "SLPI"
        - "SPLT"
        - "STDY"
        - "TBAN"
        - "TBIL"
        - "TCSC"
        - "TELI"
        - "TMPG"
        - "TPRI"
        - "TPRP"
        - "TRNC"
        - "TRVC"
        - "WEBI"
        - "ANNI"
        - "CAFI"
        - "CFDI"
        - "CMDT"
        - "DERI"
        - "DIVD"
        - "FREX"
        - "HEDG"
        - "INVS"
        - "PRME"
        - "SAVG"
        - "SECU"
        - "SEPI"
        - "TREA"
        - "UNIT"
        - "FNET"
        - "FUTR"
        - "ANTS"
        - "CVCF"
        - "DMEQ"
        - "DNTS"
        - "HLTC"
        - "HLTI"
        - "HSPC"
        - "ICRF"
        - "LTCF"
        - "MAFC"
        - "MARF"
        - "MDCS"
        - "VIEW"
        - "CDEP"
        - "SWFP"
        - "SWPP"
        - "SWRS"
        - "SWUF"
        - "ADCS"
        - "AEMP"
        - "ALLW"
        - "ALMY"
        - "BBSC"
        - "BECH"
        - "BENE"
        - "BONU"
        - "CCHD"
        - "COMM"
        - "CSLP"
        - "GFRP"
        - "GVEA"
        - "GVEB"
        - "GVEC"
        - "GVED"
        - "GWLT"
        - "HREC"
        - "PAYR"
        - "PEFC"
        - "PENS"
        - "PRCP"
        - "RHBS"
        - "SALA"
        - "SSBE"
        - "LBIN"
        - "LCOL"
        - "LFEE"
        - "LMEQ"
        - "LMFI"
        - "LMRK"
        - "LREB"
        - "LREV"
        - "LSFL"
        - "ESTX"
        - "FWLV"
        - "GSTX"
        - "HSTX"
        - "INTX"
        - "NITX"
        - "PTXP"
        - "RDTX"
        - "TAXS"
        - "VATX"
        - "WHLD"
        - "TAXR"
        - "B112"
        - "BR12"
        - "TLRF"
        - "TLRR"
        - "AIRB"
        - "BUSB"
        - "FERB"
        - "RLWY"
        - "TRPT"
        - "CBTV"
        - "ELEC"
        - "ENRG"
        - "GASB"
        - "NWCH"
        - "NWCM"
        - "OTLC"
        - "PHON"
        - "UBIL"
        - "WTER"


    bankTransactionCode:
      description: |
        Bank transaction code as used by the ASPSP and using the sub elements of this structured code defined by ISO 20022.

        This code type is concatenating the three ISO20022 Codes
          * Domain Code,
          * Family Code, and
          * SubFamiliy Code
        by hyphens, resulting in “DomainCode”-“FamilyCode”-“SubFamilyCode”.
      type: string
      example: "PMNT-RCDT-ESCT"


    proprietaryBankTransactionCode:
      description: |
        Proprietary bank transaction code as used within a community or within an ASPSP e.g.
        for MT94x based transaction reports.
      type: string
      maxLength: 35


    frequencyCode:
      description: |
        The following codes from the "EventFrequency7Code" of ISO 20022 are supported.
        - "Daily"
        - "Weekly"
        - "EveryTwoWeeks"
        - "Monthly"
        - "EveryTwoMonths"
        - "Quarterly"
        - "SemiAnnual"
        - "Annual"
      type: string
      enum:
        - "Daily"
        - "Weekly"
        - "EveryTwoWeeks"
        - "Monthly"
        - "EveryTwoMonths"
        - "Quarterly"
        - "SemiAnnual"
        - "Annual"


    frequencyPerDay:
      description: |
        Ignored for now - Sparkasse Bank Malta plc requests the TPP to download information not more often than required. Subject to limitations at a later point in time.

        This field indicates the requested maximum frequency for an access per day.
        For a one-off access, this attribute is set to "1".
      type: integer
      example: 4


    dayOfExecution:
      description: |
        Day of execution as string in the form DD.

        Thes string consists always of two characters.

        31 is ultimo of the month.
      type: string
      enum:
        - "01"
        - "02"
        - "03"
        - "04"
        - "05"
        - "06"
        - "07"
        - "08"
        - "09"
        - "10"
        - "11"
        - "12"
        - "13"
        - "14"
        - "15"
        - "16"
        - "17"
        - "18"
        - "19"
        - "20"
        - "21"
        - "22"
        - "23"
        - "24"
        - "25"
        - "26"
        - "27"
        - "28"
        - "29"
        - "30"
        - "31"


    executionRule:
      description: |
        "following" or "preceeding" supported as values.
        This data attribute defines the behavior when recurring payment dates falls on a weekend or bank holiday.
        The payment is then executed either the "preceeding" or "following" working day.
        ASPSP might reject the request due to the communicated value, if rules in Online-Banking are not supporting
        this execution rule.
      type: string
      enum:
        - "following"
        - "preceeding"

    psuData:
      description: PSU Data for Update PSU Authentication.
      type: object
      required:
        - password
      properties:
        password:
          description: Password
          type: string

    psuMessageText:
      description: Text to be displayed to the PSU
      type: string
      maxLength: 512

    creditorName:
      description: Creditor Name
      type: string
      maxLength: 70
      example: "Creditor Name"

    debtorName:
      description: Debtor Name
      type: string
      maxLength: 70
      example: "Debtor Name"

    ultimateDebtor:
      description: Ultimate Debtor
      type: string
      maxLength: 70
      example: "Ultimate Debtor"

    ultimateCreditor:
      description: Ultimate Creditor
      type: string
      maxLength: 70
      example: "Ultimate Creditor"

    #####################################################
    # Predefined Date and Time Related Formats
    #####################################################

    transactionDate:
      description: Date of the actual card transaction
      type: string
      format: date

    startDate:
      description: |
        The first applicable day of execution starting from this date is the first payment.
      type: string
      format: date

    endDate:
      description: |
        The last applicable day of execution
        If not given, it is an infinite standing order.
      type: string
      format: date

    bookingDate:
      description: |
        The Date when an entry is posted to an account on the ASPSPs books.
      type: string
      format: date

    validUntil:
      description: |
        This parameter is requesting a valid until date for the requested consent.
        The content is the local ASPSP date in ISO-Date Format, e.g. 2017-10-30.

        If a maximal available date is requested, a date in far future is to be used: "9999-12-31".
        The consent object to be retrieved by the GET Consent Request will contain the adjusted date.
      type: string
      format: date
      example: "2020-12-31"

    lastActionDate:
      description: |
        This date is containing the date of the last action on the consent object either through
        the XS2A interface or the PSU/ASPSP interface having an impact on the status.
      type: string
      format: date
      example: "2018-07-01"


#####################################################
# Content of Request Bodies
#####################################################



    #####################################################
    # Content of Request Bodies - JSON
    #####################################################

    paymentInitiationSct_json:
      description: |
        Body for a SCT payment initation.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
        #Sparkasse Bank Malta plc Modified! remittanceInformationUnstructured are mandadory
        - remittanceInformationUnstructured
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
         # oneOf:
          #Sparkasse Bank Malta plc Modified! Only an IBAN is allowed
             $ref: "#/components/schemas/accountReferenceIban"
           # - $ref: "#/components/schemas/accountReferenceBban"
           # - $ref: "#/components/schemas/accountReferencePan"
           # - $ref: "#/components/schemas/accountReferenceMaskedPan"
           # - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
         # oneOf:
           #Sparkasse Bank Malta plc Modified! Only an IBAN is allowed
             $ref: "#/components/schemas/accountReferenceIban"
           # - $ref: "#/components/schemas/accountReferenceBban"
           # - $ref: "#/components/schemas/accountReferencePan"
           # - $ref: "#/components/schemas/accountReferenceMaskedPan"
           # - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          $ref: "#/components/schemas/remittanceInformationUnstructured"
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate:
#          type: string
#          format: date
#        requestedExecutionTime:
#          type: string
#          format: date-time

    paymentInitiationSctInst_json:
      description: |
        Body for a SCT INST payment initation.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time

    paymentInitiationTarget2_json:
      description: |
        Body for a TARGET-2 payment initation.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
        #Sparkasse Bank Malta plc Modified!
        - creditorAddress
        - remittanceInformationUnstructured
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          #oneOf:
            #Sparkasse Bank Malta plc Modified! Only an IBAN is allowed. According to spec.:Exactly one of the attributes defined as "conditional" shall be used
             $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          #Sparkasse Bank Malta plc Modified! Only an IBAN is allowed
          #oneOf:
             $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time

    paymentInitiationCrossBorder_json:
      description: |
        JSON body for a cross-border payment initation.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
         #Sparkasse Bank Malta plc Modified!
        - creditorAddress
        - remittanceInformationStructured
      properties:
#        endToEndIdentification: # N.A.
#          type: string
#          maxLength: 35
        debtorAccount:
          #oneOf:
            #Sparkasse Bank Malta plc Modified!
             $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            #Sparkasse Bank Malta plc Modified!
             - $ref: "#/components/schemas/accountReferenceIban"
             - $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode:  # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time


    paymentInitiationSctBulkElement_json:
      description: |
        Body for a bulk SCT payment initation.
      type: object
      required:
        - instructedAmount
        - creditorAccount
        - creditorName
        #Sparkasse Bank Malta plc Modified!
        - remittanceInformationUnstructured
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          #oneOf:
            #Sparkasse Bank Malta plc Modified!
             $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          $ref: "#/components/schemas/remittanceInformationUnstructured"
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"

    paymentInitiationSctInstBulkElement_json:
      description: |
        Body for a SCT INST payment initation.
      type: object
      required:
        - instructedAmount
        - creditorAccount
        - creditorName
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"

    paymentInitiationTarget2BulkElement_json:
      description: |
        Body for a bulk TARGET-2 payment initation.
      type: object
      required:
        - instructedAmount
        - creditorAccount
        - creditorName
        # Sparkasse Bank Malta plc modified
        - creditorAddress
        - remittanceInformationUnstructured
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          #oneOf:
            #Sparkasse Bank Malta plc Modified!
             $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"

    paymentInitiationCrossBorderBulkElement_json:
      description: |
        JSON body for a cross-border payment initation.
      type: object
      required:
        - instructedAmount
        - creditorAccount
        - creditorName
        # Sparkasse Bank Malta plc Modified!
        - creditorAddress
        - remittanceInformationUnstructured
      properties:
#        endToEndIdentification: # N.A.
#          type: string
#          maxLength: 35
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          #oneOf:
           #Sparkasse Bank Malta plc Modified!
             $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode:  # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"


    periodicPaymentInitiationSct_json:
      description: |
        JSON Body for a periodic SCT payment initation.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
        - startDate
        - frequency
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          $ref: "#/components/schemas/remittanceInformationUnstructured"
#        remittanceInformationStructured:  # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        #Additional Information for periodic payments
        startDate:
          $ref: "#/components/schemas/startDate"
        endDate:
          $ref: "#/components/schemas/endDate"
        executionRule:
          $ref: "#/components/schemas/executionRule"
        frequency:
          $ref: "#/components/schemas/frequencyCode"
        dayOfExecution:
          $ref: "#/components/schemas/dayOfExecution"

    periodicPaymentInitiationSctInst_json:
      description: |
        JSON Body for a periodic SCT INST payment initation.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
        - startDate
        - frequency
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        #Additional Information for periodic payments
        startDate:
          $ref: "#/components/schemas/startDate"
        endDate:
          $ref: "#/components/schemas/endDate"
        executionRule:
          $ref: "#/components/schemas/executionRule"
        frequency:
          $ref: "#/components/schemas/frequencyCode"
        dayOfExecution:
          $ref: "#/components/schemas/dayOfExecution"

    periodicPaymentInitiationTarget2_json:
      description: |
        JSON Body for a periodic target-2 payment initation.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
        - startDate
        - frequency
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        #Additional Information for periodic payments
        startDate:
          $ref: "#/components/schemas/startDate"
        endDate:
          $ref: "#/components/schemas/endDate"
        executionRule:
          $ref: "#/components/schemas/executionRule"
        frequency:
          $ref: "#/components/schemas/frequencyCode"
        dayOfExecution:
          $ref: "#/components/schemas/dayOfExecution"

    periodicPaymentInitiationCrossBorder_json:
      description: |
        JSON body for a periodic cross-border payment initation.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
        - startDate
        - frequency
      properties:
#        endToEndIdentification: # N.A.
#          type: string
#          maxLength: 35
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode:  # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        #Additional Information for periodic payments
        startDate:
          $ref: "#/components/schemas/startDate"
        endDate:
          $ref: "#/components/schemas/endDate"
        executionRule:
          $ref: "#/components/schemas/executionRule"
        frequency:
          $ref: "#/components/schemas/frequencyCode"
        dayOfExecution:
          $ref: "#/components/schemas/dayOfExecution"

    bulkPaymentInitiationSct_json:
      description: |
        JSON Body for a bulk SCT payment initation.
      type: object
      required:
        - payments
        - debtorAccount
      properties:
        batchBookingPreferred:
          $ref: "#/components/schemas/batchBookingPreferred"
        requestedExecutionDate:
          type: string
          format: date
        debtorAccount:
          #oneOf:
            #Sparkasse Bank Malta plc Modified!
             $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
        payments:
          description: A list of JSON bodies for SCT payments.
          type: array
          items:
            $ref: "#/components/schemas/paymentInitiationSctBulkElement_json"

    bulkPaymentInitiationSctInst_json:
      description: |
        JSON Body for a bulk SCT INST payment initation.
      type: object
      required:
        - payments
        - debtorAccount
      properties:
        batchBookingPreferred:
          $ref: "#/components/schemas/batchBookingPreferred"
        requestedExecutionDate:
          type: string
          format: date
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        payments:
          description: A list of JSON bodies for SCT INST payments.
          type: array
          items:
            $ref: "#/components/schemas/paymentInitiationSctInstBulkElement_json"

    bulkPaymentInitiationTarget2_json:
      description: |
        JSON Body for a bulk TARGET-2 payment initation.
      type: object
      required:
        - payments
        - debtorAccount
      properties:
        batchBookingPreferred:
          $ref: "#/components/schemas/batchBookingPreferred"
        requestedExecutionDate:
          type: string
          format: date
        debtorAccount:
          #oneOf:
            # Sparkasse Bank Malta plc Modified
             $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
        payments:
          description: A list of JSON bodies for TARGET-2 payments.
          type: array
          items:
            $ref: "#/components/schemas/paymentInitiationTarget2BulkElement_json"


    bulkPaymentInitiationCrossBorder_json:
      description: |
        JSON body for a bulk cross-border payment initation.
      type: object
      required:
        - payments
        - debtorAccount
      properties:
        batchBookingPreferred:
          $ref: "#/components/schemas/batchBookingPreferred"
        requestedExecutionDate:
          type: string
          format: date
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        payments:
          description: A List of JSON bodies for cross-border payments.
          type: array
          items:
            $ref: "#/components/schemas/paymentInitiationCrossBorderBulkElement_json"


    confirmationOfFunds:
      description: |
        JSON Request body for the "Confirmation of Funds Service"

        <table>
        <tr>
          <td>cardNumber</td>
          <td>String </td>
          <td>Optional</td>
          <td>Card Number of the card issued by the PIISP. Should be delivered if available.</td>
        </tr>
        <tr>
          <td>account</td>
          <td> Account Reference</td>
          <td>Mandatory</td>
          <td>PSU's account number.</td>
        </tr>
        <tr>
          <td>payee</td>
          <td>Max70Text</td>
          <td>Optional</td>
          <td>The merchant where the card is accepted as an information to the PSU.</td>
        </tr>
        <tr>
          <td>instructedAmount</td>
          <td>Amount</td>
          <td>Mandatory</td>
          <td>Transaction amount to be checked within the funds check mechanism.</td>
        </tr>
        </table>
      type: object
      required:
        - account
        - instructedAmount
      properties:
        cardNumber:
          description: |
            Card Number of the card issued by the PIISP.
            Should be delivered if available.
          type: string
        account:
          # Sparkasse Bank Malta plc modfied
          # oneOf:
            $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
        payee:
          description: Name payee
          type: string
          maxLength: 70
        instructedAmount:
          $ref: "#/components/schemas/amount"


    consents:
      description: |
        Content of the body of a consent request.
      type: object
      required:
        - access
        - recurringIndicator
        - validUntil
        - frequencyPerDay
        - combinedServiceIndicator
      properties:
        access:
          $ref: "#/components/schemas/accountAccess"
        recurringIndicator:
          $ref: "#/components/schemas/recurringIndicator"
        validUntil:
          $ref: "#/components/schemas/validUntil"
        frequencyPerDay:
          $ref: "#/components/schemas/frequencyPerDay"
        combinedServiceIndicator:
          description: |
            If "true" indicates that a payment initiation service will be addressed in the same "session".
          type: boolean
          example: false


    updatePsuAuthentication:
      description: |
        Content of the body of a Update PSU Authentication Request

        Password subfield is used.
      type: object
      required:
        - psuData
      properties:
        psuData:
          $ref: "#/components/schemas/psuData"


    selectPsuAuthenticationMethod:
      description: |
        Content of the body of a Select PSU Authentication Method Request
      type: object
      required:
        - authenticationMethodId
      properties:
        authenticationMethodId:
          $ref: "#/components/schemas/authenticationMethodId"


    transactionAuthorisation:
      description: |
        Content of the body of a Transaction Authorisation Request
      type: object
      required:
        - scaAuthenticationData
      properties:
        scaAuthenticationData:
          $ref: "#/components/schemas/scaAuthenticationData"


    #####################################################
    # Content of Request Bodies - XML
    #####################################################

      #####################################################
      # Content of Request Bodies - Single Part
      #####################################################

    paymentInitiationSct_pain.001: #The same schemas are use for single an bulk payment in case of a pain.001
      description: |
        A pain.001 structure corresponding to the SCT schema

        urn:iso:std:iso:20022:tech:xsd:pain.001.001.03
      type: string
      example:
        <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
          <CstmrCdtTrfInitn>
            <GrpHdr>
              <MsgId>MIPI-123456789RI-123456789</MsgId>
              <CreDtTm>2017-02-14T20:23:34.000Z</CreDtTm>
              <NbOfTxs>1</NbOfTxs>
              <CtrlSum>123</CtrlSum>
              <InitgPty>
                <Nm>PaymentInitiator</Nm>
                <Id><OrgId><Othr><Id>DE10000000012</Id>
                  <SchmeNm><Prptry>PISP</Prptry></SchmeNm></Othr></OrgId></Id>
              </InitgPty>
            </GrpHdr>
            <PmtInf>
              <PmtInfId>BIPI-123456789RI-123456789</PmtInfId>
              <PmtMtd>TRF</PmtMtd>
              <NbOfTxs>1</NbOfTxs>
              <CtrlSum>123</CtrlSum>
              <PmtTpInf><SvcLvl><Cd>SEPA</Cd></SvcLvl></PmtTpInf>
              <ReqdExctnDt>2017-02-15</ReqdExctnDt>
              <Dbtr><Nm>PSU Name</Nm></Dbtr>
              <DbtrAcct><Id><IBAN>DE87200500001234567890</IBAN></Id></DbtrAcct>
              <ChrgBr>SLEV</ChrgBr>
              <CdtTrfTxInf>
                <PmtId><EndToEndId>RI-123456789</EndToEndId></PmtId>
                <Amt><InstdAmt Ccy="EUR">123</InstdAmt></Amt>
                <Cdtr><Nm>Merchant123</Nm></Cdtr>
                <CdtrAcct><Id><IBAN> DE23100120020123456789</IBAN></Id></CdtrAcct>
                <RmtInf><Ustrd>Ref Number Merchant-123456</Ustrd></RmtInf>
              </CdtTrfTxInf>
            </PmtInf>
          </CstmrCdtTrfInitn>
        </Document>

    paymentInitiationSctInst_pain.001: #The same schemas are use for single an bulk payment in case of a pain.001
      description: |
        A pain.001 structure corresponding to the SCT INST schema.
      type: string
      #example: #TODO Add example for SCT INST pain.001

    paymentInitiationTarget2_pain.001: #The same schemas are use for single an bulk payment in case of a pain.001
      description: |
        A pain.001 structure corresponding to the target-2 schema

        For TARGET-2 payments only community wide pain.001 schemes do exist.
      type: string

    paymentInitiationCrossBorder_pain.001: #The same schemas are use for single an bulk payment in case of a pain.001
      description: |
        A pain.001 structure corresponding to the cross-border schema

        For cross-border payments only community wide pain.001 schemes do exist.
      type: string

      #####################################################
      # Content of Request Bodies - XML -Multipart
      #####################################################

    periodicPaymentInitiationMultipartBody:
      description: |
       The multipart message definition for the initiation of a periodic payment initiation
       where the information of the payment is contained in an pain.001 message (Part 1) and
       the additional informations related to the periodic payment is an additional JSON message (Part 2).
      type: object
      properties:
        xml_sct: #PART 1
          oneOf: #The same schemas are used for single and bulk payment in case of a pain.001
            - $ref: "#/components/schemas/paymentInitiationSct_pain.001"
            - $ref: "#/components/schemas/paymentInitiationSctInst_pain.001"
            - $ref: "#/components/schemas/paymentInitiationTarget2_pain.001"
            - $ref: "#/components/schemas/paymentInitiationCrossBorder_pain.001"
        json_standingorderType: #PART 2
          $ref: "#/components/schemas/periodicPaymentInitiation_xml-Part2-standingorderType_json"

    periodicPaymentInitiation_xml-Part2-standingorderType_json:
      description: |
        The body part 2 of a periodic payment initation request containes the execution related informations
        of the periodic payment.
      type: object
      required:
        - startDate
        - frequency
      properties:
        startDate:
          $ref: "#/components/schemas/startDate"
        endDate:
          $ref: "#/components/schemas/endDate"
        executionRule:
          $ref: "#/components/schemas/executionRule"
        frequency:
          $ref: "#/components/schemas/frequencyCode"
        dayOfExecution:
          $ref: "#/components/schemas/dayOfExecution"





#####################################################
# Content of Response Bodies
#####################################################


    paymentInitiationStatusResponse-200_json:
      description: Body of the response for a successful payment initiation status request in case of an JSON based endpoint.
      type: object
      required:
        - transactionStatus
      properties:
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"


    paymentInitiationStatusResponse-200_xml:
      description: |
        Body of the response for a successful payment initiation status request in case of an XML based endpoint.

        The status is returned as a pain.002 structure.

        urn:iso:std:iso:20022:tech:xsd:pain.002.001.03

        The chosen XML schema of the Status Request is following the XML schema definitions of the original pain.001 schema.
      type: string


    paymentInitationRequestResponse-201:
      description: Body of the response for a successful payment initiation request.
      type: object
      required:
        - transactionStatus
        - paymentId
        - _links

      properties:
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"
        paymentId:
          $ref: "#/components/schemas/paymentId"
        transactionFees:
          # description: Can be used by the ASPSP to transport transaction fees relevant for the underlying payments.
          $ref: "#/components/schemas/amount"
        transactionFeeIndicator:
          $ref: "#/components/schemas/transactionFeeIndicator"
        scaMethods:
          $ref: "#/components/schemas/scaMethods"
        chosenScaMethod:
          $ref: "#/components/schemas/chosenScaMethod"
        challengeData:
          $ref: "#/components/schemas/challengeData"
        _links:
          $ref: "#/components/schemas/_linksPaymentInitiation"
        psuMessage:
          $ref: "#/components/schemas/psuMessageText"
        tppMessages:
          $ref: "#/components/schemas/tppMessages"


    paymentInitationRequestMultiLevelScaResponse-201:
      description: Body of the response for a successful payment initiation request.
      type: object
      required:
        - transactionStatus
        - paymentId
        - _links

      properties:
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"
        paymentId:
          $ref: "#/components/schemas/paymentId"
        transactionFees:
          # description: Can be used by the ASPSP to transport transaction fees relevant for the underlying payments.
          $ref: "#/components/schemas/amount"
        transactionFeeIndicator:
          $ref: "#/components/schemas/transactionFeeIndicator"
        _links:
          $ref: "#/components/schemas/_linksPaymentInitiationMultiLevelSca"
        psuMessage:
          $ref: "#/components/schemas/psuMessageText"
        tppMessages:
          $ref: "#/components/schemas/tppMessages"



    paymentInitiationCancelResponse-200_202:
      description: Body of the response for a successful cancel payment request.
      type: object
      required:
        - transactionStatus
      properties:
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"
        scaMethods:
          $ref: "#/components/schemas/scaMethods"
        chosenScaMethod:
          $ref: "#/components/schemas/chosenScaMethod"
        challengeData:
          $ref: "#/components/schemas/challengeData"
        _links:
          $ref: "#/components/schemas/_linksPaymentInitiationCancel"


    paymentInitiationSctWithStatusResponse:
      description: |
        JSON response body consistion of the corresponding SCT payment initation JSON body together with an optional transaction status field.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          #oneOf:
          #Sparkasse Bank Malta plc modified
            $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          #oneOf:
          $ref: "#/components/schemas/accountReferenceIban"
            #- $ref: "#/components/schemas/accountReferenceBban"
            #- $ref: "#/components/schemas/accountReferencePan"
            #- $ref: "#/components/schemas/accountReferenceMaskedPan"
            #- $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          $ref: "#/components/schemas/remittanceInformationUnstructured"
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"

    paymentInitiationSctInstWithStatusResponse:
      description: |
        JSON response body consistion of the corresponding SCT INST payment initation JSON body together with an optional transaction status field.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"

    paymentInitiationTarget2WithStatusResponse:
      description: |
        JSON response body consistion of the corresponding TARGET-2 payment initation JSON body together with an
        optional transaction status field.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          #oneOf:
          #Sparkasse Bank Malta plc modified
           $ref: "#/components/schemas/accountReferenceIban"
           # - $ref: "#/components/schemas/accountReferenceBban"
           # - $ref: "#/components/schemas/accountReferencePan"
           # - $ref: "#/components/schemas/accountReferenceMaskedPan"
           # - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          #oneOf:
          #Sparkasse Bank Malta plc modified
          $ref: "#/components/schemas/accountReferenceIban"
           # - $ref: "#/components/schemas/accountReferenceBban"
           # - $ref: "#/components/schemas/accountReferencePan"
           # - $ref: "#/components/schemas/accountReferenceMaskedPan"
           # - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"


    paymentInitiationCrossBorderWithStatusResponse:
      description: |
        JSON response body consistion of the corresponding cross-border payment initation JSON body together with an optional transaction status field.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
      properties:
#        endToEndIdentification: # N.A.
#          type: string
#          maxLength: 35
        debtorAccount:
          #oneOf:
          #Sparkasse Bank Malta plc modified
           $ref: "#/components/schemas/accountReferenceIban"
           # - $ref: "#/components/schemas/accountReferenceBban"
           # - $ref: "#/components/schemas/accountReferencePan"
           # - $ref: "#/components/schemas/accountReferenceMaskedPan"
           # - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
          #Sparkasse Bank Malta plc modified
           - $ref: "#/components/schemas/accountReferenceIban"
           - $ref: "#/components/schemas/accountReferenceBban"
           # - $ref: "#/components/schemas/accountReferencePan"
           # - $ref: "#/components/schemas/accountReferenceMaskedPan"
           # - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode:  # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"


    periodicPaymentInitiationSctWithStatusResponse:
      description: |
        JSON response body consistion of the corresponding periodic SCT payment initation JSON body together with an optional transaction status field.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
        - startDate
        - frequency
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          $ref: "#/components/schemas/remittanceInformationUnstructured"
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate:
#          type: string
#          format: date
#        requestedExecutionTime:
#          type: string
#          format: date-time
        #Additional Information for periodic payments
        startDate:
          $ref: "#/components/schemas/startDate"
        endDate:
          $ref: "#/components/schemas/endDate"
        executionRule:
          $ref: "#/components/schemas/executionRule"
        frequency:
          $ref: "#/components/schemas/frequencyCode"
        dayOfExecution:
          $ref: "#/components/schemas/dayOfExecution"
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"


    periodicPaymentInitiationSctInstWithStatusResponse:
      description: |
        JSON response body consistion of the corresponding periodic SCT INST payment initation JSON body together with an optional transaction status field.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
        - startDate
        - frequency
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          $ref: "#/components/schemas/remittanceInformationUnstructured"
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        #Additional Information for periodic payments
        startDate:
          $ref: "#/components/schemas/startDate"
        endDate:
          $ref: "#/components/schemas/endDate"
        executionRule:
          $ref: "#/components/schemas/executionRule"
        frequency:
          $ref: "#/components/schemas/frequencyCode"
        dayOfExecution:
          $ref: "#/components/schemas/dayOfExecution"
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"


    periodicPaymentInitiationTarget2WithStatusResponse:
      description: |
        JSON response body consistion of the corresponding periodic TARGET-2 payment initation JSON body together with
        an optional transaction status field.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
        - startDate
        - frequency
      properties:
        endToEndIdentification:
          type: string
          maxLength: 35
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode: # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        #Additional Information for periodic payments
        startDate:
          $ref: "#/components/schemas/startDate"
        endDate:
          $ref: "#/components/schemas/endDate"
        executionRule:
          $ref: "#/components/schemas/executionRule"
        frequency:
          $ref: "#/components/schemas/frequencyCode"
        dayOfExecution:
          $ref: "#/components/schemas/dayOfExecution"
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"


    periodicPaymentInitiationCrossBorderWithStatusResponse:
      description: |
        JSON response body consistion of the corresponding periodic cross-border payment initation JSON body together with an optional transaction status field.
      type: object
      required:
        - debtorAccount
        - instructedAmount
        - creditorAccount
        - creditorName
        - startDate
        - frequency
      properties:
#        endToEndIdentification: # N.A.
#          type: string
#          maxLength: 35
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
#        ultimateDebtor: # N.A.
#          $ref: "#/components/schemas/ultimateDebtor"
        instructedAmount:
          $ref: "#/components/schemas/amount"
        creditorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        creditorAgent:
          $ref: "#/components/schemas/bicfi"
        creditorName:
          $ref: "#/components/schemas/creditorName"
        creditorAddress:
          $ref: "#/components/schemas/address"
#        ultimateCreditor: # N.A.
#          $ref: "#/components/schemas/ultimateCreditor"
#        purposeCode:  # N.A.
#          $ref: "#/components/schemas/purposeCode"
        remittanceInformationUnstructured:
          type: string
          maxLength: 140
#        remittanceInformationStructured: # N.A.
#          $ref: "#/components/schemas/remittanceInformationStructured"
#        requestedExecutionDate: # N.A.
#          type: string
#          format: date
#        requestedExecutionTime: # N.A.
#          type: string
#          format: date-time
        #Additional Information for periodic payments
        startDate:
          $ref: "#/components/schemas/startDate"
        endDate:
          $ref: "#/components/schemas/endDate"
        executionRule:
          $ref: "#/components/schemas/executionRule"
        frequency:
          $ref: "#/components/schemas/frequencyCode"
        dayOfExecution:
          $ref: "#/components/schemas/dayOfExecution"
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"


    bulkPaymentInitiationSctWithStatusResponse:
      description: |
        JSON response body consistion of the corresponding bulk SCT payment initation JSON body together with an optional transaction status field.
      type: object
      required:
        - payments
        - debtorAccount
      properties:
        batchBookingPreferred:
          $ref: "#/components/schemas/batchBookingPreferred"
        requestedExecutionDate:
          type: string
          format: date
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        payments:
          description: A list of JSON bodies for SCT payments.
          type: array
          items:
            $ref: "#/components/schemas/paymentInitiationSct_json"
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"


    bulkPaymentInitiationSctInstWithStatusResponse:
      description: |
        JSON response body consistion of the corresponding bulk SCT INST payment initation JSON body together with an optional transaction status field.
      type: object
      required:
        - payments
        - debtorAccount
      properties:
        batchBookingPreferred:
          $ref: "#/components/schemas/batchBookingPreferred"
        requestedExecutionDate:
          type: string
          format: date
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        payments:
          description: A list of JSON bodies for SCT INST payments.
          type: array
          items:
            $ref: "#/components/schemas/paymentInitiationSctInst_json"
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"

    bulkPaymentInitiationTarget2WithStatusResponse:
      description: |
        JSON response body consistion of the corresponding bulk TARGET-2 payment initation JSON body together with an optional transaction status field.
      type: object
      required:
        - payments
        - debtorAccount
      properties:
        batchBookingPreferred:
          $ref: "#/components/schemas/batchBookingPreferred"
        requestedExecutionDate:
          type: string
          format: date
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        payments:
          description: A list of JSON bodies for TARGET-2 payments.
          type: array
          items:
            $ref: "#/components/schemas/paymentInitiationTarget2_json"
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"


    bulkPaymentInitiationCrossBorderWithStatusResponse:
      description: |
        JSON response body consistion of the corresponding bulk cross-border payment initation JSON body together with an optional transaction status field.
      type: object
      required:
        - payments
        - debtorAccount
      properties:
        batchBookingPreferred:
          $ref: "#/components/schemas/batchBookingPreferred"
        requestedExecutionDate:
          type: string
          format: date
        debtorAccount:
          oneOf:
            - $ref: "#/components/schemas/accountReferenceIban"
            - $ref: "#/components/schemas/accountReferenceBban"
            - $ref: "#/components/schemas/accountReferencePan"
            - $ref: "#/components/schemas/accountReferenceMaskedPan"
            - $ref: "#/components/schemas/accountReferenceMsisdn"
        payments:
          description: A list of JSON bodies for cross-border payments.
          type: array
          items:
            $ref: "#/components/schemas/paymentInitiationCrossBorder_json"
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"

    scaStatusResponse:
      description: Body of the JSON response with SCA Status
      type: object
      properties:
        scaStatus:
          $ref: "#/components/schemas/scaStatus"


    startScaprocessResponse:
      description: Body of the JSON response for a Start SCA authorisation request.
      type: object
      required:
        - scaStatus
        - _links
      properties:
        scaStatus:
          $ref: "#/components/schemas/scaStatus"
        scaMethods:
          $ref: "#/components/schemas/scaMethods"
        chosenScaMethod:
          $ref: "#/components/schemas/chosenScaMethod"
        challengeData:
          $ref: "#/components/schemas/challengeData"
        _links:
           $ref: "#/components/schemas/_linksStartScaProcess"
        psuMessage:
          $ref: "#/components/schemas/psuMessageText"


    updatePsuIdenticationResponse:
      description: Body of the JSON response for a successful update PSU Identification request.
      type: object
      required:
        - _links
        - scaStatus
      properties:
        _links:
          $ref: "#/components/schemas/_linksUpdatePsuIdentification"
        scaStatus:
          $ref: "#/components/schemas/scaStatus"
        psuMessage:
          $ref: "#/components/schemas/psuMessageText"


    updatePsuAuthenticationResponse:
      description: Body of the JSON response for a successful update PSU Authentication request.
      type: object
      required:
        - scaStatus
      properties:
        chosenScaMethod:
          $ref: "#/components/schemas/chosenScaMethod"
        challengeData:
          $ref: "#/components/schemas/challengeData"
        scaMethods:
          $ref: "#/components/schemas/scaMethods"
        _links:
          $ref: "#/components/schemas/_linksUpdatePsuAuthentication"
        scaStatus:
          $ref: "#/components/schemas/scaStatus"
        psuMessage:
          $ref: "#/components/schemas/psuMessageText"


    selectPsuAuthenticationMethodResponse:
      description: Body of the JSON response for a successful select PSU Authentication Method request.
      type: object
      required:
        - scaStatus
      properties:
        chosenScaMethod:
          $ref: "#/components/schemas/chosenScaMethod"
        challengeData:
          $ref: "#/components/schemas/challengeData"
        _links:
          $ref: "#/components/schemas/_linksSelectPsuAuthenticationMethod"
        scaStatus:
          $ref: "#/components/schemas/scaStatus"
        psuMessage:
          $ref: "#/components/schemas/psuMessageText"


    signingBasketResponse-200:
      description: |
        Body of the JSON response for a successful get signing basket request.

          * 'payments': payment initiations which shall be authorised through this signing basket.
          * 'consents': consent objects which shall be authorised through this signing basket.
          * 'transactionStatus': Only the codes RCVD, ACTC, RJCT are used.

      type: object
      required:
        - transactionStatus
      properties:
        payments:
          $ref: "#/components/schemas/paymentIdList"
        consents:
          $ref: "#/components/schemas/consentIdList"
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"


    signingBasketResponse-201:
      description: Body of the JSON response for a successful create signing basket request.
      type: object
      required:
        - transactionStatus
        - basketId
        - _links
      properties:
        transactionStatus:
          $ref: "#/components/schemas/transactionStatus"
        basketId:
          $ref: "#/components/schemas/basketId"
        scaMethods:
           $ref: "#/components/schemas/scaMethods"
        chosenScaMethod:
          $ref: "#/components/schemas/chosenScaMethod"
        challengeData:
          $ref: "#/components/schemas/challengeData"
        _links:
          $ref: "#/components/schemas/_linksSigningBasket"
        psuMessage:
          $ref: "#/components/schemas/psuMessageText"
        tppMessages:
          $ref: "#/components/schemas/tppMessages"


    consentsResponse-201:
      description: Body of the JSON response for a successful conset request.
      type: object
      required:
        - consentStatus
        - consentId
        - _links
      properties:
        consentStatus:
          $ref: "#/components/schemas/consentStatus"
        consentId:
          $ref: "#/components/schemas/consentId"
        scaMethods:
          $ref: "#/components/schemas/scaMethods"
        chosenScaMethod:
          $ref: "#/components/schemas/chosenScaMethod"
        challengeData:
          $ref: "#/components/schemas/challengeData"
        _links:
          $ref: "#/components/schemas/_linksConsents"
        message:
          description: Text to be displayed to the PSU, e.g. in a Decoupled SCA Approach.
          type: string
          maxLength: 512


    consentStatusResponse-200:
      description: Body of the JSON response for a successful get status request for a consent.
      type: object
      required:
        - consentStatus
      properties:
        consentStatus:
          $ref: "#/components/schemas/consentStatus"

    consentInformationResponse-200_json:
      description: Body of the JSON response for a successfull get consent request.
      type: object
      required:
        - access
        - recurringIndicator
        - validUntil
        - frequencyPerDay
        - lastActionDate
        - consentStatus
      properties:
        access:
          $ref: "#/components/schemas/accountAccess"
        recurringIndicator:
          $ref: "#/components/schemas/recurringIndicator"
        validUntil:
          $ref: "#/components/schemas/validUntil"
        frequencyPerDay:
          $ref: "#/components/schemas/frequencyPerDay"
        lastActionDate:
          $ref: "#/components/schemas/lastActionDate"
        consentStatus:
          $ref: "#/components/schemas/consentStatus"


    readBalanceResponse-200:
      description: Body of the response for a successful read balance request.
      type: object
      required:
        - balances
      properties:
        account:
          #oneOf:
          #Sparkasse Bank Malta plc modified
           $ref: "#/components/schemas/accountReferenceIban"
           # - $ref: "#/components/schemas/accountReferenceBban"
           # - $ref: "#/components/schemas/accountReferencePan"
           # - $ref: "#/components/schemas/accountReferenceMaskedPan"
           # - $ref: "#/components/schemas/accountReferenceMsisdn"
        balances:
          $ref: "#/components/schemas/balanceList"

    transactionsResponse-200_json:
      description: Body of the JSON response for a successful read transaction list request.
      type: object
      properties:
        account:
          #Sparkasse Bank Malta plc modfied
          #oneOf:
           $ref: "#/components/schemas/accountReferenceIban"
           # - $ref: "#/components/schemas/accountReferenceBban"
           # - $ref: "#/components/schemas/accountReferencePan"
           # - $ref: "#/components/schemas/accountReferenceMaskedPan"
           # - $ref: "#/components/schemas/accountReferenceMsisdn"
        transactions:
          $ref: "#/components/schemas/accountReport"
        balances:
          $ref: "#/components/schemas/balanceList"
        _links:
          $ref: "#/components/schemas/_linksDownload"

    camt.052:
      description: |
        camt.052 XML message
      type: string


    camt.053:
      description: |
        camt.053 XML message
      type: string


    camt.054:
      description: |
        camt.054 XML message
      type: string


    mt940:
      description: |
        Data MT940 format in a text structure.
      type: string


    mt942:
      description: |
        Data MT942 format in a text structure.
      type: string

    #Sparkasse Bank Malta plc added
    cofinitiationresponse:
      description: Body of the response for a successful Fund Confirmation Interactive request.
      type: object
      required:
        - fundConfirmationInteractiveId
        - _links

      properties:
        fundConfirmationInteractiveId:
          $ref: "#/components/schemas/fundConfirmationInteractiveId"
        _links:
          $ref: "#/components/schemas/_linksFundConfirmationInteractive"

    #Sparkasse Bank Malta plc added
    cofstatusresponse:
      description: Body of the response for a Fund Confirmation Interactive request.
      type: object
      required:
        - cofstatus
      properties:
        cofstatus:
          $ref: "#/components/schemas/cofstatus"


#####################################################
# _links
#####################################################

    _linksPaymentInitiation:
      description: |
        A list of hyperlinks to be recognised by the TPP.
        The actual hyperlinks used in the response depend on the dynamical decisions of the ASPSP when
        processing the request.

        **Remark:** All links can be relative or full links, to be decided by the ASPSP.

        Type of links admitted in this response, (further links might be added for ASPSP defined extensions):

        * 'scaRedirect':
          In case of an SCA Redirect Approach, the ASPSP is transmitting the link to which to redirect the PSU browser.
        * 'scaOAuth':
          In case of a SCA OAuth2 Approach, the ASPSP is transmitting the URI where the configuration of the Authorisation
          Server can be retrieved. The configuration follows the OAuth 2.0 Authorisation Server Metadata specification.
        * 'startAuthorisation':
          In case, where an explicit start of the transaction authorisation is needed, but no more data needs to be updated
          (no authentication method to be selected, no PSU identification nor PSU authentication data to be uploaded).
        * 'startAuthorisationWithPsuIdentification':
          The link to the authorisation end-point, where the authorisation sub-resource has to be generated while
          uploading the PSU identification data.
        * 'startAuthorisationWithPsuAuthentication':
          The link to the authorisation end-point, where the authorisation sub-resource has to be generated while
          uploading the PSU authentication data.
        * 'startAuthorisationWithAuthenticationMethodSelection':
          The link to the authorisation end-point, where the authorisation sub-resource has to be generated while
          selecting the authentication method.
          This link is contained under exactly the same conditions as the data element "scaMethods"
        * 'startAuthorisationWithTransactionAuthorisation':
          The link to the authorisation end-point, where the authorisation sub-resource has to be generated while
          authorising the transaction e.g. by uploading an OTP received by SMS.
        * 'self':
          The link to the payment initiation resource created by this request.
          This link can be used to retrieve the resource data.
        * 'status':
          The link to retrieve the transaction status of the payment initiation.
        * 'scaStatus':
          The link to retrieve the scaStatus of the corresponding authorisation sub-resource.
          This link is only contained, if an authorisation sub-resource has been already created.

      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      properties:
        scaRedirect:
          $ref: "#/components/schemas/hrefType"
        scaOAuth:
          $ref: "#/components/schemas/hrefType"
        startAuthorisation:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuIdentification:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuAuthentication:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithAuthenticationMethodSelection:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithTransactionAuthorisation:
          $ref: "#/components/schemas/hrefType"
        self:
          $ref: "#/components/schemas/hrefType"
        status:
          $ref: "#/components/schemas/hrefType"
        scaStatus:
          $ref: "#/components/schemas/hrefType"
      example:
        {
        "scaRedirect": {"href": "https://www.testbank.com/asdfasdfasdf"},
        "self": {"href": "/v1/payments/sepa-credit-transfers/1234-wertiq-983"}
        }


    _linksPaymentInitiationMultiLevelSca:
      description: |
        Type of links admitted in this response, (further links might be added for ASPSP defined extensions):

          * 'startAuthorisation':
            In case, where an explicit start of the transaction authorisation is needed, but no more data needs to be updated (no authentication method to be selected, no PSU identification nor PSU authentication data to be uploaded).
          * 'startAuthorisationWithPsuIdentification':
            The link to the authorisation end-point, where the authorisation sub-resource has to be generated while uploading the PSU identification data.
          * 'startAuthorisationWithPsuAuthentication':
            The link to the authorisation end-point, where an authorisation sub-resource has to be generated while uploading the PSU authentication data.
          * 'self':
            The link to the payment initiation resource created by this request. This link can be used to retrieve the resource data.
          * 'status':
            The link to retrieve the transaction status of the payment initiation.

      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      properties:
        startAuthorisation:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuIdentification:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuAuthentication:
          $ref: "#/components/schemas/hrefType"
        self:
          $ref: "#/components/schemas/hrefType"
        status:
          $ref: "#/components/schemas/hrefType"

    _linksPaymentInitiationCancel:
      description: |
        A list of hyperlinks to be recognised by the TPP. The actual hyperlinks used in the response depend on the
        dynamical decisions of the ASPSP when processing the request.

        Remark: All links can be relative or full links, to be decided by the ASPSP.

        Type of links admitted in this response, (further links might be added for ASPSP defined extensions):

          * 'startAuthorisation':
            In case, where just the authorisation process of the cancellation needs to be started,
            but no additional data needs to be updated for time being (no authentication method to be selected,
            no PSU identification nor PSU authentication data to be uploaded).
          * 'startAuthorisationWithPsuIdentification':
            In case where a PSU Identification needs to be updated when starting the cancellation authorisation:
            The link to the cancellation-authorisations end-point, where the cancellation sub-resource has to be
            generated while uploading the PSU identification data.
          * 'startAuthorisationWithPsuAuthentication':
            In case of a yet to be created authorisation sub-resource: The link to the authorisation end-point,
            where the authorisation sub-resource has to be generated while uploading the PSU authentication data.

      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      properties:
        startAuthorisation:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuIdentification:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuAuthentication:
          $ref: "#/components/schemas/hrefType"


    _linksUpdatePsuIdentification:
      description: |
        A list of hyperlinks to be recognised by the TPP. The actual hyperlinks used in the response depend on the dynamical decisions of the ASPSP when processing the request.

        **Remark:** All links can be relative or full links, to be decided by the ASPSP.

        Type of links admitted in this response, (further links might be added for ASPSP
        defined extensions):

        - 'scaStatus': The link to retrieve the scaStatus of the corresponding authorisation sub-resource.
      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      properties:
        scaStatus:
          $ref: "#/components/schemas/hrefType"


    _linksUpdatePsuAuthentication:
      description: |
        A list of hyperlinks to be recognised by the TPP. Might be contained, if several authentication methods
        are available for the PSU.
        Type of links admitted in this response:
          * 'selectAuthenticationMethod':
            This is a link to a resource, where the TPP can select the applicable second factor authentication
            methods for the PSU, if there were several available authentication methods.
            This link is only contained, if the PSU is already identified or authenticated with the first relevant
            factor or alternatively an access token, if SCA is required and if the PSU has a choice between different
            authentication methods.
            If this link is contained, then there is also the data element 'scaMethods' contained in the response body.
          * 'authoriseTransaction':
            The link to the resource, where the "Transaction Authorisation Request" is sent to.
            This is the link to the resource which will authorise the transaction by checking the SCA authentication
            data within the Embedded SCA approach.
          * 'scaStatus':
            The link to retrieve the scaStatus of the corresponding authorisation sub-resource.
      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      properties:
        selectAuthenticationMethod:
          $ref: "#/components/schemas/hrefType"
        authoriseTransaction:
          $ref: "#/components/schemas/hrefType"
        scaStatus:
          $ref: "#/components/schemas/hrefType"


    _linksSelectPsuAuthenticationMethod:
      description: |
        A list of hyperlinks to be recognised by the TPP. The actual hyperlinks used in
        the response depend on the dynamical decisions of the ASPSP when processing the request.

        **Remark:** All links can be relative or full links, to be decided by the ASPSP.

        **Remark:** This method can be applied before or after PSU identification.
        This leads to many possible hyperlink responses.
        Type of links admitted in this response, (further links might be added for ASPSP defined
        extensions):

        - "scaRedirect":
          In case of an SCA Redirect Approach, the ASPSP is transmitting the link to which to
          redirect the PSU browser.
        - "scaOAuth":
          In case of a SCA OAuth2 Approach, the ASPSP is transmitting the URI where the
          configuration of the Authorisation Server can be retrieved.
          The configuration follows the OAuth 2.0 Authorisation Server Metadata specification.
        - "updatePsuIdentification":
          The link to the authorisation or cancellation authorisation sub-resource,
          where PSU identification data needs to be uploaded.
        - "updatePsuAuthentication":
          The link to the authorisation or cancellation authorisation sub-resource,
          where PSU authentication data needs to be uploaded.
        "authoriseTransaction":
          The link to the authorisation or cancellation authorisation sub-resource,
          where the authorisation data has to be uploaded, e.g. the TOP received by SMS.
        "scaStatus":
          The link to retrieve the scaStatus of the corresponding authorisation sub-resource.
      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      properties:
        scaRedirect:
          $ref: "#/components/schemas/hrefType"
        scaOAuth:
          $ref: "#/components/schemas/hrefType"
        updatePsuIdentification:
          $ref: "#/components/schemas/hrefType"
        updatePsuAuthentication:
          $ref: "#/components/schemas/hrefType"
        authoriseTransaction:
          $ref: "#/components/schemas/hrefType"
        scaStatus:
          $ref: "#/components/schemas/hrefType"


    _linksStartScaProcess: #TODO Check wether different link types can be joined
      description: |
        A list of hyperlinks to be recognised by the TPP. The actual hyperlinks used in the
        response depend on the dynamical decisions of the ASPSP when processing the request.

        **Remark:** All links can be relative or full links, to be decided by the ASPSP.

        Type of links admitted in this response, (further links might be added for ASPSP defined
        extensions):

        - 'scaRedirect':
          In case of an SCA Redirect Approach, the ASPSP is transmitting the link to which to
          redirect the PSU browser.
        - 'scaOAuth':
          In case of a SCA OAuth2 Approach, the ASPSP is transmitting the URI where the configuration of the Authorisation Server can be retrieved. The configuration follows the OAuth 2.0 Authorisation Server Metadata specification.
        - 'updatePsuIdentification':
          The link to the authorisation or cancellation authorisation sub-resource,
          where PSU identification data needs to be uploaded.
        - 'startAuthorisationWithPsuAuthentication':
          The link to the authorisation or cancellation authorisation sub-resource,
          where PSU authentication data needs to be uploaded.
        - 'selectAuthenticationMethod':
          The link to the authorisation or cancellation authorisation sub-resource,
          where the selected authentication method needs to be uploaded.
          This link is contained under exactly the same conditions as the data element 'scaMethods'.
        - 'authoriseTransaction':
          The link to the authorisation or cancellation authorisation sub-resource,
          where the authorisation data has to be uploaded, e.g. the TOP received by SMS.
        - 'scaStatus':
          The link to retrieve the scaStatus of the corresponding authorisation sub-resource.

      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      properties:
        scaRedirect:
          $ref: "#/components/schemas/hrefType"
        scaOAuth:
          $ref: "#/components/schemas/hrefType"
        updatePsuIdentification:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuAuthentication:
          $ref: "#/components/schemas/hrefType"
        selectAuthenticationMethod:
          $ref: "#/components/schemas/hrefType"
        authoriseTransaction:
          $ref: "#/components/schemas/hrefType"
        scaStatus:
          $ref: "#/components/schemas/hrefType"


    _linksDownload:
      description: |
        A list of hyperlinks to be recognised by the TPP.

        Type of links admitted in this response:
          - "download": a link to a resource, where the transaction report might be downloaded from in
          case where transaction reports have a huge size.

        Remark: This feature shall only be used where camt-data is requested which has a huge size.

      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      required:
        - download
      properties:
        download:
          $ref: "#/components/schemas/hrefType"



    _linksConsents:
      description: |
        A list of hyperlinks to be recognised by the TPP.

        Type of links admitted in this response (which might be extended by single ASPSPs as indicated in its XS2A
        documentation):
          - 'scaRedirect':
            In case of an SCA Redirect Approach, the ASPSP is transmitting the link to which to redirect the
            PSU browser.
          - 'scaOAuth':
            In case of an OAuth2 based Redirect Approach, the ASPSP is transmitting the link where the configuration
            of the OAuth2 Server is defined.
            The configuration follows the OAuth 2.0 Authorisation Server Metadata specification.
          - 'startAuthorisation':
            In case, where an explicit start of the transaction authorisation is needed,
            but no more data needs to be updated (no authentication method to be selected,
            no PSU identification nor PSU authentication data to be uploaded).
          - 'startAuthorisationWithPsuIdentification':
            The link to the authorisation end-point, where the authorisation sub-resource has to be generated
            while uploading the PSU identification data.
          - 'startAuthorisationWithPsuAuthentication':
            The link to the authorisation end-point, where the authorisation sub-resource has to be generated
            while uploading the PSU authentication data.
          - 'startAuthorisationWithAuthenticationMethodSelection':
            The link to the authorisation end-point, where the authorisation sub-resource has to be generated
            while selecting the authentication method. This link is contained under exactly the same conditions
            as the data element 'scaMethods'
          - 'startAuthorisationWithTransactionAuthorisation':
            The link to the authorisation end-point, where the authorisation sub-resource has to be generated
            while authorising the transaction e.g. by uploading an OTP received by SMS.
          - 'self':
            The link to the Establish Account Information Consent resource created by this request.
            This link can be used to retrieve the resource data.
          - 'status':
            The link to retrieve the status of the account information consent.
          - 'scaStatus': The link to retrieve the scaStatus of the corresponding authorisation sub-resource.
            This link is only contained, if an authorisation sub-resource has been already created.

      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      properties:
        scaRedirect:
          $ref: "#/components/schemas/hrefType"
        scaOAuth:
          $ref: "#/components/schemas/hrefType"
        startAuthorisation:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuIdentification:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuAuthentication:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithAuthenticationMethodSelection:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithTransactionAuthorisation:
          $ref: "#/components/schemas/hrefType"
        self:
          $ref: "#/components/schemas/hrefType"
        status:
          $ref: "#/components/schemas/hrefType"
        scaStatus:
          $ref: "#/components/schemas/hrefType"


    _linksSigningBasket:
      description: |
        A list of hyperlinks to be recognised by the TPP. The actual hyperlinks used in the
        response depend on the dynamical decisions of the ASPSP when processing the request.

        Remark: All links can be relative or full links, to be decided by the ASPSP.
        Type of links admitted in this response, (further links might be added for ASPSP defined
        extensions):

          * 'scaRedirect':
            In case of an SCA Redirect Approach, the ASPSP is transmitting the link to
            which to redirect the PSU browser.
          * 'scaOAuth':
            In case of a SCA OAuth2 Approach, the ASPSP is transmitting the URI where the configuration of
            the Authorisation Server can be retrieved. The configuration follows the
            OAuth 2.0 Authorisation Server Metadata specification.
          * 'startAuthorisation':
            In case, where an explicit start of the transaction authorisation is needed,
            but no more data needs to be updated (no authentication method to be selected,
            no PSU identification nor PSU authentication data to be uploaded).
          * 'startAuthorisationWithPsuIdentification':
            The link to the authorisation end-point, where the authorisation sub-resource
            has to be generated while uploading the PSU identification data.
          * 'startAuthorisationWithPsuAuthentication':
            The link to the authorisation end-point, where the authorisation sub-resource
            has to be generated while uploading the PSU authentication data.
          * 'startAuthorisationWithAuthenticationMethodSelection':
            The link to the authorisation end-point, where the authorisation sub-resource
            has to be generated while selecting the authentication method.
            This link is contained under exactly the same conditions as the data element 'scaMethods'
          * 'startAuthorisationWithTransactionAuthorisation':
            The link to the authorisation end-point, where the authorisation sub-resource
            has to be generated while authorising the transaction e.g. by uploading an
            OTP received by SMS.
          * 'self':
            The link to the payment initiation resource created by this request.
            This link can be used to retrieve the resource data.
          * 'status':
            The link to retrieve the transaction status of the payment initiation.
          * 'scaStatus':
            The link to retrieve the scaStatus of the corresponding authorisation sub-resource.
            This link is only contained, if an authorisation sub-resource has been already created.

      type: object
      properties:
        scaRedirect:
          $ref: "#/components/schemas/hrefType"
        scaOAuth:
          $ref: "#/components/schemas/hrefType"
        startAuthorisation:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuIdentification:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithPsuAuthentication:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithAuthenticationMethodSelection:
          $ref: "#/components/schemas/hrefType"
        startAuthorisationWithTransactionAuthorisation:
          $ref: "#/components/schemas/hrefType"
        self:
          $ref: "#/components/schemas/hrefType"
        status:
          $ref: "#/components/schemas/hrefType"
        scaStatus:
          $ref: "#/components/schemas/hrefType"


    _linksAccountReport:
      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      required:
        - account
      properties:
        account:
          $ref: "#/components/schemas/hrefType"
        first:
          $ref: "#/components/schemas/hrefType"
        next:
          $ref: "#/components/schemas/hrefType"
        previous:
          $ref: "#/components/schemas/hrefType"
        last:
          $ref: "#/components/schemas/hrefType"

    _linksTransactionDetails:
      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      required:
        - transactionDetails
      properties:
        transactionDetails:
          $ref: "#/components/schemas/hrefType"

    _linksAccountDetails:
      description: |
        Links to the account, which can be directly used for retrieving account information from this dedicated account.

        Links to "balances" and/or "transactions"

        These links are only supported, when the corresponding consent has been already granted.
      type: object
      additionalProperties:
        $ref: "#/components/schemas/hrefType"
      properties:
        balances:
          $ref: "#/components/schemas/hrefType"
        transactions:
          $ref: "#/components/schemas/hrefType"

    #Sparkasse Bank Malta plc added
    _linksFundConfirmationInteractive:
      description: |
        A list of hyperlinks to be recognised by the TPP.

        Type of links admitted in this response (which might be extended by single ASPSPs as indicated in its XS2A
        documentation):
          - 'status':
            The link to retrieve the status of the Fund Confirmation Interactive request.

      type: object
      properties:
        status:
          $ref: "#/components/schemas/hrefType"

#####################################################
# Tpp-Messages
#####################################################

    tppMessageCategory:
      description: Category of the TPP message category
      type: string
      enum:
        - "ERROR"
        - "WARNING"

    tppMessageText:
      description: Additional explaining text to the TPP.
      type: string
      maxLength: 512

    tppMessageGeneric:
      description: One Message to the TPP on operational issues.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          anyOf:
            - $ref: "#/components/schemas/messageCodeTextUnspecific"
            - $ref: "#/components/schemas/messageCodeTextPisSpecific"
            - $ref: "#/components/schemas/messageCodeTextAisSpecific"
            - $ref: "#/components/schemas/messageCodeTextPiisSpecific"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-FORMAT_ERROR_400:
      description: |
        Format of certain request fields are not matching the XS2A requirements.
        An explicit path to the corresponding field might be added in the return message.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "FORMAT_ERROR"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-PARAMETER_NOT_SUPPORTED_400:
      description: |
        The parameter is not supported by the API provider.
        This code should only be used for parameters that are described as
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "PARAMETER_NOT_SUPPORTED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-RESOURCE_UNKNOWN_404_403_400:
      description: |
        The addressed resource is unknown relative to the TPP.
          - 404 (if account-id in path)
          - 403 (if other resource in path)
          - 400 (if payload)
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "RESOURCE_UNKNOWN"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-RESOURCE_EXPIRED_403_400:
      description: |
        The addressed resource is associated with the TPP but has expired, not addressable anymore.
          - 403 (if path)
          - 400 (if payload)
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "RESOURCE_EXPIRED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-TIMESTAMP_INVALID_400:
      description: Timestamp not in accepted time period.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "TIMESTAMP_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-PERIOD_INVALID_400:
      description: Requested time period out of bound.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "PERIOD_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-SCA_METHOD_UNKNOWN_400:
      description: |
        Addressed SCA method in the Authentication Method Select Request is unknown
        or cannot be matched by the ASPSP with the PSU.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "SCA_METHOD_UNKNOWN"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_PIIS-CARD_INVALID_400:
      description: |
        Addressed card number is unknown to the ASPSP or not associated to the PSU.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CARD_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_PIIS-NO_PIIS_ACTIVATION_400:
      description: The PSU has not activated the addressed account for the usage of the PIIS associated with the TPP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "NO_PIIS_ACTIVATION"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_AIS-SESSIONS_NOT_SUPPORTED_400:
      description: |
        The combined service flag may not be used with this ASPSP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "SESSIONS_NOT_SUPPORTED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_PIS-PAYMENT_FAILED_400:
      description: |
        The payment initiation POST request failed during the initial process.
        Additional information may be provided by the ASPSP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "PAYMENT_FAILED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_PIS-EXECUTION_DATE_INVALID_400:
      description: |
        The requested execution date is not a valid execution date for the ASPSP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "EXECUTION_DATE_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-CERTIFICATE_INVALID_401:
      description: |
        The contents of the signature/corporate seal certificate are not matching PSD2 general PSD2
        or attribute requirements.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CERTIFICATE_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-CERTIFICATE_EXPIRED_401:
      description: Signature/corporate seal certificate is expired.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CERTIFICATE_EXPIRED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-CERTIFICATE_BLOCKED_401:
      description: |
        Signature/corporate seal certificate has been blocked by the ASPSP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CERTIFICATE_BLOCKED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-CERTIFICATE_REVOKED_401:
      description: |
        Signature/corporate seal certificate has been revoked by QSTP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CERTIFICATE_REVOKED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-CERTIFICATE_MISSING_401:
      description: |
        Signature/corporate seal certificate was not available in the request but is mandated for the corresponding.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CERTIFICATE_MISSING"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-SIGNATURE_INVALID_401:
      description: Application layer eIDAS Signature for TPP authentication is not correct.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "SIGNATURE_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-SIGNATURE_MISSING_401:
      description: |
        Application layer eIDAS Signature for TPP authentication is mandated by the ASPSP but is missing.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "SIGNATURE_MISSING"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-CONSENT_INVALID_401:
      description: |
        The consent was created by this TPP but is not valid for the addressed service/resource.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CONSENT_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-CONSENT_EXPIRED_401:
      description: The consent was created by this TPP but has expired and needs to be renewed.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CONSENT_EXPIRED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-TOKEN_UNKNOWN_401:
      description: The OAuth2 token cannot be matched by the ASPSP relative to the TPP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "TOKEN_UNKNOWN"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-TOKEN_INVALID_401:
      description: The OAuth2 token is associated to the TPP but is not valid for the addressed service/resource.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "TOKEN_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-TOKEN_EXPIRED_401:
      description: The OAuth2 token is associated to the TPP but has expired and needs to be renewed.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "TOKEN_EXPIRED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-CORPORATE_ID_INVALID_401:
      description: The PSU-Corporate-ID cannot be matched by the addressed ASPSP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CORPORATE_ID_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-PSU_CREDENTIALS_INVALID_401:
      description: |
        The PSU-ID cannot be matched by the addressed ASPSP or is blocked, or a password resp.
        OTP was not correct.
        Additional information might be added.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "PSU_CREDENTIALS_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_AIS-CONSENT_INVALID_401:
      description: |
        The consent definition is not complete or invalid.
        In case of being not complete, the bank is not supporting a completion of the consent towards the PSU.
        Additional information will be provided.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CONSENT_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_PIS-REQUIRED_KID_MISSING_401:
      description: |
        The payment initiation has failed due to a missing KID.
        This is a specific message code for the Norwegian market,
        where ASPSP can require the payer to transmit the KID.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "REQUIRED_KID_MISSING"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"


    tppMessage_PIS-PRODUCT_INVALID_403:
      description: The addressed payment product is not available for the PSU.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "PRODUCT_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-SERVICE_BLOCKED_403:
      description: |
        This service is not reachable for the addressed PSU due to a channel independent blocking by the ASPSP.
        Additional information might be given by the ASPSP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "SERVICE_BLOCKED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-CONSENT_UNKNOWN_403_400:
      description: |
        The Consent-ID cannot be matched by the ASPSP relative to the TPP.
          - 403 (if path)
          - 400 (if payload)
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "CONSENT_UNKNOWN"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_PIS-PRODUCT_UNKNOWN_404:
      description: |
        The addressed payment product is not supported by the ASPSP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "PRODUCT_UNKNOWN"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_GENERIC-SERVICE_INVALID_400_405:
      description: |
        Message to the TPP:
        The addressed service is not valid for the addressed resources or the submitted data.

          - 400 (if payload)
          - 405 (if HTTP method)
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "SERVICE_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"

    tppMessage_AIS-REQUESTED_FORMATS_INVALID_406:
      description: |
        Message to the TPP:
        The requested formats in the Accept header entry are not matching the formats offered by the ASPSP.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "REQUESTED_FORMATS_INVALID"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"


    tppMessage_AIS-ACCESS_EXCEEDED_429:
      description: |
        Message to the TPP:
        The access on the account has been exceeding the consented multiplicity per day.
      type: object
      required:
        - category
        - code
      properties:
        category:
           $ref: "#/components/schemas/tppMessageCategory"
        code:
          type: string
          enum:
            - "ACCESS_EXCEEDED"
        path:
          type: string
        text:
          $ref: "#/components/schemas/tppMessageText"


    tppMessages:
      description: Messages to the TPP on operational issues.
      type: array
      items:
        $ref: "#/components/schemas/tppMessageGeneric"
      example:
        [{
          "category": "ERROR",
          "code": "TOKEN_INVALID",
          "text": "additional text information of the ASPSP up to 512 characters"
        }]


    tppMessages400:
      description: Messages to the TPP on operational issues.
      type: array
      items:
        anyOf:
          - $ref: "#/components/schemas/tppMessage_GENERIC-FORMAT_ERROR_400"
          - $ref: "#/components/schemas/tppMessage_GENERIC-PARAMETER_NOT_SUPPORTED_400"
          - $ref: "#/components/schemas/tppMessage_GENERIC-SERVICE_INVALID_400_405"
          - $ref: "#/components/schemas/tppMessage_GENERIC-RESOURCE_UNKNOWN_404_403_400"
          - $ref: "#/components/schemas/tppMessage_GENERIC-RESOURCE_EXPIRED_403_400"
          - $ref: "#/components/schemas/tppMessage_GENERIC-TIMESTAMP_INVALID_400"
          - $ref: "#/components/schemas/tppMessage_GENERIC-PERIOD_INVALID_400"
          - $ref: "#/components/schemas/tppMessage_GENERIC-SCA_METHOD_UNKNOWN_400"
          - $ref: "#/components/schemas/tppMessage_GENERIC-CONSENT_UNKNOWN_403_400"
          - $ref: "#/components/schemas/tppMessage_PIIS-CARD_INVALID_400"
          - $ref: "#/components/schemas/tppMessage_PIIS-NO_PIIS_ACTIVATION_400"
          - $ref: "#/components/schemas/tppMessage_AIS-SESSIONS_NOT_SUPPORTED_400"
          - $ref: "#/components/schemas/tppMessage_PIS-PAYMENT_FAILED_400"
          - $ref: "#/components/schemas/tppMessage_PIS-EXECUTION_DATE_INVALID_400"
      example:
        [{
          "category": "ERROR",
          "code": "FORMAT_ERROR",
          "text": "additional text information of the ASPSP up to 512 characters"
        },{
          "category": "ERROR",
          "code": "FORMAT_ERROR",
          "text": "Further additional text information of the ASPSP up to 512 characters"
        }
        ]


    tppMessages401:
      description: Messages with HTTP error code 401 to the TPP on operational issues.
      type: array
      items:
        anyOf:
          - $ref: "#/components/schemas/tppMessage_GENERIC-CERTIFICATE_INVALID_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-CERTIFICATE_EXPIRED_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-CERTIFICATE_BLOCKED_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-CERTIFICATE_REVOKED_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-CERTIFICATE_MISSING_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-SIGNATURE_INVALID_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-SIGNATURE_MISSING_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-CONSENT_INVALID_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-CONSENT_EXPIRED_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-TOKEN_UNKNOWN_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-TOKEN_INVALID_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-TOKEN_EXPIRED_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-CORPORATE_ID_INVALID_401"
          - $ref: "#/components/schemas/tppMessage_GENERIC-PSU_CREDENTIALS_INVALID_401"
          - $ref: "#/components/schemas/tppMessage_AIS-CONSENT_INVALID_401"
          - $ref: "#/components/schemas/tppMessage_PIS-REQUIRED_KID_MISSING_401"
      example:
        [{
          "category": "ERROR",
          "code": "CERTIFICATE_INVALID",
          "text": "additional text information of the ASPSP up to 512 characters"
        }]


    tppMessages403:
      description: Messages with HTTP error code 403 to the TPP on operational issues.
      type: array
      items:
        anyOf:
          - $ref: "#/components/schemas/tppMessage_GENERIC-SERVICE_BLOCKED_403"
          - $ref: "#/components/schemas/tppMessage_GENERIC-CONSENT_UNKNOWN_403_400"
          - $ref: "#/components/schemas/tppMessage_GENERIC-RESOURCE_UNKNOWN_404_403_400"
          - $ref: "#/components/schemas/tppMessage_GENERIC-RESOURCE_EXPIRED_403_400"
          - $ref: "#/components/schemas/tppMessage_PIS-PRODUCT_INVALID_403"
      example:
        [{
        "category": "ERROR",
        "code": "SERVICE_BLOCKED",
        "text": "additional text information of the ASPSP up to 512 characters"
        }]


    tppMessages404:
      description: Messages with HTTP error code 404 to the TPP on operational issues.
      type: array
      items:
        anyOf:
          - $ref: "#/components/schemas/tppMessage_PIS-PRODUCT_UNKNOWN_404"
          - $ref: "#/components/schemas/tppMessage_GENERIC-RESOURCE_UNKNOWN_404_403_400"
      example:
        [{
          "category": "ERROR",
          "code": "PRODUCT_UNKNOWN",
          "text": "additional text information of the ASPSP up to 512 characters"
        }]


    tppMessages405:
      description: Messages with HTTP error code 405 to the TPP on operational issues.
      type: array
      items:
        anyOf:
          - $ref: "#/components/schemas/tppMessage_GENERIC-SERVICE_INVALID_400_405"
      example:
        [{
          "category": "ERROR",
          "code": "SERVICE_INVALID",
          "text": "additional text information of the ASPSP up to 512 characters"
        }]


    tppMessages406:
      description: Messages with HTTP error code 406 to the TPP on operational issues.
      type: array
      items:
        anyOf:
          - $ref: "#/components/schemas/tppMessage_AIS-REQUESTED_FORMATS_INVALID_406"
      example:
        [{
          "category": "ERROR",
          "code": "REQUESTED_FORMATS_INVALID",
          "text": "additional text information of the ASPSP up to 512 characters"
        }]


    tppMessages429:
      description: Messages with HTTP error code 429 to the TPP on operational issues.
      type: array
      items:
        anyOf:
          - $ref: "#/components/schemas/tppMessage_AIS-ACCESS_EXCEEDED_429"
      example:
        [{
          "category": "ERROR",
          "code": "ACCESS_EXCEEDED",
          "text": "additional text information of the ASPSP up to 512 characters"
        }]


  parameters:
  #####################################################
  # Predefined Parameters
  #####################################################

    paymentService:
      name: payment-service
      in: path
      description: |
        Payment service:

        Possible values are:
        * payments
      required: true
      schema:
        type: string
        enum:
          - "payments"


    paymentProduct:
      name: payment-product
      in: path
      description: |
        The addressed payment product endpoint, e.g. for SEPA Credit Transfers (SCT).

        The following payment products are supported:
          - sepa-credit-transfers
          - target-2-payments
          - cross-border-credit-transfers


      required: true
      schema:
        type: string
        enum:
          - "sepa-credit-transfers"
          - "target-2-payments"
          - "cross-border-credit-transfers"


    paymentId:
      name: paymentId
      in: path
      description: Resource identification of the generated payment initiation resource.
      required: true
      schema:
        $ref: "#/components/schemas/paymentId"


    cancellationId:
      name: cancellationId
      in: path
      description: Identification for cancellation resource.
      required: true
      schema:
        $ref: "#/components/schemas/cancellationId"


    authorisationId:
      name: authorisationId
      in: path
      description: Resource identification of the related SCA.
      required: true
      schema:
        $ref: "#/components/schemas/authorisationId"


    accountId:
      name: account-id
      in: path
      description: |
        This identification is denoting the addressed account.
        The account-id is retrieved by using a "Read Account List" call.
        The account-id is the "id" attribute of the account structure.
        Its value is constant at least throughout the lifecycle of a given consent.
      required: true
      schema:
        $ref: "#/components/schemas/accountId"


    resourceId:
      name: resourceId
      in: path
      description: |
        This identification is given by the attribute resourceId of the corresponding entry of a transaction list.
      required: true
      schema:
        $ref: "#/components/schemas/resourceId"


    basketId_PATH:
      name: basketId
      in: path
      description: |
        This identification of the corresponding signing basket object.
      required: true
      schema:
        $ref: "#/components/schemas/basketId"


    consentId_PATH:
      name: consentId
      in: path
      description: |
        ID of the corresponding consent object as returned by an Account Information Consent Request.
      required: true
      schema:
        $ref: "#/components/schemas/consentId"


    consentId_HEADER_optional:
      name: Consent-ID
      in: header
      description: |
        This data element may be contained, if the payment initiation transaction is part of a session, i.e. combined AIS/PIS service.
        This then contains the consentId of the related AIS consent, which was performed prior to this payment initiation.
      required: false
      schema:
        $ref: "#/components/schemas/consentId"


    consentId_HEADER_mandatory:
      name: Consent-ID
      in: header
      description: |
        This then contains the consentId of the related AIS consent, which was performed prior to this payment initiation.
      required: true
      schema:
        $ref: "#/components/schemas/consentId"


    withBalanceQuery:
      name: withBalance
      in: query
      description: |
        If contained, this function reads the list of accessible payment accounts including the booking balance,
        if granted by the PSU in the related consent and available by the ASPSP.
        This parameter might be ignored by the ASPSP.
      required: false
      schema:
        type: boolean


    dateFrom:
      name: dateFrom
      in: query
      description: |
        Starting date (inclusive the date dateFrom) of the transaction list.
      required: true
      schema:
        type: string
        format: date


    dateTo:
      name: dateTo
      in: query
      description: |
        End date (inclusive the data dateTo) of the transaction list, default is now if not given.
      required: true
      schema:
        type: string
        format: date


    entryReferenceFrom:
      name: entryReferenceFrom
      in: query
      description: |
        Ignored.
      required: false
      schema:
        type: string


    bookingStatus:
      name: bookingStatus
      in: query
      description: |
        Ignored.

        Permitted codes are
          * "booked",
          * "pending" and
          * "both"
        "booked" shall be supported by the ASPSP.
        To support the "pending" and "both" feature is optional for the ASPSP,
        Error code if not supported in the online banking frontend
      required: true
      schema:
        type: string
        enum:
          - "booked"
          - "pending"
          - "both"


    deltaList:
      name: deltaList
      in: query
      description:
        This data attribute is indicating that the AISP is in favour to get all transactions after the last report access
        for this PSU on the addressed account.
        This is another implementation of a delta access-report.

        This delta indicator might be rejected by the ASPSP if this function is not supported.

        Optional if supported by API provider
      schema:
        type: boolean


    X-Request-ID:
      name: X-Request-ID
      in: header
      description: ID of the request, unique to the call, as determined by the initiating party.
      required: true
      example: "99391c7e-ad88-49ec-a2ad-99ddcb1f7721"
      schema:
        type: string
        format: uuid


    Digest:
      name: Digest
      in: header
      description: |
        Is contained if and only if the "Signature" element is contained in the header of the request. If the message body is empty, then Digest has to be sent as an empty string.
        The Digest is calculated with the help of the signature algorithm used in the TPP-Signature-Certificate and the message body.
      schema:
        type: string
      required: true
      example: >
        "SHA-256=hl1/Eps8BEQW58FJhDApwJXjGY4nr1ArGDHIT25vq6A=";
         Header attribute followed by ": " E.g.:"Digest: SHA-256=hl1/Eps8BEQW58FJhDApwJXjGY4nr1ArGDHIT25vq6A=";
         Algorithm details:"Digest: Base64(SHA-256/SHA-515(message body))"


    Signature:
      name: Signature
      in: header
      description: |
        A signature of the request by the TPP at application level.
      schema:
        type: string
      required: true
      example: >
        keyId="SN=9FA1,CA=CN=D-TRUST%20CA%202-1%202015,O=D-Trust%20GmbH,C=DE",algorithm="rsa-sha256",
        headers="date digest x-request-id psu-id tpp-redirect-uri",
        signature="Base64(RSA-SHA256(signing string))"


    TPP-Signature-Certificate:
      name: TPP-Signature-Certificate
      in: header
      description: |
        The certificate used for signing the request, in base64 encoding.
        Must be contained.
      schema:
        type: string
      required: true


    TPP-Redirect-Preferred:
      name: TPP-Redirect-Preferred
      in: header
      description: |
        Must equal "true", since Redirection is the only SCA Approach supported.
      schema:
        type: boolean
      required: true


    TPP-Redirect-URI:
      name: TPP-Redirect-URI
      in: header
      description: |
        URI of the TPP, where the transaction flow shall be redirected to after a Redirect.

      schema:
        type: string
        format: uri
      required: true


    TPP-Nok-Redirect-URI:
      name: TPP-Nok-Redirect-URI
      in: header
      description: |
        If this URI is contained, the TPP is asking to redirect the transaction flow to this address instead of the TPP-Redirect-URI in case
        of a negative result of the redirect SCA method. This might be ignored by the ASPSP.
      schema:
        type: string
        format: uri
      required: false


    TPP-Explicit-Authorisation-Preferred:
      name: TPP-Explicit-Authorisation-Preferred
      in: header
      description: |
        If it equals "true", the TPP prefers to start the authorisation process separately,
        e.g. because of the usage of a signing basket.
        This preference might be ignored by the ASPSP, if a signing basket is not supported as functionality.

        If it equals "false" or if the parameter is not used, there is no preference of the TPP.
        This especially indicates that the TPP assumes a direct authorisation of the transaction in the next step,
        without using a signing basket.
      schema:
        type: boolean
      required: false


    PSU-ID:
      name: PSU-ID
      in: header
      description: |
        Client ID of the PSU in the ASPSP client interface. Might be mandated in the ASPSP's documentation.
        Is not contained if an OAuth2 based authentication was performed in a pre-step or an OAuth2 based SCA was performed in a preceding
        AIS service in the same session.
      schema:
        type: string
      required: false
      example: "PSU-1234"


    PSU-ID-Type:
      name: PSU-ID-Type
      in: header
      description: |
        Type of the PSU-ID, needed in scenarios where PSUs have several PSU-IDs as access possibility.
      schema:
        type: string
      required: false


    PSU-Corporate-ID:
      name: PSU-Corporate-ID
      in: header
      description: |
        Might be mandated in the ASPSP's documentation. Only used in a corporate context.
      schema:
        type: string
      required: false


    PSU-Corporate-ID-Type:
      name: PSU-Corporate-ID-Type
      in: header
      description: |
        Might be mandated in the ASPSP's documentation. Only used in a corporate context.
      schema:
        type: string
      required: false


    PSU-IP-Address_mandatory:
      name: PSU-IP-Address
      in: header
      description: |
        The forwarded IP Address header field consists of the corresponding http request IP Address field between PSU and TPP.
      schema:
        type: string
        format: ipv4
      required: true
      example: 192.168.8.78


    PSU-IP-Address_optional:
      name: PSU-IP-Address
      in: header
      description: |
        The forwarded IP Address header field consists of the corresponding http request IP Address field between PSU and TPP.
      schema:
        type: string
        format: ipv4
      required: false
      example: 192.168.8.78


    PSU-IP-Port:
      name: PSU-IP-Port
      in: header
      description: |
        The forwarded IP Port header field consists of the corresponding HTTP request IP Port field between PSU and TPP, if available.
      schema:
        oneOf:
          - type: integer
          - type: string
      required: false
      example: "1234"


    PSU-Accept:
      name: PSU-Accept
      in: header
      description: |
        The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available.
      schema:
        type: string
      required: false


    PSU-Accept-Charset:
      name: PSU-Accept-Charset
      in: header
      description: |
        The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available.
      schema:
        type: string
      required: false


    PSU-Accept-Encoding:
      name: PSU-Accept-Encoding
      in: header
      description: |
        The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available.
      schema:
        type: string
      required: false


    PSU-Accept-Language:
      name: PSU-Accept-Language
      in: header
      description: |
        The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available.
      schema:
        type: string
      required: false


    PSU-User-Agent:
      name: PSU-User-Agent
      in: header
      description: |
        The forwarded Agent header field of the HTTP request between PSU and TPP, if available.
      schema:
        type: string
      required: false


    PSU-Http-Method:
      name: PSU-Http-Method
      in: header
      description: |
        HTTP method used at the PSU/TPP interface, if available.
        Valid values are:
        * GET
        * POST
        * PUT
        * PATCH
        * DELETE
      schema:
        type: string
        enum:
          - "GET"
          - "POST"
          - "PUT"
          - "PATCH"
          - "DELETE"
      required: false


    PSU-Device-ID:
      name: PSU-Device-ID
      in: header
      description: |
        UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available.
        UUID identifies either a device or a device dependent application installation.
        In case of an installation identification this ID need to be unaltered until removal from the device.
      schema:
        type: string
        format: uuid
      required: false
      example: "99435c7e-ad88-49ec-a2ad-99ddcb1f5555"

    PSU-Geo-Location:
      name: PSU-Geo-Location
      in: header
      description: |
        The forwarded Geo Location of the corresponding http request between PSU and TPP if available.
      schema:
        type: string
        pattern: '(GEO:)[0-9]{1,3}\.[-][0-9]{6}\,[-][0-9]{1,3}\.[0-9]{6}'
      required: false
      example: GEO:52.506931,13.144558

    #Sparkasse Bank Malta plc added
    Date:
      name: Date
      in: header
      description: |
        Mandatory. Allowed format is RFC 822.
        Example:Sun, 06 Nov 1994 08:49:37 GMT
      required: true
      schema:
        type: string
        format: date

    #Sparkasse Bank Malta plc added
    fundConfirmationInteractiveId_PATH:
      name: fundConfirmationInteractiveId
      in: path
      description: |
        Resource identification of the generated Fund Confirmation Interactive resource
      required: true
      schema:
        $ref: "#/components/schemas/fundConfirmationInteractiveId"

  requestBodies:
  #####################################################
  # Reusable Request Bodies
  #####################################################

    paymentInitiation:
      description: |
        JSON request body for a payment inition request message

        The following payment-products are supported:
          * "sepa-credit-transfers" with JSON-Body
          * "target-2-payments" with JSON-Body
          * "cross-border-credit-transfers" with JSON-Body

        The following payment-services are supported:
          * "payments"

      required: true
      content:
        application/json:
          schema:
            oneOf:
              - $ref: "#/components/schemas/paymentInitiationSct_json"
              - $ref: "#/components/schemas/paymentInitiationTarget2_json"
              - $ref: "#/components/schemas/paymentInitiationCrossBorder_json"

          examples:
            "Example 1: 'payments' - 'sepa-credit-transfers'":
              $ref: "#/components/examples/paymentInitiationSctBody_payments_json"

    signingBasket:
      description: |
        Request body for a confirmation of an establishing signing basket request
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/signingBasket"
          examples:
            Example:
              $ref: "#/components/examples/signingBasketExample"


    confirmationOfFunds:
      description: |
        Request body for a confirmation of funds request.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/confirmationOfFunds"
          examples:
            "Example":
              $ref: "#/components/examples/confirmationOfFundsExample"
      required: true


    consents:
      description: |
        Requestbody for a consents request
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/consents"
          examples:
            "Consent Request on Dedicated Accounts":
              $ref: "#/components/examples/consentsExample_DedicatedAccounts"
            "Consent on Account List of Available Accounts":
              $ref: "#/components/examples/consentsExample_AccountList"
            "Consent Request on Account List or without Indication of dedicated Accounts":
              $ref: "#/components/examples/consentsExample_without_Accounts"

  headers:
  #####################################################
  # Reusable Response Header Elements
  #####################################################

    X-Request-ID:
      description: ID of the request, unique to the call, as determined by the initiating party.
      required: true
      example: "99391c7e-ad88-49ec-a2ad-99ddcb1f7721"
      schema:
        type: string
        format: uuid

    ASPSP-SCA-Approach:
      description: |
        This data element must be contained, if the SCA Approach is already fixed.
        Possible values are
          * EMBEDDED
          * DECOUPLED
          * REDIRECT
        The OAuth SCA approach will be subsumed by REDIRECT.
      schema:
        type: string
        enum:
          - "EMBEDDED"
          - "DECOUPLED"
          - "REDIRECT"
        example: "EMBEDDED"
      required: false

    Location:
      description: |
        Location of the created resource.
      schema:
        type: string
        format: url
      required: false

  responses:
  #####################################################
  # Reusabale Responses
  #####################################################
    #####################################################
    # Positive Responses
    #####################################################

    OK_200_PaymentInitiationInformation:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
      content:
        application/json:
           schema:
            oneOf:
              - $ref: "#/components/schemas/paymentInitiationSctWithStatusResponse"
              #- $ref: "#/components/schemas/paymentInitiationSctInstWithStatusResponse"
              - $ref: "#/components/schemas/paymentInitiationTarget2WithStatusResponse"
              - $ref: "#/components/schemas/paymentInitiationCrossBorderWithStatusResponse"
              #- $ref: "#/components/schemas/periodicPaymentInitiationSctWithStatusResponse"
              #- $ref: "#/components/schemas/periodicPaymentInitiationSctInstWithStatusResponse"
              #- $ref: "#/components/schemas/periodicPaymentInitiationTarget2WithStatusResponse"
              #- $ref: "#/components/schemas/periodicPaymentInitiationCrossBorderWithStatusResponse"
              #- $ref: "#/components/schemas/bulkPaymentInitiationSctWithStatusResponse"
              #- $ref: "#/components/schemas/bulkPaymentInitiationSctInstWithStatusResponse"
              #- $ref: "#/components/schemas/bulkPaymentInitiationTarget2WithStatusResponse"
              #- $ref: "#/components/schemas/bulkPaymentInitiationCrossBorderWithStatusResponse"


    OK_200_PaymentInitiationStatus:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/paymentInitiationStatusResponse-200_json"
          examples:
            simple:
              $ref: "#/components/examples/paymentInitiationStatusResponse_json_Simple"
            extended:
              $ref: "#/components/examples/paymentInitiationStatusResponse_json_Extended"



    OK_200_Authorisations:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/authorisations"
          examples:
            Example:
              $ref: "#/components/examples/authorisationListExample"


    OK_200_PaymentInitiationCancel:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/paymentInitiationCancelResponse-200_202"
          examples:
            Example:
              $ref: "#/components/examples/paymentInitiationCancelResponse-200_202"


    OK_200_ScaStatus:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/scaStatusResponse"


    OK_200_AccountList:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/accountList"
          examples:
            "Example 1":
              $ref: "#/components/examples/accountListExample1"
            "Example 2":
              $ref: "#/components/examples/accountListExample2"
            "Example 3":
              $ref: "#/components/examples/accountListExample3"


    OK_200_CancellationList:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/cancellationList"
          examples:
            "Example 1":
              $ref: "#/components/examples/cancellationListExample"


    OK_200_AccountDetails:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/accountDetails"
          examples:
            "Regular Account":
              $ref: "#/components/examples/accountDetailsRegularAccount"
            "Multicurrency Account":
              $ref: "#/components/examples/accountDetailsMulticurrencyAccount"


    OK_200_TransactionDetails:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/transactionDetails"
          examples:
            Example:
              $ref: "#/components/examples/transactionDetailsExample"


    OK_200_Balances:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/readBalanceResponse-200"
          examples:
            "Example 1: Regular Account":
              $ref: "#/components/examples/balancesExample1_RegularAccount"
            "Example 2: Multicurrency Account":
              $ref: "#/components/examples/balancesExample2_MulticurrencyAcount"


    OK_200_Transactions:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/transactionsResponse-200_json"
          examples:
            "Example 1":
              $ref: "#/components/examples/transactionsExample1_RegularAccount_json"
            "Example 2":
              $ref: "#/components/examples/transactionsExample2_Download_json"
            "Example 3":
              $ref: "#/components/examples/transactionsExample3_MulticurrencyAccount_json"


    OK_200_ConsentInformation:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/consentInformationResponse-200_json"
          examples:
            Example:
              $ref: "#/components/examples/consentsInformationResponseExample"


    OK_200_ConsentsStatus:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/consentStatusResponse-200"
          examples:
            Example:
              $ref: "#/components/examples/consentStatusResponseExample1"


    OK_200_UpdatePsuData:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
        ASPSP-SCA-Approach:
          $ref: "#/components/headers/ASPSP-SCA-Approach"

      content:
        application/json:
          schema:

            oneOf:
              - $ref: "#/components/schemas/updatePsuIdenticationResponse" #Update PSU Identification
              - $ref: "#/components/schemas/updatePsuAuthenticationResponse" #Update PSU Authentication
              - $ref: "#/components/schemas/selectPsuAuthenticationMethodResponse" #Select Authentication Method
              - $ref: "#/components/schemas/scaStatusResponse" #Transaction Authorisation
          examples:
            "Update PSU Identification - Payment Initiation (Decoupled Approach)":
              $ref: "#/components/examples/updatePsuIdentificationResponseExample_Decoupled_payments"
            "Update PSU Authentication - Payment Initiation (Embedded Approach)":
              $ref: "#/components/examples/updatePsuAuthenticationResponseExample_Embedded_payments"
            "Select PSU Authentication - Payment Initiation Method (Embedded Approach)":
              $ref: "#/components/examples/selectPsuAuthenticationMethodResponseExample_Embedded_payments"
            "Transaction Authorisation (Embedded Approach)":
              $ref: "#/components/examples/transactionAuthorisationResponseExample"
            #TODO Add further examples Update PSU Data for different endpoints


    OK_200_GetSigningBasket:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/signingBasketResponse-200"
          examples:
            Example:
              $ref: "#/components/examples/getSigningBasketResponseExample1"


    CREATED_201_PaymentInitiation:
      description: CREATED

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
        Location:
          $ref: "#/components/headers/Location"
        ASPSP-SCA-Approach:
          $ref: "#/components/headers/ASPSP-SCA-Approach"

      content:
        application/json:
          schema:
            oneOf:
              - $ref: "#/components/schemas/paymentInitationRequestResponse-201"
              - $ref: "#/components/schemas/paymentInitationRequestMultiLevelScaResponse-201"
          examples:
            "Response in case of a redirect with an implicitly created authorisation sub-resource":
              $ref: "#/components/examples/paymentInitiationExample_json_Redirect"
            "Response in case of a redirect where an explicit authorisation start is needed":
              $ref: "#/components/examples/paymentInitiationExample_json__RedirectExplicitAuthorisation"
            "Response in case of an OAuth2 SCA approach approach with implicitly creating an authorisation sub-resource":
              $ref: "#/components/examples/paymentInitiationExample_json_OAuth2"
            "Response in case of the decoupled approach with explicit start of authorisation needed (will be done with the update PSU identification function)":
              $ref: "#/components/examples/paymentInitiationExample_json_Decoupled"
            "Response in case of the embedded approach with explicit start of authorisation":
              $ref: "#/components/examples/paymentInitiationExample_json_Embedded"
          #TODO Add Example for Multilevel SCA Response


    OK_200_ConfirmationOfFunds:
      description: OK

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            description: |
              Equals "true" if sufficient funds are available at the time of the request,
              "false" otherwise.
            type: object
            required:
              - fundsAvailable
            properties:
              fundsAvailable:
                type: boolean
          examples:
            "Example":
              $ref: "#/components/examples/confirmationOfFundsResponseExample"


    CREATED_201_SigningBasket:
      description: Created

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
        ASPSP-SCA-Approach:
          $ref: "#/components/headers/ASPSP-SCA-Approach"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/signingBasketResponse-201"
          examples:
            "Response (always with explicit authorization start)":
              $ref: "#/components/examples/createSigningBasketResponseExample1"


    CREATED_201_StartScaProcess:
      description: Created

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
        ASPSP-SCA-Approach:
          $ref: "#/components/headers/ASPSP-SCA-Approach"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/startScaprocessResponse"
          examples:
            "Example 1: payments - Decoupled Approach":
               $ref: "#/components/examples/startScaProcessResponseExample1"
            #TODO Add further examples for startScaprocessResponse

    CREATED_201_Consents:
      description: Created

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
        ASPSP-SCA-Approach:
          $ref: "#/components/headers/ASPSP-SCA-Approach"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/consentsResponse-201"

          examples:
            "Response in case of a redirect":
              $ref: "#/components/examples/consentResponseExample1a_Redirect"
            "Response in case of a redirect with a dedicated start of the authorisation process":
              $ref: "#/components/examples/consentResponseExample1b_Redirect"
            "Response in case of the OAuth2 approach with an implicit generated authorisation resource":
              $ref: "#/components/examples/consentResponseExample2_OAuth2"
            "Response in case of the decoupled approach":
              $ref: "#/components/examples/consentResponseExample3_Decoupled"
            "Response in case of the embedded approach":
              $ref: "#/components/examples/consentResponseExample4_Embedded"


    RECEIVED_202_PaymentInitiationCancel:
      description: Received

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/paymentInitiationCancelResponse-200_202"
          examples:
            Example:
              $ref: "#/components/examples/paymentInitiationCancelResponse-202"

    NO_CONTENT_204_Consents:
      description: No Content

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
      #NO RESPONSE BODY


    #Sparkasse Bank Malta plc added
    CREATED_201_FundConfirmationInteractive:
      description: CREATED

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/cofinitiationresponse"
          examples:
            "Response in case of a redirect":
              $ref: "#/components/examples/cofinitiationresponseExample1a_Redirect"


    #Sparkasse Bank Malta plc added
    OK_200_FundConfirmationInteractiveResponse:
      description: OK

      headers:
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/cofstatusresponse"
          examples:
            "Example":
              $ref: "#/components/examples/fundConfirmationInteractiveResponseExample"

    #####################################################
    # Negative Responses
    #####################################################

    BAD_REQUEST_400:
      description: Bad Request

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/tppMessages400"
          example:
            { "tppMessages": [{
            "category": "ERROR",
            "code": "FORMAT_ERROR",
            "text": "additional text information of the ASPSP up to 512 characters"
            }]
            }


    UNAUTHORIZED_401:
      description: Unauthorized

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/tppMessages401"
          example:
            { "tppMessages": [{
            "category": "ERROR",
            "code": "CERTIFICATE_INVALID",
            "text": "additional text information of the ASPSP up to 512 characters"
            }]
            }


    FORBIDDEN_403:
      description: Forbidden

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/tppMessages403"
          example:
            { "tppMessages": [{
            "category": "ERROR",
            "code": "SERVICE_BLOCKED",
            "text": "additional text information of the ASPSP up to 512 characters"
            }]
            }


    NOT_FOUND_404:
      description: Not found

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/tppMessages404"
          example:
            { "tppMessages": [{
            "category": "ERROR",
            "code": "PRODUCT_UNKNOWN",
            "text": "additional text information of the ASPSP up to 512 characters"
            }]
            }


    METHOD_NOT_ALLOWED_405:
      description: Method Not Allowed

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/tppMessages405"
          example:
            { "tppMessages": [{
            "category": "ERROR",
            "code": "SERVICE_INVALID",
            "text": "additional text information of the ASPSP up to 512 characters"
            }]
            }


    NOT_ACCEPTABLE_406:
      description: Not Acceptable

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/tppMessages406"
          example:
            { "tppMessages": [{
            "category": "ERROR",
            "code": "REQUESTED_FORMATS_INVALID",
            "text": "additional text information of the ASPSP up to 512 characters"
            }]
            }

    REQUEST_TIMEOUT_408:
      description: Request Timeout

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
      #No TPP-Messages defined
      #NO RESPONSE BODY


    UNSUPPORTED_MEDIA_TYPE_415:
      description: Unsupported Media Type

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
      #No TPP-Messages defined
      #NO RESPONSE BODY


    TOO_MANY_REQUESTS_429:
      description: Too Many Requests

      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"

      content:
        application/json:
          schema:
            $ref: "#/components/schemas/tppMessages429"
          example:
            { "tppMessages": [{
            "category": "ERROR",
            "code": "ACCESS_EXCEEDED",
            "text": "additional text information of the ASPSP up to 512 characters"
            }]
            }


    INTERNAL_SERVER_ERROR_500:
      description: Internal Server Error
      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
      #No TPP-Messages defined
      #NO RESPONSE BODY


    SERVICE_UNAVAILABLE_503:
      description: Service Unavailable
      headers:
        Location:
          $ref: "#/components/headers/Location"
        X-Request-ID:
          $ref: "#/components/headers/X-Request-ID"
      #No TPP-Messages defined
      #NO RESPONSE BODY


  examples:
  #####################################################
  # Predefined Examples
  #####################################################

    ibanExampleDe_01:
      value: "DE02100100109307118603"


    ibanExampleDe_02:
      value: "DE23100120020123456789"


    ibanExampleDe_03:
      value: "DE40100100103307118608"


    ibanExampleDe_04:
      value: "DE67100100101306118605"


    ibanExampleDe_05:
      value: "DE87200500001234567890"


    ibanExampleFr_01:
      value: "FR7612345987650123456789014"


    ibanExampleNl_01:
      value: "NL76RABO0359400371"


    ibanExampleSe_01:
      value: "SE9412309876543211234567"


    maskedPanExample:
      value: "123456xxxxxx1234"


    uuidExample:
      value: "99391c7e-ad88-49ec-a2ad-99ddcb1f7721"


    pain.001.001_SCT_singleTransaction:
      description: A pain.001.001.03 message in case of SCT
      value: >
        <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
          <CstmrCdtTrfInitn>
            <GrpHdr>
              <MsgId>MIPI-123456789RI-123456789</MsgId>
              <CreDtTm>2017-02-14T20:23:34.000Z</CreDtTm>
              <NbOfTxs>1</NbOfTxs>
              <CtrlSum>123</CtrlSum>
              <InitgPty>
                <Nm>PaymentInitiator</Nm>
                <Id><OrgId><Othr><Id>DE10000000012</Id>
                  <SchmeNm><Prptry>PISP</Prptry></SchmeNm></Othr></OrgId></Id>
              </InitgPty>
            </GrpHdr>
            <PmtInf>
              <PmtInfId>BIPI-123456789RI-123456789</PmtInfId>
              <PmtMtd>TRF</PmtMtd>
              <NbOfTxs>1</NbOfTxs>
              <CtrlSum>123</CtrlSum>
              <PmtTpInf><SvcLvl><Cd>SEPA</Cd></SvcLvl></PmtTpInf>
              <ReqdExctnDt>2017-02-15</ReqdExctnDt>
              <Dbtr><Nm>PSU Name</Nm></Dbtr>
              <DbtrAcct><Id><IBAN>DE87200500001234567890</IBAN></Id></DbtrAcct>
              <ChrgBr>SLEV</ChrgBr>
              <CdtTrfTxInf>
                <PmtId><EndToEndId>RI-123456789</EndToEndId></PmtId>
                <Amt><InstdAmt Ccy="EUR">123</InstdAmt></Amt>
                <Cdtr><Nm>Merchant123</Nm></Cdtr>
                <CdtrAcct><Id><IBAN> DE23100120020123456789</IBAN></Id></CdtrAcct>
                <RmtInf><Ustrd>Ref Number Merchant-123456</Ustrd></RmtInf>
              </CdtTrfTxInf>
            </PmtInf>
          </CstmrCdtTrfInitn>
        </Document>


    pain.002.001_SCT_singleTransaction:
      description: A pain.002.001.03 message in case of SCT
      value: >
        <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.03">
          <CstmrPmtStsRpt>
            <GrpHdr>
              <MsgId>4572457256725689726906</MsgId>
              <CreDtTm>2017-02-14T20:24:56.021Z</CreDtTm>
              <DbtrAgt><FinInstnId><BIC>ABCDDEFF</BIC></FinInstnId></DbtrAgt>
              <CdtrAgt><FinInstnId><BIC>DCBADEFF</BIC></FinInstnId></CdtrAgt>
            </GrpHdr>
            <OrgnlGrpInfAndSts>
              <OrgnlMsgId>MIPI-123456789RI-123456789</OrgnlMsgId>
              <OrgnlMsgNmId>pain.001.001.03</OrgnlMsgNmId>
              <OrgnlCreDtTm>2017-02-14T20:23:34.000Z</OrgnlCreDtTm>
              <OrgnlNbOfTxs>1</OrgnlNbOfTxs>
              <OrgnlCtrlSum>123</OrgnlCtrlSum>
              <GrpSts>ACCT</GrpSts>
            </OrgnlGrpInfAndSts>
            <OrgnlPmtInfAndSts>
              <OrgnlPmtInfId>BIPI-123456789RI-123456789</OrgnlPmtInfId>
              <OrgnlNbOfTxs>1</OrgnlNbOfTxs>
              <OrgnlCtrlSum>123</OrgnlCtrlSum>
              <PmtInfSts>ACCT</PmtInfSts>
            </OrgnlPmtInfAndSts>
          </CstmrPmtStsRpt>
        </Document>


    camt.052Example:
      description: |
        camt.052 XML message
      value:
        camt.052 example needed#TODO Add example camt.052

    camt.053Example:
      description: |
        camt.053 XML message
      value:
        camt.053 example needed#TODO Add example camt.053


    camt.054Example:
      description: |
        camt.054 XML message
      value:
        camt.054 example needed#TODO Add example camt.054


    mt940Example:
      description: |
        MT940 text message
      value:
        MT940 example needed#TODO Add example MT940


    mt942Example:
      description: |
        MT940 text message
      value:
        MT942 example needed#TODO Add example MT942


    paymentInitiationSctBody_payments_json:
      value:
        {
          "instructedAmount": {"currency": "EUR", "amount": "123.50"},
          "debtorAccount": {"iban": "DE40100100103307118608"},
          "creditorName": "Merchant123",
          "creditorAccount": {"iban": "DE02100100109307118603"},
          "remittanceInformationUnstructured": "Ref Number Merchant"
        }


    paymentInitiationSctBody_periodic-payments_json:
      value:
        {
        "instructedAmount": {"currency": "EUR", "amount": "123"},
        "debtorAccount": {"iban": "DE40100100103307118608"},
        "creditorName": "Merchant123",
        "creditorAccount": {"iban": "DE23100120020123456789"},
        "remittanceInformationUnstructured": "Ref Number Abonnement",
        "startDate": "2018-03-01",
        "executionRule": "latest",
        "frequency": "monthly",
        "dayOfExecution": "01"
        }



    paymentInitiationSctBody_bulk-payments_json:
      value:
        {
        "batchBookingPreferred": "true",
        "debtorAccount": {"iban": "DE40100100103307118608"},
        "requestedExecutionDate": "2018-08-01",
        "payments":
          [
            {
            instructedAmount": {"currency": "EUR", "amount": "123.50"},
            "creditorName": "Merchant123",
            "creditorAccount": {"iban": "DE02100100109307118603"},
            "remittanceInformationUnstructured": "Ref Number Merchant 1"
            }, {
            instructedAmount": {"currency": "EUR", "amount": "34.10"},
            "creditorName": "Merchant456",
            "creditorAccount": {"iban": "FR7612345987650123456789014"},
            "remittanceInformationUnstructured": "Ref Number Merchant 2"
            }]
        }


    accountDetailsRegularAccount:
      description: Account Details for a regular Account
      value:
        {
          "account":
            {
              "resourceId": "3dc3d5b3-7023-4848-9853-f5400a64e80f",
              "iban": "FR7612345987650123456789014",
              "currency": "EUR",
              "product": "Girokonto",
              "cashAccountType": "CurrentAccount",
              "name": "Main Account",
              "_links":
                {
                  "balances": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/balances"},
                  "transactions": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/transactions"}
                 }
            }
        }


    accountDetailsMulticurrencyAccount:
      description: Account Details for a multicurrency Account
      value:
        {
          "account":
            {
              "resourceId": "3dc3d5b3-7023-4848-9853-f5400a64e80f",
              "iban": "FR7612345987650123456789014",
              "currency": "XXX",
              "product": "Multicurrency Account",
              "cashAccountType": "CurrentAccount",
              "name": "Aggregation Account",
              "_links":
                {
                  "balances": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/balances"},
                  "transactions": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/transactions"}
                }
            }
        }


    accountListExample1:
      summary: Account list Example 1
      description: Response in case of an example, where the consent has been given on two different IBANs
      value:
        {"accounts":
           [
              {"resourceId": "3dc3d5b3-7023-4848-9853-f5400a64e80f",
               "iban": "DE2310010010123456789",
               "currency": "EUR",
               "product": "Girokonto",
               "cashAccountType": "CurrentAccount",
               "name": "Main Account",
               "_links": {
            "balances": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/balances"},
            "transactions": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/transactions"}}
              },
              {"resourceId": "3dc3d5b3-7023-4848-9853-f5400a64e81g",
               "iban": "DE2310010010123456788",
               "currency": "USD",
               "product": "Fremdwährungskonto",
               "cashAccountType": "CurrentAccount",
               "name": "US Dollar Account",
               "_links": {
            "balances": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e81g/balances" }}
               }
        ]}


    accountListExample2:
      summary: Account list Example 2
      description: |
        Response in case of an example where consent on transactions and balances has been given to a multicurrency account which has two sub-accounts with currencies EUR and USD, and where the ASPSP is giving the data access only on sub-account level
      value:
        {"accounts":
           [
              {"resourceId": "3dc3d5b3-7023-4848-9853-f5400a64e80f",
               "iban": "DE2310010010123456788",
               "currency": "EUR",
               "product": "Girokonto",
               "cashAccountType": "CurrentAccount",
               "name": "Main Account",
               "_links": {
            "balances": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/balances"},
            "transactions": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/transactions"}}
              },
              {"resourceId": "3dc3d5b3-7023-4848-9853-f5400a64e81g",
               "iban": "DE2310010010123456788",
               "currency": "USD",
               "product": "Fremdwährungskonto",
               "cashAccountType": "CurrentAccount",
               "name": "US Dollar Account",
               "_links": {
                 "balances": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e81g/balances"},
                 "transactions": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e81g/transactions"} }
               }
        ]}


    accountListExample3:
      summary: Account list Example 3
      description: |
        Account list response in case of an example where consent on balances and transactions has been given to
        a multicurrency account which has two sub-accounts with currencies EUR and USD and where the ASPSP is giving
        the data access on aggregation level and on sub-account level
      value:
        {"accounts":
           [
              {"resourceId": "3dc3d5b3-7023-4848-9853-f5400a64e80f",
               "iban": "DE2310010010123456788",
               "currency": "XXX",
               "product": "Multi currency account",
               "cashAccountType": "CurrentAccount",
               "name": "Aggregation Account",
               "_links": {
            "balances": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e333/balances"},
            "transactions": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e333/transactions"}}
              },
        {"resourceId": "3dc3d5b3-7023-4848-9853-f5400a64e80f",
               "iban": "DE2310010010123456788",
               "currency": "EUR",
               "product": "Girokonto",
               "cashAccountType": "CurrentAccount",
               "name": "Main Account",
               "_links": {
            "balances": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/balances"},
            "transactions": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f/transactions"}}
              },
              {"resourceId": "3dc3d5b3-7023-4848-9853-f5400a64e81g",
               "iban": "DE2310010010123456788",
               "currency": "USD",
               "product": "Fremdwährungskonto",
               "cashAccountType": "CurrentAccount",
               "name": "US Dollar Account",
               "_links": {
            "balances": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e81g/balances"},
            "transactions": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e81g/transactions"} }
               }
        ]}


    startScaProcessResponseExample1:
      value:
        {
           "scaStatus": "received",
           "psuMessage": "Please use your BankApp for transaction Authorisation.",
           "_links":
            {
              "scaStatus":  {"href":"/v1/payments/qwer3456tzui7890/authorisations/123auth456"}
            }
        }



    signingBasketExample:
      description: "JSON Body of a signing basket request"
      value:
        {
           "paymentIds": ["123qwert456789", "12345qwert7899"]
        }


    createSigningBasketResponseExample1:
      description:
        Response (always with explicit authorisation start)
      value:
        {
          "transactionStatus": "RCVD",
          "basketId": "1234-basket-567",
          "_links":
                {
                "self": {"href": "/v1/signing-baskets/1234-basket-567"},
                "status": {"href": "/v1/signing-baskets/1234-basket-567/status"},
                "startAuthorisation": {"href": "/v1/signing-baskets/1234-basket-567/authorisations"}
                }
        }


    getSigningBasketResponseExample1:
      value:
        {
          "payments": ["1234pay567","1234pay568","1234pay888"],
          "transactionStatus": "ACTC"
        }


    consentsExample_DedicatedAccounts:
      description: Consent request on dedicated accounts
      value:
        {
        "access":
          {
            "balances": [
                { "iban": "DE40100100103307118608" },
                { "iban": "DE02100100109307118603",
          "currency": "USD"
                },
                { "iban": "DE67100100101306118605" }
              ],
            "transactions": [
                { "iban": "DE40100100103307118608" },
                { "maskedPan": "123456xxxxxx1234" }
              ]
           },
        "recurringIndicator": "true",
        "validUntil": "2017-11-01",
        "frequencyPerDay": "4"
       }



    consentsExample_AccountList:
      description: Consent on Account List of Available Accounts
      value:
        {"access":
          {"availableAccounts": "allAccounts"},
         "recurringIndicator": "false",
         "validUntil": "2017-08-06",
         "frequencyPerDay": "1"
        }


    consentsExample_without_Accounts:
      description: Consent request on account list or without indication of accounts
      value:
        {"access":
        {
          "balances": [],
          "transactions": []
        },
        "recurringIndicator": "true",
        "validUntil": "2017-11-01",
        "frequencyPerDay": "4"
        }


    updatePsuAuthenticationExample_Embedded:
      description: Update PSU Authentication request body for the embedded approach.
      value:
        {
          "psuData": {"password": "start12"}
        }


    selectPsuAuthenticationMethodExample_Embedded:
      description: Select PSU Authentication Method request body for the embedded approach.
      value:
        {
          authenticationMethodId: "myAuthenticationID"
        }


    transactionAuthorisationExample_Embedded:
      description: Transaction Authorisation request body for the embedded approach.
      value:
        {
         "scaAuthenticationData": "123456"
        }


    consentsInformationResponseExample:
      description: Consent request on account list or without indication of accounts
      value:
        {
          "access": {
            "balances": [
              {"iban": "DE2310010010123456789"}
                ],
            "transactions":
              [
              {"iban": "DE2310010010123456789"},
              {"pan": "123456xxxxxx3457"}
              ]
            },
          "recurringIndicator": "true",
          "validUntil": "2017-11-01",
          "frequencyPerDay": "4",
          "consentStatus": "valid",
          "_links": {"account": {"href": "/v1/accounts"}}
        }


    consentResponseExample1a_Redirect:
      description: Consent request Response in case of a redirect
      value:
        {
          "consentStatus": "received",
          "consentId": "1234-wertiq-983",
          "_links":
            {
            "scaRedirect": {"href": "https://www.testbank.com/authentication/1234-wertiq-983"},
            "status": {"href": "/v1/consents/1234-wertiq-983/status"},
            "scaStatus": {"href": "v1/consents/1234-wertiq-983/authorisations/123auth567"}
            }
        }


    consentResponseExample1b_Redirect:
      description: Consent request Response in case of a redirect with a dedicated start of the authorisation process
      value:
        {
          "consentStatus": "received",
          "consentId": "1234-wertiq-983",
          "_links":
            {
            "startAuthorisation": {"href": "v1/consents/1234-wertiq-983/authorisations"}
            }
        }


    cofinitiationresponseExample1a_Redirect:
      description: Confirmation of funds interactive request Response in case of a redirect
      value:
        {
          "fundConfirmationInteractiveId": "ed3bd023-e52e-48e8-8e9f-b8d6b85cc4b8",
          "_links":
            {
            "status": {"href": "/v1/fund_confirmations_interative/ed3bd023-e52e-48e8-8e9f-b8d6b85cc4b8/status"}
            }
        }


    consentResponseExample2_OAuth2:
      description: Response in case of the OAuth2 approach with an implicit generated authorisation resource
      value:
        {
        "consentStatus": "received",
        "consentId": "1234-wertiq-983",
        "_links":
          {
            "self": {"href": "/v1/consents/1234-wertiq-983"},
            "scaStatus": {"href": "v1/consents/1234-wertiq-983/authorisations/123auth567"},
            "scaOAuth": {"href": "https://www.testbank.com/oauth/.well-known/oauth-authorization-server"}
          }
        }


    fundConfirmationInteractiveResponseExample:
      description: Response of a funds confirmation interactive status request 
      value:
        {
        "cofstatus": "YES"
        }


    consentResponseExample3_Decoupled:
      description: Response in case of the decoupled approach
      value:
        {
          "consentStatus": "received",
          "consentId": "1234-wertiq-983",
          "_links":
            {
            "startAuthorisationWithPsuIdentification": {"href": "/v1/consents/1234-wertiq-983/authorisations"}
            }
        }


    consentResponseExample4_Embedded:
      description: Response in case of the embedded approach
      value:
        {
          "consentStatus": "received",
          "consentId": "1234-wertiq-983",
          "_links":
            {
            "startAuthorisationWithPsuAuthentication": {"href": "/v1/consents/1234-wertiq-983/authorisations"}
            }
        }


    consentStatusResponseExample1:
      description: Response for a consent status request.
      value:
        {
          "consentStatus": "valid",
        }


    paymentInitiationExample_json_Redirect:
      description: "Response in case of a redirect with an implicitly created authorisation sub-resource"
      value:
        {
          "transactionStatus": "RCVD",
          "paymentId": "1234-wertiq-983",
          "_links":
            {
            "scaRedirect": {"href": "https://www.testbank.com/asdfasdfasdf"},
            "self": {"href": "/v1/payments/sepa-credit-transfers/1234-wertiq-983"},
            "status": {"href": "/v1/payments/1234-wertiq-983/status"},
            "scaStatus": {"href": "/v1/payments/1234-wertiq-983/authorisations/123auth456"}
            }
        }


    paymentInitiationExample_json__RedirectExplicitAuthorisation:
      description: "Response in case of a redirect with an explicit authorisation start"
      value:
        {
          "transactionStatus": "RCVD",
          "paymentId": "1234-wertiq-983",
          "_links":
            {
            "self": {"href": "/v1/payments/1234-wertiq-983"},
            "status": {"href": "/v1/payments/1234-wertiq-983/status"},
            "startAuthorisation": {"href": "/v1/payments1234-wertiq-983/authorisations"}
            }
        }



    paymentInitiationExample_json_OAuth2:
      description: "Response in case of an OAuth2 SCA approach approach with implicitly creating an authorisation sub-resource"
      value:
        {
          "transactionStatus": "RCVD",
          "paymentId": "1234-wertiq-983",
          "_links":
            {
            "scaOAuth": {"href": "https://www.testbank.com/oauth/.well-known/oauth-authorization-server"},
            "self": {"href": "/v1/payments/1234-wertiq-983"},
            "status": {"href": "/v1/payments/1234-wertiq-983/status"},
            "scaStatus": {"href": "/v1/payments/1234-wertiq-983/authorisations/123auth456"}
            }
        }



    paymentInitiationExample_json_Decoupled:
      description: "Response in case of the decoupled approach with explicit start of authorisation needed"
      value:
        {
          "transactionStatus": "RCVD",
          "paymentId": "1234-wertiq-983",
          "_links":
            {
            "startAuthorisationWithPsuIdentification": {"href":"/v1/payments/1234-wertiq-983/authorisations"},
            "self": {"href": "/v1/payments/1234-wertiq-983"}
            }
        }


    paymentInitiationExample_json_Embedded:
      description: "Response in case of the embedded approach with explicit start of authorisation"
      value:
        {
          "transactionStatus": "RCVD",
          "paymentId": "1234-wertiq-983",
          "_links":
            {
            "startAuthenticationWithPsuAuthentication": {"href": "/v1/payments/1234-wertiq-983/authorisations"},
            "self": {"href": "/v1/payments/1234-wertiq-983"}
            }
        }


    paymentInitiationStatusResponse_json_Simple:
      value:
        {
        "transactionStatus": "ACCP"
        }


    paymentInitiationCancelResponse-200_202:
      value:
        {
          "transactionStatus": "CANC"
        }


    paymentInitiationCancelResponse-202:
      value:
        {
          "transactionStatus": "ACTC",
          "_links":
            {
            "self": {"href": "/v1/payments/123456scheduled789"},
            "status": {"href": "/v1/payments/123456scheduled789/status"},
            "startAuthorisation": {"href": "/v1/payments/123456scheduled789/cancellation-authorisations"}
            }
        }


    paymentInitiationStatusResponse_json_Extended:
      value: |
        {
          "transactionStatus": "ACCP",
          "scaStatus": "Some SCA Status"
        }


    updatePsuIdentificationResponseExample_Decoupled_payments:
      description: Response of an Update PSU Identification for a payment initiation request for the decoupled approach.
      value:
        {
          "scatransactionStatus": "psuIdentified",
          "psuMessage": "Please use your BankApp for transaction Authorisation.",
          "_links":
            {
              "scaStatus":  {"href":"/v1/payments/qwer3456tzui7890/authorisations/123auth456"}
            }
        }


    updatePsuAuthenticationResponseExample_Embedded_payments:
      description: Response of an Update PSU Authentication for a consent request for the embedded approach.
      value:
        {
          "scaStatus": "psuAuthenticated",
          _links: {
           "authoriseTransaction": {"href": "/v1/payments/1234-wertiq-983/authorisations/123auth456"}
          }
        }


    selectPsuAuthenticationMethodResponseExample_Embedded_payments:
      description: Response of a Select PSU Authentication Method payment initiation request for the embedded approach
      value:
        {
          "scaStatus": "scaMethodSelected",
          "chosenScaMethod": {
          "authenticationType": "SMS_OTP",
          "authenticationMethodId": "myAuthenticationID"},
          "challengeData": {
          "otpMaxLength": "6",
          "otpFormat": "integer"},
          "_links": {
             "authoriseTransaction": {"href": "/v1/payments/1234-wertiq-983/authorisations/123auth456"}
          }
        }


    transactionAuthorisationResponseExample:
      description: Response of a Transaction Authorisation request for the embedded approach.
      value:
        {
          "scaStatus": "finalised"
        }


    confirmationOfFundsExample:
      description: Request body for a confirmation of funds.
      value:
        {
          "cardNumber": "12345678901234",
          "account": {"iban": "DE23100120020123456789"},
          "instructedAmount": {"currency": "EUR", "amount": "123"}
        }


    confirmationOfFundsResponseExample:
      description: Response for a confirmation of funds request.
      value:
        {
          "fundsAvailable": "true"
        }


    balancesExample1_RegularAccount:
      description: Response for a read balance request in case of a regular account.
      value:
        {
          "account": {"iban": "FR7612345987650123456789014"},
          "balances":
              [{"balanceType": "closingBooked",
            "balanceAmount": {"currency": "EUR", "amount": "500.00"},
                "referenceDate": "2017-10-25"
                   },
               {"balanceType": "expected",
                "balanceAmount": {"currency": "EUR","amount": "900.00"},
               "lastChangeDateTime": "2017-10-25T15:30:35.035Z"
               }]
        }


    balancesExample2_MulticurrencyAcount:
      description: |
        Response in case of a multicurrency account with one account in EUR,
        one in USD, where the ASPSP has delivered a link to the balance endpoint relative to the aggregated
        multicurrency account (aggregation level).
      value:
        {
          "balances":
              [{"balanceType": "closingBooked",
                "balanceAmount": {"currency": "EUR", "amount": "500.00"},
                "referenceDate": "2017-10-25"
                   },
              {"balanceType": "expected",
              "balanceAmount": {"currency": "EUR", "amount": "900.00"},
              "lastChangeDateTime": "2017-10-25T15:30:35.035Z"
              },
           {"balanceType": "closingBooked",
                "balanceAmount": {"currency": "USD", "amount": "350.00"},
                "referenceDate": "2017-10-25"
                   },
              {"balanceType": "expected",
               "balanceAmount": {"currency": "USD", "amount": "350.00"},
               "lastChangeDateTime": "2017-10-24T14:30:21Z"
                   }]
        }


    transactionsExample1_RegularAccount_json:
      description: Response in JSON format for an access on a regular account
      value:
        {
          "account": {"iban": "DE2310010010123456788" },
          "transactions":
            {
            "booked":
              [{
              "transactionId": "1234567",
              "creditorName": "John Miles",
              "creditorAccount": {"iban": "DE67100100101306118605"},
              "transactionAmount": {"currency": "EUR", "amount": "256.67"},
              "bookingDate": "2017-10-25",
              "valueDate": "2017-10-26",
              "remittanceInformationUnstructured": "Example 1"
                },{
                 "transactionId": "1234568",
                 "debtorName": "Paul Simpson",
                 "debtorAccount": {"iban": "NL76RABO0359400371"},
                 "transactionAmount": {"currency": "EUR", "amount": "343.01"},
                 "bookingDate": "2017-10-25",
                 "valueDate": "2017-10-26",
                 "remittanceInformationUnstructured": "Example 2"
                }],
            "pending":
              [{
                 "transactionId": "1234569",
                 "creditorName": "Claude Renault",
                 "creditorAccount": {"iban": "FR7612345987650123456789014"},
                 "transactionAmount": {"currency": "EUR", "amount": "-100.03"},
                 "valueDate": "2017-10-26",
                 "remittanceInformationUnstructured": "Example 3"
                }],
            "_links": {"account": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f"}}
             }
        }


    transactionsExample2_Download_json:
      description: Response in case of huge data amount as a download.
      value:
        {
          "_links": {"download": {"href": "www.test-api.com/xs2a/v1/accounts/12345678999/transactions/download/"}}
        }


    transactionsExample3_MulticurrencyAccount_json:
      description: Response in JSON format for an access on a multicurrency account on aggregation level
      value:
        {
        "account": {"iban": "DE40100100103307118608"},
         "transactions":
           {"booked":
             [{
               "transactionId": "1234567",
               "creditorName": "John Miles",
               "creditorAccount": {"iban": "DE67100100101306118605"},
               "transactionAmount": {"currency": "EUR", "amount": "-256.67"},
               "bookingDate": "2017-10-25",
               "valueDate": "2017-10-26",
               "remittanceInformationUnstructured": "Example 1"
              },{
               "transactionId": "1234568",
               "debtorName": "Paul Simpson",
               "debtorAccount": {"iban": "NL76RABO0359400371"},
               "transactionAmount": {"currency": "EUR", "amount": "343.01"},
               "bookingDate": "2017-10-25",
               "valueDate": "2017-10-26",
               "remittanceInformationUnstructured": "Example 2"
              },{
               "transactionId": "1234569",
               "debtorName": "Pepe Martin",
               "debtorAccount": {"iban": "SE9412309876543211234567"},
               "transactionAmount": {"currency": "USD", "amount": "100"},
               "bookingDate": "2017-10-25",
               "valueDate": "2017-10-26",
               "remittanceInformationUnstructured": "Example 3"
              }],
           "pending":
             [{
               "transactionId": "1234570",
               "creditorName": "Claude Renault",
               "creditorAccount": {"iban": "FR7612345987650123456789014"},
               "transactionAmount": {"currency": "EUR", "amount": "-100.03"},
               "valueDate": "2017-10-26",
               "remittanceInformationUnstructured": "Example 4"
              }],
           "_links": {"account": {"href": "/v1/accounts/3dc3d5b3-7023-4848-9853-f5400a64e80f"}}
           }
        }


    transactionDetailsExample:
      description: Example for transaction details
      value:
        {
          "transactionsDetails":
             {
               "transactionId": "1234567",
               "creditorName": "John Miles",
               "creditorAccount": {"iban": "DE67100100101306118605"},
               "mandateId": "Mandate-2018-04-20-1234",
               "transactionAmount": {"currency": "EUR", "amount": "-256.67"},
               "bookingDate": "2017-10-25",
               "valueDate": "2017-10-26",
               "remittanceInformationUnstructured": "Example 1",
               "bankTransactionCode": "PMNT-RCVD-ESDD",
             }
        }



    authorisationListExample:
      value:
        {
          "authorisationIds": ["123auth456"]
        }

    cancellationListExample:
      value:
        {
          "cancellationIds": ["123auth456"]
        }


security:
#####################################################
# Global security options
#####################################################
  - {}


tags:
#####################################################
# Predefined Tags to Group Methods
#####################################################

  - name: Payment Initiation Service (PIS)
    description: |
      The Decription for Payment Initiation Service (PIS) offers the following services:
        * Initiation and update of a payment request
        * Status information of a payment
  - name: Confirmation of Funds Service
    description: |
      Confirmation of Funds Service returns a confirmation of funds request at the ASPSP.
  - name: Account Information Service (AIS)
    description: |
      The Account Information Service (AIS) offers the following services
        * Transaction reports for a given account including balances if applicable.
        * Balances of a given account,
        * A list of available accounts,
        * Account details of a given account or of the list of all accessible accounts relative to a granted consent