API Reference
Payments
Read the money flowing through a business: transactions, fees, refunds, memberships, and per-booking payment traces. Payments are strictly read-only via API keys. Issuing refunds, payouts, or any movement of money is never exposed to API-key auth.
Scope and plan
All payment routes require the
payments:read scope and the PRO plan. Refund processing, declining, and manual refund creation are blocked for API keys and return 403 FORBIDDEN_FOR_API_KEY.List payments
GET
/paymentspayments:readPRO plan
Query parameters
curl "https://api.salonify.eu/api/v1/payments?businessId=b_8f3a" \
-H "X-API-Key: sk_live_..."Response
[
{
"id": "bk_3f9c2a",
"bookingNumber": "B-100247",
"date": "2026-07-02",
"startTime": "09:00",
"customerName": "Anna Berg",
"total": 45,
"totalPaid": 45,
"currency": "EUR",
"paymentMethod": "ONLINE",
"paymentStatus": "PAID",
"customer": { "firstName": "Anna", "lastName": "Berg", "email": "[email protected]" },
"refunds": [],
"services": [{ "service": { "id": "sv_77", "name": "Women's Cut" } }]
}
]List all transactions (unified)
GET
/payments/v2/allpayments:readPRO plan
A single feed across every payment source (online bookings, POS terminal, gift cards, Work, marketplace shop) with gross, transaction cost, and net per row.
Query parameters
curl "https://api.salonify.eu/api/v1/payments/v2/all?businessId=b_8f3a&source=ONLINE_BOOKING" \
-H "X-API-Key: sk_live_..."Response
{
"rows": [
{
"id": "b:bk_3f9c2a",
"source": "ONLINE_BOOKING",
"date": "2026-07-02T09:00:00.000Z",
"status": "PAID",
"customerName": "Anna Berg",
"description": "Women's Cut",
"gross": 45,
"transactionCost": 1.35,
"net": 43.65,
"currency": "EUR",
"paymentMethodLabel": "Card (online)",
"payout": null
}
],
"page": 1,
"limit": 50,
"count": 1
}Fees summary
GET
/payments/v2/fees-summarypayments:readPRO plan
Query parameters
curl "https://api.salonify.eu/api/v1/payments/v2/fees-summary?businessId=b_8f3a" \
-H "X-API-Key: sk_live_..."Response
{
"sources": [
{ "key": "ONLINE_BOOKING", "label": "Online bookings", "ratePercent": 3, "count": 88, "gross": 3960, "transactionCost": 118.8, "net": 3841.2 }
]
}List refunds
GET
/payments/refundspayments:readPRO plan
Query parameters
curl "https://api.salonify.eu/api/v1/payments/refunds?businessId=b_8f3a&status=PENDING" \
-H "X-API-Key: sk_live_..."Response
[
{
"id": "rf_22",
"bookingId": "bk_3f9c2a",
"amount": 45,
"currency": "EUR",
"status": "PENDING",
"reason": "MANUAL",
"createdAt": "2026-06-20T11:00:00.000Z",
"booking": { "bookingNumber": "B-100247", "customerName": "Anna Berg", "total": 45 }
}
]Trace a booking's payments
GET
/payments/bookings/{bookingId}/tracepayments:readPRO plan
Path parameters
Query parameters
curl "https://api.salonify.eu/api/v1/payments/bookings/bk_3f9c2a/trace?businessId=b_8f3a" \
-H "X-API-Key: sk_live_..."Response
{
"bookingId": "bk_3f9c2a",
"currency": "EUR",
"summary": {
"totalPaid": 45,
"completedRefunds": 0,
"pendingRefunds": 0,
"remainingRefundable": 45,
"netReceived": 43.65
},
"events": [
{ "type": "ONLINE_PAYMENT", "amount": 45, "direction": "IN", "at": "2026-07-02T09:05:00.000Z", "method": "ONLINE" }
]
}Not available via API key
Refund actions move money and are blocked for API keys:
POST /payments/refunds(create a manual refund)POST /payments/refunds/{id}/processPOST /payments/refunds/{id}/decline
/payments/memberships), pending refund count (/payments/refunds/pending-count) and your fee rates (/payments/my-fees) all use payments:read.Subscription invoices
A business's Salonify subscription invoices live under the accounting resource. They are read-only and require the invoices:read scope.
List invoices
GET
/businesses/{businessId}/invoicesinvoices:readPRO plan
Query parameters
curl "https://api.salonify.eu/api/v1/businesses/b_8f3a/invoices?status=paid" \
-H "X-API-Key: sk_live_..."Response
{
"data": [
{
"id": "in_91",
"subscriptionId": "sub_3",
"stripeInvoiceId": "in_1Q...",
"amount": 49,
"currency": "eur",
"status": "paid",
"periodStart": "2026-06-01T00:00:00.000Z",
"periodEnd": "2026-07-01T00:00:00.000Z",
"paidAt": "2026-06-01T06:12:00.000Z",
"invoicePdf": "https://pay.stripe.com/invoice/.../pdf",
"createdAt": "2026-06-01T06:11:00.000Z"
}
],
"total": 14,
"page": 1,
"limit": 20,
"totalPages": 1
}Invoice summary and download
GET /businesses/{businessId}/invoices/summary returns paid / outstanding totals and counts, GET /businesses/{businessId}/invoices/{id} returns one invoice, and GET /businesses/{businessId}/invoices/{id}/download returns the PDF. All use invoices:read.