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/payments
payments:readPRO plan

Query parameters

NameTypeRequiredDescription
businessIduuidRequiredYour business id.
curl "https://api.salonify.eu/api/v1/payments?businessId=b_8f3a" \
  -H "X-API-Key: sk_live_..."
[
  {
    "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/all
payments: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

NameTypeRequiredDescription
businessIduuidRequiredYour business id.
fromstringOptionalISO date (inclusive).
tostringOptionalCalendar day YYYY-MM-DD (exclusive end of day).
sourceenumOptionalALL, ONLINE_BOOKING, POS_TERMINAL, GIFTCARD, WORK, MARKETPLACE_SHOP.
pageintegerOptionalPage number. Defaults to 1.
limitintegerOptionalRows per page (max 200). Defaults to 50.
curl "https://api.salonify.eu/api/v1/payments/v2/all?businessId=b_8f3a&source=ONLINE_BOOKING" \
  -H "X-API-Key: sk_live_..."
{
  "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-summary
payments:readPRO plan

Query parameters

NameTypeRequiredDescription
businessIduuidRequiredYour business id.
fromstringOptionalISO date.
tostringOptionalCalendar day YYYY-MM-DD.
curl "https://api.salonify.eu/api/v1/payments/v2/fees-summary?businessId=b_8f3a" \
  -H "X-API-Key: sk_live_..."
{
  "sources": [
    { "key": "ONLINE_BOOKING", "label": "Online bookings", "ratePercent": 3, "count": 88, "gross": 3960, "transactionCost": 118.8, "net": 3841.2 }
  ]
}

List refunds

GET/payments/refunds
payments:readPRO plan

Query parameters

NameTypeRequiredDescription
businessIduuidRequiredYour business id.
statusenumOptionalFilter by PENDING, COMPLETED, DECLINED, or FAILED.
curl "https://api.salonify.eu/api/v1/payments/refunds?businessId=b_8f3a&status=PENDING" \
  -H "X-API-Key: sk_live_..."
[
  {
    "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}/trace
payments:readPRO plan

Path parameters

NameTypeRequiredDescription
bookingIduuidRequiredThe booking id.

Query parameters

NameTypeRequiredDescription
businessIduuidRequiredYour business id.
curl "https://api.salonify.eu/api/v1/payments/bookings/bk_3f9c2a/trace?businessId=b_8f3a" \
  -H "X-API-Key: sk_live_..."
{
  "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}/process
  • POST /payments/refunds/{id}/decline
Read endpoints for memberships (/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}/invoices
invoices:readPRO plan

Query parameters

NameTypeRequiredDescription
statusenumOptionalpaid, open, void, or uncollectible.
dateFromstringOptionalISO date lower bound.
dateTostringOptionalISO date upper bound.
pageintegerOptionalPage number. Defaults to 1.
limitintegerOptionalItems per page (1-100). Defaults to 20.
curl "https://api.salonify.eu/api/v1/businesses/b_8f3a/invoices?status=paid" \
  -H "X-API-Key: sk_live_..."
{
  "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.