Skip to main content
Was this helpful?

Paid Bookings

Paid bookings let an organisation charge for a service before PrimeCal confirms the reservation. The pricing rules live on the resource type, while the ability to actually collect payment depends on the organisation billing state.

Time to complete: 10-15 minutes
Difficulty: Intermediate

Overview

PrimeCal separates pricing from payment execution:

  • Resource type decides whether pricing is visible and whether payment is required.
  • Organisation billing decides whether Stripe Checkout can run at all.
  • Reservation status decides whether the booking is already confirmed or still waiting for payment.

This keeps payment logic tenant-safe and prevents clients from inventing their own amount or currency.

Before You Enable Paid Services

Confirm all of the following:

  1. The correct organisation is active.
  2. Stripe is connected and usable on the Billing screen.
  3. The organisation default currency is correct.
  4. The resource type has real pricing data:
    • pricingEnabled
    • priceAmount
    • priceCurrency
    • paymentRequired

Enable A Paid Booking Type

  1. Open the reservations workspace for the active organisation.
  2. Go to the Resource types tab.
  3. Create or edit the target resource type.
  4. Turn on Pricing enabled.
  5. Enter the amount in minor units:
    • 2500 means 25.00
    • 9900 means 99.00
  6. Confirm the currency.
  7. Turn on Require payment before confirmation if the reservation must wait for Stripe success.
  8. Save the resource type.

When Stripe is connected, the form shows a positive readiness message. When Stripe is unavailable, the form warns the admin before they rely on payment-required confirmation.

What Happens At Booking Time

Free or optional-payment service

  • PrimeCal creates the reservation immediately.
  • The reservation can move straight to confirmed.
  • No Stripe Checkout step is required.

Payment-required service with Stripe available

  1. PrimeCal checks the resource type pricing.
  2. PrimeCal derives the quote server-side from:
    • resource type price
    • resource count or quantity
    • selected currency
  3. PrimeCal creates the reservation in pending_payment.
  4. PrimeCal creates a Stripe Checkout session on the organisation connected account.
  5. The customer sees a payment step in PrimeCal, then continues to Stripe.
  6. Stripe redirects the customer back to PrimeCal.
  7. PrimeCal waits for the Stripe webhook to mark the reservation confirmed.

Payment-required service without Stripe available

  • PrimeCal should not offer a working payment-required booking flow.
  • The public booking page shows a clear warning and disables checkout-driven confirmation.
  • The backend still refuses the flow so the client cannot bypass the billing requirement.

Customer Experience

The public booking flow for payment-required services is:

  1. choose service and resource
  2. choose slot
  3. enter details
  4. review the payment step
  5. continue to Stripe Checkout
  6. return to PrimeCal
  7. see booking confirmation after payment succeeds

If the customer closes Checkout or payment fails, PrimeCal can keep the reservation in a retryable pending_payment state instead of pretending it was confirmed.

Security and Compliance

  • Price and currency come from the server, never from browser-calculated values alone.
  • PrimeCal stores quote snapshots and Stripe identifiers, not raw card data.
  • Payment-required confirmation depends on webhook truth, not the browser redirect alone.
  • Organisation billing state is isolated per organisation, so one tenant cannot charge through another tenant's Stripe account.

Troubleshooting

The booking type is marked paid, but the booking page says payment is unavailable

Review the organisation billing status first. A payment-required resource type cannot complete the flow when the Stripe account is disconnected, restricted, or still missing onboarding details.

The customer paid, but the booking still says pending payment

Check the Stripe webhook path and logs. PrimeCal confirms paid bookings from webhook events, so delayed webhook delivery can delay the final reservation state.

The price on the public page is wrong

Update the resource type. Public booking price labels and stored quote values come from the resource-type pricing fields, not from per-customer overrides.

Screenshot Targets

StateFilePurpose
Paid resource type editordocs/assets/user-guide/enterprise-reservation-system/admin-resource-type-pricing.pngShow pricing enabled, amount, currency, and payment-required controls together.
Public payment stepdocs/assets/user-guide/enterprise-reservation-system/customer-payment-pending-step.pngShow the booking summary and continue-to-payment action before Stripe opens.
Checkout redirectdocs/assets/user-guide/enterprise-reservation-system/customer-stripe-checkout-redirect.pngShow the handoff from PrimeCal to Stripe Checkout.