Skip to content

Integrations

This section contains technical setup guides for each integration, including configuration details, sync settings, and troubleshooting.

Looking for guided setup? See the Onboarding Flows for step-by-step Emily-guided setup.


POS/In-House Channel Integrations

IntegrationScopePayment ProviderOnboarding Guide
SquareMerchant-scopedSquare Payments (included)Square Onboarding
MplusKassaMerchant-scopedRequires Stripe/Viva WalletMplusKassa Onboarding
Lightspeed K-SeriesMerchant-scopedRequires Stripe/Viva WalletLightspeed Onboarding
HendrickxLocation-specificRequires Stripe/Viva WalletHendrickx Onboarding
ShopcaisseLocation-specificRequires Stripe/Viva WalletShopcaisse Onboarding
VanhoutteLocation-specificRequires Stripe/Viva WalletVanhoutte Onboarding
KassanetLocation-specificRequires Stripe/Viva Wallet

Delivery Platform Integrations

IntegrationTypePaymentSetup Complexity
DeliverooDeliveryHandled by DeliverooLow
Uber EatsDeliveryHandled by Uber EatsLow

E-Commerce Integrations

IntegrationTypePaymentSetup Complexity
ShopifyE-commerceHandled by ShopifyMedium

Hardware Integrations

There is no third-party hardware integration. Network receipt printers are managed as printer devices under Device Management: the device is born activated with its own device token and polls Upvendo over Epson Server Direct Print (POST /api/print/epson/sdp). The URL + token is revealed only through the permission-gated pairing-session flow, and no back-office or POS screen consumes it yet, so there is no screen an operator can copy it from — see Printers.


Integration Scopes

Merchant-Scoped Integrations

  • Connects entire merchant account at once
  • Locations are imported automatically from the POS system
  • After import, complete missing location fields (address, coordinates, etc.)
  • Examples: Square, MplusKassa, Lightspeed K-Series

Location-Specific Integrations

  • Each location must be connected separately
  • Locations must be created manually before connecting
  • Select location from topbar before connecting integration
  • Examples: Hendrickx, Shopcaisse, Vanhoutte

Delivery Platform Integrations

  • Receives orders from delivery platform
  • Payment handled by the platform
  • No payment profile required
  • Examples: Deliveroo, Uber Eats

Prerequisites

Before setting up any POS integration, complete these in order:

TaskRouteRequired For
Payment Profile/settings/paymentsAll except Square
Billing Profile/settings/billingAll integrations
Branding Profile/settings/brandAll integrations

Note: Square handles its own payment processing, so Payment Profile is skipped.


Quick Reference

Which payment provider do I need?

IntegrationPayment ProviderNotes
SquareSquare Payments (included)No separate setup needed
MplusKassaStripe or Viva WalletStripe recommended for iDEAL
Lightspeed K-SeriesStripe or Viva WalletOAuth connection required
HendrickxStripe or Viva Wallet
VanhoutteStripe or Viva WalletOne of the three in-house channels, alongside Hendrickx and Shopcaisse
ShopcaisseStripe or Viva Wallet
DeliverooNoneHandled by Deliveroo
Uber EatsNoneHandled by Uber Eats
ShopifyNoneHandled by Shopify
KassanetStripe or Viva WalletUnderlying protocol for Hendrickx/Vanhoutte

Where do I connect each integration?

IntegrationRoute
Square/square
MplusKassa/mpluskassa
Lightspeed K-Series/lightspeed
Hendrickx/hendrickx
Vanhoutte/vanhoutte
Shopcaisse/shopcaisse
Deliveroo/deliveroo
Uber Eats/uber-eats
Shopify/shopify

The back-office uses file-based routing from src/pages/**, so each integration is a top-level route named after the provider. /in-house/settings is the In-House ordering settings page (tips, table sections, menus, order capacity) — it is not the connect page for any POS provider. There is no /pickup-and-delivery route anywhere in the app.

Deliveroo, Uber Eats and Shopify tiles appear in the Add Channel dialog when the backend's online-channels response marks them applicable (GET /api/back-office/online-channels/{locationId}OrderingChannelService::onlineChannels()). There is no build-environment gate. uber_eats and shopify are always applicable; deliveroo is dropped for US merchants and when services.deliveroo.enabled is false. A tile that is applicable but not yet usable renders disabled with a reasonpos_integration_required when the merchant has no active POS integration, location_required when no location is selected — and a channel already connected for that location is filtered out of the list entirely.