Connect PayPal, Polar or Paddle
Not every customer wants to type a card number, and not every business wants to file sales tax in every country it sells to. PayPal covers the first problem. Polar and Paddle cover the second: they act as the merchant of record and handle tax for you. Core Bookings can take booking payments through any of the three, next to Stripe and FluentCart.
Turn It On
- Go to Bookings → Settings → Modules. Under Payments and pricing, tick PayPal, Polar, Paddle and Dodo Payments and click Save modules.
- Open Bookings → Settings → Payment gateways. There’s one tab per gateway.
- On a tab, choose Live or Sandbox (test payments) under Environment, fill in the credentials and save. Then register the Webhook address shown on the tab with the provider, selecting the listed events. For PayPal and Paddle, Create the webhook for me under the form does this for you and saves the webhook ID or secret.
- Tick Offer PayPal as a payment method for services (or Polar, or Paddle) and click the tab’s save button.
- Open a paid service in Bookings → Services and set Payment method to PayPal checkout, Polar checkout or Paddle checkout.
A gateway only switches on when its credentials and webhook secret are saved and it can charge in your booking currency. The notice at the top of each tab tells you which of those is missing. Secrets are stored encrypted, and a blank secret field keeps the saved value.
Check connection asks the provider who the saved credentials belong to, such as your Polar organization, without taking a payment. The Webhook address row shows when the last webhook from that gateway reached your site. Webhooks need a public HTTPS address, so one-click webhook setup is switched off on a local or non-HTTPS site.
What Each Gateway Needs
| Gateway | Credentials | Where to get them |
|---|---|---|
| PayPal | Client ID, Secret, Webhook ID | PayPal Developer Dashboard → Apps & Credentials. Create a REST app for live or sandbox, add a webhook with the address from the tab, then copy the webhook ID. |
| Polar | Organization access token, Webhook secret | Create a token with products, checkouts and refunds (read and write) and orders (read). Add a webhook endpoint in Polar’s Settings → Webhooks using the Raw format. |
| Paddle | API key, Client-side token, Webhook secret key | Developer tools → Authentication. The API key needs transactions and adjustments (read and write). Add notification settings (read and write) to let Core Bookings create the notification destination, or add one yourself with the address from the tab. |
Paddle needs two more steps: approve your site’s domain under Checkout → Website approval, and set it as the default payment link. Paddle keys and tokens belong to one environment, so a sandbox key is refused if you chose Live. For Polar, set the organization’s default currency to your booking currency.
Currencies and Tax
Each gateway accepts only some currencies. If your booking currency isn’t on its list, the tab says so and the gateway stays off.
- PayPal: AUD, BRL, CAD, CHF, CZK, DKK, EUR, GBP, HKD, ILS, MXN, MYR, NOK, NZD, PHP, PLN, SEK, SGD, THB, USD.
- Polar: AED, AUD, BRL, CAD, CHF, CZK, DKK, EUR, GBP, HKD, ILS, INR, MXN, MYR, NOK, NZD, PHP, PLN, SAR, SEK, SGD, THB, USD, ZAR.
- Paddle: AUD, BRL, CAD, CHF, CZK, DKK, EUR, GBP, HKD, ILS, INR, MXN, NOK, NZD, PLN, SEK, SGD, THB, USD, ZAR.
PayPal services use your own tax rates. Polar and Paddle charge tax themselves, so your Core Bookings tax rates don’t apply to their services. Their tabs have a Sales tax setting: Included in the service price (so the customer pays exactly what the booking form showed), added by the provider at checkout, or left to the provider (Polar decides by customer location, Paddle uses your account default). Paddle also has a Tax category. Anything other than Standard must be approved on your Paddle account first, or checkouts fail.
How a Payment Works
- The customer books and the time is held for about 32 minutes, for the deposit or the full amount.
- Continue to payment opens PayPal’s or Polar’s checkout page. Paddle’s checkout overlay opens over the booking page itself, and if Paddle’s script can’t load, the customer goes to a page of your site that opens it. Clicking it again reuses the same checkout.
- After paying, the customer comes back to their booking page.
- The provider’s webhook confirms the payment. The booking confirms only when the amount and currency match and the time is still free. Otherwise it goes to payment review.
PayPal only captures an approved payment while the hold is still open, so an expired hold is never charged. An open Paddle checkout is cancelled when its hold runs out. Refund from the appointment the same way you would for Stripe. Paddle may review a refund before approving it, and the booking shows refund pending until it does.
Limits
- Deposits work, but there’s no Pay remaining balance button. Collect the rest of a deposit booking offline. Online balances are only for Stripe and FluentCart bookings.
- Session packs, gift card sales, memberships and saved cards keep using Stripe or FluentCart.
- Each booking gets its own checkout. There are no saved payment methods or subscriptions through these gateways.
- Turning a gateway off stops new bookings on its services, but payments and refunds it already started still settle.
- Test each gateway in its sandbox before you take live payments. Saving credentials or checking the connection doesn’t run a payment.
- Dodo Payments sits on the same screen. See Connect Dodo Payments.