Make payments to a folio
A folio is the billing account for a reservation or booking. All charges — room rate, restaurant, spa, minibar — are posted to a folio. To settle those charges, you post a payment against the folio using one of the methods below. Folio-related endpoints can be also found here.
All folio payment requests are asynchronous. After calling any of the endpoints on this page:
- Use the
Locationheader in the response to poll for the payment status. - While a payment is pending, it reduces the number of allowed concurrent payments on the folio.
- Payments time out automatically after 60 minutes if not completed.
Choose your payment method
| Method | Endpoint | When to use |
|---|---|---|
| By authorization | POST /finance/v1/folios/{folioId}/payments/by-authorization |
Capture from a PSP pre-authorization or an Apaleo authorization hold and post it to the folio. |
| By payment account | POST /finance/v1/folios/{folioId}/payments/by-payment-account |
Charge the card stored on the reservation directly. |
| By link | POST /finance/v1/folios/{folioId}/payments/by-link |
Send the guest a hosted payment page to settle their balance remotely. |
| By terminal (direct) | POST /finance/v1/folios/{folioId}/payments/by-terminal |
Collect payment from the guest in person and post it directly to the folio in one step. |
| By terminal (pre-auth + capture) | POST /payment/v1/payment-transactions/by-terminal then POST /finance/v1/folios/{folioId}/payments/by-authorization |
Pre-authorise on a terminal before a folio exists, then capture against the folio when charges are finalised. |
By authorization
Use this to capture funds from either:
- A PSP pre-authorization made directly with Adyen — pass the
pspReferenceastransactionReferencewithreferenceType: PspReference - An Apaleo authorization hold — pass the authorization ID as
transactionReferencewithreferenceType: AuthorizationId— see Authorization holds
The flow type on the original Adyen payment must have been set to CaptureOnly.
POST /finance/v1/folios/{folioId}/payments/by-authorization
{
"transactionReference": "564578124534890J",
"referenceType": "PspReference",
"amount": {
"amount": 330,
"currency": "EUR"
},
"paidCharges": [
{
"chargeId": "BLIPKWXP-1-1-1",
"amount": 330
}
]
}
paidChargesis optional for standard card payments but required to enable open invoice payment methods.
Split a pre-authorization across multiple folios
A single pre-authorization can be captured in separate amounts and posted to the same or different folios. Call by-authorization once per capture, referencing the same transactionReference each time with the appropriate amount for each folio. This is useful for group bookings or split billing scenarios.
By payment account
Charge the card stored as a payment account on the reservation. The payment account must already exist on the reservation — see Payment accounts.
POST /finance/v1/folios/{folioId}/payments/by-payment-account
{
"paymentAccountId": "UBMFXUFH",
"amount": {
"amount": 230,
"currency": "EUR"
},
"paidCharges": [
{
"chargeId": "BLIPKWXP-1-1-1",
"amount": 200
}
]
}
By link
Generate a hosted Adyen payment page and send the URL to the guest to settle their balance remotely. The payment is committed to the folio automatically once the guest completes payment.
For some open invoice payment methods, the folio’s full billing address must be set before creating the link.
POST /finance/v1/folios/{folioId}/payments/by-link
{
"expiresAt": "2021-09-10T07:13:26.1389028Z",
"countryCode": "DE",
"description": "Prepayment for your upcoming stay",
"payerEmail": "guest@example.com",
"amount": {
"amount": 150,
"currency": "EUR"
},
"paidCharges": [
{
"chargeId": "BLIPKWXP-1-1-1",
"amount": 150
}
]
}
paidChargesis optional for standard card payments. Include it if you want to support open invoice payment methods.
The payment page appearance — brand name, logo, colours — is configured by the hotel in their Apaleo Pay settings, not by your application.
By terminal
There are two terminal payment flows depending on whether a folio already exists when the guest pays.
Direct terminal payment (folio exists)
Use this when the guest is physically present and the folio already has charges on it. The payment is collected on the terminal and posted directly to the folio in one step. No separate pre-authorization is needed.
POST /finance/v1/folios/{folioId}/payments/by-terminal
{
"terminalId": "V400m-324689704",
"amount": {
"amount": 230,
"currency": "EUR"
},
"paidCharges": [
{
"chargeId": "BLIPKWXP-1-1-1",
"amount": 230
}
]
}
The terminalId is the model name and serial number of the terminal, for example V400m-324689704 or P400Plus-27545332.
Terminal pre-authorization + capture (folio does not exist yet)
Use this when you need to block funds on the terminal before the folio or charges exist — for example, at a walk-in kiosk where the reservation is being created on the spot, or at check-in when you want to hold funds for potential extras before any charges are posted.
Step 1 — Pre-authorize on the terminal
Call the Payment API to initiate the pre-authorization on the terminal:
POST https://payment.apaleo.com/payment/v1/payment-transactions/by-terminal?flow=AutoExpire
{
"propertyId": "MUC",
"terminalId": "P400Plus-27545332",
"amount": {
"currency": "EUR",
"value": 680
},
"merchantReference": "864c3b9e-4820-407b-a31e-6713f5effcb3"
}
flow=AutoExpiremeans the pre-authorization has a limited validity period (minimum 2 hours) and will expire and cancel automatically if not captured. This prevents funds from being blocked indefinitely.
Step 2 — Capture against the folio
Once the folio exists and charges are known, capture the pre-authorized amount using by-authorization:
POST /finance/v1/folios/{folioId}/payments/by-authorization
{
"transactionReference": "564578124534890J",
"referenceType": "PspReference",
"amount": {
"amount": 330,
"currency": "EUR"
},
"paidCharges": [
{
"chargeId": "BLIPKWXP-1-1-1",
"amount": 330
}
]
}
The same pre-authorization can be split across multiple folios by calling by-authorization multiple times with the same transactionReference.