Skip to Content
API OverviewPayments

Payments API

The Payments API allows Third Party Providers (TPPs) to initiate payments on behalf of authorized users. All payment endpoints require the PSP_PI (Payment Initiation) scope.

Payment Authorization Flow

All payment initiations follow a redirect-based authorization flow. When you initiate a payment, the user must authorize it through the Lunar app before it can be executed.

Payment Types

Domestic Credit Transfer

Standard bank transfers within Denmark, Sweden, or Norway.

Initiate Transfer

POST /payments/domestic-credit-transfer
FieldRequiredDescription
redirectUrlYesURL to redirect user after authorization
accountIdYesSource account ID
recipientBBANYesRecipient’s BBAN (11-14 characters)
recipientNameDK onlyRequired for instant transfers in Denmark
amountYesPayment amount
currencyYesCurrency code (ISO 4217)
messageNoMessage to recipient (see limits below)
titleNoTransaction title for sender (max 140 chars)
dateNoExecution date (ISO-8601, defaults to earliest possible)

Message length limits by country: - Denmark (instant): 140 characters

  • Denmark (intraday): 20 characters - Sweden: 12 characters - Norway: 70 characters All Lunar transfers in Denmark are executed as instant transfers.

Get Transfer Status

GET /payments/domestic-credit-transfer/{id}

Returns the payment details including current status.

Danish Payment Slip (GIRO/FI)

Traditional Danish payment slips for utility bills and invoices.

Initiate Payment Slip

POST /payments/dk-payment-slip
FieldRequiredDescription
redirectUrlYesURL to redirect user after authorization
accountIdYesSource account ID
amountYesPayment amount
currencyYesCurrency code (ISO 4217)
typeYesGIRO/FI type: 01, 04, 15, 71, 73, or 75
debtorIdYesYour identifier (payer reference)
creditorIdYesCreditor number (max 8 characters)
messageNoPayment message (max 140 characters)
titleNoTransaction title for sender
dateNoExecution date (ISO-8601)

Get Payment Slip Status

GET /payments/dk-payment-slip/{id}

Standing Orders

Recurring scheduled payments for regular bills or transfers.

List Standing Orders

GET /payments/standing-order

Returns all standing orders for the authenticated user.

Create Standing Order

POST /payments/standing-order
FieldRequiredDescription
senderAccountIdYesSource account ID
senderMessageYesMessage/reference for sender
receiverAccountYesRecipient’s BBAN
receiverMessageYesMessage to recipient
amountYesPayment amount
currencyYesCurrency code
activeFromYesStart date (ISO-8601 date)
frequencyYesPayment schedule (see below)
terminationPolicyYesWhen to stop payments
redirectUrlNoRedirect URL after authorization

Frequency Options

Standing orders support flexible scheduling:

Daily:

{ "daily": true }

Weekly:

{ "weekly": { "dayOfWeek": "MONDAY" } }

Monthly:

{ "monthly": { "interval": 1, "paymentDay": "15" } }

Payment day options: FIRST_BANK_DAY, LAST_BANK_DAY, or a specific day (1-31).

Get Standing Order

GET /payments/standing-order/{id}

Delete Standing Order

DELETE /payments/standing-order/{id}

Payment Statuses

All payment types return a status object with the following states:

StateDescription
AWAITING_APPROVALPayment created, waiting for user authorization
PENDINGPayment authorized, pending execution
COMPLETEDPayment successfully executed
FAILEDPayment execution failed (see failureCode)
CANCELLEDPayment was cancelled
UNKNOWNStatus could not be determined

Always check the payment status after the user returns from the authorization flow. A redirect back to your redirectUrl does not guarantee the payment was approved.

Error Handling

StatusDescription
400Invalid request (e.g., invalid BBAN, insufficient data)
404Payment not found
500Internal server error

Error responses include an errorCode and message with details about the failure.

Last updated on