Payment Initiation API
Introduction
The Premium Payment Initiation API provides you access to payment initiation from your Danske Bank corporate accounts. Ideal for any party who wants to integrate the creation of payments to any of their flows.
Markets
The API is being developed for all Danske Bank markets, but currently supports payments in these markets:
- Denmark
- Norway
- Finland
- Ireland
- Foreign transfers
Use cases and features
- Real-time payment creation - Create and process payments in real time.
- Supports instant payments - Supports instant payments in Denmark, Finland, Ireland and SEPA cross border.
- Integration to your own system - No need to login to the bank to create a payment, you can integrate this API in any of your applications.
Getting Started
External API Platform
To get started with the Premium Payment Initiation API, it is necessary to onboard to the Premium API Platform first. After onboarding to the platform, you will have access to all the Premium APIs that Danske Bank offers.
Link to External API Platform onboarding guidelines: Danske Bank Open Banking Developer Portal
Environment Description
As described in the API Platform onboarding guidelines, the Premium Payment Initiation API will be available in two environments:
-
Sandbox: This environment will be used for initial integration tests and will provide mocked data. The mocked data includes three accounts. Each account will have transactions with either NOK, SEK or DKK currencies.
-
Production will provide you access to create real payments.
Sandbox URLs
Token Endpoint: https://sandbox-api.danskebank.com/sandbox-corporate/api/dk/business/oauth2/token
Premium Payment Initiation endpoint: https://sandbox-api.danskebank.com/sandbox-corporate/api/v1/corporate-paymentorders
Premium Payment Status endpoint: https://sandbox-api.danskebank.com/sandbox-corporate/api/v1/corporate-paymentorders/{paymentorderid}/state
Production URLs
Token Endpoint: https://api.danskebank.com/corporate/api/dk/business/oauth2/token
Premium Payment Initiation endpoint: https://api.danskebank.com/corporate/api/v1/corporate-paymentorders
Premium Payment Status endpoint: https://api.danskebank.com/corporate/api/v1/corporate-paymentorders/{paymentorderid}/state
Authentication
To access a resource, the client must first request a Client Credentials Grant token by calling the token endpoint specified in the OpenId configuration (token_endpoint). The request should be an x-www-form-urlencoded POST with the following parameters:
-
grant_type - client_credentials (read more).
-
scope - should include a scope the client has access to; for the Account Transaction & Balance API, it MUST contain the “accounts” keyword (read more).
-
client_id - the ID received after onboarding (read more).
Example Request:
curl --location --request POST 'https://example.com/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=1233456' \
--data-urlencode 'scope=accounts'
Example Response:
{
"token_type":"Bearer",
"access_token":"A****",
"metadata":"m:",
"expires_in":3600,
"consented_on":1588933990,
"scope":"accounts"
}
Using the Access Token:
The access_token received is valid for 1 hour and must be included in the request header on all subsequent API requests:
Authorization: Bearer <access_token>
Implementation details
The payment type needs to be part of the url when calling POST. The following payment products are supported:
- dk-domestic-credit-transfer
- no-domestic-credit-transfer
- fi-domestic-credit-transfer
- ie-domestic-credit-transfer
- cross-border-credit-transfer
- cross-border-cheque
- request-for-transfer
- (Request for transfer from an account in a foreign bank. It requires a “MT101-agreement” with the account holding bank and might be subject to additional fees)
Later the following will be implemented:
- se-domestic-credit-transfer
- uk-domestic-credit-transfer
- pl-domestic-credit-transfer
Each individual country has specific credit transfer types which is described in detail below.
Payload documentation Danish payment types
payment product:
- dk-domestic-credit-transfer
| Data element | Data sub element | Type | Comments/Example | Danish Account transfer | Danish Salary | Danish Slip payment/ Giro |
|---|---|---|---|---|---|---|
| metadata | ||||||
| authorise | boolean | "true" if the payment is authorised by the user, else "false". Default is false.The subsequent handling of the payment in Danske Banks system is dependent on the payment mandates allocated to the user of which the ClientId is associated with. Utilizing a “false” value will, even though the user has an “Alone mandate”, result in payments awaiting approval in District. Payments will thereby not be executed automatically. | mandatory | mandatory | mandatory | |
| localInstrument | Max4Text | • INST - instant clearing • SDCL - sameday clearing • ONCL - overnight clearing | mandatory | na | na | |
| requestedExecutionDate | ISODate | YYYY-MM-DD. If not filled, the execution date will be first possible execution date. example "2026-02-23" | optional | optional | optional | |
| debtorAccount | Account Reference | mandatory | mandatory | mandatory | ||
| iban bban | Max34Text | Account number in the type stated Examples: “iban”: "DK02100100109307118603" “bban”: "30010930711860" Please note: if both IBAN and BBAN is given, IBAN will be used. We suggest only to use one representation. | mandatory | mandatory | mandatory | |
| entryText | Max20Text | Short text on sender's account statement | optional | optional | optional | |
| endToEndId | Max35Text | Unique identification assigned by the initiating party to unambiguously identify the transaction. This identification is passed on, unchanged, throughout the entire end to-end chain if support by the clearing. It only applies to account to account transfers. | optional | optional | optional | |
| creditorAccount | Account Reference | mandatory | mandatory | mandatory | ||
| bban iban other.schemeNameProprietary other.identification | Max34Text | Examples of usage cross multiple elements: "iban": "DK02100100109307118603" or "bban": "30010930711860" or (NemKonto/Easy account) “other”: { "schemeNameProprietary" : "DanishEasyAccount”, "identification" : "cvr12345678” } or Danish Slip Payment/Giro “other”: { "schemeNameProprietary" : "DanishSlip", "identification" : "71123456789012345612345678" } Please note: if both IBAN and BBAN is given, IBAN will be used, next will be BBAN and thirdly Nemkonto and lastly Inpayment Card. We suggest only to use one representation. Account number in the type stated Exceptions: Danish Easy Account (Nemkonto): Please write the type of identification before the identification e.g. cpr2211691234 accepted types: cpr = social security number (NKC in old system) cvr = cvr number for companies (NKV) cvrp = cvr and production number (NKP) se = VAT-number (NKS) cvrse = cvr and VAT-number (NKR) Danish slip payment/giro: The form type is also stated as a prefix, followed by 15 or 16 digits of paymentId and 8 digits of creditor number. The following form types are supported: 01: doesn't support payment ID 04: 16 digits 15: 16 digits 71: 15 digits 73: doesn't support payment ID 75: 16 digits e.g. 71123456789012345612345678 where 71 is the form type, 1234567890123456 is the reference, and 12345678 is the creditor number. If the creditor number is only 7 characters long, then add a leading zero. If paymentId is not supported, then simply write form type and creditor number: e.g. 0112345678 | mandatory | mandatory | mandatory | |
| entryText | Max20Text | Text on creditor’s account statement. Please note: It is not supported when initiating Danish Instant Account Transfers. Please use remittanceInformationUnstructured instead. | optional | n.a | n.a | |
| creditorName | Max70Text | Please note: only 35 characters are currently supported | optional but mandatory for instant(INST) | n.a | n.a | |
| instructedAmount | ||||||
| amount | Decimal | Amount to be sent to the creditor stated in the currency of the debtorAccount. Use a dot (.) as decimal separator | mandatory | mandatory | mandatory | |
| currency | ISOCurrency Code | Currency of the amount to be transferred | mandatory | mandatory | mandatory | |
| CategoryPurpose | Max4Text | Accepted values: • SALA For Danish salary transfers, categoryPurpose needs to be SALA; other types are ignored. The use of SALA will also control the entry text (salary) on the creditor’s account. | n.a. | mandatory | n.a. | |
| remittanceInformationUnstructured | Max140Text | 140 characters of free text to creditor. Danish Slip payment/giro: Lines of 35 characters are supported - please use remittanceInformationUnstructuredArray to specify one or multiple lines of 35 characters. | optional | n.a. | n.a. | |
| remittanceInformationUnstructuredArray | Array of Max35Text | Note: For form types 01, unstructured. Remittance information needs to be populated: up to 27 lines of 35 characters. For form types 73 and 75, the unstructured remittance information may be populated: up to 41 lines of 35 characters. Not supported for form types 04, 15, and 71. | n.a | n.a | mandatory for form type 01, optional for 73 and 75 and n.a. for 04, 15 and 71 | |
| remittanceInformationStructured | "remittanceInformationStructured": {"reference": "RF34567"} | |||||
| reference | Max25Text | reference number e.g. RF34567 | optional | n.a | n.a | |
| ultimateDebtor | Max70 Text | Please note: only 35 characters are supported for now | optional | n.a | optional for 01, 73 and 75 | |
| ultimateDebtorAddress | ||||||
| StreeName | Max35Text | optional | n.a. | Optional for 01, 73 and 75 | ||
| BuildingNumber | Max16Text | Optional | n.a. | Optional for 01, 73 and 75 | ||
| TownName | Max28Text | Optional | n.a. | Optional for 01, 73 and 75 | ||
| PostCode | Max9Text | Optional | n.a. | Optional for 01, 73 and 75 | ||
| Country | ISO Country Code | n.a. | n.a. | n.a. |
Payload documentation - Finnish payment types
payment product:
- fi-domestic-credit-transfer
| Data element | Data sub element | Type | Comments/Example | Finnish account transfer | Finnish Salary |
|---|---|---|---|---|---|
| metadata | |||||
| authorise | boolean | "True" if the payment is authorised by the user | Else "False" | ||
| localInstrument | code | • INST - instant clearing • ONCL - overnight clearing • EXPR - express payment (POPS) | mandatory | n.a | |
| requestedExecutionDate | ISODate | yyyy-mm-dd. If not filled, the execution date will be the first possible execution date. Example: "2025-10-23" | optional | optional | |
| debtorAccount | AccountReference | mandatory | mandatory | ||
| iban | Max34Text | Example: “iban”: "FI6934499400001701" | mandatory | mandatory | |
| entryText | Max20Text | Short text on sender's account statement | optional | optional | |
| endToEndId | Max35Text | Unique identification assigned by the initiating party to unambiguously identify the transaction. This identification is passed on, unchanged, throughout the entire end to-end chain. | optional | optional | |
| creditorAccount | AccountReference | ||||
| iban | Max34Text | Example “iban”: "FI7016603001174526" | mandatory | mandatory | |
| creditorName | Max70Text | mandatory | mandatory | ||
| instructedAmount | mandatory | mandatory | |||
| amount | Decimal | Amount to be sent to the creditor stated in the currency of the debtorAccount. Use a dot (.) as decimal seperator | mandatory | mandatory | |
| currency | ISOCurrency Code | currency ISOCurrency Code only EUR is supported mandatory mandatory | mandatory | mandatory | |
| categoryPurpose | categoryPurpose | Accepted values: • SALA | n.a. | mandatory | |
| purposeCode | Max4Text | Accepted values: • SALA • STDY • BENE • PENS • SSBE • AGRT • BECH • TAXS | n.a. | mandatory | |
| remittanceInformationUnstructured | Max140Text | 140 characters of free text to creditor | optional | n.a | |
| remittanceInformationStructured | "remittanceInformationStructured": {"reference": "34567", | optional | n.a | ||
| reference | Max25Text | reference number e.g. RF12345678 | optional | n.a | |
| referredDocumentInformation | For now, only one occurrence is valid. Please note: use either reference or referredDocumentInformation when using structured information—if both are given, the reference will be preferred. Example: "referredDocumentInformation": { "type": "CINV", "issuer": "885588", "number": "123456789", "relatedDate": "2025-10-23" } | optional | n.a | ||
| type | Max4Text | "CINV" | optional | n.a. | |
| issuer | Max10Text | customer number | optional | n.a. | |
| number | Max15Text | Invoice number | Invoice number | optional | |
| relatedDate | ISODate | yyyy-mm-dd Example: "2025-10-23" | optional | n.a. | |
| ultimateDebtor | Max70Text | Used to state the ultimateDebtor name only | optional | n.a. | |
| ultimateCreditor | Max70Text | Used to state the ultimateCreditor name only | optional | n.a. |
Payload documentation - Foreign payment types
payment product:
- cross-border-credit-transfer
- cross-border-cheque
- request-for-transfer
| Data element | Data sub element | Type | Example | Cross-border | Cross-border cheque | Request for transfer |
|---|---|---|---|---|---|---|
| metadata | ||||||
| authorise | boolean | "true" if the payment is authorised by the user, else "false". Default is false. The subsequent handling of the payment in Danske Bank's system is dependent on the payment mandates allocated to the user of which the ClientId is associated with. Utilizing a “false” value will, even though the user has an “Alone mandate”, result in payments awaiting approval in District. Payments will thereby not be executed automatically. | optional | optional | optional | |
| serviceLevel | code | Values: • URGP • SDVA (used for Capital transfers from Finnish accounts) • INST - instant SEPA clearing - only supported as instrument for IE and FI debit accounts, for other countries please provide NURG and then the payment will be processed as SEPA Instant if all the terms for Instant are fulfilled • NURG - non urgent - also used as default if no ServiceLevel is given | optional | n.a. | n.a. | |
| requestedExecutionDate | ISODate | YYYY-MM-DD. If not filled, the execution date will be the first possible execution date. (Mandatory to be stated for the Request for transfer payment type) example "2026-02-23" | optional | optional | mandatory | |
| requestedTransmissionDate | ISODate | YYYY-MM-DD. Example "2026-02-29". The date stating when Danske Bank should send the payment request to the foreign bank. This must be the same date or a date before the requestedExecutionDate. | n.a. | n.a. | Mandatory | |
| debtorAccount | AccountReference | mandatory | mandatory | Mandatory | ||
| bban iban | Max34Text | "iban": "DK02100100109307118603" or "bban": "30010930711860" Please note: if both IBAN and BBAN are given, IBAN will be used. We suggest only using one representation. | mandatory | mandatory | Mandatory | |
| entryText | Max20Text | Short text on sender's account statement | optional | optional | Optional | |
| debtorAgentAddress | optional | optional | n.a. | |||
| country | ISOCountryCode | If debtor account is BBAN, either BIC or "countryCode" must be supplied. Else not required. | optional | optional | n.a. | |
| debtorAgent | BICFI | For cross-border and cross-border-cheque: If debtor account is BBAN, either debtorAgent or "debtorAgentAddress":{"countryCode"...} must be supplied. Else not required. In a request-for-transfer: mandatory | optional | optional | mandatory | |
| creditorAccount | AccountReference | optional | n.a. | mandatory (n.a. for IC or UC) | ||
| bban iban | Max34Text | Examples: “iban”: "DK02100100109307118603" or “bban”: "30010930711860" Please note: if both IBAN and BBAN are given, IBAN will be used. We suggest only using one representation. | optional | n.a. | mandatory | |
| creditorAgent | Max11Text | WFBIUS6S must be 8 or 11 characters If beneficiary account is BBAN, either creditorAgent BIC or Country must be supplied. Else not required. | optional | n.a. | optional | |
| creditorAgentOther | ||||||
| clearingSystemId | Max5Text | Example: FW | optional | n.a. | optional | |
| memberId | Max9Text | Example: 325081403 | optional | n.a. | optional | |
| creditorAgentAddress | Array of 4 lines of Max35Text | Max 4 lines of 35 characters. | optional | n.a. | Optional | |
| country | ISOCountryCode | Country where the account is held. If beneficiary account is BBAN, either creditorAgent BIC or Country must be supplied. Else not required. | optional | n.a. | n.a. | |
| creditorAddress | ||||||
| country | ISOCountryCode | n.a. | mandatory | n.a. | ||
| addressLines | Array of 4 lines of Max35Text | Unstructured address Cross-border and request-for-transfer: 4 lines of 35 characters are supported. First line (interpreted as creditor name) is mandatory. Cross-border-cheque: State the address of the company or person, who is the beneficiary. The following number of lines are available: • 4 lines of 35 characters, when the cheque is to be sent directly to the beneficiary. At least 3 lines must be filled out. • 2 lines of 35 characters, when the cheque is to be sent to the account holder. These lines must be filled out. | mandatory (creditor name) | mandatory (creditor name) | mandatory (creditor name) | |
| instructedAmount | mandatory | mandatory | mandatory | |||
| amount | Decimal | Amount to be sent to the creditor stated in the currency of the debtorAccount. Use a dot (.) as decimal separator. | mandatory | mandatory | mandatory | |
| currency | ISOCurrency Code | Currency of the amount to be transferred. If an equivalent amount is needed, please state the original currency here and the actual currency that needs to be sent to the receiver in the "currencyOfTransfer". A currency conversion will take place. | mandatory | mandatory | mandatory | |
| currencyOfTransfer | ISOCurrencyCode | Used in an "equivalent amount scenario" to specify the currency that needs to be transferred to the creditor. A currency conversion will take place. | optional | optional | n.a. | |
| exchangeRateInformation | Payment Exchange Rate | optional | optional | optional | ||
| type | code | Specify the exchange rate type. If no exchange type is stated, the bank will decide based on the receiver country - most countries use SPOT. Accepted values: • SPOT • SALE • AGRO (only supported for foreign payments, not foreign cheques) Note: If AGRO is used, then contractIdentification is mandatory. | optional | optional | n.a. | |
| contractIdentification | Max14Text | The agreed rate contract identification number. This field is only used when AGRO is chosen in exchange rate type. | optional (mandatory for type = AGRO) | n.a. | optional | |
| chargeBearer | code | For cross-border and request-for-transfer, the following values are supported: • DEBT (debtor pays costs) • CRED (creditor pays costs) • SHAR (debtor and creditor share the costs) For cross-border-cheques: • DEBT (the amount excludes bank’s costs) • CRED (the amount includes bank’s costs) | optional (default option is SHAR) | optional (default option is DEBT) | optional (default option is SHAR) | |
| categoryPurpose | code | Accepted values: • INTC Other types are ignored. | optional | n.a. | n.a. | |
| remittanceInformationUnstructured | Max140Text | 140 characters of free text to creditor. | optional | n.a. | n.a. | |
| remittanceInformationUnstructuredArray | Array of Max35Text | For request-for-transfer: Only 4 lines of 35 characters are supported. For cross-border-cheque: 14 lines are supported if deliveryMethod = MLCD (Cheque will be sent to the creditor). If MLDB (Cheque will be sent to debtor) is used, it is not supported. | n.a | optional | optional | |
| ultimateDebtor | Max70Text | Note: Only 35 characters are supported for now. | optional | n.a. | n.a. | |
| instructionForDebtorAgent | Max105Text | Note: Usage will invoke an extra fee as the payment will be manually handled by the bank. 3 lines are supported. Not supported if serviceLevel is INST. | optional | n.a. | n.a. | |
| regulatoryReporting | Mandatory for transfers from accounts in Norway above NOK 100,000 and transfers from accounts in Sweden above SEK 150,000. | optional | optional | optional | ||
| detailsCode | Max3Text | Example: "code": 76, 2-digit codes in Norway and 3-digit codes in Sweden. The list of possible values can be found here: pdf-d01-4_001-d_001-4_02_appendix.pdf. | optional | optional | n.a. | |
| detailsInformation | Array of Max35Text | Used for payments from Norway. Example: {"detailsInformation": ["Rent for ski-apartment", "in 2026"]}. 2 lines can be used for cross-border and request-for-transfer. 4 lines can be used for cross-border-cheque. | optional | optional | optional | |
| detailsCountry | ISOCountryCode | Used for payments from accounts in Sweden. | optional | optional | optional | |
| chequeInstruction | ||||||
| deliveryMethod | code | MLDB - Cheque will be sent to debtor. This is the default value for cross-border-cheque if not populated. MLCD - Cheque will be sent to creditor. If cheque is to be sent to creditor, then creditor name and address is mandatory | n.a. | optional | n.a. | |
| formsCode | Code | Valid code: CROSSED - The cheque is crossed (applies only to cross-border-cheques). If not filled, the cheque will not be crossed. | n.a. | optional | n.a. | |
| senderInformation | Max35Text | 2 lines of 35 characters are supported. The message will appear on the note to the sender. | n.a. | optional | n.a. | |
| requestForTransferInstruction | ||||||
| paymentType | Please use the following codes: IC = domestic cheque, IE = domestic transfer to a third party, II = domestic transfer to own account, IS = domestic salary transfer, IU = domestic transfer express, UC = foreign cheque, UE = foreign transfer to a third party, UI = foreign transfer to own account, UU = foreign transfer express. If creditorAccount is not specified, the transferType must be IC or UC (domestic cheque or foreign cheque). | n.a. | n.a. | mandatory | ||
| separateFeeAccount | Max34Text | Ability to key in fee account. Only supported if allowed for the specific BIC address and payment type. | n.a. | n.a. | optional |
Payload documentation - Irish payment types
payment product:
- ie-domestic-credit-transfer
| Data element | Data sub element | Type | Comments/Example | Finnish account transfer | Finnish Salary |
|---|---|---|---|---|---|
| metadata | |||||
| authorise | boolean | "true" if the payment is authorised by the user, else "false". Default is false.The subsequent handling of the payment in Danske Banks system is dependent on the payment mandates allocated to the user of which the ClientId is associated with. Utilizing a “false” value will, even though the user has an “Alone mandate”, result in payments awaiting approval in District. Payments will thereby not be executed automatically. | optional | optional | |
| localInstrument | code | • INST • ONCL • SDCL | mandatory | mandatory | |
| requestedExecutionDate | ISODate | YYYY-MM-DD. If not filled, the execution date will be the first possible execution date. Example: "2026-02-23" | optional | optional | |
| debtorAccount | AccountReference | mandatory | mandatory | ||
| iban | Max34Text | Example: "iban": "IE42DABA100100931718603" | mandatory | mandatory | |
| entityText | Max20Text | Short text on sender’s account statement | optional | optional | |
| creditorAccount | AccountReference | mandatory | mandatory | ||
| iban | Max34Text | Example: "iban": "IE42DABA100100931718603" | mandatory | mandatory | |
| entityText | Max18Text | Used as creditor reference. This value will be copied and delivered as EndToEndId to the receiver. Please note only 18 characters of text is supported. | optional | n.a. | |
| creditorName | Max70Text | Please note: Only 35 characters are supported for now | mandatory | mandatory | |
| instructedAmount | mandatory | ||||
| amount | Decimal | Amount to be sent to the creditor stated in the currency of the debtorAccount. Use a dot (.) as the decimal separator. | mandatory | mandatory | |
| currency | ISOCurrencyCode | Only EUR is supported | mandatory | mandatory | |
| remittanceInformationUnstructured | Max140Text | 140 characters of free text to creditor. | optional | optional |
Payload documentation - Norwegian payment types
payment product:
- no-domestic-credit-transfer
| Data element | Data sub element | Type | Comments/Example | Finnish account transfer | Finnish Salary | Finnish Salary |
|---|---|---|---|---|---|---|
| metadata | ||||||
| authorise | boolean | "true" if the payment is authorised by the user, else "false". Default is false. The subsequent handling of the payment in Danske Bank’s system is dependent on the payment mandates allocated to the user of which the ClientId is associated with. Utilising a “false” value will, even though the user has an “Alone mandate”, result in payments awaiting approval in District. Payments will thereby not be executed automatically. | optional | optional | optional | |
| requestedExecutionDate | YYYY-MM-DD. If not filled, the execution date will be the first possible execution date. Example: "2026-03-01" | optional | optional | optional | ||
| debtorAccount | AccountReference | mandatory | mandatory | mandatory | ||
| iban | Max34Text | Examples: "iban": "NO6112345678901" or "bban": "98765432189" Please note: if both IBAN and BBAN are given, IBAN will be used. We suggest using only one representation. | mandatory | mandatory | mandatory | |
| entityText | Max20Text | Short text on sender’s account statement | optional | optional | optional | |
| creditorAccount | AccountReference | mandatory | mandatory | mandatory | ||
| bban iban | Max34Text | Examples: "iban": "NO9912345678901" or "bban": "98765432109" Please note: if both IBAN and BBAN are given, IBAN will be used. We suggest using only one representation. | mandatory | mandatory | mandatory | |
| entityText | Max27Text | Text on creditor account statement. Note: If you use structured remittance information, entryText is not allowed. It is only allowed in account transfers. | n.a. | optional | n.a. | |
| creditorName | Max70Text | optional | optional | optional | ||
| instructedAmount | amount | Decimal | Amount to be sent to the creditor stated in the currency of the debtor account. A dot (.) as a decimal separator. | mandatory | mandatory | |
| currency | ISOCurrencyCode | Currency of the amount to be transferred. | mandatory | mandatory | mandatory | |
| categoryPurpose | Accepted values: SALA. For Norwegian salary payments, categoryPurpose needs to be SALA; other types are ignored. | n.a. | n.a. | optional | ||
| purposeCode | Purpose Code | Accepted values for Norwegian payments: • PENS (Pension) • AGRI (Agriculture payment) • PAYR (Payroll/Trekk) Note: If SALA is used in categoryPurpose, then purposeCode will be ignored even if given. | n.a. | n.a. | optional | |
| remittanceInformationUnstructuredArray | Array of Max35Text | Up to 50 lines of 35 characters are supported. Used for remittance information to the creditor. | n.a. | optional | n.a. | |
| remittanceInformationStructured | Remittance | |||||
| reference | Max25Text | Reference number, e.g., "2023128154". | mandatory | n.a. | n.a. | |
| referredDocumentInformation | Currently, only one occurrence is supported. Example: { "type": "CINV", "issuer": "12345", "relatedDocumentNumber": "123456789", "relatedDate": "2025-05-14" } Please note: Use either reference or referredDocumentInformation when using structured information; if both are given, the reference will be used. | n.a. | optional | n.a. | ||
| type | code | Only CINV supported. | n.a. | optional | n.a. | |
| issuer | Max15Text | Customer number. | n.a. | optional | n.a. | |
| number | Max 20 Text | Invoice number | n.a. | optional | n.a. | |
| relatedDate | ISODate | yyyy-mm-dd and Example "2026-02-23" | n.a. | optional | n.a. |
Responses
The immediate response received when initiating a payment of the Corporate Payment API will follow the structure below:
| Data element | Data sub element | Type | Description and Example |
|---|---|---|---|
| stateCode | See list of codes below | Danske Bank list of states | |
| transactionStatus | ExternalPaymentTransactionStatus | SOcode e.g. RJCT | |
| paymentId | Max128Text | Example: "urn:ttid:corporate:v1:premium:833d8439-d524-43da-8fd0-1ddd948b30dd". This id is used when calling the Payment Status Endpoint (Get state) in order to get a payment status of the payment. | |
| error | |||
| errorKCode /Text(4) | Danske Bank detailed error code (K-code). | Example: "urn:ttid:corporate:v1:premium:833d8439-d524-43da-8fd0-1ddd948b30dd". This id is used when calling the Payment Status Endpoint (Get state) in order to get a payment status of the payment. | |
| errorISOCode | ISOExternalStatusReason1Code | ISO code related to the error e.g. AC01 | |
| errorText | Text(100) | Detailed error text in English |
List of State codes used in the immediate response and in the response to the payment Status Endpoint (GET State)::
| stateCode | transactionStatus (ExternalPaymentTransactionStatus) | Description |
|---|---|---|
| PendingValidation | ACTC | |
| Rejected | RJCT | |
| PendingAcceptance | PDNG | Only relevant if the user, which the ClientId is associated to, doesn’t have automatic payment acceptance of payments on the user profile.. Payment is awaiting acceptance in the District user interface |
| PendingAcceptanceAndApproval | PDNG | Only relevant if the user, which the ClientId is associated to, doesn’t have alone mandate and automatic acceptance of payments on the user profile. Payment is awaiting acceptance and payment approval in the District user interface |
| PendingApproval | PDNG | Only relevant if the user, which the ClientId is associated to, doesn’t have alone mandate Payment is awaiting payment approval in the District user interface |
| Ready | PDNG | Awaiting payment execution. E.g. when payments have execution date in the future. |
| PendingLimit | PDNG | Only relevant if the user, which the ClientId is associated to, has payment, account or user limits (offered via Danske Bank selfservice solution) |
| LackingFunds | PDNG | Used Iif the debtor account is lacking sufficient funds |
| PendingSettlement | ACSP | All preceding checks such as technical validation and customer profile were successful and therefore the payment initiation has been accepted for execution. |
| Executed | Executed | Payment is debited from customer’s account. For non-instant payments, no settlement state will be provided. |
| Settled | ACCC | For instant payments only: A settlement state will be provided when the payment has reached the creditors’ account |
| Cancelled | CANC | Only used in a GET State response.Payment initiation has been canceled before execution. |
Error Codes
Our API uses standardized HTTP status codes to indicate the success or failure of API requests. Below is a summary of the error codes you may encounter
| Error Code | Description | Resolution Steps |
|---|---|---|
| 201 OK | The request was successful. | No action needed – unless in a setup where payments need to be approved in District after initiation |
| 400 Bad Request | The request could not be understood or was missing required parameters. | Check the request syntax and ensure all required parameters are included. |
| 401 Unauthorized | Authentication credentials were missing or incorrect. | Verify that authentication credentials are correct and included in the request. |
| 403 Forbidden | The request was understood, but it has been refused, or access is not allowed. | Ensure that you have the necessary permissions to access the requested resource. |
| 404 Not Found | The requested resource could not be found. | Verify the resource URL and ensure that the resource exists. |
| 500 Internal Server Error | An error occurred on the server. | Try the request again later and contact support if the issue persists. |
Code 201 - Created
Example Response:
{
"stateCode": "pendingApproval",
"transactionStatus": "PDNG",
"paymentId": "urn:ttid:corporate:v1:cpr:43cc372a-ca6b-4f76-a33e-0bac4005e03a",
"error": null,
"secondaryPaymentId": "1021739698"
}
Code 400 - Bad request
Schema validation errors
This type of bad request happens if the caller of the APIpayment initiator is not providing a correct payload. These errors cannot be shown to the payment initiator since there is no errorKCode or errorIsoCode.
Example Response:
{
"stateCode": "rejected",
"transactionStatus": "RJCT",
"paymentId": "",
"error": {
"errorKCode": "",
"errorIsoCode": "",
"errorText": "'Currency' must be equal to 'SEK'."
}
}
In some cases the response structure can also be:
Example Response:
{
"errorMessage": "creditTransferTransactionInformation.Amount.EquivalentAmount.Currency: [EquivalentAmount.Currency must be 3 characters in the range [A-Z].]",
"errorCode": "ERROR"
}
Functional validation errors
Example of an immediate response with Danske Bank detailed error codes and error text.
Example Response:
{
"stateCode": "rejected",
"transactionStatus": "RJCT",
"paymentId": "",
"error": {
"errorKCode": "K0589",
"errorIsoCode": "DT04",
"errorText": "Express payments can only be executed on today's date."
}
}
Code 401 - Unauthorized
If tokens are not valid this will be returned:
Example Response:
{
"error": "unauthorized"
}
Get Payment status
Endpoint: GET https://api.danskebank.com/corporate/api/v1/corporate-paymentorders/{paymentorderid}/state
Description
In order to get payment status information after receiving the immediate response of the Payment Initiation request, it is possible to get the real time status of a payment as it is in Danske Bank’s system. The unique paymentId received in the immediate response must be utilized to get the status of a payment.
Example : Immediate response after initiating the Payment:
{
"stateCode": "pendingApproval",
"transactionStatus": "PDNG",
"paymentId": "urn:ttid:corporate:v1:cpr:43cc372a-ca6b-4f76-a33e-0bac4005e03a",
"error": null,
"secondaryPaymentId": "1021739698"
}
The response of the “GET state” will have the below structure:
| Data element | Data Sub element | Type | Description and example |
|---|---|---|---|
| stateCode | See list of codes on page 24. | Danske Bank list of states | |
| transactionStatus | ExternalPaymentTransactionStatus | ISOcode e.g. ACSC | |
| error | |||
| errorKCode /Text(4) | Danske Bank detailed error code (K-code). | More detailed error code. Complete list of error codes can be found here: pain,-d-,002,-d-,001,-d-,03-cgi-mp-v2,-d-,8.pdf Page 16 - 26 | |
| errorISOCode | errorISOCode ISOExternalStatusReason1Code ISO code related to the error e.g. AC01 | ISO code related to the error e.g. AC01 | |
| errorText | Text(100) | Detailed error text in English |
Examples of responses from the GET State endpoint:
- Payment waiting for execution:
{
"stateCode": "sentForExecution",
"transactionStatus": "PDNG",
"error": null
}
- Rejected payment inititation:
{
"stateCode": "rejected",
"transactionStatus": "RJCT",
"error": {
"errorKCode": "K0051",
"errorIsoCode": "NARR",
"errorText": "'To-account' cannot be credited"
}
}
Architectural constraints
- State
- Active
Technical constraints
- Static URL
- /premium-apis/payment-initiation-api
- Environment(s)
- PROD, SANDBOX
Is this helpful?