Appearance
Shopcaisse Onboarding (Reseller)
Overview
Streamlined onboarding flow for resellers onboarding merchants with Shopcaisse POS. Location-specific integration. Requires Stripe or Viva Wallet for payments.
Merchant-side Shopcaisse prerequisites the reseller must verify
These must all be satisfied on the merchant's Shopcaisse account before connecting. Verify each with the merchant before starting the Upvendo setup:
| # | Requirement | Cost | Why it matters |
|---|---|---|---|
| 1 | Public API subscription active in Features → Integrations → Connectors & API | €19.99/month + VAT | Required to generate the JWT we'll paste into Upvendo |
| 2 | Order Management Module activated on each POS device | Paid; per-device | Without it the API returns HTTP 401 on order creation — no orders flow at all |
| 3 | Discovery Mode exited (the "Start collecting payments" banner is gone) | Free toggle | Discovery Mode locks the iPad's "Track open orders" view; incoming orders stall in not_acked |
| 4 | iPad POS app installed, logged in, running | Free | Acts as the order-acknowledgement counterpart; without it orders never progress |
| 5 | Menu fully configured in Shopcaisse (items, modifiers, VAT rates, categories) | Free | Upvendo cannot create items in Shopcaisse — menu must originate there |
Once those are confirmed, the merchant goes to Features → Integrations → Connectors & API → Public API → Configure → Your External Applications → + to create the Upvendo application and copy the JWT. (Note: the older "Settings → External Applications" path no longer exists.)
Discovery Flow (JSON - for deterministic parsing)
discovery_questions
[
{
"id": "channels",
"text": "Which channels for this merchant?",
"options": ["Kiosk only", "Online ordering only", "Both"]
},
{
"id": "prerequisites_confirmed",
"text": "Have you confirmed with the merchant that all Shopcaisse-side prerequisites are met (Public API subscribed, Order Management Module per POS, Discovery Mode exited, iPad app running, menu configured)?",
"options": ["Yes, all confirmed", "Not yet"],
"abort_if": "Not yet",
"abort_message": "Walk the merchant through each prerequisite before proceeding. Without Public API the JWT can't be created; without Order Management Module orders fail with HTTP 401; without exiting Discovery Mode orders stall on the iPad. See the prerequisites table at the top of this doc."
},
{
"id": "menu_ready",
"text": "Does the merchant have their menu set up in Shopcaisse?",
"options": ["Yes, menu is in Shopcaisse", "No, not yet"],
"abort_if": "No, not yet",
"abort_message": "The merchant needs to set up their menu in Shopcaisse first. Shopcaisse only supports pulling menu items from the POS - items cannot be created in Upvendo. Please have them create their menu in Shopcaisse, then restart the onboarding."
}
]setup_steps
{
"Kiosk only": [
{"id": "branding_profile", "title": "Set up Store Branding", "route": "/settings/brand"},
{"id": "billing_profile", "title": "Set up Billing Profile", "route": "/settings/billing"},
{"id": "create_location", "title": "Create Location", "route": "/settings/locations"},
{"id": "select_location", "title": "Select Location from Topbar", "action": "topbar_location_select"},
{"id": "connect_pos", "title": "Connect Shopcaisse", "route": "/shopcaisse", "modal_type": "ShopcaisseChannelDialog"},
{"id": "sync_menu", "title": "Sync Menu", "route": "/shopcaisse"},
{"id": "payment_profile", "title": "Set up Payment Profile", "route": "/settings/payments", "required": false},
{"id": "test_integration", "title": "Test Integration", "route": "/orders"}
],
"Online ordering only": [
{"id": "branding_profile", "title": "Set up Store Branding", "route": "/settings/brand"},
{"id": "billing_profile", "title": "Set up Billing Profile", "route": "/settings/billing"},
{"id": "create_location", "title": "Create Location", "route": "/settings/locations"},
{"id": "select_location", "title": "Select Location from Topbar", "action": "topbar_location_select"},
{"id": "connect_pos", "title": "Connect Shopcaisse", "route": "/shopcaisse", "modal_type": "ShopcaisseChannelDialog"},
{"id": "sync_menu", "title": "Sync Menu", "route": "/shopcaisse"},
{"id": "configure_online_ordering", "title": "Configure Online Ordering", "route": "/pickup-and-delivery/online-ordering"},
{"id": "payment_profile", "title": "Set up Payment Profile", "route": "/settings/payments", "required": false},
{"id": "test_online_ordering", "title": "Test Online Ordering", "route": "/pickup-and-delivery/online-ordering"}
],
"Both": [
{"id": "branding_profile", "title": "Set up Store Branding", "route": "/settings/brand"},
{"id": "billing_profile", "title": "Set up Billing Profile", "route": "/settings/billing"},
{"id": "create_location", "title": "Create Location", "route": "/settings/locations"},
{"id": "select_location", "title": "Select Location from Topbar", "action": "topbar_location_select"},
{"id": "connect_pos", "title": "Connect Shopcaisse", "route": "/shopcaisse", "modal_type": "ShopcaisseChannelDialog"},
{"id": "sync_menu", "title": "Sync Menu", "route": "/shopcaisse"},
{"id": "configure_online_ordering", "title": "Configure Online Ordering", "route": "/pickup-and-delivery/online-ordering"},
{"id": "payment_profile", "title": "Set up Payment Profile", "route": "/settings/payments", "required": false},
{"id": "test_kiosk", "title": "Test Kiosk", "route": "/orders"},
{"id": "test_online_ordering", "title": "Test Online Ordering", "route": "/pickup-and-delivery/online-ordering"}
]
}