Compliance APIsPersonalPaymentsPayments API Single SCA

PIS API specific documentation

Changes from the previous version

This is the change log of the PIS API for Single SCA, allowing PSD2-regulated TPPs to initiate payments on behalf of the PSU. The top most item is the latest change and the API changes described in it are relative to the version directly below.

Version 4.1

New version of endpoints made due to these Cross border breaking changes

  • Structured creditor address, replacing the unstructured creditor address
  • Own transfers now has its own endpoint and is no longer a flag on cross border payments
  • BIC is now mandatory for all cross border payments

Overview

Payment Initiation Services (PIS) API for Single SCA consists only of three endpoints, two for initiation of a SEPA or domestic payment.

Note: BBAN_SE payments for Sweden, as well as BankGiro and PlusGiro payments have been added. For Norway KID payments with reference type “OCR” is now available.

Note: The default urgency is normal.

Note: “urgency = express” is supported at payment initiation for Sepa Credit Transfer Finland

API endpoints

The PIS API for Single SCA contains the following endpoints:

EndpointSupported HTTP Methods
/payments/authorization/sepa-credit-transferPOST
/payments/authorization/domestic-credit-transferPOST
/payments/authorization/cross-border-credit-transferPOST
/payments/authorization/cross-border-own-credit-transferPOST
/single-sca-payments/DELETE
/single-sca-payments/{paymentId}GET
/single-sca-payments/{paymentId}/statusGET
/single-sca-payments/bankidse/{bankIdSeAuthenticationId}GET
   
After the payment is initiated by POST request to this endpoint, it will be available by doing GET /status request to this endpoint which returns the status of the payment. There are no payment details available in /status only the payment status.
Delete, equivalent to the 2SCA multiple delete service, and GET which would get the full details of a payment.
The BankID Sweden endpoint is for decoupled signing of a payment.

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 for Single SCA

There are the following scenarios available in PIS API related to payment execution:

  • PaymentOnHold2CCYes, PaymentOnHold2CCNo

PaymentOnHold2CCYes in this scenario the payment status will be ‘OnHold’ due to second channel confirmation by the User, it will be ‘Paid’/‘Confirmed’ automatically after 60 seconds. PaymentOnHold2CCNo in this scenario the payment status will be ‘OnHold’ due to second channel confirmation by the User, it will be ‘Rejected’ automatically after 60 seconds.

PIS API for Single SCA examples Denmark

Denmark: 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/authorization/domestic-credit-transfer

This endpoint supports POST method only.

And here is example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/authorization/domestic-credit-transfer' -i -X POST \
    -H 'X-Nordea-Originating-Host: <host>' \
    -H 'X-Nordea-Originating-Date: <now>' \
    -H 'Accept: application/json' \
    -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 '{
    "payment": {
        "amount": 14.24,
        "currency": "DKK",
        "urgency": "standard",
        "requested_execution_date": "2026-08-07",
        "creditor": {
            "account": {
                "value": "23001546147254",
  				"currency": "DKK",
                "type": "BBAN_DK"
            },
            "message": "1831653108"
        },
        "debtor": {
            "account": {
                "currency": "DKK",
                "value": "23001546139529",
                "type": "BBAN_DK"
            }
        },
        "external_id": "bbb441ff-d10d-44c5-a12a-1074a36edbc0",
        "merchant": "Shoe shop"
    },
    "authentication": {
        "state": "bbb441ff-d10d-44c5-a12a-1074a36edbc0",
        "redirect_uri": "https://www.example.com"
    }
}
'
 

And the response looks like this:

{
    "group_header": {
        "message_identification": "RKnzRFnCV7saDwgY",
        "creation_date_time": "2026-08-15T08:56:58.513519Z",
        "http_code": 201
    },
    "response": {
        "_links": [
            {
                "rel": "redirect",
                "href": "<nordeasigninghost>?client_id=dummy_client_id_se&code_challenge_method=S256&redirect_uri=https%3A%2F%2Fsandbox-personal-obh.esp.rs.dev01.qaoneadr.local%2Fv4%2Fpayments%2Fsign%2Fcallback&response_type=code&code_challenge=y-WAp09TDqVpT_Jt-ScxYEWANNLPqMDv5lqZnhDh82E&scope=openid+ndf+agreement&state=cab8a12a-e71d-4cd8-99a4-531a69584820&nonce=lHPSuvf8ybET3mbeqR2L2S5XIhG5qTl8uOvsNUcG&login_hint=qr_rdr&signing_token=DummySignedToken"
            },
            {
                "rel": "status",
                "href": "/v4/single-sca-payments/bbb441ff-d10d-44c5-a12a-1074a36edbc0/status"
            }
        ]
    }
}

Denmark: get payment status

This example shows how to query payment status.

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}/status

This endpoint supports GET HTTP Method only. Here is an example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}/status' -i \
    -H 'X-Nordea-Originating-Host: <host>' \
    -H 'X-Nordea-Originating-Date: <now>' \
    -H 'Accept: application/json' \
    -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 how the response looks like:

{
    "group_header": {
        "message_identification": "1IZVN0Nbx1mV4qgJ",
        "creation_date_time": "2026-08-15T08:58:11.219529Z",
        "http_code": 200
    },
    "response": {
        "payment_id": "5a3f726e-1bd9-4d7f-a3e9-7c9c7e24e092",
        "status": "PendingUserApproval"
    }
}

Denmark: get payment details

This example shows how to query payment details.

Note: This call requires a bearer token.

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}

This endpoint supports GET HTTP Method only. Here is an example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}' -i \
    -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 how the response looks like:

	{
	"group_header": {
		"message_identification": "ef006f1d250f68f00266ee1e0e9e2d44",
		"creation_date_time": "2026-08-23T14:25:30.639023652Z",
		"http_code": 200
	},
	"response": {
		"payment_id": "e025a492-53dc-4fbc-98f0-3880a2d50512",
		"amount": "14.24",
		"currency": "DKK",
		"debtor": {
			"account": {
				"type": "IBAN",
				"value": "DK6120301544118028",
			"currency": "DKK"
		},
		"message": "Debtor message"
		},
		"creditor": {
			"account": {
				"type": "IBAN",
				"value": "DK1053930000412656"
			},
			"message": "Creditor Message"
		},
		"status": "Paid",
		"requested_execution_date": "2026-08-23",
		"planned_execution_date": "2026-08-23"
		}	
	}

Here is how the request looks like when using Confirmation of Availability of Funds:

$ curl --location --request GET 'https://api.dev.nordeaopenbanking.com/personal/v4/single-sca-payments/' -i ?request_availability_of_funds=true' \
    -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 how the response looks like with Confirmation of Availability of Funds:

    {
    "group_header": {
        "message_identification": "2cd15f35b99b02a761c37def7e8d8040",
        "creation_date_time": "2026-08-12T12:23:01.260185857Z",
        "http_code": 200
    },
    "response": {
        "payment_id": "051800e8-9664-43b3-8fcd-8e8f8bee618e",
        "external_id": "someids178456",
        "instructed_amount": {
            "amount": "1.38",
            "currency": "DKK"
        },
        "debtor": {
            "account": {
                "type": "IBAN",
                "value": "DK6120301544118028",
                "currency": "DKK"
            }
        },
        "creditor": {
            "account": {
                "type": "IBAN",
                "value": "DK1053930000412656",
                "currency": "DKK"
            },
            "message": "Message to Ben"
        },
        "status": "Confirmed",
        "requested_execution_date": "2026-08-13",
        "planned_execution_date": "2026-08-13",
        
        "availability_of_funds": "true"
    }
}
 

Denmark: delete multiple payments

This example shows how to bulk delete payments. It is identical to the 2SCA multiple delete service, however, the bearer token is not the same.

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/single-sca-payments/

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/single-sca-payments' -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-69c5aeaed99j"},
		 {payment_id":"5e6e2d6f-e2dd-4c71-b232-9dfbb88ba99j"}
		]
}   
 

And this is how the response looks like:

{
    "group_header":
    {
        "message_identification": "a42c1707dd444505",
        "creation_date_time": "2026-08-11T10:11:12.134Z",
        "http_code": 200
    },
    "response": [
		 "11d55648-8c1d-45e2-951a-69c5aeaed99j",
		 "5e6e2d6f-e2dd-4c71-b232-9dfbb88ba99j"
		],
    "errors": []
}
 

Denmark: initiate recurring payment

In this example, we initiate a Recurring payment.

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/payments/authorization/domestic-credit-transfer

This endpoint supports POST method only.

And here is example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/authorization/domestic-credit-transfer' -i -X POST \
    -H 'X-Nordea-Originating-Host: <host>' \
    -H 'X-Nordea-Originating-Date: <now>' \
    -H 'Accept: application/json' \
    -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 '{
    "authentication": {
        "language": "en",
        "redirect_uri": "https://www.example.com",
        "state": "test"
    },
    "payment": {
        "amount": "0.01",
        "creditor": {
            "account": {
                "currency": "DKK",
                "type": "IBAN",
                "value": "DK2023001546147386"
            },
            "message": "Pay 9578624f",
            "name": "Test Name"
        },
        "currency": "DKK",
        "debtor": {
            "account": {
                "currency": "DKK",
                "type": "IBAN",
                "value": "DK6120301544118028"
            },
            "message": "Pay 4f77622b"
        },
        "external_id": "d06c60f2-09c5-4c5a-ae1c-059881ff13d0",
        "merchant": "shop",
        "recurring": {
            "count": 3,
            "recurrence_type": "BIWEEKLY"
        },
        "requested_execution_date": "2026-08-27"
    }
}
'
 
 

And the response looks like this:

{
    "group_header": {
        "creation_date_time": "2026-08-27T15: 36: 21.676519948Z",
        "http_code": 201,
        "message_identification": "502891e42647f68616ad7f341c292d86"
    },
    "response": {
        "_links": [
            {
                "href": "<nordeasigninghost>?client_id=dummy_client_id_dk&code_challenge_method=S256&redirect_uri=https%3A%2F%2Fapi.nordeaopenbanking.com&response_type=code&code_challenge=-1gqLloZ9b5Z589GALwJMTtfvTieLackWLxQdfZA1Nk&scope=openid+ndf+agreement&state=bccdaad8-b265-4654-961d-86006018783a&nonce=5hIt8EQZa5yBWJ6NTCfu5BSp9ozjJbrZNQdgAlLc&signing_token=DummySignedToken&ui_locales=en&userId=<userId>&password=<password>",
                "rel": "redirect"
            },
            {
                "href": "/v4/single-sca-payments/db6178bf-0f77-480f-958e-d7a3345f008f/status",
                "rel": "status"
            },
            {
                "href": "/v4/single-sca-payments/db6178bf-0f77-480f-958e-d7a3345f008f",
                "rel": "details"
            }
        ]
    }
}

PIS API for Single SCA examples Sweden

Sweden: 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/authorization/domestic-credit-transfer

This endpoint supports POST method only.

And here is example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/authorization/domestic-credit-transfer' -i -X POST \
    -H 'X-Nordea-Originating-Host: <host>' \
    -H 'X-Nordea-Originating-Date: <now>' \
    -H 'Accept: application/json' \
    -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 '{
    "payment": {
        "amount": 12.24,
        "currency": "SEK",
        "urgency": "standard",
        "requested_execution_date": "2026-09-07",
        "creditor": {
            "account": {
                "value": "3300308",
                "type": "BGNR"
            },
            "name": "Beneficiary name",
            "message": "1831653108"
        },
        "debtor": {
            "account": {
                "currency": "SEK",
                "value": "SE1730000000031412034086",
                "type": "IBAN"
            }
        },
        "external_id": "bbb441ff-d10d-44c5-a12a-1074a36edbc0",
        "merchant": "Shoe shop"
    },
    "authentication": {
        "state": "bbb441ff-d10d-44c5-a12a-1074a36edbc0",
        "redirect_uri": "https://www.example.com",
        "authentication_method": "QR_RDR"
    }
}
'
 
 

And the response looks like this:

{
    "group_header": {
        "message_identification": "RKnzRFnCV7saDwgY",
        "creation_date_time": "2026-08-15T08:56:58.513519Z",
        "http_code": 201
    },
    "response": {
        "_links": [
            {
                "rel": "redirect",
                "href": "<nordeasigninghost>?client_id=dummy_client_id_se&code_challenge_method=S256&redirect_uri=https%3A%2F%2Fsandbox-personal-obh.esp.rs.dev01.qaoneadr.local%2Fv4%2Fpayments%2Fsign%2Fcallback&response_type=code&code_challenge=y-WAp09TDqVpT_Jt-ScxYEWANNLPqMDv5lqZnhDh82E&scope=openid+ndf+agreement&state=cab8a12a-e71d-4cd8-99a4-531a69584820&nonce=lHPSuvf8ybET3mbeqR2L2S5XIhG5qTl8uOvsNUcG&login_hint=qr_rdr&signing_token=DummySignedToken"
            },
            {
                "rel": "status",
                "href": "/v4/single-sca-payments/bbb441ff-d10d-44c5-a12a-1074a36edbc0/status"
            }
        ]
    }
}

Sweden: initiate a new payment : decoupled signing flow

In this example, we initiate a new payment with authentication method ‘BANKID_SE_DECOUPLED’

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/payments/authorization/domestic-credit-transfer

This endpoint supports POST method only.

And here is example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/authorization/domestic-credit-transfer' -i -X POST \
    -H 'X-Nordea-Originating-Host: <host>' \
    -H 'X-Nordea-Originating-Date: <now>' \
    -H 'Accept: application/json' \
    -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 '{
    "payment": {
        "amount": 12.24,
        "currency": "SEK",
        "urgency": "standard",
        "requested_execution_date": "2026-09-07",
        "creditor": {
            "account": {
                "value": "3300308",
                "type": "BGNR"
            },
            "name": "Beneficiary name",
            "message": "1831653108"
        },
        "debtor": {
            "account": {
                "currency": "SEK",
                "value": "SE1730000000031412034086",
                "type": "IBAN"
            }
        },
        "external_id": "bbb441ff-d10d-44c5-a12a-1074a36edbc0",
        "merchant": "Shoe shop"
    },
    "authentication": {
        "state": "bbb441ff-d10d-44c5-a12a-1074a36edbc0",
        "redirect_uri": "https://www.example.com",
        "authentication_method": "BANKID_SE_DECOUPLED"
    }
}
'
 
 

And the response looks like this:

{
  "group_header": {
    "message_identification": "92edtjx9der5p2s3",
    "creation_date_time": "2026-01-19T08:44:40.9617339Z",
    "http_code": 201
  },
  "response": {
    "bank_id_se_authentication_id": "de23d089-93c4-4d27-b5f0-2eb994ec2500",
    "_links": [
      {
        "rel": "status",
        "href": "/v4/single-sca-payments/f4abbb46-c9ae-4f8c-b102-92bfb1c8b5ea/status"
      },
      {
        "rel": "details",
        "href": "/v4/single-sca-payments/f4abbb46-c9ae-4f8c-b102-92bfb1c8b5ea"
      }
    ]
  }
}
 

Sweden: get payment status

This example shows how to query payment status.

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}/status

This endpoint supports GET HTTP Method only. Here is an example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}/status' -i \
    -H 'X-Nordea-Originating-Host: <host>' \
    -H 'X-Nordea-Originating-Date: <now>' \
    -H 'Accept: application/json' \
    -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 how the response looks like:

{
    "group_header": {
        "message_identification": "1IZVN0Nbx1mV4qgJ",
        "creation_date_time": "2026-08-15T08:58:11.219529Z",
        "http_code": 200
    },
    "response": {
        "payment_id": "bbb441ff-d10d-44c5-a12a-1074a36edbc0",
        "status": "PendingUserApproval"
    }
}

Sweden: get payment details

This example shows how to query payment details.

Note: This call requires a bearer token.

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}

This endpoint supports GET HTTP Method only. Here is an example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}' -i \
    -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 how the response looks like:

 
	{
		"group_header": {
		"message_identification": "96e2a4e13989dc62f0029f4fba5ad9f8",
		"creation_date_time": "2026-08-23T14:33:10.17122623Z",
		"http_code": 200
	},
	"response": {
		"payment_id": "69bf731d-41af-47e0-b69b-dab4835b60c3",
 
		"amount": "4",
		"currency": "SEK",
		"debtor": {
			"account": {
				"type": "BBAN_SE",
				"value": "41351300039",
				"currency": "SEK"
			},
			"message": "debtor msg"
		},
		"creditor": {
			"account": {
				"type": "BBAN_SE",
				"value": "43951000887",
				"currency": "SEK"
			},
			"name": "Test Name",
			"message": "cdtr msg"
		},
		"status": "Paid",
		"requested_execution_date": "2026-08-23",
		"planned_execution_date": "2026-08-23"
	}
 
}

Sweden: delete multiple payments

This example shows how to bulk delete payments. It is identical to the 2SCA multiple delete service, however, the bearer token is not the same.

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/single-sca-payments/

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/single-sca-payments' -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-69c5aeaed88y"},
		 {payment_id":"5e6e2d6f-e2dd-4c71-b232-9dfbb88ba88y"}
		]
}   
 

And this is how the response looks like:

 
{
    "group_header":
    {
        "message_identification": "a42c1707dd444505",
        "creation_date_time": "2026-08-11T10:11:12.134Z",
        "http_code": 200
    },
    "response": [
		 "11d55648-8c1d-45e2-951a-69c5aeaed88y",
		 "5e6e2d6f-e2dd-4c71-b232-9dfbb88ba88y"
		],
    "errors": []
}
 

Sweden: decoupled flow using BankIdSe

This example shows how to use SE decoupled flow using bankid_se_authentication_id parameter for domestic payment in SE.

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/bankidse/{bankIdSeAuthenticationId}

This endpoint supports only the GET HTTP Method.

Here is an example request

$ curl 'https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/bankidse/{bankIdSeAuthenticationId}' -i -X GET \
    -H 'X-Nordea-Originating-Host: <host>' \
    -H 'X-Nordea-Originating-Date: <now>' \
    -H 'Accept: application/json' \
    -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 'X-Nordea-Originating-User-Ip: <psu-ip-address>'

And here is how the response looks like before the signing starts:

{
	"group_header":
	{
	"message_identification":"78b3dd50a65a767b",
	"creation_date_time":"2026-01-27T13:51:27.538277465Z",
	"http_code":200
	},
	"response":
	{
	"_id": "bankIdSeAuthenticationId",
	"auto_start_token":"1ed1f937-71cf-4af8-aaf4-fdea57c7c393",
	"qr_data":"bankid.3c36331a-0cc7-477f-982b-09ae4ab1abbd.0.91eebaffdd908ec8a0be944d2f10a3be52c15f8d14f04b48503544df059f593a",
	"status": "WAITING_FOR_USER"
	}
}
 

And here is how the response looks like when the payment successfully signed and executed:

 
{
    "group_header":
    	{
        "messageIdentification": "b395df96a2ef02573e025d3e025d3e9f2e3394",
        "creation_date_time": "2026-08-23T14:40:13.005495692Z",
		"http_code": 200
		},
	"response": {
		"_id": "bankIdSeAuthenticationId",
		"status": "SUCCESS",
		"payment_identifier": {
			"external_id": "unique identification as assigned by a partner to identify a payment",
			"auth_code": "authorization code to be exchanged for a single SCA specific access token"
			}
		}
	}
 

PIS API for Single SCA examples Norway

Norway: 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/authorization/domestic-credit-transfer

This endpoint supports POST method only.

Here is an example request:

   
 
$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/authorization/domestic-credit-transfer' -i -X POST \
    -H 'X-Nordea-Originating-Host: <host>' \
    -H 'X-Nordea-Originating-Date: <now>' \
    -H 'Accept: application/json' \
    -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 '{
    "authentication": {
        "language": "en",
        "redirect_uri": "https://www.example.com",
        "state": "test"
    },
    "payment": {
        "amount": "1.00",
        "creditor": {
            "account": {
                "currency": "NOK",
                "type": "IBAN",
                "value": "NO5460391627641"
            },
            "message": "Pay 84bc41d0",
            "name": "Test Name"
        },
        "currency": "NOK",
        "debtor": {
            "account": {
                "currency": "NOK",
                "type": "IBAN",
                "value": "NO2860010503178"
            },
            "message": "Pay a3fcec98"
        },
        "external_id": "8c37ee8f-76cb-4792-9412-9b803b2cbc71",
        "merchant": "shop",
        "requested_execution_date": "2026-08-27"
    }
}
'
 
 

And the response looks like this:

         
{
    "group_header": {
        "message_identification": "c7751cf38378244f31c5c29274f2689a",
        "creation_date_time": "2026-08-27T15:59:39.280487499Z",
        "http_code": 201
    },
    "response": {
        "_links": [
            {
                "rel": "redirect",
                "href": "https://<nordeasigninghost>?client_id=dummy_client_id_no&code_challenge_method=S256&redirect_uri=https%3A%2F%2Fapi.nordeaopenbanking.com&response_type=code&code_challenge=poEUhvZtIIfaNpX6AcO1NhwgBNHHXh2hwPUgeWniVmQ&scope=openid+ndf+agreement&state=8d541c89-0b8b-421f-999f-6a716e876fcc&nonce=roeHdKrcbQ5VynmAJbFq3ocsQt2QIip3aQTGIPqt&signing_token=DummySignedToken&ui_locales=en&userId=<userId>&password=<password>"
            },
            {
                "rel": "status",
                "href": "/v4/single-sca-payments/b084d0ac-a708-43a1-bdc9-c90939a150be/status"
            },
            {
                "rel": "details",
                "href": "/v4/single-sca-payments/b084d0ac-a708-43a1-bdc9-c90939a150be"
            }
        ]
    }
}
 

Norway: get payment status

This example shows how to query payment status.

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}/status

This endpoint supports GET HTTP Method only.

Here is an example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}/status' -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 how the response looks:

{
    "group_header": {
        "message_identification": "9Qle4LKw8BuUc9Ms",
        "creation_date_time": "2026-08-15T08:55:33.967829Z",
        "http_code": 200
    },
    "response": {
        "payment_id": "6d43f031-41f8-46fa-8b84-bdd09d40b8e5",
        "status": "PendingUserApproval"
    }
}

Note that before the signing url has been called, the payment does not exists yet, it means the payment signing process has to be started by you and your customer.  

Norway: get payment details

This example shows how to query payment details.

Note: This call requires a bearer token.  This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}

This endpoint supports GET HTTP Method only. Here is an example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}' -i \
    -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 how the response looks like:

    {
	"group_header": {
		"message_identification": "127a1ad2b1f03e05ec9def3e11f86af6",
		"creation_date_time": "2026-08-23T14:35:51.583816168Z",
		"http_code": 200
	},
	"response": {
		"payment_id": "680769ba-cd4a-46a6-b452-ac01a1cc1406",
		"amount": "1.99",
		"currency": "NOK",
		
		"debtor": {
			"account": {
			"type": "BBAN_NO",
			"value": "60010503178",
			"currency": "NOK"
			},
			"message": "Debtor message"
		},
		"creditor": {
			"account": {
			"type": "BBAN_NO",
			"value": "60391598838"
			},
			"message": "Creditor Message"
		},
		"status": "Paid",
		"requested_execution_date": "2026-08-23",
		"planned_execution_date": "2026-08-23"
		}
	}

Norway: delete multiple payments

This example shows how to bulk delete payments. It is identical to the 2SCA multiple delete service, however, the bearer token is not the same.

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/single-sca-payments/

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/single-sca-payments' -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-69c5aeaed866"},
		 {payment_id":"5e6e2d6f-e2dd-4c71-b232-9dfbb88ba866"}
		]
}   
 

And this is how the response looks like:

 
{
    "group_header":
    {
        "message_identification": "a42c1707dd444505",
        "creation_date_time": "2026-08-11T10:11:12.134Z",
        "http_code": 200
    },
    "response": [
		 "11d55648-8c1d-45e2-951a-69c5aeaed866",
		 "5e6e2d6f-e2dd-4c71-b232-9dfbb88ba866"
		],
    "errors": []
}
 

PIS API for Single SCA examples Finland

Finland: 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/authorization/sepa-credit-transfer

This endpoint supports POST method only.

Here is an example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/payments/authorization/sepa-credit-transfer' -i -X POST \
    -H 'X-Nordea-Originating-Host: <host>' \
    -H 'X-Nordea-Originating-Date: <now>' \
    -H 'Accept: application/json' \
    -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 '{
  "payment": {
	"amount": "10.00",
	"creditor": {
		"account": {
		"currency": "EUR",
		"type": "IBAN",
		"value": "FI1450000120236228"
	},
	"message": "Beneficiary message",
	"name": "Test Name"
	},
	"currency": "EUR",
	"debtor": {
		"account": {
		"currency": "EUR",
		"type": "IBAN",
		"value": "FI7473834510057469"
		}
	},
	"external_id": "df2f7381-7d43-4996-a491-3aecf89076905",
	"merchant": "shop",
	"urgency": "standard"
	}
	}'
 	 "external_id": "tpp_supplied_string",
  	"requested_execution_date": "2026-08-11"
	}'
 
 

And the response looks like this:

	{
	"group_header": {
		"message_identification": "dd6db7847fbca9e069393f5fcd357e6f",
		"creation_date_time": "2026-08-23T14:39:48.154532274Z",
		"http_code": 201
	},
	"response": {
		"_links": [
	{
	"rel": "redirect",
	"href": "https://api.nordeaopenbanking.com/personal/nasa-mock/ssca/sign?		client_id=dummy_client_id_fi&code_challenge_method=S256&redirect_uri=https%3A%2F%2Fapi.nordeaopenbanking.com&response_type=code&code_challenge=k7gR4GE6cZ7eJ1oL-hKWeegl2wLjNHMAjFEJZteSW64&scope=openid+ndf+agreement&state=163e6e58-63aa-4fcd-915d-61613bb0827a&nonce=JvVTYnutqr58ccEIY3qCB142hyHoqzcuI6z5XBzF&login_hint=mta&signing_token=DummySignedToken&userId=user&password=sandbox"
	},
		{
		"rel": "status",
		"href": "/v4/single-sca-payments/501f7c38-a410-4cf6-9d68-168bf0b6f4dd/status"
		},
		{
		"rel": "details",
		"href": "/v4/single-sca-payments/501f7c38-a410-4cf6-9d68-168bf0b6f4dd"
		}
		]
	}
	}

In this example, we initiate a new payment as Sepa Instant. Only request shown below.

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/payments/authorization/sepa-credit-transfer

This endpoint supports POST method only.

Here is an example request:

$ curl --request POST \
  --url https://api.dev.nordeaopenbanking.com/personal/v4/payments/authorization/sepa-credit-transfer \
  --header 'content-type: application/json' \
  --header 'digest: <generated_digest>' \
  --header 'signature: <generated_signature>' \
  --header 'x-ibm-client-id: <your_client_id>' \
  --header 'x-ibm-client-secret: <your_client_secret> \
  --header 'x-nordea-originating-date: {{X-Nordea-Originating-Date}}' \
  --header 'x-nordea-originating-host: {{X-Nordea-Originating-Host}}' \
  --data '{
    "authentication": {
        "authentication_method": "MTA",
        "language": "en",
        "redirect_uri": "https://www.example.com",
        "state": "test"
    },
    "payment": {
        "amount": "7.15",
        "creditor": {
            "account": {
                "currency": "EUR",
                "type": "IBAN",
                "value": "FI7814703500008811"
            },
            "message": "AutoPay30",
            "name": "Test Name"
        },
        "currency": "EUR",
        "debtor": {
            "account": {
                "currency": "EUR",
                "type": "IBAN",
                "value": "FI7473834510057469"
            }
        },
        "external_id": "449de0de-0010-2137-abcd-e364ebefc6e9",
        "merchant": "shop",
        "requested_execution_date": "2026-08-06-03",
        "urgency": "express"
    }
}'

Finland: get payment status

This example shows how to query payment status.

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}/status

This endpoint supports GET HTTP Method only.

Here is an example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}/status' -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 how the response looks:

{
    "group_header": {
        "message_identification": "9Qle4LKw8BuUc9Ms",
        "creation_date_time": "2026-08-15T08:55:33.967829Z",
        "http_code": 200
    },
    "response": {
        "payment_id": "6d43f031-41f8-46fa-8b84-bdd09d40b8e5",
        "status": "PendingUserApproval"
    }
}

Finland: get payment details

This example shows how to query payment details.

Note: This call requires a bearer token.

This endpoint URL has the following form:

https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}

This endpoint supports GET HTTP Method only. Here is an example request:

$ curl 'https://api.nordeaopenbanking.com/personal/v4/single-sca-payments/{paymentId}' -i \
    -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 how the response looks like:

	{
    "group_header":
    	{
        "messageIdentification": "b395df96a2ef02573e025d3e025d3e9f2e3394",
        "creation_date_time": "2026-08-23T14:40:13.005495692Z",
		"http_code": 200
		},
	"response": {
		"payment_id": "501f7c38-a410-4cf6-9d68-168bf0b6f4dd",
		"external_id": "df2f7381-7d43-4996-a491-3aecf89076905",
		"amount": "10",
		"currency": "EUR",
		"debtor": {
			"account": {
			"type": "IBAN",
			"value": "FI7473834510057469",
			"currency": "EUR"
			}
		},
		"creditor": {
			"account": {
			"type": "IBAN",
			"value": "FI1450000120236228",
			"currency": "EUR"
		},
		"name": "Test Name",
		"message": "Beneficiary message"
	},
	"status": "Paid",
	"requested_execution_date": "2026-08-23",
	"planned_execution_date": "2026-08-23"
	}
	}

Finland: delete multiple payments

This example shows how to bulk delete payments. It is identical to the 2SCA multiple delete service, however, the bearer token is not the same.

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/single-sca-payments/

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/single-sca-payments' -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-69c5aeaed099"},
		 {payment_id":"5e6e2d6f-e2dd-4c71-b232-9dfbb88ba099"}
		]
}   
 

And this is how the response looks like:

 
{
    "group_header":
    {
        "message_identification": "a42c1707dd444505",
        "creation_date_time": "2026-08-11T10:11:12.134Z",
        "http_code": 200
    },
    "response": [
		 "11d55648-8c1d-45e2-951a-69c5aeaed099",
		 "5e6e2d6f-e2dd-4c71-b232-9dfbb88ba099"
		],
    "errors": []
}
 

Confirmation of Availability of Funds for Single SCA

Confirmation of Availability of Funds for Single SCA has been added to this endpoint.

Two new optional fields have been added

  • request_availability_of_funds
  • availability_of_funds

Confirmation of Availability of Funds for Single SCA is available for version 3.

Payment initiation

Payment Initiation of Single SCA is not possible.

Get payment details

If Single SCA 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 Single SCA 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 example Single SCA Get payment details of Confirmation of Availability of Funds is updated in this documentation in Denmark example.