PIS API specific documentation Finland
Changes from the previous version
Version 4.15
SEPA credit transfer has been enhanced with instant payment functionality. As part of it
- “urgency = express” is supported at payment initiation
- The solution does not support due date -payments for express payments
- Maximum length for creditor name has been increased to 70 char for express payments
Maximum length for creditor name has been increased to 70 char for standard payments
Version 4.14
- SEPA payment v4 for PIS Personal has been deprecated.
- ‘CCALC’ is marked Deprecated as an authentication method for SEPA Payments. It will be removed in future in Production.
- Added Cancelled and Stopped payment statuses.
Version 4.13
Added text to clarify the use of Creditor reference and Creditor message. It is not allowed to use both when initiating a Sepa credit transfer.
Version 4.12
Authentication methods MTA_OFF and QR_RDR have been removed.
Version 4.11
Confirmation of Availability of Funds has been added to following endpoints
- / payments / domestic
- / payments / sepa
- / payments / cross-border-credit-transfers
- / payments / owntransfer
Two new optional fields have been added
- request_availability_of_funds
- availability_of_funds
Confirmation of Availability of Funds is available for version 5.
Version 4.10
- Added Additional Confirmation for SEPA payments It is possible now to provide Additional Confirmation to SEPA payments using 2SCA flow for payments which were previously on ‘OnHold’ and customer needed to call the bank to release such payment.
- Payments that require additional confirm will have Status:‘PendingSecondConfirmation’ together with tpp message: ‘This payment requires additional confirmation. It must be before midnight (24.00) on the following banking day otherwise payment will be rejected. Please note that each payment needs to be confirmed separately’. TPP need to invoke ‘/v4/payments/sepa/confirm’ again with same ‘payment id’. Multiple payment ids are not allowed to be re-confirmed at this point. Once endpoint is successfully invoked payment Status will then change to ‘PendingUserApproval’, tpp_message: ‘This payment requires additional confirmation. It must be before midnight (24.00) on the following banking day otherwise payment will be rejected. Please note that each payment needs to be confirmed separately.’ PSU should authenticate on redirect to NASA interface.
- Additional confirmation for SEPA payment is only available in Production solution.
Note: Version 3 has been deprecated.
Version 4.9
- Added decouple signing for CCALC. It is possible now to sign SEPA payments using the code calculator (CCALC). In order to start the decouple signing flow, the TPP need to pass
CCALC
as a value of the parameterauthentication_method
during payment confirmation step with thePUT /confirm
service. In th response ofPUT /confirm
service, we have added a new parameterotp_challenge
, the TPP need to pass that new parameter to the PSU to be used in the code calculator. - New end-point to complete the signing using code calculator
/v4/payments/sepa/confirm/otp
. The TPP need to call this service with theotp_challenge
and the response code that the PSU generates from their code calculator devices.
Version 4.8
Added the new language
parameter to the PUT /confirm service. The service consumer can use the new language parameter to determine which language is to be used in the signing page.
Version 4.7
Minor fixes to the documentation.
Version 4.6
This version number was not used.
Version 4.5
Minor fixes to the documentation.
Version 4.4
An option to add recurring payment information to normal bank transfers have been added to the solution. It does not apply to KID/OCR/GIRO payments where a unique reference needs to be supplied. The recurrence_type
field enum values can be extracted from the swaggers.
Version 4.3
Initiate payment now allows for future dated payments by supplying a date as ‘requested_execution_date’ (optional, default is “today”). See swagger definition for limits. Urgency ‘Express’ should not be used with future dated payments. Confirmed payments in sandbox will remain in status ‘Confirmed’ until the requested execution date, but as sandbox is a session based, in-memory data base, this needs to be tested close to midnight.
New endpoints to support DELETE for removal of payments (designed for removal of recurring payments as well, but this function is still to come). Interfaces also work for future dated payments. The request have been defined to support deletion of a single payment, or a list of payments and the services return a list of paymentIds that where deleted and/or tpp_messages for those that were not.
/v4/payments/sepa/
(DELETE - multiple, details supplied in body request)/v4/payments/sepa/<paymentId>
(DELETE - single, details supplied in url)
Note: You can delete a single payment in both services at your own choice.
Version 4.2
Added new endpoint /confirm
for initiating bulk signing without specifying the {paymentId}
as part of the URL. Instead (multiple) paymentIds can be supplied in the payload:
/v4/payments/sepa/confirm
Added three query parameters: desc
, page
and parameter
, to the get list of payments:
/v4/payments/sepa
(GET)
Also, the signing url in sandbox was incorrectly labeled ‘SigningUrl’ in the ‘_links’ section after initiation of confirmation flow. It is now ‘signing’ as in production.
Version 4.1
Changes in the API paths. Endpoints changed to distinguish ‘personal’ from ‘business’ and ‘corporate’ customers.
This has been done by adding a ‘personal’ prefix to the path. For example: /personal/v4/payments
Version 4.0
KEY CHANGE: QSealC support for ALL authorization, AIS and PIS endpoints (exception: /v4/authorize
).
PIS: support for fee calculation in Danish payments:
- (reference)
_type
values added for DK Transfer form
Version 3.3
Support for Norway was added to PIS endpoints, Payment types ( With advice, Without advice and KID):
/v3/payments/domestic
/v3/payments/domestic/<paymentId>
/v3/payments/domestic/<paymentId>/confirm
Support for Plusgiro and Bankgiro payments, Sweden.
/v3/payments/domestic
/v3/payments/domestic/<paymentId>
/v3/payments/domestic/<paymentId>/confirm
Support for Transfer forms, Denmark
/v3/payments/domestic
/v3/payments/domestic/<paymentId>
/v3/payments/domestic/<paymentId>/confirm
Version 3.2
Some improvements were made to the swagger definitions.
Version 3.1
Some improvements were made to the swagger definitions.
Version 3.0
PIS Section was separated between SEPA and Domestic schemes.
PIS endpoints for Denmark were added. Endpoints for Denmark are the following:
/v3/payments/domestic
/v3/payments/domestic/<paymentId>
/v3/payments/domestic/<paymentId>/confirm
Overview
Payment Initiation Services (PIS) API consists of four endpoints. The PIS API can be used to initiate payments, query payment details, and status and confirm payments. This API supports GET, POST and PUT HTTP methods. At the moment, PIS API supports only SEPA transfers, and the API endpoint URLs have sepa
in them.
Please note that it is not possible to confirm payments to non-Finnish accounts using code calculator or Nordea ID app offline mode. Please use the Nordea ID app in online mode to confirm such payments.
It is not allowed to use both Creditor reference and Creditor message when initiating a Sepa credit transfer. If both are used, the payment is rejected.
API Endpoints
The PIS API contains the following endpoints:
Endpoint | Supported HTTP Methods |
---|---|
/payments/sepa | GET, POST, DELETE |
/payments/sepa/{paymentId} | GET, DELETE |
/payments/sepa/confirm | PUT |
The /payments/sepa
endpoint has two uses, it can be used to initiate payment and to get payments. It supports GET and POST methods. If POST method is used, new payment will be initialized, and the request body must contain the payment details to be initiated. If get method is used, it will return list of pending
payments. This endpoint returns HTTP Code 201 on success, and the response contains the payment details which include, e.g., payment receiver details among other things.
Here is an example of the JSON payload format which can be posted to this endpoint, “_type” is an internal defined representation of the account or reference type.
{
"amount": "1.11",
"currency": "EUR",
"debtor":
{
"account":
{
"_type": "IBAN",
"currency": "EUR",
"value": "FI6593857450293470"
},
"message": "Own message"
},
"creditor":
{
"account":
{
"_type": "IBAN",
"currency": "EUR",
"value": "FI4910013500015921"
},
"name": "Creditor name",
"reference":
{
"value": "RF11223344",
"_type": "RF"
}
}
}
'
After the payment is initiated by POST request to this endpoint, it will be available by doing GET request to this endpoint which returns a list of pending payments.
The /payments/sepa/{paymentId}
endpoint can be used to query payment details by payment id, and it supports only GET HTTP method. The payment id is returned when payment is initiated successfully, and it can be found from the response JSON by the name _id
. Moreover, the payment status can be seen in the response by the name payment_status
. Full response example of this endpoint can be seen in examples section below.
The /payments/sepa/confirm
endpoint can be used for bulk confirmation of payments. The service also allows for individual payment confirmations. Please be aware that processing multiple payments could subsequently result in multiple errors. The post-signing redirect and decoupled solutions are the same as for the single confirmation endpoint. Also note that if 4 payment_id’s are sent, and two of them return errors, the subsequent signing process will only include the two payments with no errors.
In Sandbox: To confirm the payment, call the `/confirm` endpoint and subsequently activate the `signing_url` supplied. The received response is mocked and not valid for further processing.
PIS API Scenarios
The scenarios are implemented on PIS API to allow for easier testing of the applications. Developers can request a specific scenario (or list of scenarios) for certain API calls, for example, when confirming a transfer of funds the developer can request that the transaction processing to fail due to missing funds and the corresponding payment status will be represented in the payment details.
There are three scenarios available in PIS API related to payment signing and execution.
PaymentSigningExpires
PaymentMissingFunds
PaymentOnHold
PaymentSigningExpires
scenario means that the user never signs the payment by MTA (Nordea code app). PaymentMissingFunds
in this scenario payment is signed, but there are no funds available. PaymentOnHold
in this scenario payment is signed, but the payment is put on hold by Nordea for some reason (for example, fraud).
There are the following scenarios available for adding a mock UI signing flow to the payment confirmation. Adding any of the UI scenarios to the confirmation flow, then calling /confirm is no longer adequate to sign the payment, The mock UI flow has to be followed.
AuthenticationWithUI
SigningWithUI
AuthenticationWithUI
mimics the 2SCA flow and includes authentication before signing. SigningWithUI
shows the mock signing screen only and mimics the 1SCA flow. The signing screen also has built in functionality to check a few scenarios whilst mock signing the payment.
There is additionally a scenario available for mocking the date being rolled.
ExecutionDateRolling
ExecutionDateRolling
rolls the planned_execution_date compared to the requested_execution_date to mimic that the payment cannot be processed the requested date.
Any scenario is specified either as part of request header or as a query parameter.
Note that the scenarios are available only in the sandbox APIs. They will never be available in the production APIs.
Use `X-Response-Scenarios` for header parameter or query parameter to request scenarios to be applied.
Further details
For further details on payment type field combinations and status codes, recurring payments etc., please refer to the domestic API documentation as well. Also, have a look at the Help Center contents.
PIS API examples SEPA
SEPA: get list of payments
This example shows how to get list of pending payments.
This endpoint URL has the following form:
https://api.nordeaopenbanking.com/personal/v4/payments/sepa
This endpoint supports GET, POST and DELETE HTTP Methods. Here we use GET since we want to get list of payments.
Here is an example request.
$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/sepa' -i -X GET \
-H 'X-Nordea-Originating-Host: <host>' \
-H 'X-Nordea-Originating-Date: <now>' \
-H 'Accept: application/json' \```
-H 'Authorization: Bearer <access_token>' \
-H 'signature: keyId=\"<your_clientapp_keyid>\",algorithm=\"rsa-sha256\",headers=\"(request-target) x-nordea-originating-host x-nordea-originating-date\",signature=\"<generated_signature>"' \
-H 'X-IBM-Client-Id: <your_client_id>' \
-H 'X-IBM-Client-Secret: <your_client_secret>'
And here is the response:
"group_header": {
"message_identification": "daf57be654335640",
"creation_date_time": "2024-06-06T13:56:30.077170987Z",
"http_code": 200
},
"errors": [],
"_links": [],
"response": {
"payments": [
{
"_id": "176db734-8db1-46af-95b7-7cb43e7022fa",
"entry_date_time": "2024-06-06T13:56:10.422Z",
"debtor": {
"account": {
"value": "FI6715723500036603",
"_type": "IBAN",
"currency": "EUR"
},
"message": "crd msg"
},
"creditor": {
"account": {
"value": "FI1310473000108131",
"_type": "IBAN",
"currency": "EUR"
},
"name": "name fff",
"message": "crd msg"
},
"amount": "25",
"currency": "EUR",
"payment_status": "PendingConfirmation",
"urgency": "standard",
"requested_execution_date": "2024-06-06",
"planned_execution_date": "2024-06-06",
"tpp_messages": [],
"_links": [
{
"rel": "self",
"href": "/v4/payments/sepa/176db734-8db1-46af-95b7-7cb43e7022fa"
}
]
},
{
"_id": "e25fd958-98ee-4428-8041-36f45a1fee51",
"entry_date_time": "2024-06-06T13:54:44.668386Z",
"debtor": {
"account": {
"value": "FI6715723500036603",
"_type": "IBAN",
"currency": "EUR"
}
},
"creditor": {
"account": {
"value": "SE7630000000032017800546",
"_type": "IBAN",
"currency": "EUR"
},
"name": "name fff",
"message": "crd msg"
},
"amount": "25.00",
"currency": "EUR",
"payment_status": "PendingConfirmation",
"urgency": "standard",
"requested_execution_date": "2024-06-06",
"planned_execution_date": "2024-06-06",
"tpp_messages": [],
"_links": [
{
"rel": "self",
"href": "/v4/payments/sepa/e25fd958-98ee-4428-8041-36f45a1fee51"
}
]
}
]
}
}
'
SEPA: initiate a new payment
In this example, we initiate a new payment.
This endpoint URL has the following form:
https://api.nordeaopenbanking.com/personal/v4/payments/sepa
This endpoint supports GET and POST HTTP Methods. Here we use POST since we create a new payment.
Here is an example request.
$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/sepa' -i -X POST \
-H 'X-Nordea-Originating-Host: <host>' \
-H 'X-Nordea-Originating-Date: <now>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <access_token>' \
-H 'digest: <generated_digest>' \
-H 'signature: keyId=\"<your_clientapp_keyid>\",algorithm=\"rsa-sha256\",headers=\"(request-target) x-nordea-originating-host x-nordea-originating-date\",signature=\"<generated_signature>"' \
-H 'X-IBM-Client-Id: <your_client_id>' \
-H 'X-IBM-Client-Secret: <your_client_secret>' \
-H 'Content-Type: application/json; charset=UTF-8' \
-d '{
"amount": "25",
"requested_execution_date": "2024-06-06",
"creditor": {
"account": {
"_type": "IBAN",
"value": "FI1310473000108131"
},
"message": "crd msg",
"name": "beneficiary name "
},
"currency": "EUR",
"debtor": {
"account": {
"_type": "IBAN",
"currency": "EUR",
"value": "FI6715723500036603"
},
"message": "Own msg"
},
"externalId": "no example"
}
'
And the response looks like this:
"group_header": {
"message_identification": "83522e4bf3cd1749",
"creation_date_time": "2024-06-06T15:43:50.136026003Z",
"http_code": 201
},
"response": {
"_id": "dd0f00f0-903c-46e7-854f-72d09ec71372",
"entry_date_time": "2024-06-06T15:43:49.951Z",
"debtor": {
"account": {
"value": "FI6715723500036603",
"_type": "IBAN",
"currency": "EUR"
},
"message": "Own msg"
},
"creditor": {
"account": {
"value": "FI1310473000108131",
"_type": "IBAN",
"currency": "EUR"
},
"name": "beneficiary name ",
"message": "crd msg"
},
"amount": "25",
"currency": "EUR",
"payment_status": "PendingConfirmation",
"urgency": "standard",
"requested_execution_date": "2024-06-06",
"planned_execution_date": "2024-06-06",
"tpp_messages": [],
"_links": [
{
"rel": "self",
"href": "/v4/payments/sepa/dd0f00f0-903c-46e7-854f-72d09ec71372"
}
]
}
}
'
Note that the ‘payment_status’ is ‘PendingConfirmation’, it means the payment confirming(signing) process has to be started by you the TPP.
SEPA: get payment information
This example shows how to query payment information.
This endpoint URL has the following form:
https://api.nordeaopenbanking.com/personal/v4/payments/sepa/confirm
This endpoint supports only the GET HTTP Method.
Here is an example request
$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/sepa/confirm' -i -X GET \
-H 'X-Nordea-Originating-Host: <host>' \
-H 'X-Nordea-Originating-Date: <now>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <access_token>' \
-H 'signature: keyId=\"<your_clientapp_keyid>\",algorithm=\"rsa-sha256\",headers=\"(request-target) x-nordea-originating-host x-nordea-originating-date\",signature=\"<generated_signature>"' \
-H 'header 'Digest: <Digest value>' \
-H 'X-IBM-Client-Id: <your_client_id>' \
-H 'X-IBM-Client-Secret: <your_client_secret>'
And here is how the response looks like:
"group_header": {
"message_identification": "4bc09de154e095dc",
"creation_date_time": "2024-06-06T15:45:22.024060852Z",
"http_code": 200
},
"errors": [],
"_links": [
{
"rel": "signing",
"href": "https://nasa.nd.test.nordea.com?client_id=VjIDcKEAah8ioKuzUIDZ&code_challenge_method=S256&redirect_uri=https://open.dev01.qaoneadr.local/personal/v4/payments/sign/callback&response_type=code&code_challenge=diDchUWU1Twm6dNct1Dnve6n_v4ifYuxOX4nMRSPc9Y&scope=openid+ndf+agreement&state=c2lnbmluZ19vcmRlcl9pZD05ZThiNmMzMy05YTlhLTRkY2YtYWQyYS1lNTJkM2U3OGMyMTgmc3RhdGVfaWQ9OWU4YjZjMzMtOWE5YS00ZGNmLWFkMmEtZTUyZDNlNzhjMjE4&signing_order_id=9e8b6c33-9a9a-4dcf-ad2a-e52d3e78c218&login_hint=mta&ui_locales=fi"
}
],
"response": {
"payments": [
{
"_id": "dd0f00f0-903c-46e7-854f-72d09ec71372",
"entry_date_time": "2024-06-06T15:43:49.951Z",
"debtor": {
"account": {
"value": "FI6715723500036603",
"_type": "IBAN",
"currency": "EUR"
},
"message": "Own msg"
},
"creditor": {
"account": {
"value": "FI1310473000108131",
"_type": "IBAN",
"currency": "EUR"
},
"name": "beneficiary name ",
"message": "crd msg"
},
"amount": "25",
"currency": "EUR",
"payment_status": "PendingUserApproval",
"urgency": "standard",
"requested_execution_date": "2024-06-06",
"planned_execution_date": "2024-06-06",
"tpp_messages": [],
"_links": [
{
"rel": "self",
"href": "/v4/payments/sepa/dd0f00f0-903c-46e7-854f-72d09ec71372"
}
]
}
]
}
}
'
SEPA: bulk confirm payments
This example shows how to bulk confirm payments
This endpoint URL has the following form:
https://api.nordeaopenbanking.com/personal/v4/payments/sepa/confirm
This endpoint supports only the PUT HTTP Method.
Here is an example request:
$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/sepa/confirm' -i -X PUT \
-H 'X-Nordea-Originating-Host: <host>' \
-H 'X-Nordea-Originating-Date: <now>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <access_token>' \
-H 'digest: <generated_digest>' \
-H 'signature: keyId=\"<your_clientapp_keyid>\",algorithm=\"rsa-sha256\",headers=\"(request-target) x-nordea-originating-host x-nordea-originating-date\",signature="<generated_signature>"' \
-H 'X-IBM-Client-Id: <your_client_id>' \
-H 'X-IBM-Client-Secret: <your_client_secret>'
-H 'Content-Type: application/json; charset=UTF-8' \
-d {
"payments_ids": [
"5c229d87-b0cb-43b8-ade7-2284edba3d84",
"d5757fd3-8cd9-43a0-8814-304891729b42"
],
"redirect_url": "https://www.nordea.com",
"state": "state",
"authentication_method":"",
"language":""
}
'
And this is how the response looks like:
{
"group_header": {
"message_identification": "d0f9703f64963de2",
"creation_date_time": "2024-06-06T17:09:56.751257788Z",
"http_code": 200
},
"errors": [],
"_links": [
{
"rel": "signing",
"href": "https://nasa.nd.test.nordea.com?client_id=VjIDcKEAah8ioKuzUIDZ&code_challenge_method=S256&redirect_uri=https://open.dev01.qaoneadr.local/personal/v4/payments/sign/callback&response_type=code&code_challenge=D5nUe88nlI6VVY1lWFb24aYUbAdczZgyne6ZAqtVNB4&scope=openid+ndf+agreement&state=c2lnbmluZ19vcmRlcl9pZD01ZjUwYjBkMC0wOWNhLTQxZGMtOWEwNy0xYzFlNjU0MTQ3MGMmc3RhdGVfaWQ9NWY1MGIwZDAtMDljYS00MWRjLTlhMDctMWMxZTY1NDE0NzBj&signing_order_id=5f50b0d0-09ca-41dc-9a07-1c1e6541470c&ui_locales=fi"
}
],
"response": {
"payments": [
{
"_id": "d5757fd3-8cd9-43a0-8814-304891729b42",
"entry_date_time": "2024-06-06T17:09:35.029Z",
"debtor": {
"account": {
"value": "FI6715723500036603",
"_type": "IBAN",
"currency": "EUR"
},
"message": "Own msg"
},
"creditor": {
"account": {
"value": "FI1310473000108131",
"_type": "IBAN",
"currency": "EUR"
},
"name": "beneficiary name ",
"message": "crd msg"
},
"amount": "29",
"currency": "EUR",
"payment_status": "PendingUserApproval",
"urgency": "standard",
"requested_execution_date": "2024-06-06",
"planned_execution_date": "2024-06-06",
"tpp_messages": [],
"_links": [
{
"rel": "self",
"href": "/v4/payments/sepa/d5757fd3-8cd9-43a0-8814-304891729b42"
}
]
},
{
"_id": "5c229d87-b0cb-43b8-ade7-2284edba3d84",
"entry_date_time": "2024-06-06T17:09:04.609Z",
"debtor": {
"account": {
"value": "FI6715723500036603",
"_type": "IBAN",
"currency": "EUR"
},
"message": "Own msg"
},
"creditor": {
"account": {
"value": "FI1310473000108131",
"_type": "IBAN",
"currency": "EUR"
},
"name": "beneficiary name ",
"message": "crd msg"
},
"amount": "1",
"currency": "EUR",
"payment_status": "PendingUserApproval",
"urgency": "standard",
"requested_execution_date": "2024-06-06",
"planned_execution_date": "2024-06-06",
"tpp_messages": [],
"_links": [
{
"rel": "self",
"href": "/v4/payments/sepa/5c229d87-b0cb-43b8-ade7-2284edba3d84"
}
]
}
]
}
}
'
an example request with the language
:
$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/sepa/confirm' -i -X PUT \
-H 'X-Nordea-Originating-Host: <host>' \
-H 'X-Nordea-Originating-Date: <now>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <access_token>' \
-H 'digest: <generated_digest>' \
-H 'signature: keyId=\"<your_clientapp_keyid>\",algorithm=\"rsa-sha256\",headers=\"(request-target) x-nordea-originating-host x-nordea-originating-date\",signature="<generated_signature>"' \
-H 'X-IBM-Client-Id: <your_client_id>' \
-H 'X-IBM-Client-Secret: <your_client_secret>'
-H 'Content-Type: application/json; charset=UTF-8' \
-d '{
"payments_ids": [
"5c229d87-b0cb-43b8-ade7-2284edba3d84",
"d5757fd3-8cd9-43a0-8814-304891729b42"
],
"redirect_url": "https://www.nordea.com",
"state": "state",
"authentication_method":"",
"language":"fi"
}
'
And this is how the response looks like:
Note: SEPA bulk confirm service uses redirect signing url’s.
"group_header": {
"message_identification": "d0f9703f64963de2",
"creation_date_time": "2024-06-06T17:09:56.751257788Z",
"http_code": 200
},
"errors": [],
"_links": [
{
"rel": "signing",
"href": "https://nasa.nd.test.nordea.com?client_id=VjIDcKEAah8ioKuzUIDZ&code_challenge_method=S256&redirect_uri=https://open.dev01.qaoneadr.local/personal/v4/payments/sign/callback&response_type=code&code_challenge=D5nUe88nlI6VVY1lWFb24aYUbAdczZgyne6ZAqtVNB4&scope=openid+ndf+agreement&state=c2lnbmluZ19vcmRlcl9pZD01ZjUwYjBkMC0wOWNhLTQxZGMtOWEwNy0xYzFlNjU0MTQ3MGMmc3RhdGVfaWQ9NWY1MGIwZDAtMDljYS00MWRjLTlhMDctMWMxZTY1NDE0NzBj&signing_order_id=5f50b0d0-09ca-41dc-9a07-1c1e6541470c&ui_locales=fi"
}
],
"response": {
"payments": [
{
"_id": "d5757fd3-8cd9-43a0-8814-304891729b42",
"entry_date_time": "2024-06-06T17:09:35.029Z",
"debtor": {
"account": {
"value": "FI6715723500036603",
"_type": "IBAN",
"currency": "EUR"
},
"message": "Own msg"
},
"creditor": {
"account": {
"value": "FI1310473000108131",
"_type": "IBAN",
"currency": "EUR"
},
"name": "beneficiary name ",
"message": "crd msg"
},
"amount": "29",
"currency": "EUR",
"payment_status": "PendingUserApproval",
"urgency": "standard",
"requested_execution_date": "2024-06-06",
"planned_execution_date": "2024-06-06",
"tpp_messages": [],
"_links": [
{
"rel": "self",
"href": "/v4/payments/sepa/d5757fd3-8cd9-43a0-8814-304891729b42"
}
]
},
{
"_id": "5c229d87-b0cb-43b8-ade7-2284edba3d84",
"entry_date_time": "2024-06-06T17:09:04.609Z",
"debtor": {
"account": {
"value": "FI6715723500036603",
"_type": "IBAN",
"currency": "EUR"
},
"message": "Own msg"
},
"creditor": {
"account": {
"value": "FI1310473000108131",
"_type": "IBAN",
"currency": "EUR"
},
"name": "beneficiary name ",
"message": "crd msg"
},
"amount": "1",
"currency": "EUR",
"payment_status": "PendingUserApproval",
"urgency": "standard",
"requested_execution_date": "2024-06-06",
"planned_execution_date": "2024-06-06",
"tpp_messages": [],
"_links": [
{
"rel": "self",
"href": "/v4/payments/sepa/5c229d87-b0cb-43b8-ade7-2284edba3d84"
}
]
}
]
}
}
'
SEPA: delete single payment
This example shows how to delete a payment.
Note: Not all payments are deletable (see payment status table for further information).
This endpoint URL has the following form:
https://api.nordeaopenbanking.com/personal/v4/payments/sepa
This endpoint supports GET and DELETE HTTP Method. Here we use DELETE to delete the payment.
Here is an example request
$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/sepa' -i -X DELETE \
-H 'X-Nordea-Originating-Host: <host>' \
-H 'X-Nordea-Originating-Date: <now>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <access_token>' \
-H 'signature: keyId=\"<your_clientapp_keyid>\",algorithm=\"rsa-sha256\",headers=\"(request-target) x-nordea-originating-host x-nordea-originating-date\",signature=\"<generated_signature>"' \
-H 'X-IBM-Client-Id: <your_client_id>' \
-H 'X-IBM-Client-Secret: <your_client_secret>'
{
"payments": [
{
"payment_id": "7406c629-579a-4597-9918-d36405df7797",
"only_next_occurrence": "true"
}
]
}
'
And here is how the response looks like:
{
"group_header": {
"message_identification": "ece53b30c10acca7",
"creation_date_time": "2024-06-06T17:52:31.918432803Z"
},
"response": [
"7406c629-579a-4597-9918-d36405df7797"
],
"errors": []
}
'
SEPA: delete multiple payments
This example shows how to bulk delete payments
Note: Not all payments are deletable (see payment status table for further information).
This endpoint URL has the following form:
https://api.nordeaopenbanking.com/personal/v4/payments/sepa
This endpoint supports GET, POST and DELETE HTTP Methods. Here we use DELETE since we want to delete payments.
Here is an example request:
$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/sepa' -i -X DELETE \
-H 'X-Nordea-Originating-Host: <host>' \
-H 'X-Nordea-Originating-Date: <now>' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <access_token>' \
-H 'digest: <generated_digest>' \
-H 'signature: keyId=\"<your_clientapp_keyid>\",algorithm=\"rsa-sha256\",headers=\"(request-target) x-nordea-originating-host x-nordea-originating-date\",signature="<generated_signature>"' \
-H 'X-IBM-Client-Id: <your_client_id>' \
-H 'X-IBM-Client-Secret: <your_client_secret>'
-H 'Content-Type: application/json; charset=UTF-8' \
-d '{
"payments":[
{payment_id":"11d55648-8c1d-45e2-951a-69c5aeaed99y"},
{payment_id":"5e6e2d6f-e2dd-4c71-b232-9dfbb88ba99y"}
]
}
'
And this is how the response looks like:
{
"group_header":
{
"message_identification": "a42c1707dd444505",
"creation_date_time": "2021-11-11T10:11:12.134Z",
"http_code": 200
},
"response": [
"11d55648-8c1d-45e2-951a-69c5aeaed99y",
"5e6e2d6f-e2dd-4c71-b232-9dfbb88ba99y"
],
"errors": []
}
'
Confirmation of Availability of Funds
Confirmation of Availability of Funds has been added to this endpoint.
Two new optional fields have been added
- request_availability_of_funds
- availability_of_funds
Confirmation of Availability is available for version 5.
Payment initiation
If 2SCA initiation payment endpoint is available and the request contains the new field, request_availability_of_funds set to true and SBX scenario specified “FundsNotAvalable” in request header when the endpoint is invoked, then the payment initiation response is returned with new field availability_of_funds is set false.
If 2SCA initiation payment endpoint is available and the request contains the new field, request_availability_of_funds set to true and SBX scenario is not specified when the endpoint is invoked, then the payment initiation response returned with new field availability_of_funds is set true.
Get payment details
If 2SCA get payment details endpoint is available and SBX scenario is specified FundsNotAvailable and payment status is not Rejected or Executed, when the endpoint is invoked with query parameter request_availability_of_funds true, then the response of Get Payment Details is returned with funds info availability_of_funds set false.
If 2SCA get payment details endpoint is available and SBX scenario is not specified and payment status is not Rejected or Executed, when the endpoint is invoked with query parameter request_availability_of_funds true, then the response of Get Payment Details is returned with funds info availability_of_funds set true.
The examples for Payment initiation and Get payment details of Confirmation of Availability of Funds are updated in documentation called “Household PIS API specific documentation Sweden, Denmark and Norway - v5.5” in Denmark examples.