• Documentation
  • API Reference
Overview
Guides
    Get StartedGood to KnowAccess Tokens
    Core APIs
    Alternative APIs
      ISO PaymentsPayouts (Premium)FX Connect
Other Information
Changelog
Downloads
Support
Alternative APIs

ISO Payments

The ISO Payments API allows you to initiate secure, structured payments by submitting payment instructions in JSON format from which an ISO 20022 pain.001 file is generated and uploaded to the online bank for authorisation.

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

Initiating ISO 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.

0. Create FX Quote (Cross-border only)

Cross-border payments enable you to initiate 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-border 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.
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.
PSU-IP-Addressstring(ipv4)The IP address of the PSU from the HTTP request between the PSU and the TPP.
PSU-User-AgentstringThe Agent header from the HTTP request between the PSU and the TPP, identifying the browser used by the PSU.

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 cross-border payment request.

1. Create Payment

This step is where you create the payment you wish to upload in file format.

Endpoint

Code
POST /iso/payments

Domestic

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

Request Headers

NameTypeDescription
X-Request-IDstringThe 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.
PSU-IP-AddressstringThe IP address of the PSU from the HTTP request between the PSU and the TPP.
PSU-User-AgentstringThe Agent header from the HTTP request between the PSU and the TPP, identifying the browser used by the PSU.

Request Body

NameTypeDescription
instructedAmountobjectThe amount and currency of the money to be transferred.
debtorAccountobjectThe account from which the payment will be debited.
creditorAccountobjectThe account to which the payment will be credited.
creditorNamestringThe full name of the payment recipient.
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/iso/payments" \ -H "Accept: application/json" \ -H "Authorization: Bearer <eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0>..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: 2e02a131-a35a-450f-a736-9a06086f3337" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "PSU-IP-Address: 152.120.171.187" \ -d '{ "instructedAmount": { "amount": "1230.50", "currency": "SEK" }, "debtorAccount": { "iban": "SE123456789000532811", "currency": "SEK" }, "creditorAccount": { "iban": "SE123456789000222333", "currency": "SEK" }, "creditorName": "Acme AB", "requestedExecutionDate": "2025-06-10", "remittanceInformationUnstructured": "Ref Number Merchant" }'

Swedish Giro

Domestic transfers within Sweden via the Bankgirot and Plusgirot systems.

Endpoint

Code
POST /iso/payments

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.
PSU-IP-Addressstring(ipv4)The IP address of the PSU from the HTTP request between the PSU and the TPP.
PSU-User-AgentstringThe Agent header of the PSU from the HTTP request between the PSU and the TPP.

Request Body

NameTypeDescription
instructedAmountobjectThe amount and currency of the money to be transferred.
debtorAccountobjectThe account from which the payment will be debited.
creditorGiroobjectThe Bankgirot or Plusgirot account to which the payment will be credited.
creditorNamestringThe full name of the payment recipient.
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/iso/payments" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: 7891fc3d-85a3-4b8d-bf70-cd3805631607" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "PSU-IP-Address: 152.120.171.187" \ -d '{ "instructedAmount": { "amount": "1230.50", "currency": "SEK" }, "debtorAccount": { "iban": "SE123456789000532811", "currency": "SEK" }, "creditorGiro": { "giroNumber": "123-4567", "giroType": "BANKGIRO" }, "creditorName": "Acme AB", "requestedExecutionDate": "2025-06-10", "invoiceRef": "Invoice Nr 4421" }'

SEPA Credit Transfers

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

Endpoint

Code
POST /iso/payments

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.
PSU-IP-Addressstring(ipv4)The IP address of the PSU from the HTTP request between the PSU and the TPP.
PSU-User-AgentstringThe Agent header of the PSU from the HTTP request between the PSU and the TPP.

Request Body

NameTypeDescription
instructedAmountobjectThe amount and currency of the money to be transferred.
debtorAccountobjectThe account from which the payment will be debited.
creditorAccountobjectThe account to which the payment will be credited.
creditorNamestringThe full name 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/iso/payments" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: a062542e-8669-43e0-b67d-593d03af0e0f" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "PSU-IP-Address: 152.120.171.187" \ -d '{ "instructedAmount": { "amount": "130.00", "currency": "EUR" }, "debtorAccount": { "iban": "SE123456789000532811", "currency": "EUR" }, "creditorAccount": { "iban": "FI123456789000222333", "currency": "EUR" }, "creditorName": "Acme AB", "creditorAgent": "NDEAFIHH", "creditorAgentName": "Nordea Bank Abp", "requestedExecutionDate": "2025-05-19", "remittanceInformationUnstructured": "Ref Number Merchant" }'

Cross-border

Cross-border payments using FX quotes.

Endpoint

Code
POST /iso/payments/cross-border

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.
FX-Quote-IdstringThe ID of the FX Quote to be used for the payment. Used for cross-border payments only.
PSU-IP-Addressstring(ipv4)The IP address of the PSU from the HTTP request between the PSU and the TPP.
PSU-User-AgentstringThe Agent header of the PSU from the HTTP request between the PSU and the TPP.

Request Body

NameTypeDescription
instructedAmountobjectThe amount and currency of the money to be transferred.
debtorAccountobjectThe account from which the payment will be debited.
creditorAccountobjectThe account to which the payment will be credited.
creditorNamestringThe full name of the payment recipient.
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/iso/payments/cross-border" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: 69de0a9d-a5e0-47cd-bdf8-f33dc4028e0c" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "FX-Quote-Id: F100000PFM" \ -H "PSU-IP-Address: 152.120.171.187" \ -d '{ "instructedAmount": { "currency": "EUR", "amount": "130.00" }, "debtorAccount": { "iban": "SE123456789000532811", "currency": "SEK" }, "creditorAccount": { "iban": "FI123456789000222333", "currency": "EUR" }, "creditorName": "Acme AB", "creditorAddress": { "street": "Example Street", "buildingNumber": "5", "city": "Helsinki", "postalCode": "00160", "country": "FI" }, "creditorAgent": "NDEAFIHH", "creditorAgentName": "Nordea Bank Abp", "requestedExecutionDate": "2025-06-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.

Response

Code
{ "transactionStatus": "RCVD", "paymentId": "a3cf0daa-6d43-4156-afd4-1d859ad448a8", "_links": { "confirmPayment": { "href": "/iso/payments/confirm" }, "self": { "href": "/iso/payments/a3cf0daa-6d43-4156-afd4-1d859ad448a8" } } }

2. Confirm Payment

After creating the desired ISO payment(s), confirm it to generate and upload a pain.001 file to the online bank. Multiple existing payments can be included in the file by specifying them in the paymentIds body parameter.

Endpoint

Code
PUT /iso/payments/confirm

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.
PSU-IP-Addressstring(ipv4)The IP address of the PSU from the HTTP request between the PSU and the TPP.
PSU-User-AgentstringThe Agent header of the PSU from the HTTP request between the PSU and the TPP.

Request Body

NameTypeDescription
paymentIdsarrayThe IDs of the payments to include in the confirmation.
batchBookingPreferredbooleanIndicates a preference to execute the payment as a batch booking when set to true.
TerminalCode
curl -X PUT "https://api.openbankingplatform.com/iso/payments/confirm" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: e26e0f4b-7fbd-4a23-8939-aa7e5275825c" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "PSU-IP-Address: 152.120.171.187" \ -d '{ "paymentIds": [ "a3cf0daa-6d43-4156-afd4-1d859ad448a8", "186901d2-2022-412f-a321-60062ef1ba1c", "84b1133c-9ef8-41dd-8dc1-0b64a8d955d3" ], "batchBookingPreferred": "false" }'

Response

Code
{ "tppMessages": [ { "category": "INFORMATION", "code": "FILE_UPLOADED", "text": "OPE20250609T1057016350301Z" } ] }

3. Authorise Payment

After successfully confirming the payments, the PSU then needs to log into their online bank and authorise the file.

4. Get Payment

Lastly, make the following request to check the status of the payment(s) included in the file.

Endpoint

Code
GET /iso/payments/{paymentId}

Path Parameters

NameTypeDescription
paymentIdstringThe 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.
PSU-IP-Addressstring(ipv4)The IP address of the PSU from the HTTP request between the PSU and the TPP.
PSU-User-AgentstringThe Agent header of the PSU from the HTTP request between the PSU and the TPP.
TerminalCode
curl -X GET "https://api.openbankingplatform.com/iso/payments/a3cf0daa-6d43-4156-afd4-1d859ad448a8" \ -H "Accept: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIn0..." \ -H "Content-Type: application/json" \ -H "X-Request-ID: c2ef85d1-dfc8-450d-b820-c90edc0f7de2" \ -H "X-BicFi: ESSESESS" \ -H "PSU-ID: 123456789001" \ -H "PSU-Corporate-ID: 1234567890" \ -H "PSU-IP-Address: 152.120.171.187"

Response

Code
{ "transactionStatus": "ACSC", "instructedAmount": { "amount": "1230.50", "currency": "SEK" }, "debtorAccount": { "iban": "SE123456789000532811", "currency": "SEK" }, "creditorAccount": { "iban": "SE123456789000222333", "currency": "SEK" }, "creditorName": "Acme AB", "requestedExecutionDate": "2025-06-10", "remittanceInformationUnstructured": "Ref Number Merchant" }

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.

Last modified on April 30, 2026
PremiumPayouts (Premium)
On this page
    • 0. Create FX Quote (Cross-border only)
    • 1. Create Payment
    • Domestic
    • Swedish Giro
    • SEPA Credit Transfers
    • Cross-border
    • 2. Confirm Payment
    • 3. Authorise Payment
    • 4. Get Payment
JSON
JSON
JSON
JSON