{ "openapi": "3.0.1", "info": { "title": "NextGenPSD2 XS2A Framework", "version": "2.0 Mar 1st 2019", "description": "# Summary\n \n## General Remarks on Data Types\n\nThe Berlin Group definition of UTF-8 strings in context of the PSD2 API have to support at least the following characters\n\na 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\n\nA 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\n\n0 1 2 3 4 5 6 7 8 9\n\n/ - ? : ( ) . , ' +\n\nSpace\n", "license": { "name": "Creative Commons Attribution 4.0 International Public License", "url": "https://creativecommons.org/licenses/by/4.0/" }, "contact": { "name": "The Berlin Group - A European Standards Initiative", "url": "https://www.berlin-group.org/", "email": "info@berlin-group.org" } }, "externalDocs": { "description": "Full Documentation of NextGenPSD2 Access to Account Interoperability Framework\n(General Introduction Paper, Operational Rules, Implementation Guidelines^, Extended Services, ...)\n", "url": "https://www.berlin-group.org/nextgenpsd2-downloads" }, "servers": [ { "url": "https://api.testbank.com/psd2", "description": "PSD2 server" }, { "url": "https://test-api.testbank.com/psd2", "description": "Optional PSD2 test server" } ], "paths": { "/v2/consents/confirmation-of-funds": { "post": { "summary": "Create consent", "description": "This method creates a confirmation of funds consent resource at the ASPSP regarding confirmation of funds access \nto an account specified in this request.\n\n**Side Effects**\nIn difference to the Establish Account Information Consent as defined in [XS2A-IG], there is no side effect by the \nEstablish Confirmation of Funds Consent Request\n", "operationId": "createConsentConfirmationOfFunds", "tags": [ "Confirmation of Funds" ], "security": [ {}, { "BearerAuthOAuth": [] } ], "parameters": [ { "$ref": "#/components/parameters/X-Request-ID" }, { "$ref": "#/components/parameters/Digest" }, { "$ref": "#/components/parameters/Signature" }, { "$ref": "#/components/parameters/TPP-Signature-Certificate" }, { "$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" }, { "$ref": "#/components/parameters/PSU-IP-Address_conditionalForAis" }, { "$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/consentsConfirmationOfFunds" }, "responses": { "201": { "$ref": "#/components/responses/CREATED_201_ConsentsConfirmationOfFunds" }, "400": { "$ref": "#/components/responses/BAD_REQUEST_400_AIS" }, "401": { "$ref": "#/components/responses/UNAUTHORIZED_401_AIS" }, "403": { "$ref": "#/components/responses/FORBIDDEN_403_AIS" }, "404": { "$ref": "#/components/responses/NOT_FOUND_404_AIS" }, "405": { "$ref": "#/components/responses/METHOD_NOT_ALLOWED_405_AIS" }, "406": { "$ref": "#/components/responses/NOT_ACCEPTABLE_406_AIS" }, "408": { "$ref": "#/components/responses/REQUEST_TIMEOUT_408_AIS" }, "409": { "$ref": "#/components/responses/CONFLICT_409_AIS" }, "415": { "$ref": "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415_AIS" }, "429": { "$ref": "#/components/responses/TOO_MANY_REQUESTS_429_AIS" }, "500": { "$ref": "#/components/responses/INTERNAL_SERVER_ERROR_500_AIS" }, "503": { "$ref": "#/components/responses/SERVICE_UNAVAILABLE_503_AIS" } } } }, "/v2/consents/confirmation-of-funds/{consentId}/status": { "get": { "summary": "Get Consent Status", "description": "Can check the status of an account information consent resource.\n", "operationId": "getConsentConfirmationOfFundsStatus", "tags": [ "Confirmation Of Funds" ], "security": [ {}, { "BearerAuthOAuth": [] } ], "parameters": [ { "$ref": "#/components/parameters/consentId_PATH" }, { "$ref": "#/components/parameters/X-Request-ID" }, { "$ref": "#/components/parameters/Digest" }, { "$ref": "#/components/parameters/Signature" }, { "$ref": "#/components/parameters/TPP-Signature-Certificate" }, { "$ref": "#/components/parameters/PSU-IP-Address_conditionalForAis" }, { "$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" } ], "responses": { "200": { "$ref": "#/components/responses/OK_200_ConsentConfirmationOfFundsStatus" }, "400": { "$ref": "#/components/responses/BAD_REQUEST_400_AIS" }, "401": { "$ref": "#/components/responses/UNAUTHORIZED_401_AIS" }, "403": { "$ref": "#/components/responses/FORBIDDEN_403_AIS" }, "404": { "$ref": "#/components/responses/NOT_FOUND_404_AIS" }, "405": { "$ref": "#/components/responses/METHOD_NOT_ALLOWED_405_AIS" }, "406": { "$ref": "#/components/responses/NOT_ACCEPTABLE_406_AIS" }, "408": { "$ref": "#/components/responses/REQUEST_TIMEOUT_408_AIS" }, "409": { "$ref": "#/components/responses/CONFLICT_409_AIS" }, "415": { "$ref": "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415_AIS" }, "429": { "$ref": "#/components/responses/TOO_MANY_REQUESTS_429_AIS" }, "500": { "$ref": "#/components/responses/INTERNAL_SERVER_ERROR_500_AIS" }, "503": { "$ref": "#/components/responses/SERVICE_UNAVAILABLE_503_AIS" } } } }, "/v2/consents/confirmation-of-funds/{consentId}": { "get": { "summary": "Get Consent Content", "description": "Returns the content of an account information consent object. \nThis is returning the data for the TPP especially in cases, where the consent was directly managed between \nASPSP and PSU e.g. in a re-direct SCA Approach.\n", "operationId": "getConsentConfirmationOfFunds", "tags": [ "Confirmation Of Funds" ], "security": [ {}, { "BearerAuthOAuth": [] } ], "parameters": [ { "$ref": "#/components/parameters/consentId_PATH" }, { "$ref": "#/components/parameters/X-Request-ID" }, { "$ref": "#/components/parameters/Digest" }, { "$ref": "#/components/parameters/Signature" }, { "$ref": "#/components/parameters/TPP-Signature-Certificate" }, { "$ref": "#/components/parameters/PSU-IP-Address_conditionalForAis" }, { "$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" } ], "responses": { "200": { "$ref": "#/components/responses/OK_200_ConsentConfirmationOfFundsContent" }, "400": { "$ref": "#/components/responses/BAD_REQUEST_400_AIS" }, "401": { "$ref": "#/components/responses/UNAUTHORIZED_401_AIS" }, "403": { "$ref": "#/components/responses/FORBIDDEN_403_AIS" }, "404": { "$ref": "#/components/responses/NOT_FOUND_404_AIS" }, "405": { "$ref": "#/components/responses/METHOD_NOT_ALLOWED_405_AIS" }, "406": { "$ref": "#/components/responses/NOT_ACCEPTABLE_406_AIS" }, "408": { "$ref": "#/components/responses/REQUEST_TIMEOUT_408_AIS" }, "409": { "$ref": "#/components/responses/CONFLICT_409_AIS" }, "415": { "$ref": "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415_AIS" }, "429": { "$ref": "#/components/responses/TOO_MANY_REQUESTS_429_AIS" }, "500": { "$ref": "#/components/responses/INTERNAL_SERVER_ERROR_500_AIS" }, "503": { "$ref": "#/components/responses/SERVICE_UNAVAILABLE_503_AIS" } } }, "delete": { "summary": "Delete Consent Content", "description": "Deletes a given consent.\n", "operationId": "deleteConsentConfirmationOfFunds", "tags": [ "Confirmation Of Funds" ], "security": [ {}, { "BearerAuthOAuth": [] } ], "parameters": [ { "$ref": "#/components/parameters/consentId_PATH" }, { "$ref": "#/components/parameters/X-Request-ID" }, { "$ref": "#/components/parameters/Digest" }, { "$ref": "#/components/parameters/Signature" }, { "$ref": "#/components/parameters/TPP-Signature-Certificate" }, { "$ref": "#/components/parameters/PSU-IP-Address_conditionalForAis" }, { "$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" } ], "responses": { "204": { "$ref": "#/components/responses/OK_204_ConsentConfirmationOfFundsDelete" }, "400": { "$ref": "#/components/responses/BAD_REQUEST_400_AIS" }, "401": { "$ref": "#/components/responses/UNAUTHORIZED_401_AIS" }, "403": { "$ref": "#/components/responses/FORBIDDEN_403_AIS" }, "404": { "$ref": "#/components/responses/NOT_FOUND_404_AIS" }, "405": { "$ref": "#/components/responses/METHOD_NOT_ALLOWED_405_AIS" }, "406": { "$ref": "#/components/responses/NOT_ACCEPTABLE_406_AIS" }, "408": { "$ref": "#/components/responses/REQUEST_TIMEOUT_408_AIS" }, "409": { "$ref": "#/components/responses/CONFLICT_409_AIS" }, "415": { "$ref": "#/components/responses/UNSUPPORTED_MEDIA_TYPE_415_AIS" }, "429": { "$ref": "#/components/responses/TOO_MANY_REQUESTS_429_AIS" }, "500": { "$ref": "#/components/responses/INTERNAL_SERVER_ERROR_500_AIS" }, "503": { "$ref": "#/components/responses/SERVICE_UNAVAILABLE_503_AIS" } } } } }, "components": { "securitySchemes": { "BearerAuthOAuth": { "description": "Bearer Token. \n\nIs contained only, if an OAuth2 based authentication was performed in a pre-step or \nan OAuth2 based SCA was performed in an preceding AIS service in the same session.\n", "type": "http", "scheme": "bearer" } }, "schemas": { "consentId": { "description": "ID of the corresponding consent object as returned by an Account Information Consent Request.\n", "type": "string" }, "hrefType": { "description": "Link to a resource", "type": "object", "properties": { "href": { "$ref": "#/components/schemas/hrefEntry" } } }, "hrefEntry": { "description": "Link to a resource", "type": "string", "example": "/v1/payments/sepa-credit-transfers/1234-wertiq-983" }, "accountReference": { "description": "Reference to an account by either\n * IBAN, of a payment accounts, or\n * BBAN, for payment accounts if there is no IBAN, or \n * the Primary Account Number (PAN) of a card, can be tokenised by the ASPSP due to PCI DSS requirements, or\n * the Primary Account Number (PAN) of a card in a masked form, or\n * an alias to access a payment account via a registered mobile phone number (MSISDN).\n", "type": "object", "properties": { "iban": { "$ref": "#/components/schemas/iban" }, "bban": { "$ref": "#/components/schemas/bban" }, "pan": { "$ref": "#/components/schemas/pan" }, "maskedPan": { "$ref": "#/components/schemas/maskedPan" }, "msisdn": { "$ref": "#/components/schemas/msisdn" }, "currency": { "$ref": "#/components/schemas/currencyCode" } } }, "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" }, "bban": { "description": "Basic Bank Account Number (BBAN) Identifier\n\nThis data element can be used in the body of the Consent Request\n Message for retrieving Account access Consent from this Account. This\n data elements is used for payment Accounts which have no IBAN.\n ISO20022: Basic Bank Account Number (BBAN). \n \n Identifier used nationally by financial institutions, i.e., in individual countries, \n generally as part of a National Account Numbering Scheme(s), \n which uniquely identifies the account of a customer.\n", "type": "string", "pattern": "[a-zA-Z0-9]{1,30}", "example": "BARC12345612345678" }, "pan": { "description": "Primary Account Number according to ISO/IEC 7812.\n", "type": "string", "maxLength": "35", "example": "5409050000000000" }, "maskedPan": { "description": "Masked Primary Account Number\n", "type": "string", "maxLength": "35", "example": "123456xxxxxx1234" }, "msisdn": { "type": "string", "maxLength": "35", "description": "Mobile phone number.", "example": "+49 170 1234567" }, "currencyCode": { "description": "ISO 4217 Alpha 3 currency code\n", "type": "string", "pattern": "[A-Z]{3}", "example": "EUR" }, "consentStatus": { "description": "This is the overall lifecycle status of the consent.\n\nValid values are:\n - 'received': The consent data have been received and are technically correct. \n The data is not authorised yet.\n - 'rejected': The consent data have been rejected e.g. since no successful authorisation has taken place.\n - 'valid': The consent is accepted and valid for GET account data calls and others as specified in the consent object.\n - 'revokedByPsu': The consent has been revoked by the PSU towards the ASPSP.\n - 'expired': The consent expired.\n - 'terminatedByTpp': The corresponding TPP has terminated the consent by applying the DELETE method to the consent resource.\n\nThe ASPSP might add further codes. These codes then shall be contained in the ASPSP's documentation of the XS2A interface \nand has to be added to this API definition as well.\n", "type": "string", "enum": [ "received", "rejected", "valid", "revokedByPsu", "expired", "terminatedByTpp" ] }, "scaMethods": { "description": "This data element might be contained, if SCA is required and if the PSU has a choice between different\nauthentication methods.\n\nDepending on the risk management of the ASPSP this choice might be offered before or after the PSU\nhas been identified with the first relevant factor, or if an access token is transported.\n\nIf this data element is contained, then there is also an hyperlink of type 'startAuthorisationWithAuthenticationMethodSelection'\ncontained in the response body.\n\nThese methods shall be presented towards the PSU for selection by the TPP.\n", "type": "array", "items": { "$ref": "#/components/schemas/authenticationObject" } }, "authenticationObject": { "description": "Authentication Object\n", "type": "object", "required": [ "authenticationType", "authenticationMethodId" ], "properties": { "authenticationType": { "$ref": "#/components/schemas/authenticationType" }, "authenticationVersion": { "description": "Depending on the \"authenticationType\".\nThis version can be used by differentiating authentication tools used within performing OTP generation in the same authentication type.\nThis version can be referred to in the ASPSP?s documentation.\n", "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.\nAlternatively this could be a description provided by the ASPSP like \"SMS OTP on phone +49160 xxxxx 28\".\nThis name shall be used by the TPP when presenting a list of authentication methods to the PSU, if available.\n", "type": "string", "example": "SMS OTP on phone +49160 xxxxx 28" }, "explanation": { "description": "Detailed information about the SCA method for the PSU.\n", "type": "string", "example": "Detailed information about the SCA method for the PSU." } } }, "authenticationType": { "description": "Type of the authentication method.\n\nMore authentication types might be added during implementation projects and documented in the ASPSP documentation.\n\n - 'SMS_OTP': An SCA method, where an OTP linked to the transaction to be authorised is sent to the PSU through a SMS channel.\n - 'CHIP_OTP': An SCA method, where an OTP is generated by a chip card, e.g. an TOP derived from an EMV cryptogram. \n To contact the card, the PSU normally needs a (handheld) device. \n With this device, the PSU either reads the challenging data through a visual interface like flickering or \n the PSU types in the challenge through the device key pad. \n The device then derives an OTP from the challenge data and displays the OTP to the PSU.\n - 'PHOTO_OTP': An SCA method, where the challenge is a QR code or similar encoded visual data \n which can be read in by a consumer device or specific mobile app. \n The device resp. the specific app than derives an OTP from the visual challenge data and displays \n the OTP to the PSU.\n - 'PUSH_OTP': An OTP is pushed to a dedicated authentication APP and displayed to the PSU.\n", "type": "string", "enum": [ "SMS_OTP", "CHIP_OTP", "PHOTO_OTP", "PUSH_OTP" ] }, "authenticationMethodId": { "description": "An identification provided by the ASPSP for the later identification of the authentication method selection.\n", "type": "string", "maxLength": "35", "example": "myAuthenticationID" }, "chosenScaMethod": { "$ref": "#/components/schemas/authenticationObject" }, "challengeData": { "description": "It is contained in addition to the data element 'chosenScaMethod' if challenge data is needed for SCA.\nIn rare cases this attribute is also used in the context of the 'startAuthorisationWithPsuAuthentication' link.\n", "type": "object", "properties": { "image": { "type": "string", "format": "byte", "description": "PNG data (max. 512 kilobyte) to be displayed to the PSU,\nBase64 encoding, cp. [RFC4648].\nThis attribute is used only, when PHOTO_OTP or CHIP_OTP\nis the selected SCA method.\n" }, "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\ne.g. fallback mechanism for the chosen SCA method.\nThe TPP is obliged to show this to the PSU.\n" } } }, "_linksStartScaProcessSingleSca": { "description": "A list of hyperlinks to be recognised by the TPP. \nType of links admitted in this response (which might be extended by single ASPSPs as indicated in its XS2A documentation):\n\n- 'scaRedirect': \n In case of an SCA Redirect Approach, the ASPSP is transmitting the link to which to \n redirect the PSU browser.\n- 'scaOAuth': \n 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.\n- 'startAuthorisation':\n 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).\n- 'startAuthorisationWithPsuIdentification':\n The link to the authorisation end-point, where the authorisation sub-resource has to be generated while uploading the PSU identification data.\n- 'startAuthorisationWithPsuAuthentication':\n The link to the authorisation or cancellation authorisation sub-resource, \n where PSU authentication data needs to be uploaded.\n- 'startAuthorisationWithEncryptedPsuAuthentication':\n The link to the authorisation end-point, where the authorisation sub-resource has to be generated while uploading the encrypted PSU authentication data.\n- 'startAuthorisationWithAuthentication MethodSelection':\n The link to the authorisation end-point, where the authorisation sub-resource has to be generated while selecting the authentication method. \n This link is contained under exactly the same conditions as the data element \"scaMethods\".\n- 'startAuthorisationWithTransactionAuthorisation':\n 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.\n- 'self':\n The link to the Establish Account Information Consent resource created by this request. \n This link can be used to retrieve the resource data.\n- 'status':\n The link to retrieve the transaction status of the payment initiation.\n- 'scaStatus': \n The link to retrieve the scaStatus of the corresponding authorisation sub-resource. \n", "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" }, "startAuthorisationWithEncryptedPsuAuthentication": { "$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" } } }, "_linksStartScaProcessMultilevelSca": { "description": "- 'startAuthorisation': \n In case, where an explicit start of the transaction authorisation is needed, \n but no more data needs to be updated (no authentication method to be selected, \n no PSU identification nor PSU authentication data to be uploaded).\n- 'startAuthorisationWithPsuIdentification':\n The link to the authorisation end-point, where the authorisation sub-resource \n has to be generated while uploading the PSU identification data.\n- 'startAuthorisationWithPsuAuthentication':\n The link to the authorisation end-point, where an authorisation sub-resource \n has to be generated while uploading the PSU authentication data.\n- 'startAuthorisationWithEncryptedPsuAuthentication':\n The link to the authorisation end-point, where an authorisation sub-resource \n has to be generated while uploading the encrypted PSU authentication data.\n- 'self':\n The link to the consent resource created by this request. \n This link can be used to retrieve the resource data.\n- 'status':\n The link to retrieve the status of the consent. \n", "type": "object", "additionalProperties": { "$ref": "#/components/schemas/hrefType" }, "properties": { "startAuthorisation": { "$ref": "#/components/schemas/hrefType" }, "startAuthorisationWithPsuIdentification": { "$ref": "#/components/schemas/hrefType" }, "startAuthorisationWithPsuAuthentication": { "$ref": "#/components/schemas/hrefType" }, "startAuthorisationWithEncryptedPsuAuthentication": { "$ref": "#/components/schemas/hrefType" }, "self": { "$ref": "#/components/schemas/hrefType" }, "status": { "$ref": "#/components/schemas/hrefType" } } }, "psuMessageText": { "description": "Text to be displayed to the PSU", "type": "string", "maxLength": "512" }, "cardExpiryDate": { "description": "Expiry date of the card issued by the PIISP.\n", "type": "string", "format": "date", "example": "2018-07-01" }, "cardNumber": { "description": "Card Number of the card issued by the PIISP. Should be delivered if available.", "type": "string", "maxLength": "35" }, "cardInformation": { "description": "Addtional explanation for the card product.", "type": "string", "maxLength": "140" }, "registrationInformation": { "description": "Addtional information about the registration process for the PSU, e. g. a reference to the TPP / PSU contract.", "type": "string", "maxLength": "140" }, "consentsConfirmationOfFunds": { "description": "Content of the body of a consent confirmation of funds request.\n", "type": "object", "required": [ "account" ], "properties": { "account": { "$ref": "#/components/schemas/accountReference" }, "cardNumber": { "$ref": "#/components/schemas/cardNumber" }, "cardExpiryDate": { "$ref": "#/components/schemas/cardExpiryDate" }, "cardInformation": { "$ref": "#/components/schemas/cardInformation" }, "registrationInformation": { "$ref": "#/components/schemas/registrationInformation" } } }, "ConsentsConfirmationOfFundsResponse": { "description": "Body of the JSON response for a Start single SCA authorisation 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/_linksStartScaProcessSingleSca" }, "psuMessage": { "$ref": "#/components/schemas/psuMessageText" } } }, "ConsentsConfirmationOfFundsMultilevelSCAResponse": { "description": "Body of the JSON response for a Start Multilevel SCA authorisation request.", "type": "object", "required": [ "consentStatus", "consentId", "_links" ], "properties": { "consentStatus": { "$ref": "#/components/schemas/consentStatus" }, "consentId": { "$ref": "#/components/schemas/consentId" }, "_links": { "$ref": "#/components/schemas/_linksStartScaProcessMultilevelSca" }, "psuMessage": { "$ref": "#/components/schemas/psuMessageText" }, "tppMessages": { "type": "array", "items": { "$ref": "#/components/schemas/tppMessage2XX" } } } }, "ConsentConfirmationOfFundsStatusResponse": { "description": "Body of the JSON response.", "type": "object", "required": [ "consentStatus" ], "properties": { "consentStatus": { "$ref": "#/components/schemas/consentStatus" } } }, "ConsentConfirmationOfFundsContentResponse": { "description": "Body of the JSON response for a confirmation of funds content request.", "type": "object", "required": [ "account", "consentStatus" ], "properties": { "account": { "$ref": "#/components/schemas/accountReference" }, "cardNumber": { "$ref": "#/components/schemas/cardNumber" }, "cardExpiryDate": { "$ref": "#/components/schemas/cardExpiryDate" }, "cardInformation": { "$ref": "#/components/schemas/cardInformation" }, "registrationInformation": { "$ref": "#/components/schemas/registrationInformation" }, "consentStatus": { "$ref": "#/components/schemas/consentStatus" } } }, "_linksAll": { "description": "A _link object with all availabel link types\n", "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" }, "updatePsuIdentification": { "$ref": "#/components/schemas/hrefType" }, "startAuthorisationWithProprietaryData": { "$ref": "#/components/schemas/hrefType" }, "updateProprietaryData": { "$ref": "#/components/schemas/hrefType" }, "startAuthorisationWithPsuAuthentication": { "$ref": "#/components/schemas/hrefType" }, "updatePsuAuthentication": { "$ref": "#/components/schemas/hrefType" }, "startAuthorisationWithEncryptedPsuAuthentication": { "$ref": "#/components/schemas/hrefType" }, "updateEncryptedPsuAuthentication": { "$ref": "#/components/schemas/hrefType" }, "startAuthorisationWithAuthenticationMethodSelection": { "$ref": "#/components/schemas/hrefType" }, "selectAuthenticationMethod": { "$ref": "#/components/schemas/hrefType" }, "startAuthorisationWithTransactionAuthorisation": { "$ref": "#/components/schemas/hrefType" }, "authoriseTransaction": { "$ref": "#/components/schemas/hrefType" }, "self": { "$ref": "#/components/schemas/hrefType" }, "status": { "$ref": "#/components/schemas/hrefType" }, "scaStatus": { "$ref": "#/components/schemas/hrefType" }, "account": { "$ref": "#/components/schemas/hrefType" }, "balances": { "$ref": "#/components/schemas/hrefType" }, "transactions": { "$ref": "#/components/schemas/hrefType" }, "transactionDetails": { "$ref": "#/components/schemas/hrefType" }, "cardAccount": { "$ref": "#/components/schemas/hrefType" }, "cardTransactions": { "$ref": "#/components/schemas/hrefType" }, "first": { "$ref": "#/components/schemas/hrefType" }, "next": { "$ref": "#/components/schemas/hrefType" }, "previous": { "$ref": "#/components/schemas/hrefType" }, "last": { "$ref": "#/components/schemas/hrefType" }, "download": { "$ref": "#/components/schemas/hrefType" } } }, "tppMessageCategory": { "description": "Category of the TPP message category", "type": "string", "enum": [ "ERROR", "WARNING" ] }, "MessageCode2XX": { "description": "Message codes for HTTP Error codes 2XX.", "type": "string", "enum": [ "WARNING" ] }, "MessageCode400_AIS": { "description": "Message codes defined for AIS for HTTP Error code 400 (BAD_REQUEST).", "type": "string", "enum": [ "FORMAT_ERROR", "PARAMETER_NOT_CONSISTENT", "PARAMETER_NOT_SUPPORTED", "SERVICE_INVALID", "RESOURCE_UNKNOWN", "RESOURCE_EXPIRED", "RESOURCE_BLOCKED", "TIMESTAMP_INVALID", "PERIOD_INVALID", "SCA_METHOD_UNKNOWN", "CONSENT_UNKNOWN", "SESSIONS_NOT_SUPPORTED" ] }, "MessageCode401_AIS": { "description": "Message codes defined for AIS for HTTP Error code 401 (UNAUTHORIZED).", "type": "string", "enum": [ "CERTIFICATE_INVALID", "CERTIFICATE_EXPIRED", "CERTIFICATE_BLOCKED", "CERTIFICATE_REVOKE", "CERTIFICATE_MISSING", "SIGNATURE_INVALID", "SIGNATURE_MISSING", "CORPORATE_ID_INVALID", "PSU_CREDENTIALS_INVALID", "CONSENT_INVALID", "CONSENT_EXPIRED", "TOKEN_UNKNOWN", "TOKEN_INVALID", "TOKEN_EXPIRED" ] }, "MessageCode403_AIS": { "description": "Message codes defined for AIS for HTTP Error code 403 (FORBIDDEN).", "type": "string", "enum": [ "CONSENT_UNKNOWN", "SERVICE_BLOCKED", "RESOURCE_UNKNOWN", "RESOURCE_EXPIRED" ] }, "MessageCode404_AIS": { "description": "Message codes defined for AIS for HTTP Error code 404 (NOT FOUND).", "type": "string", "enum": [ "RESOURCE_UNKNOWN" ] }, "MessageCode405_AIS": { "description": "Message codes defined for AIS for HTTP Error code 405 (METHOD NOT ALLOWED).", "type": "string", "enum": [ "SERVICE_INVALID" ] }, "MessageCode406_AIS": { "description": "Message codes defined for AIS for HTTP Error code 406 (NOT ACCEPTABLE).", "type": "string", "enum": [ "REQUESTED_FORMATS_INVALID" ] }, "MessageCode409_AIS": { "description": "Message codes defined for AIS for HTTP Error code 409 (CONFLICT).", "type": "string", "enum": [ "STATUS_INVALID" ] }, "MessageCode429_AIS": { "description": "Message codes for HTTP Error code 429 (TOO MANY REQUESTS).", "type": "string", "enum": [ "ACCESS_EXCEEDED" ] }, "tppMessageText": { "description": "Additional explaining text to the TPP.", "type": "string", "maxLength": "512" }, "tppMessage2XX": { "type": "object", "required": [ "category", "code" ], "properties": { "category": { "$ref": "#/components/schemas/tppMessageCategory" }, "code": { "$ref": "#/components/schemas/MessageCode2XX" }, "path": { "type": "string" }, "text": { "$ref": "#/components/schemas/tppMessageText" } } }, "tppMessage400_AIS": { "type": "object", "required": [ "category", "code" ], "properties": { "category": { "$ref": "#/components/schemas/tppMessageCategory" }, "code": { "$ref": "#/components/schemas/MessageCode400_AIS" }, "path": { "type": "string" }, "text": { "$ref": "#/components/schemas/tppMessageText" } } }, "tppMessage401_AIS": { "type": "object", "required": [ "category", "code" ], "properties": { "category": { "$ref": "#/components/schemas/tppMessageCategory" }, "code": { "$ref": "#/components/schemas/MessageCode401_AIS" }, "path": { "type": "string" }, "text": { "$ref": "#/components/schemas/tppMessageText" } } }, "tppMessage403_AIS": { "type": "object", "required": [ "category", "code" ], "properties": { "category": { "$ref": "#/components/schemas/tppMessageCategory" }, "code": { "$ref": "#/components/schemas/MessageCode403_AIS" }, "path": { "type": "string" }, "text": { "$ref": "#/components/schemas/tppMessageText" } } }, "tppMessage404_AIS": { "type": "object", "required": [ "category", "code" ], "properties": { "category": { "$ref": "#/components/schemas/tppMessageCategory" }, "code": { "$ref": "#/components/schemas/MessageCode404_AIS" }, "path": { "type": "string" }, "text": { "$ref": "#/components/schemas/tppMessageText" } } }, "tppMessage405_AIS": { "type": "object", "required": [ "category", "code" ], "properties": { "category": { "$ref": "#/components/schemas/tppMessageCategory" }, "code": { "$ref": "#/components/schemas/MessageCode405_AIS" }, "path": { "type": "string" }, "text": { "$ref": "#/components/schemas/tppMessageText" } } }, "tppMessage406_AIS": { "type": "object", "required": [ "category", "code" ], "properties": { "category": { "$ref": "#/components/schemas/tppMessageCategory" }, "code": { "$ref": "#/components/schemas/MessageCode406_AIS" }, "path": { "type": "string" }, "text": { "$ref": "#/components/schemas/tppMessageText" } } }, "tppMessage409_AIS": { "type": "object", "required": [ "category", "code" ], "properties": { "category": { "$ref": "#/components/schemas/tppMessageCategory" }, "code": { "$ref": "#/components/schemas/MessageCode409_AIS" }, "path": { "type": "string" }, "text": { "$ref": "#/components/schemas/tppMessageText" } } }, "tppMessage429_AIS": { "type": "object", "required": [ "category", "code" ], "properties": { "category": { "$ref": "#/components/schemas/tppMessageCategory" }, "code": { "$ref": "#/components/schemas/MessageCode429_AIS" }, "path": { "type": "string" }, "text": { "$ref": "#/components/schemas/tppMessageText" } } }, "tppErrorTitle": { "description": "Short human readable description of error type. \nCould be in local language. \nTo be provided by ASPSPs.\n", "type": "string", "maxLength": "70" }, "tppErrorDetail": { "description": "Detailed human readable text specific to this instance of the error. \nXPath might be used to point to the issue generating the error in addition.\nRemark for Future: In future, a dedicated field might be introduced for the XPath.\n", "type": "string", "maxLength": "512" }, "Error400_AIS": { "description": "Standardised definition of reporting error information according to [RFC7807] \nin case of a HTTP error code 400 for AIS.\n", "type": "object", "required": [ "type", "code" ], "properties": { "type": { "description": "A URI reference [RFC3986] that identifies the problem type. \nRemark For Future: These URI will be provided by NextGenPSD2 in future.\n", "type": "string", "format": "uri", "maxLength": "70" }, "title": { "description": "Short human readable description of error type. \nCould be in local language. \nTo be provided by ASPSPs.\n", "type": "string", "maxLength": "70" }, "detail": { "description": "Detailed human readable text specific to this instance of the error. \nXPath might be used to point to the issue generating the error in addition.\nRemark for Future: In future, a dedicated field might be introduced for the XPath.\n", "type": "string", "maxLength": "512" }, "code": { "$ref": "#/components/schemas/MessageCode400_AIS" }, "additionalErrors": { "description": "Array of Error Information Blocks.\n\nMight be used if more than one error is to be communicated\n", "type": "array", "items": { "description": "This is a data element to support the declaration of additional errors in the context of [RFC7807].", "type": "object", "required": [ "code" ], "properties": { "title": { "$ref": "#/components/schemas/tppErrorTitle" }, "detail": { "$ref": "#/components/schemas/tppErrorDetail" }, "code": { "$ref": "#/components/schemas/MessageCode400_AIS" } } } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error401_AIS": { "description": "Standardised definition of reporting error information according to [RFC7807] \nin case of a HTTP error code 401 for AIS.\n", "type": "object", "required": [ "type", "code" ], "properties": { "type": { "description": "A URI reference [RFC3986] that identifies the problem type. \nRemark For Future: These URI will be provided by NextGenPSD2 in future.\n", "type": "string", "format": "uri", "maxLength": "70" }, "title": { "description": "Short human readable description of error type. \nCould be in local language. \nTo be provided by ASPSPs.\n", "type": "string", "maxLength": "70" }, "detail": { "description": "Detailed human readable text specific to this instance of the error. \nXPath might be used to point to the issue generating the error in addition.\nRemark for Future: In future, a dedicated field might be introduced for the XPath.\n", "type": "string", "maxLength": "512" }, "code": { "$ref": "#/components/schemas/MessageCode401_AIS" }, "additionalErrors": { "description": "Array of Error Information Blocks.\n\nMight be used if more than one error is to be communicated\n", "type": "array", "items": { "description": "This is a data element to support the declaration of additional errors in the context of [RFC7807].", "type": "object", "required": [ "code" ], "properties": { "title": { "$ref": "#/components/schemas/tppErrorTitle" }, "detail": { "$ref": "#/components/schemas/tppErrorDetail" }, "code": { "$ref": "#/components/schemas/MessageCode401_AIS" } } } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error403_AIS": { "description": "Standardised definition of reporting error information according to [RFC7807] \nin case of a HTTP error code 403 for AIS.\n", "type": "object", "required": [ "type", "code" ], "properties": { "type": { "description": "A URI reference [RFC3986] that identifies the problem type. \nRemark For Future: These URI will be provided by NextGenPSD2 in future.\n", "type": "string", "format": "uri", "maxLength": "70" }, "title": { "description": "Short human readable description of error type. \nCould be in local language. \nTo be provided by ASPSPs.\n", "type": "string", "maxLength": "70" }, "detail": { "description": "Detailed human readable text specific to this instance of the error. \nXPath might be used to point to the issue generating the error in addition.\nRemark for Future: In future, a dedicated field might be introduced for the XPath.\n", "type": "string", "maxLength": "512" }, "code": { "$ref": "#/components/schemas/MessageCode403_AIS" }, "additionalErrors": { "description": "Array of Error Information Blocks.\n\nMight be used if more than one error is to be communicated\n", "type": "array", "items": { "description": "This is a data element to support the declaration of additional errors in the context of [RFC7807].", "type": "object", "required": [ "code" ], "properties": { "title": { "$ref": "#/components/schemas/tppErrorTitle" }, "detail": { "$ref": "#/components/schemas/tppErrorDetail" }, "code": { "$ref": "#/components/schemas/MessageCode403_AIS" } } } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error404_AIS": { "description": "Standardised definition of reporting error information according to [RFC7807] \nin case of a HTTP error code 404 for AIS.\n", "type": "object", "required": [ "type", "code" ], "properties": { "type": { "description": "A URI reference [RFC3986] that identifies the problem type. \nRemark For Future: These URI will be provided by NextGenPSD2 in future.\n", "type": "string", "format": "uri", "maxLength": "70" }, "title": { "description": "Short human readable description of error type. \nCould be in local language. \nTo be provided by ASPSPs.\n", "type": "string", "maxLength": "70" }, "detail": { "description": "Detailed human readable text specific to this instance of the error. \nXPath might be used to point to the issue generating the error in addition.\nRemark for Future: In future, a dedicated field might be introduced for the XPath.\n", "type": "string", "maxLength": "512" }, "code": { "$ref": "#/components/schemas/MessageCode404_AIS" }, "additionalErrors": { "description": "Array of Error Information Blocks.\n\nMight be used if more than one error is to be communicated\n", "type": "array", "items": { "description": "This is a data element to support the declaration of additional errors in the context of [RFC7807].", "type": "object", "required": [ "code" ], "properties": { "title": { "$ref": "#/components/schemas/tppErrorTitle" }, "detail": { "$ref": "#/components/schemas/tppErrorDetail" }, "code": { "$ref": "#/components/schemas/MessageCode404_AIS" } } } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error405_AIS": { "description": "Standardised definition of reporting error information according to [RFC7807] \nin case of a HTTP error code 405 for AIS.\n", "type": "object", "required": [ "type", "code" ], "properties": { "type": { "description": "A URI reference [RFC3986] that identifies the problem type. \nRemark For Future: These URI will be provided by NextGenPSD2 in future.\n", "type": "string", "format": "uri", "maxLength": "70" }, "title": { "description": "Short human readable description of error type. \nCould be in local language. \nTo be provided by ASPSPs.\n", "type": "string", "maxLength": "70" }, "detail": { "description": "Detailed human readable text specific to this instance of the error. \nXPath might be used to point to the issue generating the error in addition.\nRemark for Future: In future, a dedicated field might be introduced for the XPath.\n", "type": "string", "maxLength": "512" }, "code": { "$ref": "#/components/schemas/MessageCode405_AIS" }, "additionalErrors": { "description": "Array of Error Information Blocks.\n\nMight be used if more than one error is to be communicated\n", "type": "array", "items": { "description": "This is a data element to support the declaration of additional errors in the context of [RFC7807].", "type": "object", "required": [ "code" ], "properties": { "title": { "$ref": "#/components/schemas/tppErrorTitle" }, "detail": { "$ref": "#/components/schemas/tppErrorDetail" }, "code": { "$ref": "#/components/schemas/MessageCode405_AIS" } } } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error406_AIS": { "description": "Standardised definition of reporting error information according to [RFC7807] \nin case of a HTTP error code 406 for AIS.\n", "type": "object", "required": [ "type", "code" ], "properties": { "type": { "description": "A URI reference [RFC3986] that identifies the problem type. \nRemark For Future: These URI will be provided by NextGenPSD2 in future.\n", "type": "string", "format": "uri", "maxLength": "70" }, "title": { "description": "Short human readable description of error type. \nCould be in local language. \nTo be provided by ASPSPs.\n", "type": "string", "maxLength": "70" }, "detail": { "description": "Detailed human readable text specific to this instance of the error. \nXPath might be used to point to the issue generating the error in addition.\nRemark for Future: In future, a dedicated field might be introduced for the XPath.\n", "type": "string", "maxLength": "512" }, "code": { "$ref": "#/components/schemas/MessageCode406_AIS" }, "additionalErrors": { "description": "Array of Error Information Blocks.\n\nMight be used if more than one error is to be communicated\n", "type": "array", "items": { "description": "This is a data element to support the declaration of additional errors in the context of [RFC7807].", "type": "object", "required": [ "code" ], "properties": { "title": { "$ref": "#/components/schemas/tppErrorTitle" }, "detail": { "$ref": "#/components/schemas/tppErrorDetail" }, "code": { "$ref": "#/components/schemas/MessageCode406_AIS" } } } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error409_AIS": { "description": "Standardised definition of reporting error information according to [RFC7807] \nin case of a HTTP error code 409 for AIS.\n", "type": "object", "required": [ "type", "code" ], "properties": { "type": { "description": "A URI reference [RFC3986] that identifies the problem type. \nRemark For Future: These URI will be provided by NextGenPSD2 in future.\n", "type": "string", "format": "uri", "maxLength": "70" }, "title": { "description": "Short human readable description of error type. \nCould be in local language. \nTo be provided by ASPSPs.\n", "type": "string", "maxLength": "70" }, "detail": { "description": "Detailed human readable text specific to this instance of the error. \nXPath might be used to point to the issue generating the error in addition.\nRemark for Future: In future, a dedicated field might be introduced for the XPath.\n", "type": "string", "maxLength": "512" }, "code": { "$ref": "#/components/schemas/MessageCode409_AIS" }, "additionalErrors": { "description": "Array of Error Information Blocks.\n\nMight be used if more than one error is to be communicated\n", "type": "array", "items": { "description": "This is a data element to support the declaration of additional errors in the context of [RFC7807].", "type": "object", "required": [ "code" ], "properties": { "title": { "$ref": "#/components/schemas/tppErrorTitle" }, "detail": { "$ref": "#/components/schemas/tppErrorDetail" }, "code": { "$ref": "#/components/schemas/MessageCode409_AIS" } } } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error429_AIS": { "description": "Standardised definition of reporting error information according to [RFC7807] \nin case of a HTTP error code 429 for AIS.\n", "type": "object", "required": [ "type", "code" ], "properties": { "type": { "description": "A URI reference [RFC3986] that identifies the problem type. \nRemark For Future: These URI will be provided by NextGenPSD2 in future.\n", "type": "string", "format": "uri", "maxLength": "70" }, "title": { "description": "Short human readable description of error type. \nCould be in local language. \nTo be provided by ASPSPs.\n", "type": "string", "maxLength": "70" }, "detail": { "description": "Detailed human readable text specific to this instance of the error. \nXPath might be used to point to the issue generating the error in addition.\nRemark for Future: In future, a dedicated field might be introduced for the XPath.\n", "type": "string", "maxLength": "512" }, "code": { "$ref": "#/components/schemas/MessageCode429_AIS" }, "additionalErrors": { "description": "Array of Error Information Blocks.\n\nMight be used if more than one error is to be communicated\n", "type": "array", "items": { "description": "This is a data element to support the declaration of additional errors in the context of [RFC7807] \nin case of a HTTP error code 429 for. \n", "type": "object", "required": [ "code" ], "properties": { "title": { "$ref": "#/components/schemas/tppErrorTitle" }, "detail": { "$ref": "#/components/schemas/tppErrorDetail" }, "code": { "$ref": "#/components/schemas/MessageCode429_AIS" } } } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error400_NG_AIS": { "description": "NextGenPSD2 specific definition of reporting error information in case of a HTTP error code 400.\n", "type": "object", "properties": { "tppMessages": { "type": "array", "items": { "$ref": "#/components/schemas/tppMessage400_AIS" } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error401_NG_AIS": { "description": "NextGenPSD2 specific definition of reporting error information in case of a HTTP error code 401.\n", "type": "object", "properties": { "tppMessages": { "type": "array", "items": { "$ref": "#/components/schemas/tppMessage401_AIS" } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error403_NG_AIS": { "description": "NextGenPSD2 specific definition of reporting error information in case of a HTTP error code 403.\n", "type": "object", "properties": { "tppMessages": { "type": "array", "items": { "$ref": "#/components/schemas/tppMessage403_AIS" } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error404_NG_AIS": { "description": "NextGenPSD2 specific definition of reporting error information in case of a HTTP error code 404.\n", "type": "object", "properties": { "tppMessages": { "type": "array", "items": { "$ref": "#/components/schemas/tppMessage404_AIS" } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error405_NG_AIS": { "description": "NextGenPSD2 specific definition of reporting error information in case of a HTTP error code 401.\n", "type": "object", "properties": { "tppMessages": { "type": "array", "items": { "$ref": "#/components/schemas/tppMessage405_AIS" } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error406_NG_AIS": { "description": "NextGenPSD2 specific definition of reporting error information in case of a HTTP error code 406.\n", "type": "object", "properties": { "tppMessages": { "type": "array", "items": { "$ref": "#/components/schemas/tppMessage406_AIS" } }, "_links": { "$ref": "#/components/schemas/_linksAll" } } }, "Error409_NG_AIS": { "description": "NextGenPSD2 specific definition of reporting error information in case of a HTTP error code 409.\n", "type": "object", "properties": { "tppMessages": { "type": "array", "items": { "$ref": "#/components/schemas/tppMessage409_AIS" } }, "_links": { "$ref": "#/components/schemas/_linksAll" } }, "example": [ { "category": "ERROR", "code": "STATUS_INVALID", "text": "additional text information of the ASPSP up to 512 characters" } ] }, "Error429_NG_AIS": { "description": "NextGenPSD2 specific definition of reporting error information in case of a HTTP error code 429.\n", "type": "object", "properties": { "tppMessages": { "type": "array", "items": { "$ref": "#/components/schemas/tppMessage429_AIS" } }, "_links": { "$ref": "#/components/schemas/_linksAll" } }, "example": [ { "category": "ERROR", "code": "ACCESS_EXCEEDED", "text": "additional text information of the ASPSP up to 512 characters" } ] } }, "parameters": { "consentId_PATH": { "name": "consentId", "in": "path", "description": "ID of the corresponding consent object as returned by an Account Information Consent Request.\n", "required": "true", "schema": { "$ref": "#/components/schemas/consentId" } }, "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.", "schema": { "type": "string" }, "required": "false", "example": "SHA-256=hl1/Eps8BEQW58FJhDApwJXjGY4nr1ArGDHIT25vq6A=" }, "Signature": { "name": "Signature", "in": "header", "description": "A signature of the request by the TPP on application level. This might be mandated by ASPSP.\n", "schema": { "type": "string" }, "required": "false", "example": "keyId=\"SN=9FA1,CA=CN=D-TRUST%20CA%202-1%202015,O=D-Trust%20GmbH,C=DE\",algorithm=\"rsa-sha256\", headers=\"Digest X-Request-ID PSU-ID TPP-Redirect-URI Date\", signature=\"Base64(RSA-SHA256(signing string))\"\n" }, "TPP-Signature-Certificate": { "name": "TPP-Signature-Certificate", "in": "header", "description": "The certificate used for signing the request, in base64 encoding. \nMust be contained if a signature is contained.\n", "schema": { "type": "string", "format": "byte" }, "required": "false" }, "TPP-Redirect-Preferred": { "name": "TPP-Redirect-Preferred", "in": "header", "description": "If it equals \"true\", the TPP prefers a redirect over an embedded SCA approach.\nIf it equals \"false\", the TPP prefers not to be redirected for SCA. The ASPSP will then choose between the Embedded or the Decoupled\nSCA approach, depending on the choice of the SCA procedure by the TPP/PSU.\nIf the parameter is not used, the ASPSP will choose the SCA approach to be applied depending on the SCA method chosen by the\nTPP/PSU.\n", "schema": { "type": "string", "enum": [ "true", "false" ] }, "required": "false" }, "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.\n\nMandated for the Redirect SCA Approach, specifically \nwhen TPP-Redirect-Preferred equals \"true\".\nIt is recommended to always use this header field.\n\n**Remark for Future:** \nThis field might be changed to mandatory in the next version of the specification.\n", "schema": { "type": "string", "format": "uri" }, "required": "false" }, "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\nof a negative result of the redirect SCA method. This might be ignored by the ASPSP.\n", "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, \ne.g. because of the usage of a signing basket. \nThis preference might be ignored by the ASPSP, if a signing basket is not supported as functionality.\n\nIf it equals \"false\" or if the parameter is not used, there is no preference of the TPP. \nThis especially indicates that the TPP assumes a direct authorisation of the transaction in the next step, \nwithout using a signing basket.\n", "schema": { "type": "string", "enum": [ "true", "false" ] }, "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.\nIs not contained if an OAuth2 based authentication was performed in a pre-step or an OAuth2 based SCA was performed in an preceding\nAIS service in the same session.\n", "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.\n", "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.\n", "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.\n", "schema": { "type": "string" }, "required": "false" }, "PSU-IP-Address_conditionalForAis": { "name": "PSU-IP-Address", "in": "header", "description": "The forwarded IP Address header field consists of the corresponding HTTP request \nIP Address field between PSU and TPP. \nIt shall be contained if and only if this request was actively initiated by the PSU.\n", "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.\n", "schema": { "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.\n", "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.\n", "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.\n", "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.\n", "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.\n", "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.\nValid values are:\n* GET\n* POST\n* PUT\n* PATCH\n* DELETE\n", "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.\nUUID identifies either a device or a device dependant application installation.\nIn case of an installation identification this ID need to be unaltered until removal from device.\n", "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.\n", "schema": { "type": "string", "pattern": "GEO:-?[0-9]{1,2}\\.[0-9]{6};-?[0-9]{1,3}\\.[0-9]{6}" }, "required": "false", "example": "GEO:52.506931;13.144558" } }, "requestBodies": { "consentsConfirmationOfFunds": { "description": "Requestbody for a consent confirmation of funds request.\n", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/consentsConfirmationOfFunds" }, "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": { "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.\nPossible values are\n * EMBEDDED\n * DECOUPLED\n * REDIRECT\nThe OAuth SCA approach will be subsumed by REDIRECT.\n", "schema": { "type": "string", "enum": [ "EMBEDDED", "DECOUPLED", "REDIRECT" ], "example": "EMBEDDED" }, "required": "false" }, "Location": { "description": "Location of the created resource.\n", "schema": { "type": "string", "format": "url" }, "required": "false" } }, "responses": { "CREATED_201_ConsentsConfirmationOfFunds": { "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": { "oneOf": [ { "$ref": "#/components/schemas/ConsentsConfirmationOfFundsResponse" }, { "$ref": "#/components/schemas/ConsentsConfirmationOfFundsMultilevelSCAResponse" } ] } } } }, "OK_200_ConsentConfirmationOfFundsStatus": { "description": "Get consent status", "headers": { "X-Request-ID": { "$ref": "#/components/headers/X-Request-ID" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsentConfirmationOfFundsStatusResponse" } } } }, "OK_200_ConsentConfirmationOfFundsContent": { "description": "Get consent status", "headers": { "X-Request-ID": { "$ref": "#/components/headers/X-Request-ID" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsentConfirmationOfFundsContentResponse" } } } }, "OK_204_ConsentConfirmationOfFundsDelete": { "description": "Deletes a given consent.", "headers": { "X-Request-ID": { "$ref": "#/components/headers/X-Request-ID" } } }, "BAD_REQUEST_400_AIS": { "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/Error400_NG_AIS" } }, "application/problem+json": { "schema": { "$ref": "#/components/schemas/Error400_AIS" } } } }, "UNAUTHORIZED_401_AIS": { "description": "Unauthorized", "headers": { "Location": { "$ref": "#/components/headers/Location" }, "X-Request-ID": { "$ref": "#/components/headers/X-Request-ID" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error401_NG_AIS" } }, "application/problem+json": { "schema": { "$ref": "#/components/schemas/Error401_AIS" } } } }, "FORBIDDEN_403_AIS": { "description": "Forbidden", "headers": { "Location": { "$ref": "#/components/headers/Location" }, "X-Request-ID": { "$ref": "#/components/headers/X-Request-ID" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error403_NG_AIS" } }, "application/problem+json": { "schema": { "$ref": "#/components/schemas/Error403_AIS" } } } }, "NOT_FOUND_404_AIS": { "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/Error404_NG_AIS" } }, "application/problem+json": { "schema": { "$ref": "#/components/schemas/Error404_AIS" } } } }, "METHOD_NOT_ALLOWED_405_AIS": { "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/Error405_NG_AIS" } }, "application/problem+json": { "schema": { "$ref": "#/components/schemas/Error405_AIS" } } } }, "NOT_ACCEPTABLE_406_AIS": { "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/Error406_NG_AIS" } }, "application/problem+json": { "schema": { "$ref": "#/components/schemas/Error406_AIS" } } } }, "REQUEST_TIMEOUT_408_AIS": { "description": "Request Timeout", "headers": { "Location": { "$ref": "#/components/headers/Location" }, "X-Request-ID": { "$ref": "#/components/headers/X-Request-ID" } } }, "CONFLICT_409_AIS": { "description": "Conflict", "headers": { "Location": { "$ref": "#/components/headers/Location" }, "X-Request-ID": { "$ref": "#/components/headers/X-Request-ID" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error409_NG_AIS" } }, "application/problem+json": { "schema": { "$ref": "#/components/schemas/Error409_AIS" } } } }, "UNSUPPORTED_MEDIA_TYPE_415_AIS": { "description": "Unsupported Media Type", "headers": { "Location": { "$ref": "#/components/headers/Location" }, "X-Request-ID": { "$ref": "#/components/headers/X-Request-ID" } } }, "TOO_MANY_REQUESTS_429_AIS": { "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/Error429_NG_AIS" } }, "application/problem+json": { "schema": { "$ref": "#/components/schemas/Error429_AIS" } } } }, "INTERNAL_SERVER_ERROR_500_AIS": { "description": "Internal Server Error", "headers": { "Location": { "$ref": "#/components/headers/Location" }, "X-Request-ID": { "$ref": "#/components/headers/X-Request-ID" } } }, "SERVICE_UNAVAILABLE_503_AIS": { "description": "Service Unavailable", "headers": { "Location": { "$ref": "#/components/headers/Location" }, "X-Request-ID": { "$ref": "#/components/headers/X-Request-ID" } } } }, "examples": { "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" } } } }, "security": [ {} ], "tags": [ { "name": "Payment Initiation Service (PIS)", "description": "The Decription for Payment Initiation Service (PIS) offers the following services:\n * Initiation and update of a payment request\n * Status information of a payment\n" }, { "name": "Confirmation of Funds Service (PIIS)", "description": "Confirmation of Funds Service (PIIS) returns a confirmation of funds request at the ASPSP.\n" }, { "name": "Account Information Service (AIS)", "description": "The Account Information Service (AIS) offers the following services\n * Transaction reports for a given account or card account including balances if applicable.\n * Balances of a given account or card account ,\n * A list of available accounts or card account ,\n * Account details of a given account or card account or of the list of all accessible accounts or card account relative to a granted consent\n" }, { "name": "Signing Baskets Service (SBS)", "description": "Signing basket methods are used for authorising several transactions and resp. or consents with one SCA operation. \n" }, { "name": "Common Services", "description": "Processes on starting authorisations, update PSU identification or PSU authentication data and explicit \nauthorisation of transactions by using SCA are very similar in PIS and AIS and signing baskets services. \nThe API calls supporting these processes are described in the following independently from the service/endpoint. \nFor reasons of clarity, the endpoints are defined always for the Payment Initiation Service, the Payment Cancellation, \nthe Account Information Service (Consents), and Signing Baskets separately. \nThese processes usually are used following a hyperlink of the ASPSP. " } ] }