Setting Up Stripe Payments

Connect your salon to Stripe so you can accept card payments, track transactions, and process refunds.

Overview

Stripe is the payment processor that powers card payments in Salon Assistant. Once connected, your salon can accept payments at checkout, receive real-time payment confirmations, handle failed transactions gracefully, and issue refunds. This guide walks you through connecting your Stripe account, enabling payment processing, and understanding how payments flow through the system.

Prerequisites

1

Connect Your Stripe Account

Navigate to Settings in the left sidebar, then click the Payments tab. Click the Connect with Stripe button.

What you'll see: The system redirects you to Stripe's secure onboarding page. Stripe asks you to log in or create an account. You will enter your business details, bank account information, and verify your identity. This is a one-time setup.

Connect with Stripe button on the Settings page
The Payments settings page with the "Connect with Stripe" button

After completing the Stripe onboarding, you are redirected back to Salon Assistant. A success message confirms your account is connected.

CapabilityMeaning
Charges EnabledYour salon can accept card payments
Payouts EnabledStripe can deposit funds into your bank account
Important: Both capabilities must show a green checkmark before you can process payments. If either is pending, check your email for verification instructions from Stripe.
2

Enable Payment Processing

Once connected, payments are enabled automatically. When a client checks out, the system uses your connected Stripe account to process the charge.

Go to Settings > Payments to verify your connection status. Confirm that both "Charges Enabled" and "Payouts Enabled" show as active.

What you'll see: The account status page displays your Stripe account ID, connection status, and the date of last sync. A "Disconnect" button is available if you ever need to remove the connection.

3

Understanding Payment Notifications

When a client completes a payment, the system updates automatically. You do not need to take any manual action.

EventWhat Happens in Salon Assistant
Client completes checkoutPayment status changes to Completed
Checkout session expiresPayment status changes to Cancelled
Payment is confirmedPayment record is updated with a confirmation ID
Tip is includedTip amount is recorded and marked as distributed
Payment status badges on the Payments page
Payment records showing color-coded status badges: green for completed, yellow for pending, red for failed

What you'll see: On the Payments page, each transaction shows a color-coded status badge. Green means completed. Yellow means pending. Red means failed or cancelled.

4

Handling Failed Payments

Sometimes a payment does not go through. Common reasons include insufficient funds, an expired card, or a declined transaction.

What you'll see: The payment status changes to Failed. An error message describes why the payment did not succeed.

What to do:

  1. Navigate to Payments in the sidebar.
  2. Find the failed transaction (it will have a red "Failed" badge).
  3. Review the error reason shown in the payment details.
  4. Ask the client to try a different payment method.
  5. Create a new payment for the appointment.
Failure ReasonWhat It Means
Card declinedThe issuing bank rejected the charge
Insufficient fundsThe card does not have enough balance
Expired cardThe card's expiration date has passed
Incorrect detailsThe card number or CVV was entered wrong
5

Managing Refunds

You can issue full or partial refunds for completed payments. Refunds are processed through Stripe and the status updates automatically.

  1. Navigate to Payments in the sidebar.
  2. Find the completed payment you want to refund.
  3. Click the payment to open its details.
  4. Click Refund and choose Full Refund or Partial Refund.
  5. For partial refunds, enter the amount to refund.
  6. Confirm the refund.
Refund TypeStatus BadgeDetails
Full refund"Refunded" (gray badge)Entire amount returned to client
Partial refund"Partially Refunded" (orange badge)Refunded amount shown alongside original total
Tip: Refunds typically take 5–10 business days to appear on the client's statement. Let them know the timeline when you process the refund.
6

Viewing Payment History

Track all your salon's payments from the Payments page. Use the filters to narrow results by date range, status, or client name. Click any payment to view its full details.

Payment history list with filters
The Payments page showing transaction history with status filters and search

What you'll see: A list of all payments with columns for date, client name, amount, payment method, and status. Each payment links to its associated appointment. You can also view payment summaries on the Dashboard and in Reports > Revenue Report.

Tips & Best Practices

Tip:

Common Issues

IssueSolution
"Charges Enabled" shows as inactiveStripe needs additional verification. Check your email for instructions from Stripe and complete the required steps.
Payment stuck in "Pending" statusThe payment confirmation has not arrived yet. Wait a few minutes. If it persists beyond 30 minutes, check your Stripe Dashboard.
Client says they were charged but status shows "Failed"The charge may have been captured then reversed. Check your Stripe Dashboard for the transaction details.
Cannot find the "Connect with Stripe" buttonYou may not have Admin or Manager permissions. Ask your salon administrator to connect the account.
Refund button is not availableRefunds can only be issued on payments with "Completed" status. Verify the payment was fully processed first.
Stripe redirects to an error page during setupClear your browser cache and try again. Ensure pop-ups are not blocked, as Stripe uses redirects.
Payouts not appearing in your bankStripe typically takes 2–7 business days for the first payout. Subsequent payouts follow your configured schedule.
"Account disconnected" message appearsYour Stripe account was disconnected. Reconnect by clicking "Connect with Stripe" again in Settings.

Related Journeys

For Developers

Stripe Connect Integration

The OAuth flow uses these endpoints:

  • GET /api/stripe/connect — Generates the OAuth URL (Admin/Manager)
  • GET /api/stripe/callback — Handles the OAuth redirect (public)
  • GET /api/stripe/account — Returns account status
  • POST /api/stripe/disconnect — Disconnects the account

Webhook Endpoint

Payment events are received at /api/webhooks/stripe. The route uses express.raw({ type: 'application/json' }) middleware because Stripe signature verification requires the raw request body as a Buffer.

Handled Event Types

Stripe EventAction
checkout.session.completedMarks payment as completed, records tip
checkout.session.expiredMarks payment as cancelled
payment_intent.succeededConfirms payment via PaymentIntent flow
payment_intent.payment_failedMarks payment as failed, stores error
charge.refundedUpdates to refunded or partially_refunded
account.updatedSyncs charges/payouts enabled flags
account.application.deauthorizedMarks salon as disconnected
invoice.payment_succeededResets membership usage cycle
customer.subscription.updatedSyncs membership period dates
customer.subscription.deletedCancels membership subscription

Response Format

The webhook returns { received: true, eventId } with status 200 immediately. Processing happens asynchronously via setImmediate. Verification failure returns 400 with code WEBHOOK_VERIFICATION_FAILED.