Appearance
Hendrickx POS Integration
Overview
The Hendrickx POS integration connects Upvendo to a Hendrickx point-of-sale register so that orders placed through Upvendo channels (Kiosk, Online Ordering, Table QR) are forwarded to the POS for kitchen preparation, and the register's product catalog can be imported into Upvendo.
Hendrickx is an in-house POS in the Kassanet family. It shares the same backend code path as Vanhoutte (AbstractKassanetService), differing only by a provider identifier (hendrickx). For the full technical detail of the protocol, jobs, and order flow, see the Hendrickx Integration Setup and Kassanet Integration docs.
Key Purpose: Import the Hendrickx menu into Upvendo and push paid Upvendo orders to the Hendrickx register.
Purpose
This page lets you connect a single location to a Hendrickx POS register. Once connected, you can import the POS catalog (categories, products, modifiers, display groups, table numbers, stock) and have orders placed through Upvendo channels appear on the register after payment is confirmed.
Key Concepts
- Kassanet Protocol: Hendrickx communicates over the Kassanet protocol (shared with Vanhoutte). Requests are JSON, optionally Blowfish-CBC encrypted, and signed with an HMAC-SHA256 signature over the date and body. (Encryption/signature internals are documented in the integration doc and are not re-verified here.)
- Signature Key: The HMAC-SHA256 signing key used to authenticate every API request to the Hendrickx register. Stored as
signature_key. - Encryption Token: The Blowfish key used to encrypt/decrypt request and response bodies when encryption is enabled. Stored as
encryption_token. - One-Way Menu Import: The integration pulls the catalog from Hendrickx into Upvendo (categories, products, modifiers, display groups, table numbers, stock). Upvendo cannot push menu data back to Hendrickx — items must exist in the POS first.
- Location-Specific & Mutually Exclusive: Each Hendrickx connection is tied to one location. A location can have only one in-house POS at a time — Hendrickx, Vanhoutte, and ShopCaisse are mutually exclusive per location (and conflict with the merchant-scoped in-house POS Square, MplusKassa, and Lightspeed). (Source:
ThirdPartyIntegrationHelper::IN_HOUSE_CHANNELS,checkForInhouseChannel.)
Actions
Connect Hendrickx
Select the target location, open Add Channel and choose Hendrickx, then enter three credentials: Connection URL (base_url), Signature Key (signature_key), and Encryption Token (encryption_token).
Import Menu from POS ("Sync Now")
Trigger a menu import that fetches categories, products, modifiers, and display groups from Hendrickx and creates the corresponding Upvendo menu, syncing table numbers and stock as well. The import runs as a chained background job pipeline.
Configure Auto Sync
Optionally set a daily sync time so the menu re-imports automatically once per day.
Send Orders to POS
After payment is confirmed, every Upvendo order is sent to Hendrickx through the three-stage Kassanet flow (CreateOrder → GetBill → PayBill) so it appears on the register for the kitchen.
Test Connection
Verify the Hendrickx register is reachable. A successful test on a previously disconnected location automatically requeues any orders that failed while the POS was offline.
Delete Integration
Remove the Hendrickx integration from the location, which also deletes the imported categories, display groups, items, modifier groups, modifiers, menus, and inventory tied to Hendrickx at that location.
Location
- Backoffice Route:
/hendrickx - Connect Dialog:
HendrickxChannelDialog.vue(src/components/dialogs/channels/) - Settings View:
src/views/hendrickx/(HendrickxForm.vue,HendrickxStatusTab.vue,HendrickxLogs.vue,HendrickxTables.vue) - Backend Controller:
app/Http/Controllers/Api/BackOffice/KassanetIntegrationController.php(shared Kassanet controller;{provider}=hendrickx) - Backend Service:
app/Services/Common/HendrickxService.php(extendsAbstractKassanetService)
Fields
The Hendrickx connect form has exactly three credential fields. There are no enabled, send_orders, sync_menu, terminal_id, store_id, api_endpoint, or api_key fields — those do not exist in the code.
Connection URL
| Property | Value |
|---|---|
| Field ID | base_url |
| Label | Connection URL |
| Type | URL |
| Required | Yes |
Description: The Hendrickx Kassanet API base URL (provided by Hendrickx).
Signature Key
| Property | Value |
|---|---|
| Field ID | signature_key |
| Label | Signature Key |
| Type | Text |
| Required | Yes |
Description: HMAC-SHA256 signing key used to authenticate API requests.
Encryption Token
| Property | Value |
|---|---|
| Field ID | encryption_token |
| Label | Encryption Token |
| Type | Text |
| Required | Yes |
Description: Blowfish encryption key used to encrypt/decrypt payloads when encryption is enabled (enable_encryption, default true).
Daily Sync Time (optional)
| Property | Value |
|---|---|
| Field ID | sync_time |
| Label | Auto Sync Time |
| Type | Time picker (HH:mm, minutes 00 or 30) |
| Required | No |
Description: Time of day to automatically re-import the menu. The value is a local wall-clock time, stored verbatim in settings.sync_time alongside the resolved IANA zone in settings.sync_timezone — it is not converted to UTC, so the sync keeps firing at the same local time across a DST transition. The form shows the resolved zone as a read-only caption under the field. Leave blank to disable auto-sync.
Business Logic
Order Flow
Order placed in Upvendo channel
|
v
Payment confirmed (Viva Wallet for Kiosk, Stripe for Online Ordering)
|
v
CreateOrder -> items + table number sent to Hendrickx
|
v
GetBill -> bill retrieved for the table
|
v
PayBill -> bill marked paid with the webshop payment typeBusiness Rules
- The Hendrickx menu is one-way: items must exist in the Hendrickx POS first, then are imported into Upvendo. Upvendo cannot create menu items in Hendrickx.
- A location may have only one in-house POS. Hendrickx, Vanhoutte, and ShopCaisse are mutually exclusive per location, and also conflict with the merchant-scoped in-house POS (Square, MplusKassa, Lightspeed). Attempting to add a second one is rejected ("Another in-house channel is already enabled for this merchant").
- Orders are forwarded only after payment is confirmed, and follow the three-stage CreateOrder → GetBill → PayBill flow. There is no order-deletion/cancel call to the POS.
- If the register is offline when an order is placed, the order is flagged for requeue (
need_requeue) and is automatically retried when the POS reconnects (via the periodickassanet:check-and-requeuecommand or a manual Test Connection). - The integration is initialized per location (
initKassanet($locationId)); changing the active location loads that location's credentials and connection context.
FAQs
- What is the difference between Hendrickx and Vanhoutte integrations? Both run on the same Kassanet protocol and share
AbstractKassanetService. They differ only by the provider identifier (hendrickxvsvanhoutte); the setup, fields, and flow are otherwise identical. - Can I import menu items from Hendrickx and still edit them in Upvendo? Yes. Imported items are regular Upvendo items. Re-importing matches existing items by
external_ids.{provider}rather than duplicating them. (Note: while Hendrickx is the connected POS, creating brand-new catalog items in Upvendo may be restricted, since the catalog is managed in the POS.) - Does the integration support real-time two-way sync? No. Menu import is one-way (Hendrickx → Upvendo), triggered manually ("Sync Now") or on a daily schedule. Orders are pushed one-way (Upvendo → Hendrickx) after payment.
- What happens if the POS is offline when an order is placed? The order is flagged for requeue and the failure is logged. It is automatically retried once the POS reconnects; no order is lost.
- Can I use Hendrickx alongside another POS? Not as a second in-house POS — only one in-house POS is allowed per location/merchant. Payment providers (Viva Wallet, Stripe) are separate and work alongside Hendrickx; Kassanet itself does not process payments.
Troubleshooting
Problem: Orders not syncing
Causes:
- Hendrickx register offline (connection status shows "disconnected")
- Credentials (Signature Key / Encryption Token) incorrect
- Network issue between Upvendo and the register
Solutions:
- Power on the register and click Test Connection — failed orders requeue automatically on reconnect
- Re-enter the correct credentials from Hendrickx
- Check connectivity, then review the Hendrickx Logs panel for the specific error
Examples
Basic Connection
json
{
"base_url": "https://kassanet.example.hendrickx.be",
"signature_key": "your-signature-key",
"encryption_token": "your-encryption-token",
"enable_encryption": true,
"sync_time": "05:00"
}Related Documentation
- Hendrickx Integration Setup (technical detail)
- Kassanet Integration (shared protocol/engine)
- Vanhoutte Integration (twin POS)
- Payment Profiles
- Locations