Compliance APIsPersonalPaymentsPayments API SEPA credit transfer

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 parameter authentication_method during payment confirmation step with the PUT /confirm service. In th response of PUT /confirm service, we have added a new parameter otp_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 the otp_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:

EndpointSupported HTTP Methods
/payments/sepaGET, POST, DELETE
/payments/sepa/{paymentId}GET, DELETE
/payments/sepa/confirmPUT

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.

sandbox only

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.

sandbox only

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.