{"openapi":"3.0.3","info":{"title":"Pétrusse Bank – PSD2 XS2A sandbox","version":"1.3-sandbox","description":"A fictional bank (ASPSP) with a PSD2 access-to-account interface modelled on the **Berlin Group NextGenPSD2 XS2A Framework v1.3.x**. Used for teaching at the University of Luxembourg. No real money moves.\n\n**TPP identification.** Real PSD2 TPPs identify themselves with a qualified eIDAS certificate (QWAC). This sandbox uses an OAuth2 client-credentials token instead: get one at `POST /oauth/token` and send it as `Authorization: Bearer <token>` on every `/v1` call. Tokens are valid for 15 minutes.\n\n**Common headers.** Every `/v1` request needs `X-Request-ID` (a new UUID per request). It is echoed back. Repeating a POST/DELETE with the same `X-Request-ID` and the same body returns the stored response; the same ID with a different body is a `FORMAT_ERROR`.\n\n**SCA approaches.** Consents (AIS) use the **redirect** approach: open `_links.scaRedirect` in a browser; the PSU logs in with PSU ID and PIN and confirms with a TAN card. Payments (PIS) use the **decoupled** approach: send the `PSU-ID` header; the PSU approves in the Pétrusse Bank app on their phone. There is no `scaRedirect` for payments.\n\n**Access frequency (RTS Art. 36(5)).** Without the PSU actively involved, an AISP may read account data at most `frequencyPerDay` (≤ 4) times per day and consent. Every account/balances/transactions call **without** the `PSU-IP-Address` header counts. Calls **with** `PSU-IP-Address` (the PSU is actively using your app) do not count. Over the limit: `429 ACCESS_EXCEEDED`.\n\n**Amounts** are strings with a dot and at most two decimals (`\"123.45\"`); debits are negative in transaction reports. JSON numbers are rejected with `FORMAT_ERROR`.\n\n**Transactions** are paginated: when there are more, the `transactions._links.next.href` link points to the next page. Pending transactions are returned on the first page only.\n\n**Errors** follow the Berlin Group shape `{\"tppMessages\":[{\"category\":\"ERROR\",\"code\":\"…\",\"text\":\"…\"}]}`. The texts explain what went wrong.\n\n**Bank clock.** Account data is frozen at the exercise date (\"as of\" date); nothing is booked on that date itself.","contact":{"name":"Finance & Technology course"}},"servers":[{"url":"https://petrussebank.berscheid.lu"}],"tags":[{"name":"TPP authentication"},{"name":"Consents (AIS)"},{"name":"Account information (AIS)"},{"name":"Payment initiation (PIS)"}],"paths":{"/oauth/token":{"post":{"tags":["TPP authentication"],"summary":"Get an access token (OAuth2 client credentials, RFC 6749 §4.4)","description":"Authenticate with HTTP Basic (`client_id:client_secret`). Before the client is activated in the developer portal this returns `401 invalid_client`.","security":[{"basicAuth":[]}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["grant_type"],"properties":{"grant_type":{"type":"string","enum":["client_credentials"]}}}}}},"responses":{"200":{"description":"Token issued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"},"example":{"access_token":"q1w2e3…","token_type":"Bearer","expires_in":900,"scope":"AIS PIS"}}}},"400":{"description":"invalid_request / unsupported_grant_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}}},"401":{"description":"invalid_client (unknown, not activated, or wrong secret)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}}},"429":{"description":"Too many token requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}}}}}},"/v1/consents":{"post":{"tags":["Consents (AIS)"],"summary":"Create an account information consent","description":"Three shapes are supported:\n- **Account list only**: `\"access\": {\"availableAccounts\": \"allAccounts\"}` (or `availableAccountsWithBalance`). Gives the list of accounts, not balances or transactions.\n- **Dedicated**: list the accounts by IBAN in `accounts`, `balances` and/or `transactions`.\n- **Bank-offered**: send empty arrays (e.g. `\"balances\": [], \"transactions\": []`); the PSU chooses the accounts on the bank's SCA pages.\n\n`allPsd2` is not offered (`400 SERVICE_INVALID`). `validUntil` may be at most 180 days ahead (`\"9999-12-31\"` = maximum). `frequencyPerDay` must be 1–4. `TPP-Redirect-URI` (https) is required. The response contains `_links.scaRedirect`: open it in a browser.","parameters":[{"$ref":"#/components/parameters/XRequestID"},{"$ref":"#/components/parameters/TPPRedirectURI"},{"$ref":"#/components/parameters/TPPNokRedirectURI"},{"$ref":"#/components/parameters/PSUIPAddressOptional"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Consents"},"example":{"access":{"availableAccounts":"allAccounts"},"recurringIndicator":true,"validUntil":"2027-01-31","frequencyPerDay":4,"combinedServiceIndicator":false}}}},"responses":{"201":{"description":"Consent created, waiting for SCA","headers":{"ASPSP-SCA-Approach":{"schema":{"type":"string","enum":["REDIRECT"]}},"Location":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentsResponse201"},"example":{"consentStatus":"received","consentId":"cns-abc123…","_links":{"scaRedirect":{"href":"https://petrussebank.berscheid.lu/sca/auth-…"},"self":{"href":"/v1/consents/cns-abc123…"},"status":{"href":"/v1/consents/cns-abc123…/status"},"scaStatus":{"href":"/v1/consents/cns-abc123…/authorisations/auth-…"}}}}}},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"429":{"$ref":"#/components/responses/Error429"}}}},"/v1/consents/{consentId}":{"parameters":[{"$ref":"#/components/parameters/consentId"}],"get":{"tags":["Consents (AIS)"],"summary":"Get consent","parameters":[{"$ref":"#/components/parameters/XRequestID"}],"responses":{"200":{"description":"Consent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentInformation"}}}},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"}}},"delete":{"tags":["Consents (AIS)"],"summary":"Delete (terminate) consent","parameters":[{"$ref":"#/components/parameters/XRequestID"}],"responses":{"204":{"description":"Terminated (consentStatus becomes terminatedByTpp)"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"}}}},"/v1/consents/{consentId}/status":{"parameters":[{"$ref":"#/components/parameters/consentId"}],"get":{"tags":["Consents (AIS)"],"summary":"Get consent status","parameters":[{"$ref":"#/components/parameters/XRequestID"}],"responses":{"200":{"description":"Status","content":{"application/json":{"schema":{"type":"object","properties":{"consentStatus":{"$ref":"#/components/schemas/ConsentStatus"}}},"example":{"consentStatus":"valid"}}}},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"}}}},"/v1/consents/{consentId}/authorisations":{"parameters":[{"$ref":"#/components/parameters/consentId"}],"get":{"tags":["Consents (AIS)"],"summary":"List authorisation sub-resources","parameters":[{"$ref":"#/components/parameters/XRequestID"}],"responses":{"200":{"description":"IDs","content":{"application/json":{"schema":{"type":"object","properties":{"authorisationIds":{"type":"array","items":{"type":"string"}}}}}}},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"}}}},"/v1/consents/{consentId}/authorisations/{authorisationId}":{"parameters":[{"$ref":"#/components/parameters/consentId"},{"$ref":"#/components/parameters/authorisationId"}],"get":{"tags":["Consents (AIS)"],"summary":"Get SCA status of the consent authorisation","parameters":[{"$ref":"#/components/parameters/XRequestID"}],"responses":{"200":{"description":"SCA status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScaStatusResponse"},"example":{"scaStatus":"finalised"}}}},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"}}}},"/v1/accounts":{"get":{"tags":["Account information (AIS)"],"summary":"Read account list","description":"Returns the accounts covered by the consent. Counts towards `frequencyPerDay` unless `PSU-IP-Address` is sent.","parameters":[{"$ref":"#/components/parameters/XRequestID"},{"$ref":"#/components/parameters/ConsentID"},{"$ref":"#/components/parameters/PSUIPAddressOptional"},{"name":"withBalance","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Accounts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountList"}}}},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"}}}},"/v1/accounts/{account-id}":{"parameters":[{"$ref":"#/components/parameters/accountId"}],"get":{"tags":["Account information (AIS)"],"summary":"Read account details","parameters":[{"$ref":"#/components/parameters/XRequestID"},{"$ref":"#/components/parameters/ConsentID"},{"$ref":"#/components/parameters/PSUIPAddressOptional"}],"responses":{"200":{"description":"Account","content":{"application/json":{"schema":{"type":"object","properties":{"account":{"$ref":"#/components/schemas/AccountDetails"}}}}}},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"404":{"$ref":"#/components/responses/Error404"},"429":{"$ref":"#/components/responses/Error429"}}}},"/v1/accounts/{account-id}/balances":{"parameters":[{"$ref":"#/components/parameters/accountId"}],"get":{"tags":["Account information (AIS)"],"summary":"Read balances","description":"Returns `closingBooked` (end of the previous day) and `interimAvailable`. Note `creditLimitIncluded`: whether an overdraft limit is included in the amount.","parameters":[{"$ref":"#/components/parameters/XRequestID"},{"$ref":"#/components/parameters/ConsentID"},{"$ref":"#/components/parameters/PSUIPAddressOptional"}],"responses":{"200":{"description":"Balances","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadAccountBalanceResponse"}}}},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"404":{"$ref":"#/components/responses/Error404"},"429":{"$ref":"#/components/responses/Error429"}}}},"/v1/accounts/{account-id}/transactions":{"parameters":[{"$ref":"#/components/parameters/accountId"}],"get":{"tags":["Account information (AIS)"],"summary":"Read transaction list","description":"Booked transactions are returned newest first and paginated. If `transactions._links.next` is present, follow its `href` to get the next page. `dateFrom` before the start of the available history gives `400 PERIOD_INVALID` with the earliest possible date.","parameters":[{"$ref":"#/components/parameters/XRequestID"},{"$ref":"#/components/parameters/ConsentID"},{"$ref":"#/components/parameters/PSUIPAddressOptional"},{"name":"dateFrom","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"dateTo","in":"query","schema":{"type":"string","format":"date"}},{"name":"bookingStatus","in":"query","required":true,"schema":{"type":"string","enum":["booked","pending","both"]}},{"name":"withBalance","in":"query","schema":{"type":"boolean"}},{"name":"pageToken","in":"query","description":"Opaque. Do not build it yourself – use `_links.next.href`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Transactions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionsResponse200Json"}}}},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"404":{"$ref":"#/components/responses/Error404"},"429":{"$ref":"#/components/responses/Error429"}}}},"/v1/payments/{payment-product}":{"parameters":[{"$ref":"#/components/parameters/paymentProduct"}],"post":{"tags":["Payment initiation (PIS)"],"summary":"Initiate a single payment (decoupled SCA)","description":"The `PSU-ID` header is **required**: the bank sends the approval request to that PSU's Pétrusse Bank app (decoupled SCA). The PSU must have an activated app. IBANs are checked with mod-97. The response has `transactionStatus: RCVD` and no `scaRedirect`. Then poll the SCA status, then the payment status.","parameters":[{"$ref":"#/components/parameters/XRequestID"},{"$ref":"#/components/parameters/PSUID"},{"$ref":"#/components/parameters/PSUIPAddressOptional"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentInitiationSctJson"},"example":{"debtorAccount":{"iban":"LU…"},"instructedAmount":{"currency":"EUR","amount":"123.00"},"creditorAccount":{"iban":"LU…"},"creditorName":"Name of the account holder","remittanceInformationUnstructured":"Top-up current account"}}}},"responses":{"201":{"description":"Payment received; approval pending in the app","headers":{"ASPSP-SCA-Approach":{"schema":{"type":"string","enum":["DECOUPLED"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentInitationRequestResponse201"},"example":{"transactionStatus":"RCVD","paymentId":"pay-…","psuMessage":"Please approve this payment in your Pétrusse Bank app.","_links":{"self":{"href":"/v1/payments/sepa-credit-transfers/pay-…"},"status":{"href":"/v1/payments/sepa-credit-transfers/pay-…/status"},"scaStatus":{"href":"/v1/payments/sepa-credit-transfers/pay-…/authorisations/auth-…"}}}}}},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"404":{"$ref":"#/components/responses/Error404"}}}},"/v1/payments/{payment-product}/{paymentId}":{"parameters":[{"$ref":"#/components/parameters/paymentProduct"},{"$ref":"#/components/parameters/paymentId"}],"get":{"tags":["Payment initiation (PIS)"],"summary":"Get payment","parameters":[{"$ref":"#/components/parameters/XRequestID"}],"responses":{"200":{"description":"Payment","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"404":{"$ref":"#/components/responses/Error404"}}}},"/v1/payments/{payment-product}/{paymentId}/status":{"parameters":[{"$ref":"#/components/parameters/paymentProduct"},{"$ref":"#/components/parameters/paymentId"}],"get":{"tags":["Payment initiation (PIS)"],"summary":"Get payment status","description":"ISO 20022 statuses: `RCVD` (received) → `ACTC` (accepted technical validation, after the PSU approved) → `ACSC` (settlement completed) or `RJCT` (rejected). Settlement takes a few seconds (instant) or about half a minute (standard SCT). For `RJCT`, `statusReasonInformation` (sandbox-specific field) carries the ISO 20022 ExternalStatusReason1Code, e.g. AC01, AM04, AM09.","parameters":[{"$ref":"#/components/parameters/XRequestID"}],"responses":{"200":{"description":"Status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentInitiationStatusResponse200Json"}}}},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"404":{"$ref":"#/components/responses/Error404"}}}},"/v1/payments/{payment-product}/{paymentId}/authorisations":{"parameters":[{"$ref":"#/components/parameters/paymentProduct"},{"$ref":"#/components/parameters/paymentId"}],"get":{"tags":["Payment initiation (PIS)"],"summary":"List authorisation sub-resources","parameters":[{"$ref":"#/components/parameters/XRequestID"}],"responses":{"200":{"description":"IDs","content":{"application/json":{"schema":{"type":"object","properties":{"authorisationIds":{"type":"array","items":{"type":"string"}}}}}}},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"404":{"$ref":"#/components/responses/Error404"}}}},"/v1/payments/{payment-product}/{paymentId}/authorisations/{authorisationId}":{"parameters":[{"$ref":"#/components/parameters/paymentProduct"},{"$ref":"#/components/parameters/paymentId"},{"$ref":"#/components/parameters/authorisationId"}],"get":{"tags":["Payment initiation (PIS)"],"summary":"Get SCA status of the payment authorisation","description":"`started` while waiting for the PSU in the app; `finalised` once approved; `failed` if rejected or not approved within 10 minutes.","parameters":[{"$ref":"#/components/parameters/XRequestID"}],"responses":{"200":{"description":"SCA status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScaStatusResponse"},"example":{"scaStatus":"started","psuMessage":"Waiting for approval in the Pétrusse Bank app."}}}},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"404":{"$ref":"#/components/responses/Error404"}}}}},"components":{"securitySchemes":{"basicAuth":{"type":"http","scheme":"basic","description":"client_id and client_secret (only for /oauth/token)"},"bearerAuth":{"type":"http","scheme":"bearer","description":"Access token from /oauth/token"}},"parameters":{"XRequestID":{"name":"X-Request-ID","in":"header","required":true,"description":"A new UUID for every request.","schema":{"type":"string","format":"uuid"}},"ConsentID":{"name":"Consent-ID","in":"header","required":true,"schema":{"type":"string"}},"PSUID":{"name":"PSU-ID","in":"header","required":true,"description":"Identifies the PSU who must approve the payment (decoupled SCA).","schema":{"type":"string"}},"PSUIPAddressOptional":{"name":"PSU-IP-Address","in":"header","required":false,"description":"The IP address of the PSU if the PSU is currently actively interacting with the TPP. When present, the call does not count towards frequencyPerDay (RTS Art. 36(5)).","schema":{"type":"string"}},"TPPRedirectURI":{"name":"TPP-Redirect-URI","in":"header","required":true,"description":"https URI the PSU is sent back to after SCA.","schema":{"type":"string","format":"uri"}},"TPPNokRedirectURI":{"name":"TPP-Nok-Redirect-URI","in":"header","required":false,"schema":{"type":"string","format":"uri"}},"consentId":{"name":"consentId","in":"path","required":true,"schema":{"type":"string"}},"authorisationId":{"name":"authorisationId","in":"path","required":true,"schema":{"type":"string"}},"accountId":{"name":"account-id","in":"path","required":true,"description":"The resourceId from the account list (not the IBAN).","schema":{"type":"string"}},"paymentProduct":{"name":"payment-product","in":"path","required":true,"schema":{"type":"string","enum":["sepa-credit-transfers","instant-sepa-credit-transfers"]}},"paymentId":{"name":"paymentId","in":"path","required":true,"schema":{"type":"string"}}},"responses":{"Error400":{"description":"FORMAT_ERROR, PARAMETER_NOT_SUPPORTED, PERIOD_INVALID, SERVICE_INVALID, SCA_METHOD_UNKNOWN, SESSIONS_NOT_SUPPORTED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Error401":{"description":"TOKEN_INVALID, TOKEN_EXPIRED, CONSENT_INVALID, CONSENT_EXPIRED, PSU_CREDENTIALS_INVALID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Error403":{"description":"CONSENT_UNKNOWN, RESOURCE_UNKNOWN, PRODUCT_INVALID, SERVICE_BLOCKED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Error404":{"description":"RESOURCE_UNKNOWN, PRODUCT_UNKNOWN","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Error429":{"description":"ACCESS_EXCEEDED (daily unattended access limit, or more than ~60 requests per minute)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"TokenResponse":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string"},"expires_in":{"type":"integer"},"scope":{"type":"string"}}},"OAuthError":{"type":"object","properties":{"error":{"type":"string"},"error_description":{"type":"string"}}},"Error":{"type":"object","properties":{"tppMessages":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["ERROR","WARNING"]},"code":{"type":"string"},"path":{"type":"string"},"text":{"type":"string"}}}}},"example":{"tppMessages":[{"category":"ERROR","code":"FORMAT_ERROR","text":"The header X-Request-ID is missing. …"}]}},"Amount":{"type":"object","required":["currency","amount"],"properties":{"currency":{"type":"string","example":"EUR"},"amount":{"type":"string","pattern":"^-?[0-9]{1,14}(\\.[0-9]{1,3})?$","example":"123.45"}}},"AccountReference":{"type":"object","required":["iban"],"properties":{"iban":{"type":"string"},"currency":{"type":"string"}}},"HrefType":{"type":"object","properties":{"href":{"type":"string"}}},"Links":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/HrefType"}},"ConsentStatus":{"type":"string","enum":["received","rejected","valid","revokedByPsu","expired","terminatedByTpp"]},"ScaStatus":{"type":"string","enum":["received","psuIdentified","psuAuthenticated","scaMethodSelected","started","finalised","failed"]},"AccountAccess":{"type":"object","properties":{"accounts":{"type":"array","items":{"$ref":"#/components/schemas/AccountReference"}},"balances":{"type":"array","items":{"$ref":"#/components/schemas/AccountReference"}},"transactions":{"type":"array","items":{"$ref":"#/components/schemas/AccountReference"}},"availableAccounts":{"type":"string","enum":["allAccounts"]},"availableAccountsWithBalance":{"type":"string","enum":["allAccounts"]}}},"Consents":{"type":"object","required":["access","recurringIndicator","validUntil","frequencyPerDay"],"properties":{"access":{"$ref":"#/components/schemas/AccountAccess"},"recurringIndicator":{"type":"boolean"},"validUntil":{"type":"string","format":"date"},"frequencyPerDay":{"type":"integer","minimum":1,"maximum":4},"combinedServiceIndicator":{"type":"boolean"}}},"ConsentsResponse201":{"type":"object","properties":{"consentStatus":{"$ref":"#/components/schemas/ConsentStatus"},"consentId":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}},"ConsentInformation":{"type":"object","properties":{"access":{"$ref":"#/components/schemas/AccountAccess"},"recurringIndicator":{"type":"boolean"},"validUntil":{"type":"string","format":"date"},"frequencyPerDay":{"type":"integer"},"lastActionDate":{"type":"string","format":"date"},"consentStatus":{"$ref":"#/components/schemas/ConsentStatus"},"_links":{"$ref":"#/components/schemas/Links"}}},"ScaStatusResponse":{"type":"object","properties":{"scaStatus":{"$ref":"#/components/schemas/ScaStatus"},"psuMessage":{"type":"string"}}},"AccountDetails":{"type":"object","properties":{"resourceId":{"type":"string"},"iban":{"type":"string"},"currency":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"product":{"type":"string"},"cashAccountType":{"type":"string","description":"ISO 20022 ExternalCashAccountType1Code, e.g. CACC (current), SVGS (savings)"},"status":{"type":"string"},"bic":{"type":"string"},"usage":{"type":"string"},"ownerName":{"type":"string"},"balances":{"type":"array","items":{"$ref":"#/components/schemas/Balance"}},"_links":{"$ref":"#/components/schemas/Links"}}},"AccountList":{"type":"object","properties":{"accounts":{"type":"array","items":{"$ref":"#/components/schemas/AccountDetails"}}}},"Balance":{"type":"object","properties":{"balanceAmount":{"$ref":"#/components/schemas/Amount"},"balanceType":{"type":"string","enum":["closingBooked","interimAvailable"]},"creditLimitIncluded":{"type":"boolean","description":"true if a credit limit (overdraft) of the account is included in the balance amount"},"referenceDate":{"type":"string","format":"date"}}},"ReadAccountBalanceResponse":{"type":"object","properties":{"account":{"$ref":"#/components/schemas/AccountReference"},"balances":{"type":"array","items":{"$ref":"#/components/schemas/Balance"}}}},"ReportExchangeRate":{"type":"object","properties":{"sourceCurrency":{"type":"string"},"exchangeRate":{"type":"string"},"unitCurrency":{"type":"string"},"targetCurrency":{"type":"string"},"quotationDate":{"type":"string","format":"date"}}},"Transaction":{"type":"object","properties":{"transactionId":{"type":"string"},"entryReference":{"type":"string"},"endToEndId":{"type":"string"},"mandateId":{"type":"string","description":"SEPA direct debit mandate"},"creditorId":{"type":"string","description":"SEPA creditor identifier"},"bookingDate":{"type":"string","format":"date"},"valueDate":{"type":"string","format":"date"},"transactionAmount":{"$ref":"#/components/schemas/Amount"},"currencyExchange":{"type":"array","items":{"$ref":"#/components/schemas/ReportExchangeRate"}},"creditorName":{"type":"string"},"creditorAccount":{"$ref":"#/components/schemas/AccountReference"},"debtorName":{"type":"string"},"debtorAccount":{"$ref":"#/components/schemas/AccountReference"},"remittanceInformationUnstructured":{"type":"string"},"additionalInformation":{"type":"string"},"bankTransactionCode":{"type":"string","description":"ISO 20022 Bank Transaction Code \"Domain-Family-SubFamily\", e.g. PMNT-RDDT-ESDD"}}},"AccountReport":{"type":"object","properties":{"booked":{"type":"array","items":{"$ref":"#/components/schemas/Transaction"}},"pending":{"type":"array","items":{"$ref":"#/components/schemas/Transaction"}},"_links":{"type":"object","description":"account, first, previous, next, last","additionalProperties":{"$ref":"#/components/schemas/HrefType"}}}},"TransactionsResponse200Json":{"type":"object","properties":{"account":{"$ref":"#/components/schemas/AccountReference"},"transactions":{"$ref":"#/components/schemas/AccountReport"},"balances":{"type":"array","items":{"$ref":"#/components/schemas/Balance"}}}},"PaymentInitiationSctJson":{"type":"object","required":["debtorAccount","instructedAmount","creditorAccount","creditorName"],"properties":{"endToEndIdentification":{"type":"string","maxLength":35},"debtorAccount":{"$ref":"#/components/schemas/AccountReference"},"instructedAmount":{"$ref":"#/components/schemas/Amount"},"creditorAccount":{"$ref":"#/components/schemas/AccountReference"},"creditorName":{"type":"string","maxLength":70},"remittanceInformationUnstructured":{"type":"string","maxLength":140}}},"TransactionStatus":{"type":"string","enum":["RCVD","ACTC","ACSC","RJCT"]},"PaymentInitationRequestResponse201":{"type":"object","properties":{"transactionStatus":{"$ref":"#/components/schemas/TransactionStatus"},"paymentId":{"type":"string"},"psuMessage":{"type":"string"},"_links":{"$ref":"#/components/schemas/Links"}}},"PaymentInitiationStatusResponse200Json":{"type":"object","properties":{"transactionStatus":{"$ref":"#/components/schemas/TransactionStatus"},"psuMessage":{"type":"string"},"statusReasonInformation":{"type":"object","description":"Sandbox-specific: ISO 20022 ExternalStatusReason1Code for RJCT.","properties":{"code":{"type":"string"},"text":{"type":"string"}}},"tppMessages":{"type":"array","items":{"type":"object"}}}}}},"security":[{"bearerAuth":[]}]}