• Documentation
  • API Reference
Overview
Guides
    Get StartedGood to KnowAccess Tokens
    Core APIs
      KYCBanksConsent & Account InformationPaymentsAuthorisations
    Alternative APIs
Other Information
Changelog
Downloads
Support
Core APIs

Payments

The Payment Initiation Service (PIS) allows you to initiate payments directly from the PSU's bank account through the Open Payments platform, with a variety of supported payment options.

For requests to the PIS API, you need an access token with scope set to paymentinitiation corporate.

Initiating payments in the production environment requires completed KYC verification on the PSU's organization. Refer to the KYC guide for information on how to implement this.

Single Payments

Several different types of single payments can be initiated through the PIS, each identified by a specific payment-product in the endpoint path and with some differences in required parameters. The general flow for initiating a single payment is the same for all except the international-tp product, which includes an additional first step of creating an FX quote.

payment-productFlow
domestic, swedish-giro, sepa-credit-transfersCreate Payment → Authorise Payment → Get Payment Status
international-tpCreate FX Quote → Create Payment → Authorise Payment → Get Payment Status

0. Create FX Quote (International TP only)

The international-tp product enables you to initiate cross-border payments to 180+ countries with built-in, real-time currency conversion — supporting both spot and forward exchange rates (up to 30 days). The first step for a cross-currency payment is to create an FX quote, defining the exchange rate, fees, and the validity period.

Endpoint

Code
POST /psd2/paymentinitiation/v1/fx

Request Headers

NameTypeDescription
X-Request-IDstring(uuid)The ID of the request, unique to the call, as determined by the initiating party.

Request Body

NameTypeDescription
sourceCurrencystringThe source currency.
targetCurrencystringThe target currency.
requestedExecutionDatestring(date)The requested execution date, for future payments.
countryCodestringThe target country.
amountstringThe requested amount.
TerminalCode
curl -X POST "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/fx" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: 98afac01-e0bb-4aa2-95fd-0b3204f8a183" \ -d '{ "sourceCurrency": "SEK", "targetCurrency": "EUR", "requestedExecutionDate": "2025-11-10", "countryCode": "FI", "amount": "130.00" }'

Response

Code
{ "fxQuoteId": "F100000PFM", "fxRate": "11.05254986", "fee": "1.50", "totalAmount": "1440.53", "validFrom": "2025-11-09T09:36:24.0142906Z", "validTo": "2025-11-10T23:59:59.0000000Z" }

The response contains an fxQuoteId which you will need to reference in the request headers of the international-tp payment request.

1. Create Payment

This step initiates the actual payment. Here, you define the payment instructions according to the selected payment-product.

Domestic

Local account-to-account transfers in the bank's national system.

Endpoint

Code
POST /psd2/paymentinitiation/v1/payments/domestic

Request Headers

NameTypeDescription
X-Request-IDstring(uuid)The ID of the request, unique to the call, as determined by the initiating party.
X-BicFistringThe BIC of the bank to which the request is addressed.
PSU-IDstringThe ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.
PSU-Corporate-IDstringThe Corporate ID of the PSU when acting on behalf of an organization, e.g. Org. nummer for SE, KVK for NL.
TPP-Redirect-PreferredbooleanIndicates a preference for redirect-based SCA over decoupled when set to true. The bank may not support both types.
PSU-IP-Addressstring(ipv4)The IP address of the PSU to be forwarded to the bank. Only included if the request was actively initiated by the PSU.
PSU-User-AgentstringThe forwarded Agent header field of the HTTP request between PSU and TPP, if available.

To try out our harmonized payment statuses, include an X-Feature-Flags header set to new-statuses.

Request Body

NameTypeDescription
instructedAmountobjectThe amount and currency of the money to be transferred.
debtorAccountobjectThe account from which the payment will be debited.
creditorNamestringThe full name of the payment recipient.
creditorAccountobjectThe account to which the payment will be credited.
requestedExecutionDatestring(date)The date when the payment is scheduled to be executed in ISO 8601 format, e.g. 2025-10-31.
remittanceInformationUnstructuredstringA free-text field for remittance information on the payment.
TerminalCode
curl -X POST "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/payments/domestic" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: 37c6468e-a3f4-4232-8834-979e79564274" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "TPP-Redirect-Preferred: false" \ -H "PSU-IP-Address: 152.120.171.187" \ -d '{ "instructedAmount": { "amount": "1230.50", "currency": "SEK" }, "debtorAccount": { "iban": "SE123456789000532811", "currency": "SEK" }, "creditorName": "Merchant 123", "creditorAccount": { "iban": "SE123456789000222333", "currency": "SEK" }, "requestedExecutionDate": "2025-05-19", "remittanceInformationUnstructured": "Ref Number Merchant" }'

Swedish Giro

Domestic transfers within Sweden via the Bankgirot and Plusgirot systems.

Endpoint

Code
POST /psd2/paymentinitiation/v1/payments/swedish-giro

Request Headers

NameTypeDescription
X-Request-IDstring(uuid)The ID of the request, unique to the call, as determined by the initiating party.
X-BicFistringThe BIC of the bank to which the request is addressed.
PSU-IDstringThe ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.
PSU-Corporate-IDstringThe Corporate ID of the PSU when acting on behalf of an organization, e.g. Org. nummer for SE, KVK for NL.
TPP-Redirect-PreferredbooleanIndicates a preference for redirect-based SCA over decoupled when set to true. The bank may not support both types.
PSU-IP-Addressstring(ipv4)The IP address of the PSU to be forwarded to the bank. Only included if the request was actively initiated by the PSU.
PSU-User-AgentstringThe forwarded Agent header field of the HTTP request between PSU and TPP, if available.

Request Body

NameTypeDescription
instructedAmountobjectThe amount and currency of the money to be transferred.
debtorAccountobjectThe account from which the payment will be debited.
creditorNamestringThe full name of the payment recipient.
creditorGiroobjectThe Bankgirot or Plusgirot account to which the payment will be credited.
requestedExecutionDatestring(date)The date when the payment is scheduled to be executed in ISO 8601 format, e.g. 2025-10-31.
invoiceRefstringA custom invoice reference.
ocrRefstringA Giro OCR reference.
TerminalCode
curl -X POST "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/payments/swedish-giro" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: 7aea2104-7612-4c80-99ea-707d88ddd935" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "TPP-Redirect-Preferred: false" \ -H "PSU-IP-Address: 152.120.171.187" \ -d '{ "instructedAmount": { "amount": "130.00", "currency": "SEK" }, "debtorAccount": { "iban": "SE40100100103307118608", "currency": "SEK" }, "creditorName": "Merchant 123", "creditorGiro": { "giroNumber": "123-4567", "giroType": "BANKGIRO" }, "requestedExecutionDate": "2025-11-01", "invoiceRef": "Invoice Nr 4421" }'

International TP

Cross-border payments using FX quotes.

Endpoint

Code
POST /psd2/paymentinitiation/v1/payments/international-tp

Request Headers

NameTypeDescription
X-Request-IDstring(uuid)The ID of the request, unique to the call, as determined by the initiating party.
X-BicFistringThe BIC of the bank to which the request is addressed.
PSU-IDstringThe ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.
PSU-Corporate-IDstringThe Corporate ID of the PSU when acting on behalf of an organization, e.g. Org. nummer for SE, KVK for NL.
TPP-Redirect-PreferredbooleanIndicates a preference for redirect-based SCA over decoupled when set to true. The bank may not support both types.
PSU-IP-Addressstring(ipv4)The IP address of the PSU to be forwarded to the bank. Only included if the request was actively initiated by the PSU.
PSU-User-AgentstringThe forwarded Agent header field of the HTTP request between PSU and TPP, if available.
FX-Quote-IdstringThe ID of the FX Quote to be used for the payment. Used for international TP payments only.

Request Body

NameTypeDescription
instructedAmountobjectThe amount and currency of the money to be transferred.
debtorAccountobjectThe account from which the payment will be debited.
creditorNamestringThe full name of the payment recipient.
creditorAccountobjectThe account to which the payment will be credited.
creditorAddressobjectThe address of the payment recipient.
creditorAgentstringThe BIC of the payment recipient's bank.
creditorAgentNamestringThe name of the payment recipient's bank.
requestedExecutionDatestring(date)The date when the payment is scheduled to be executed in ISO 8601 format, e.g. 2025-10-31.
remittanceInformationUnstructuredstringA free-text field for remittance information on the payment.
TerminalCode
curl -X POST "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/payments/international-tp" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: 004bd42c-034b-45de-8361-c043615784a6" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "TPP-Redirect-Preferred: false" \ -H "PSU-IP-Address: 152.120.171.187" \ -H "FX-Quote-Id: F100000PFM" \ -d '{ "instructedAmount": { "amount": "130.00", "currency": "EUR" }, "debtorAccount": { "iban": "SE40100100103307118608", "currency": "SEK" }, "creditorName": "Merchant 123", "creditorAccount": { "iban": "FI02100100109307118603", "currency": "EUR" }, "creditorAddress": { "street": "Example Street", "buildingNumber": "5" "city": "Helsinki", "postalCode": "00160", "country": "FI" }, "creditorAgent": "NDEAFIHH", "creditorAgentName": "Nordea Bank Abp", "requestedExecutionDate": "2025-11-10", "remittanceInformationUnstructured": "Ref Number Merchant" }'

The payment needs to be signed within one hour of creating the FX quote. If the payment does not reach a finalised state within this timeframe, the FX contract will be voided and a new quote will need to be created.

SEPA Credit Transfers

Payments in EUR between accounts in the SEPA (Single Euro Payments Area) zone.

Endpoint

Code
POST /psd2/paymentinitiation/v1/payments/sepa-credit-transfers

Request Headers

NameTypeDescription
X-Request-IDstring(uuid)The ID of the request, unique to the call, as determined by the initiating party.
X-BicFistringThe BIC of the bank to which the request is addressed.
PSU-IDstringThe ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.
PSU-Corporate-IDstringThe Corporate ID of the PSU when acting on behalf of an organization, e.g. Org. nummer for SE, KVK for NL.
TPP-Redirect-PreferredbooleanIndicates a preference for redirect-based SCA over decoupled when set to true. The bank may not support both types.
PSU-IP-Addressstring(ipv4)The IP address of the PSU to be forwarded to the bank. Only included if the request was actively initiated by the PSU.
PSU-User-AgentstringThe forwarded Agent header field of the HTTP request between PSU and TPP, if available.

Request Body

NameTypeDescription
instructedAmountobjectThe amount and currency of the money to be transferred.
debtorAccountobjectThe account from which the payment will be debited.
creditorNamestringThe full name of the payment recipient.
creditorAccountobjectThe account to which the payment will be credited.
creditorAgentstringThe BIC of the payment recipient's bank.
creditorAgentNamestringThe name of the payment recipient's bank.
requestedExecutionDatestring(date)The date when the payment is scheduled to be executed in ISO 8601 format, e.g. 2025-10-31.
remittanceInformationUnstructuredstringA free-text field for remittance information on the payment.
TerminalCode
curl -X POST "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/payments/sepa-credit-transfers" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: 1be5590a-50b0-4fcd-b835-c98ec8b058714" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "TPP-Redirect-Preferred: false" \ -H "PSU-IP-Address: 152.120.171.187" \ -d '{ "instructedAmount": { "amount": "130.50", "currency": "EUR" }, "debtorAccount": { "iban": "SE123456789000532811", "currency": "EUR" }, "creditorName": "Merchant 123", "creditorAccount": { "iban": "NL123456789000222333", "currency": "EUR" }, "creditorAgent": "RABONL2U", "creditorAgentName": "Coöperatieve Rabobank U.A.", "requestedExecutionDate": "2025-11-01", "remittanceInformationUnstructured": "Ref Number Merchant" }'

Response

Code
{ "transactionStatus": "RCVD", "paymentId": "fa1569fa-6cbd-43fb-98a2-7151ba2da365", "_links": { "startAuthorisationWithTransactionAuthorisation": { "href": "/psd2/paymentinitiation/v1/payments/domestic/fa1569fa-6cbd-43fb-98a2-7151ba2da365/authorisations" }, "self": { "href": "/psd2/paymentinitiation/v1/payments/domestic/fa1569fa-6cbd-43fb-98a2-7151ba2da365" }, "status": { "href": "/psd2/paymentinitiation/v1/payments/domestic/fa1569fa-6cbd-43fb-98a2-7151ba2da365/status" } } }

If the creditor account is listed on Svensk Handel's watchlist, the response will additionally contain the following warning message:

Code
"tppMessages": [ { "category": "WARNING", "code": "CREDITOR_ACCOUNT_FLAGGED", "text": "The creditor Falskhandel AB (OrgNr: 556789-1234) was flagged as potentially fraudulent." } ]

If the creditor account has OCR reference validation enabled and the provided OCR reference is invalid, the response will additionally contain the following warning message:

Code
"tppMessages": [ { "category": "WARNING", "code": "OCR_REF_INVALID", "text": "The provided OCR reference is invalid based on the creditor's OCR control requirements" } ]

2. Authorise Payment

After creating the payment, it must be authorised by the PSU before it can be used. See the Authorisations guide for instructions on how to complete the authorisation process.

3. Get Payment Status

Once you complete the authorisation flow, check the status of the payment by polling the Get Payment Status endpoint.

Endpoint

Code
GET /psd2/paymentinitiation/v1/{payment-service}/{payment-product}/{paymentId}/status

Path Parameters

NameTypeDescription
payment-servicestringThe type of payment to initiate, e.g. payments for single payments.
payment-productstringThe scheme and format of the payment, e.g. domestic for domestic payments.
paymentIdstring(uuid)The ID of the payment that was created.

Request Headers

NameTypeDescription
X-Request-IDstring(uuid)The ID of the request, unique to the call, as determined by the initiating party.
X-BicFistringThe BIC of the bank to which the request is addressed.
PSU-IDstringThe ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.
PSU-Corporate-IDstringThe Corporate ID of the PSU when acting on behalf of an organization, e.g. Org. nummer for SE, KVK for NL.
TPP-Redirect-PreferredbooleanIndicates a preference for redirect-based SCA over decoupled when set to true. The bank may not support both types.
PSU-IP-Addressstring(ipv4)The IP address of the PSU to be forwarded to the bank. Only included if the request was actively initiated by the PSU.
PSU-User-AgentstringThe forwarded Agent header field of the HTTP request between PSU and TPP, if available.
TerminalCode
curl -X GET "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/payments/domestic/fa1569fa-6cbd-43fb-98a2-7151ba2da365/status" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: 06a2321a-e420-4ffd-982b-ba439af70b10" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "TPP-Redirect-Preferred: false" \ -H "PSU-IP-Address: 152.120.171.187"

Response

Code
{ "transactionStatus": "ACSC" }

Payments can have a number of different statuses. Here, you want to check if the payment was rejected, in which case transactionStatus would have the value RJCT. If not, then you are done.

Signing Baskets

Alternatively to authorising each payment separately, signing baskets allow several initiated payments to be grouped and authorised in a single SCA flow. Once a signing basket is signed, each payment within it is signed simultaneously, ensuring consistency and reducing friction. All supported payment types can be included in a signing basket.

1. Create Signing Basket

After creating the desired payments as described above, you can create a signing basket and include each paymentId in the request body.

Endpoint

Code
POST /psd2/paymentinitiation/v1/signing-baskets

Request Headers

NameTypeDescription
X-Request-IDstring(uuid)The ID of the request, unique to the call, as determined by the initiating party.
X-BicFistringThe BIC of the bank to which the request is addressed.
PSU-IDstringThe ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.
PSU-Corporate-IDstringThe Corporate ID of the PSU when acting on behalf of an organization, e.g. Org. nummer for SE, KVK for NL.
TPP-Redirect-PreferredbooleanIndicates a preference for redirect-based SCA over decoupled when set to true. The bank may not support both types.
PSU-IP-Addressstring(ipv4)The IP address of the PSU to be forwarded to the bank. Only included if the request was actively initiated by the PSU.
PSU-User-AgentstringThe forwarded Agent header field of the HTTP request between PSU and TPP, if available.

Request Body

NameTypeDescription
paymentIdsarrayThe IDs of the payments to include in the signing basket.
TerminalCode
curl -X POST "/psd2/paymentinitiation/v1/signing-baskets" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: 1fbf35cd-192b-4621-8edc-1885f6b8841c" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "TPP-Redirect-Preferred: false" \ -H "PSU-IP-Address: 152.120.171.187" \ -d '{ "paymentIds": [ "a1569fa-6cbd-43fb-98a2-7151ba2da365", "880b6a91-23a8-45f2-96bf-2b98c5fc5cc3", "b0f84f58-addb-442c-8e13-d1f205a1f4ee" ] }'

2. Authorise Signing Basket

After creating the signing basket, it must be authorised by the PSU. See the Authorisations guide for instructions on how to complete the authorisation process.

3. Get Signing Basket Status

Once you complete the authorisation flow, check the status of the payment by polling the Get Signing Basket Status endpoint.

Endpoint

Code
GET /psd2/paymentinitiation/v1/signing-baskets/{basketId}/status

Path Parameters

NameTypeDescription
basketIdstringThe ID of the signing basket that was created.

Request Headers

NameTypeDescription
X-Request-IDstring(uuid)The ID of the request, unique to the call, as determined by the initiating party.
X-BicFistringThe BIC of the bank to which the request is addressed.
PSU-IDstringThe ID used to identify the PSU at the bank. Typically a local social security number or another unique login ID.
PSU-Corporate-IDstringThe Corporate ID of the PSU when acting on behalf of an organization, e.g. Org. nummer for SE, KVK for NL.
TPP-Redirect-PreferredbooleanIndicates a preference for redirect-based SCA over decoupled when set to true. The bank may not support both types.
PSU-IP-Addressstring(ipv4)The IP address of the PSU to be forwarded to the bank. Only included if the request was actively initiated by the PSU.
PSU-User-AgentstringThe forwarded Agent header field of the HTTP request between PSU and TPP, if available.
TerminalCode
curl -X GET "https://api.openbankingplatform.com/psd2/paymentinitiation/v1/signing-baskets/c9669516-a08f-448a-9fa4-d3db36456059/authorisations/a2db692d-84a7-4d2e-bc59-0c420f876cf2" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: a464b8b0-59fa-4890-9cb7-ae9baf5820f4" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "TPP-Redirect-Preferred: false" \ -H "PSU-IP-Address: 152.120.171.187"

Response

Code
{ "transactionStatus": "ACTC" }

Signing baskets can have a number of different statuses. Here, you want to check if the basket was rejected, in which case transactionStatus would have the value RJCT. If not, then you are done.

Also verify each included payment's status via the Get Payment Status endpoint regardless of the signing basket's scaStatus.

Last modified on February 13, 2026
Consent & Account InformationAuthorisations
On this page
  • Single Payments
    • 0. Create FX Quote (International TP only)
    • 1. Create Payment
    • Domestic
    • Swedish Giro
    • International TP
    • SEPA Credit Transfers
    • 2. Authorise Payment
    • 3. Get Payment Status
  • Signing Baskets
    • 1. Create Signing Basket
    • 2. Authorise Signing Basket
    • 3. Get Signing Basket Status
JSON
JSON
JSON
JSON
JSON
JSON