PSD2
Dedizierte PSD2-Schnittstelle
Unsere XS2A-Schnittstelle ist eine REST API, die mit Version 1.3.6 der Implementierungsrichtlinien der Berlin Group konform ist.
Wenn ein Drittanbieter Zugang zu der PSD2-Schnittstelle erhalten möchten, muss er von einer nationalen Aufsichtsbehörde lizenziert sein. In Deutschland ist dies die Bundesanstalt für Finanzdienstleistungsaufsicht (BaFin) in Bonn. Außerdem benötigen er für Nutzung der PSD2-Schnittstelle (API) ein QWAC-Zertifikat von einer qualifizierten Zertifizierungsstelle. Solche Zertifikate können bei qualifizierten Vertrauensdiensteanbietern (QTSPs - siehe Vertrauensliste der Europäischen Kommission auf Grundlage der eIDAS-Verordnung) beantragt werden.
Notfallmechanismus (Contingency Mechanism)
Für den Fall der nicht Verfügbarkeit der dedizierten PSD2-Schnittstelle wurde gemäß der gesetzlichen Verpflichtungen nach PSD2 ein Notfallmechanismus implementiert. Dabei gilt Folgendes:
- Der Zugriff erfolgt erst nach Identifizierung des Drittanbieters über den Besitz eines gültigen QWAC-Zertifikats.
In diesem Fall ist der Notfallmechanismus über folgende URL erreichbar:
Kontoinformationsdienst
Konformität der API mit der Implementierungsrichtlinien der Berlin Group 1.3.6
Create Consent
Request (Global consent):
POST /v1/consents HTTP/1.1
Content-Type: application/json
{
"access": {
"allPsd2": "allAccounts"
},
"recurringIndicator": true,
"validUntil": "2024-10-01",
"frequencyPerDay": "4"
}
Request (consent by IBAN)
POST /v1/consents HTTP/1.1
Content-Type: application/json
{
"access": {
"accounts": [{
"iban" : "DE49000009870000000097"
}],
"balances": [{
"iban" : "DE49000009870000000097"
}],
"transactions": [{
"iban" : "DE49000009870000000097"
}]
},
"recurringIndicator": true,
"validUntil": "2024-10-01",
"frequencyPerDay": "4"
}
Request (bank offered consent)
POST /v1/consents HTTP/1.1
Content-Type: application/json
{
"access": {
"accounts": [],
"balances": [],
"transactions": []
},
"recurringIndicator": true,
"validUntil": "2024-10-01",
"frequencyPerDay": "4"
}
Response
ASPSP-SCA-Approach: REDIRECT
{
"consentStatus": "received",
"consentId": "fb44eb9c-d12f-4aef-90bd-726c47f2e864",
"_links": {
"self": {
"href": "/v1/consents/fb44eb9c-d12f-4aef-90bd-726c47f2e864"
},
"status": {
"href": "/v1/consents/fb44eb9c-d12f-4aef-90bd-726c47f2e864/status"
},
"scaStatus": {
"href": "/v1/consents/fb44eb9c-d12f-4aef-90bd-726c47f2e864/authorisation/status"
},
"scaRedirect": {
"href": "/v1/consents/fb44eb9c-d12f-4aef-90bd-726c47f2e864/authorisations/fb44eb9c-d12f-4aef-90bd-726c47f2e864"
}
}
}
Read Account List
Request
GET /v1/accounts HTTP/1.1
Consent-ID: {{consent_id}}
X-Request-ID: {{Unique UUID}}
PSU-IP-Address: {{Users'IP if they are present}}
Content-Type: application/json
Response
X-Request-ID: {{Unique UUID}}
{
"accounts": [
{
"resourceId": "54683c9e-1160-4bf8-9a18-5c0bda473fb1",
"currency": "EUR",
"product": "Space",
"name": "Trip to Australia",
"cashAccountType": "CACC",
"status": "enabled",
"usage": "PRIV",
"ownerName": "Name of owner",
"_links": {
"balances": {
"href": "/v1/accounts/54683c9e-1160-4bf8-9a18-5c0bda473fb1/balances"
},
"transactions": {
"href": "/v1/accounts/54683c9e-1160-4bf8-9a18-5c0bda473fb1/transactions"
}
}
},
{
"resourceId": "9ce689d3-d7ce-4159-9405-d6756d645564",
"iban": "DE73100110012629586632",
"currency": "EUR",
"product": "Main Account",
"name": "Main Account",
"bic": "NTSBDEB1XXX",
"cashAccountType": "CACC",
"status": "enabled",
"usage": "PRIV",
"ownerName": "Name of owner",
"_links": {
"balances": {
"href": "/v1/accounts/9ce689d3-d7ce-4159-9405-d6756d645564/balances"
},
"transactions": {
"href": "/v1/accounts/9ce689d3-d7ce-4159-9405-d6756d645564/transactions"
}
}
},
{
"resourceId": "5fc825d0-102c-4d1b-8bd1-871e26a58001",
"currency": "EUR",
"product": "Shared Space",
"name": "shared space",
"cashAccountType": "CACC",
"status": "enabled",
"usage": "PRIV",
"ownerName": "Name of owner",
"_links": {
"balances": {
"href": "/v1/accounts/5fc825d0-102c-4d1b-8bd1-871e26a58001/balances"
},
"transactions": {
"href": "/v1/accounts/5fc825d0-102c-4d1b-8bd1-871e26a58001/transactions"
}
}
}
]
}
Read Account Details
Request
GET /v1/accounts/{{resourceId}} HTTP/1.1
Consent-ID: {{consent_id}}
X-Request-ID: {{Unique UUID}}
PSU-IP-Address: {{Users'IP if they are present}}
Content-Type: application/json
Response
X-Request-ID: {{Unique UUID}}
{
"account": {
"resourceId": "9ce689d3-d7ce-4159-9405-d6756d645564",
"iban": "DE73100110012629586632",
"currency": "EUR",
"product": "Main Account",
"name": "Main Account",
"bic": "NTSBDEB1XXX",
"cashAccountType": "CACC",
"status": "enabled",
"usage": "PRIV",
"ownerName": "Name of owner",
"_links": {
"balances": {
"href": "/v1/accounts/9ce689d3-d7ce-4159-9405-d6756d645564/balances"
},
"transactions": {
"href": "/v1/accounts/9ce689d3-d7ce-4159-9405-d6756d645564/transactions"
}
}
}
}
Read Balance
Request
GET /v1/accounts/{{resourceId}}/balances HTTP/1.1
Consent-ID: {{consent_id}}
X-Request-ID: {{Unique UUID}}
PSU-IP-Address: {{Users'IP if they are present}}
Content-Type: application/json
Response
X-Request-ID: UUID
{
"balances": [
{
"balanceType": "expected",
"balanceAmount": {
"amount": "55.55",
"currency": "EUR"
},
"lastChangeDateTime": "2020-07-30T15:59:20.162Z"
}
],
"account": {
"iban": "DE73100110012629586632"
}
}
Read Transaction List
Im Allgemeinen sind GET /transactions Anfragen auf einen Zeitraum von 90 Tagen ab dem Zeitpunkt der Anfrage beschränkt. Die einzige Ausnahme von dieser Beschränkung gilt während der ersten 15 Minuten eines AIS-Zustimmungslebenszyklus. In diesem Zeitraum wird jede gestellte GET /transaktions Anfrage nicht durch einen Zeitbereich beschränkt. Nach diesem Zeitraum gilt die obige Beschränkung und alle Anfragen, die versuchen, Transaktionen abzurufen, die älter als 90 Tage sind, werden abgelehnt.
Request
GET /v1/accounts/{{resourceId}}/transactions HTTP/1.1
Consent-ID: {{consent_id}}
X-Request-ID: {{Unique UUID}}
PSU-IP-Address: {{Users'IP if they are present}}
Content-Type: application/json
- Der Abfrageparameter „bookingStatus“ wird mit den Werten „booked“ und „information“ unterstützt.
- Die Abfrageparameter „dateFrom“ und „dateTo“ werden unterstützt, wenn „bookingStatus“ nicht „information“ ist.
- Der Abfrageparameter „deltaList“ wird derzeit nicht unterstützt.
- Die Paginierung über „_links“ wird derzeit nicht unterstützt.
Response
X-Request-ID: UUID
{
"account": {
"iban": "DE73100110012629586632"
},
"transactions": {
"booked": [
{
"transactionId": "7f9da399-8c53-4c68-b43c-c7e22a0c70d2",
"creditorName": "User SEPA",
"creditorAccount": {
"iban": "DE43100110012620287103"
},
"transactionAmount": {
"amount": "-20.0",
"currency": "EUR"
},
"bookingDate": "2020-07-22",
"valueDate": "2020-07-22",
"remittanceInformationUnstructuredArray":["Payback for lunch"],
"remittanceInformationUnstructured":"Payback for lunch",
"bankTransactionCode": "PMNT-ICDT-ESCT"
},
{
"transactionId":"df0fed01-f949-4909-88c3-f1c01d2972ca",
"debtorName":"User SEPA 2",
"debtorAccount":{"iban":"DE65100110011234567890"},
"transactionAmount": {
"amount":"22.0",
"currency":"EUR"
},
"bookingDate":"2020-07-20",
"valueDate":"2020-07-20",
"remittanceInformationUnstructuredArray":["Payback for drinks"],
"remittanceInformationUnstructured":"Payback for drinks",
"bankTransactionCode":"PMNT-RCDT-ESCT"
},
{
"transactionId": "8943aefb-ec2b-46fa-8a38-dc264af13eb5",
"additionalInformation":"67d507fd-c9e7-4d43-a799-103d37da65db",
"creditorName": "Merchant A",
"transactionAmount": {
"amount": "-9.50",
"currency": "EUR"
},
"bookingDate": "2022-07-15",
"valueDate": "2022-07-15",
"remittanceInformationUnstructuredArray":["-"],
"remittanceInformationUnstructured":"-",
"bankTransactionCode": "PMNT-CCRD-POSD"
},
{
"transactionId": "7f9da399-8c53-4c68-b43c-c7e22a0c70d2",
"creditorName": "Merchant B",
"creditorAccount": {
"iban": "DE43100110012620287103"
},
"transactionAmount": {
"amount": "-7.99",
"currency": "EUR"
},
"bookingDate": "2022-07-05",
"valueDate": "2022-07-05",
"remittanceInformationUnstructuredArray": ["Monthly fee"],
"remittanceInformationUnstructured": "Monthly fee",
"bankTransactionCode": "PMNT-IDDT-ESDD",
"mandateId": "4ABK2252MNG98",
"creditorId": "AB98ZZZ0000000000048"
}
],
"_links": {
"account": {
"href": "/v1/accounts/9ce689d3-d7ce-4159-9405-d6756d645564"
}
}
}
}
Read Standing order List
Request
GET /v1/accounts/{{resourceId}}/transactions?bookingStatus=information HTTP/1.1
Consent-ID: {{consent_id}}
X-Request-ID: {{Unique UUID}}
PSU-IP-Address: {{Users'IP if they are present}}
Content-Type: application/json
- Die Abfrageparameter „dateFrom“ und „dateTo“ werden für Daueraufträge nicht unterstützt.
- Die Paginierung über „_links“ wird derzeit nicht unterstützt.
Response
X-Request-ID: UUID
{
"account": {
"iban": "DE73100110012629586632"
},
"transactions": {
"information": [
{
"creditorName": "Recipient",
"creditorAccount": {
"iban": "DE12500105170648489890"
},
"transactionAmount": {
"amount": "1.00",
"currency": "EUR"
},
"remittanceInformationUnstructured": "Standing order",
"additionalInformationStructured": {
"standingOrderDetails": {
"startDate": "2021-08-13",
"frequency": "MNTH"
}
}
}
],
"_links": {
"account": {
"href": "/v1/accounts/9ce689d3-d7ce-4159-9405-d6756d645564"
}
}
}
}
Produktion API
PSD2-API (psd2-api-vontobel.secure-banking.de)
Testing Facility
Statistiken (KPI) zu PSD2
Nach Artikel 32 Absatz 4 der Verordnung (EU) 2018/389 (PSD2) sind wir verpflichtet Statistiken mit Key Performance Indicator (KPI) und die Verfügbarkeiten unserer dedizierten PSD2-Schnittstelle als auch unseres Online Bankings zur Verfügung zu stellen. Die von uns zur Verfügung gestellten Daten sind und werden Quartalsweise veröffentlicht.
Elektronisches Merkblatt nach Art. 106 Abs. 1 der Verordnung (EU) 2018/389 (PSD2) - Ihre Rechte bei europaweiten Zahlungen
Die Europäische Kommission hat eine Broschüre zu Ihren Rechten bei europaweiten Zahlungen bereitgestellt. Sie finden diese Broschüre hier im PDF-Format.