Docs Integrations
PayPal payments
Accept PayPal payments on invoices alongside (or instead of) Stripe. When PayPal is enabled, the public invoice pay page shows a Pay $amount button (Pay with PayPal when more than one provider is on); the customer approves on PayPal's hosted page, the payment is captured on return, and it records in SlowBooks with the same journal entries as any online payment (DR Undeposited Funds / CR Accounts Receivable, or the clearing account and fee when Post to a clearing account is on).
See Stripe payments for the Stripe equivalent โ both can be enabled at once. The notes there on who can change these settings, where the pay link works and USD-only invoices apply to PayPal too.
Prerequisites
- A PayPal Business account (paypal.com/business)
- Slowbooks Pro running and accessible
Step 1: Create a REST API app
- Log in to the PayPal Developer Dashboard
- Go to Apps & Credentials
- Start in Sandbox mode (toggle at the top) for initial testing
- Click Create App, name it (e.g. "Slowbooks"), and create it
- Copy the Client ID and Secret for the app
Step 2: Configure Slowbooks
- Open Settings โ Online Payments โ PayPal (an administrator's setting)
- Set PayPal Payments to Enabled
- Set Environment to
Sandbox(switch toLiveafter testing) - Paste the Client ID and Client Secret
- Save
Step 3 (server installs): Add a webhook
Skip this on desktop installs โ webhooks can't reach 127.0.0.1; payments record automatically when the customer returns from PayPal, or via the Check Payment Status button on the invoice. (On a desktop or LAN install the pay link itself only opens on your own network, see the Stripe guide.)
- In the developer dashboard, open your app โ Webhooks โ Add Webhook
- URL:
https://your-server/api/payments/paypal/webhook(PayPal delivers to HTTPS on port 443 only) - Subscribe to the event Payment capture completed (
PAYMENT.CAPTURE.COMPLETED) - Save, then copy the Webhook ID into Slowbooks settings
Step 4: Test in sandbox
- Use the default sandbox personal (buyer) account PayPal made for you under Testing Tools โ Sandbox Accounts, or create one
- In Slowbooks, open an unpaid invoice โ Copy Payment Link โ open it in a private window
- Click Pay with PayPal, log in with the sandbox buyer account, approve
- On return you should see "Payment received โ thank you!"
- Verify in Slowbooks: the invoice is Paid, a payment row exists (method
paypal), and the journal entry posted
Going live
Switch the app credentials to the Live tab in the developer dashboard, paste the live Client ID/Secret into Slowbooks, set Environment to Live, and (server installs) recreate the webhook against the live app.
Notes
- Amounts are charged in USD for the invoice's balance due at checkout time.
- Approval and capture are separate steps at PayPal; Slowbooks captures on the customer's return (idempotently), and the webhook is a second, redundant recording path on server installs.
- Refunds are issued from the PayPal dashboard. In SlowBooks, void the online payment for a full refund (the posting reverses, through the clearing account when that is on) or enter a credit memo for a partial one.