Skip to content

Connect integrations: payments, Shopify and WhatsApp

Connect Razorpay or Stripe for online pay links, plus Mollie, Shopify and WhatsApp, how secret keys are stored, and what each integration does today.

Updated 2026-10-03


Integrations live at Settings → Integrations (/app/settings/integrations).

Who can do this: Owners and Admins. Other roles that have been given "Integrations & messaging" can view the page but not change anything.

Connect an integration

  1. 1Click Connect on a card (or Manage if it's already set up).
  2. 2Switch Enabled on.
  3. 3Fill in the public details, such as Key ID, Publishable key, Profile ID, Shop domain or Phone number ID.
  4. 4Paste the secret keys. Once saved, a secret is never shown again. The field shows "•••• saved — leave blank to keep it".
  5. 5Click Save. The card shows Connected, Setup incomplete if something it needs is missing (for WhatsApp: the phone number ID or access token), or Off if you saved it with Enabled switched off.

Disconnect removes the integration and deletes its stored keys.

What each one does today

  • Razorpay and Stripe: every invoice and every booking deposit gets a pay link. The customer taps it, pays on Razorpay's or Stripe's own page, and the payment is recorded in FurKisses automatically. The money goes straight to your own gateway account. Setup is below.
  • Mollie: you can save your Profile ID and API key. Automatic payment recording is coming soon, so record Mollie payments on invoices by hand for now.
  • Shopify: when a Shopify order is created, the matching products' stock is deducted from the branch you choose in Deduct stock from branch. If you don't choose one, the first branch is used. Products are matched by SKU: give each product the same SKU in Inventory as in Shopify. Lines without a matching SKU are skipped. Copy the full Webhook URL from the card into Shopify (Order creation, JSON) and save Shopify's webhook signing secret on the card. If you don't, the server-wide SHOPIFY_WEBHOOK_SECRET is used. Each order is only counted once.
  • WhatsApp Business: you can save your Phone number ID, WhatsApp Business Account ID, Display phone number and Permanent access token. Once it's on with a phone number ID and access token, your pet-parent alerts are sent from your own number instead of waiting in the Outbox, the "not connected" banner on Messaging goes away and the welcome checklist step ticks off. For now WhatsApp only delivers these within 24 hours of the parent's last message to you. Anything else lands in the Outbox for a one-tap send. See connect WhatsApp and what it costs and WhatsApp templates and reminders.
  • Google Calendar, Outlook Calendar and Apple Calendar are marked Coming soon and can't be connected.

Set up Razorpay or Stripe

Each gateway needs two things: your API keys, so FurKisses can create pay links, and a webhook, so FurKisses hears that a payment went through. Without the webhook, customers can pay but nothing is recorded.

Razorpay

  1. 1Click Connect on the Razorpay card and switch Enabled on.
  2. 2Paste your Key ID and Key secret (Razorpay → Account & Settings → API keys).
  3. 3Copy the Webhook URL shown on the card.
  4. 4In Razorpay, go to Account & Settings → Webhooks → Add new webhook. Paste the URL, type a secret of your own, and tick exactly these two events: payment_link.paid and payment.captured.
  5. 5Paste that secret into Webhook secret on the card. This is the secret you typed when creating the webhook, not your API key secret.
  6. 6Click Save.

Stripe

  1. 1Click Connect on the Stripe card and switch Enabled on.
  2. 2Paste your Secret key (sk_live_…). The Publishable key is optional.
  3. 3Copy the Webhook URL shown on the card.
  4. 4In Stripe, go to Developers → Webhooks → Add endpoint. Paste the URL and select the event checkout.session.completed.
  5. 5Open the endpoint, reveal its signing secret (whsec_…) and paste it into Webhook signing secret on the card.
  6. 6Click Save.

Both gateways have a test mode with separate keys (rzp_test_… and sk_test_…). Try a small invoice in test mode first, then swap in your live keys and create the webhook again in live mode. The step-by-step version, including what the customer sees, is in accept online payments with Razorpay or Stripe.

Once connected:

  • Invoices show a Pay online card with Copy link and Send on WhatsApp. See send a pay link for an invoice.
  • Bookings can ask for a deposit with its own pay link. See take a deposit to confirm bookings.
  • Pet parents see Pay now and Pay deposit buttons on their private link.
  • If both gateways are connected, pay links use Razorpay.

Good to know

  • Refunds are made in your Razorpay or Stripe dashboard. FurKisses doesn't send refunds to the gateway.
  • Each gateway payment is recorded once, even if the gateway sends the same webhook twice. A payment can never take an invoice above its total: anything extra is kept as wallet credit for the customer.
  • If you don't save a webhook secret on the card, the server-wide secret (RAZORPAY_WEBHOOK_SECRET or STRIPE_WEBHOOK_SECRET) is used, if your host has set one.
  • Disconnect on a gateway removes its keys. Existing pay links then tell customers to pay at the counter.
  • Secrets are stored separately on the server and are never sent back to your browser. Storing them requires the server's SUPABASE_SERVICE_ROLE_KEY to be set. If it's missing, you'll see "Secure storage isn't configured on the server".
  • Payments recorded by a webhook show in the audit log.