by Intelliverse X

Debug a Nayax reader on a ZHZN vending machine

Field guide · reviewed 10 September 2026. Start at the first step that fails. A reader can be online in Nayax Core while the cabinet cannot start a card sale. Moving a reader does not prove the old machine name caused the failure.

For first installation or a reader transfer, follow New machine and Nayax setup. This guide covers the ZHZN Kiosk-X APK with an MDB bridge. The historical Reyeah activation guide describes a different controller; its MDB profile is not a ZHZN default.

Call the right helpdesk

Nayax card reader support · US / Canada. Contacts checked against Nayax sources on 10 September 2026.

Reader errors · MDB · activation · failed card payments

Nayax technical support

+1 410-666-3800

Choose option 2 for technical support.

us-support@nayax.com

Other Nayax teams

New accounts and settlement questions

Account setup: same number, option 1
onboarding-na@nayax.com

Finance / payouts: same number, option 4
usfinance@nayax.com

North America toll-free mainline:
+1 855-692-7769
Mainline routing; technical-support option verified on the 410 number.

The official US FAQ lists support hours as Monday–Friday 8:30am–8:30pm EST and weekends 9am–5pm. That is Nayax’s published wording; check the current page or phone greeting for local-time and holiday availability. Canada: regional support listing. Toll-free number: Nayax contact directory.

Outside North America, use the regional support directory. For a missing Kiosk-X Card option or a vend-board problem, also contact your assigned Kiosk-X operator/platform team or cabinet supplier using the private site handover contacts. Their phone numbers have not been verified for this public guide.

Check Nayax service status before diagnosing a possible wider outage. A normal service-status page does not establish that this reader is working.

Visual walkthroughs: where to click

Choose the task below. These are simplified walkthrough illustrations using documented menu labels, not live controls or screenshots of your account. Menus can vary with permissions and versions. No button on this guide restarts a machine.

Before any restart: identify the full cabinet ID and physical reader number, wait for payments and dispensing to finish, and avoid interrupting an update. Save the current error and settings first.
1. Restart the Nayax reader in Core
Nayax Core · navigation illustration
1Operations2Machines3Hierarchy / search
Your exact machine selected
4 · Actions ▾
5 · Restart Device
Reboot Device — deeper restart
Reset Default Parameters — not a restart
  1. Open Nayax Core. Sign in and complete your account’s verification.
  2. Choose Operations → Machines. Open the hierarchy/search control, find the operator or machine, then select the exact reader’s machine record.
  3. Verify the physical Device Number against the selected record. A remembered name or the number in the page URL is insufficient.
  4. Open Actions at the upper right and choose Restart Device (shown as Restart in some views). Review and confirm any displayed prompt once.
  5. Open Queue, refresh, and look for a new Device Collect time on the restart entry. Then check fresh reader contact and its actual startup/idle display with the on-site person.
Pass: the reader collected the command and returns to a usable state. Next confirm Card selection and the correct price. A success pop-up alone proves neither completion nor a full cabinet restart.

If Restart completes but the reader stays stuck, Actions → Reboot Device is the deeper reader boot option. Use it only after the normal restart fails or Nayax directs it. Both commands target the Nayax reader. Do not select Load Default or Reset Default Parameters as troubleshooting shortcuts.

Official illustrated instructions: Restart Device and Reboot Device.

2. Check whether an update or restart reached the reader
Illustration · queued is different from collected
Sent to queue time

Command submitted

Device Collect time: blank
Device Collect time

New timestamp present

Device collected the instruction
  1. With the correct machine selected, open Queue. Find the matching command and its send time.
  2. Refresh until the collection field is populated, or record that it remains uncollected. If the reader is offline, repeated restart requests will not restore its network connection.
  3. Use Keep Alive to inspect recent reader contact. Compare new contact with the time of your command; a historical Online badge is insufficient.
  4. For a confirmed profile correction, select only the intended parameter’s checkbox, then Actions → Update Queue. Use Actions → Restart Device during the idle window and verify collection plus the resulting device behavior.

Record the previous value before edits. Avoid Reload configuration or a whole-profile copy unless the approved procedure requires it. If no collect time appears and the physical reader is unreachable, move to the on-site power/network check or call support.

Sources: Queue and machine actions; applying attribute changes.

3. Restart one reader from the MoMa phone app
MoMa · selection illustration
MachinesLong-press targetSelected: 1ActionsRestart Devices
  1. Open MoMa and sign in to the operator account. In Machines, locate the correct reader/machine.
  2. Long-press that row to enter selection mode. It becomes selected automatically. Confirm exactly one target is selected; do not use Select all.
  3. Tap Actions → Restart Devices. Review the selected device and complete any confirmation.
  4. Verify actual reader recovery and, when available, the collected command in Core. The plural menu label does not mean you should restart the fleet.

If these controls are absent, ask the account administrator to check your permissions or use the verified Core route above. This sequence uses MoMa’s documented selection/actions workflow with one selected machine.

Official MoMa selection and available actions.

4. Check and restart the Kiosk-X app through Operator X
Operator X · current source labels; availability depends on role and release
MachinesFull machine IDHealthReboot machine
Reboot [full machine ID]?
Recheck the ID and idle state
Reboot
Cancel
  1. Open Operator X, select Machines and open the exact full machine ID.
  2. In Health, refresh and inspect the timestamp, board state and Nayax checks. Save the evidence before restarting.
  3. If a confirmed hardware mismatch needs correction, inspect Agent hardware → Edit hardware overrides. Change only a verified field, choose Save, and independently read it back. Feature switches such as cardTapStorefront may require the authorized API path in this guide.
  4. Once the cabinet is idle, choose Reboot machine, verify the full ID in the confirmation, then choose Reboot once.
  5. Watch for a new heartbeat, the APK returning, and fresh board/MDB initialization. A sent/acknowledged command is not the recovery result.
Scope matters: on the investigated ZHZN APK without Android device-owner privileges, this command fell back to an app relaunch. Even an Android reboot does not prove the controller and MDB bridge lost power. Use the next walkthrough when a complete cabinet power cycle is required.

If the app does not return, have the on-site person launch the installed ZHZN KioskX app. Keep the existing installation and machine ID; do not clear storage or reinstall as a restart method.

5. Power-cycle the complete vending cabinet on site
Complete cabinet power boundary · conceptual diagram
Android computer
ZHZN KioskX app
Vend controller
Motor / delivery board
MDB bridge
Local communication
Nayax reader
Core restart affects this device
OFFVerify all intended devices are offON
  1. Have an authorized person at the cabinet. Finish or resolve all active payments/vends and check that no update is running.
  2. Identify the manufacturer-labeled cabinet power switch or approved disconnect from that model’s manual. The switch position and required off-time are model-specific; this guide does not guess them.
  3. Follow that procedure to turn the cabinet off. Verify the Android display, reader and relevant controller/bridge indicators lose power as intended. A separately powered reader or tablet may remain on and needs its approved procedure too.
  4. Wait the manufacturer-specified interval and restore power. Do not unplug live MDB connectors or open exposed electrical sections to simulate a restart.
  5. Watch Android, controller, bridge and reader initialize. Confirm the same machine ID, automatic storefront startup, a new heartbeat and fresh board/MDB readiness.
  6. Run the attended Card → price → purchase → physical drop → settlement check below.
Pass: all required components were actually power-cycled and initialized successfully. Record who observed it and when. Switching only the screen off does not satisfy this step.

If you cannot identify the correct switch, a component stays on, or there is heat, burning smell or damaged wiring, stop and have the cabinet supplier or qualified service technician handle the power/harness work.

6. Compare a working reader and check the result
Nayax Core · compare without copying identities
InfoCompare machine’s attributesMachine A / Machine BCompare

Enter the two physical reader device numbers. Compare protocol, start mode, currency and relevant MDB settings against the actual controller/bridge family. Preserve each cabinet’s own identity, actor and limits. An old Reyeah label is a clue to investigate, not a reason to copy its profile onto a ZHZN cabinet.

For recent evidence, use Info → Last sales and Info → Last alerts. Open the appropriate transaction report for final settlement; correlate the reader, amount, currency and time with the Kiosk-X order. A local success message is not independent settlement evidence.

Official compare, recent sales and alerts walkthrough.

The on-site recovery checklist

Check these while standing at the machine. Checks on this page are temporary notes only and are not saved as an acceptance record.

Charged but no product? Stop repeat paid tests, retain the transaction details and follow the vend-failure and reconciliation steps further down.

Prepare the support call

Read this to Nayax technical support

Fill in the brackets privately before calling. These details stay in this page’s memory; the guide does not send them anywhere. Do not include a full card number, CVV, password, service PIN or API key.

Open support email

The email button opens a draft with a subject only. Paste your reviewed notes and attach relevant redacted evidence; nothing is sent automatically.

Ask for these answers before ending the call

  1. Is this exact Device Number active under the intended actor, with the intended settlement destination?
  2. Did the device collect our command, and what are its actual MDB/profile settings?
  3. At which stage does the sale stop: request, approval, vend result or settlement?
  4. What exact change should we make, how do we undo it, and what result should we observe?
  5. What is the case number, next action, responsible team and follow-up time?

For Kiosk-X platform support, use the same notes and lead with the full machine ID, checkout symptom, cardTapStorefront state and fresh app/board/MDB timestamps. For the cabinet supplier, lead with controller/bridge model, port, power-cycle result and physical dispense evidence.

Start here: choose the symptom

What happens Start with Evidence that moves you forward
Buy Now does nothing, or no payment options appear Step 2: checkout and screen events A new checkout opens for a stocked product
Other payment options appear, but Card is absent or disabled Step 3: card enablement and readiness Card is visible and selectable without a force override
Card can be selected, but Nayax never displays the price Step 4: local sale request and MDB Reader displays the selected amount and currency
Reader displays the price but declines or cannot connect Step 5: reader/payment result Exact Nayax transaction result is known
Payment is approved but nothing drops Step 6: vend result Physical delivery and matching board result
Product drops but Kiosk-X and Nayax money records differ Step 7: reconciliation Matching transaction, amount, time and settlement evidence
Trouble began after moving a reader Step 1 and the transfer procedure One real reader maps to exactly one current cabinet across both binding fields

The chain to test is Buy Now → checkout → Card selection → local APK sale request → MDB reader approval → vend controller → delivery result → Nayax settlement. A green badge at one stage does not prove later stages.

Step 1 — Identify both cabinets and save a baseline

  1. Open Operator X and select the affected machine. Record its full machine ID, site name, last heartbeat and installed APK version. Repeat for one working machine with the same actual controller/bridge family.
  2. Read the physical Nayax Device Number and find that exact number in Nayax Core. Record the separate Core Machine ID, machine reference and actor/operator. Keep leading zeros in device numbers.
  3. Compare the physical reader with Kiosk-X's terminalId and deviceSerial. Both should contain that reader's Device Number. The number in a Core page URL is its internal Machine ID, not the terminal number to bind.
  4. Include offline and returned machines in the operator's inventory search. A former machine must not retain the moved reader's real number in either matching field. Follow the transfer steps in the setup guide if it does.
  5. Save the current features, agent configuration, identity, device credential state, reader state and a fresh timestamped screen. Save only relevant diagnostics; exclude API keys, service PINs and cardholder information from tickets.

Pass: you can identify the cabinet, Android installation and reader independently, with no duplicate reader alias. The same site name or last four characters is insufficient. The two cabinets investigated in September shared an ID suffix and ran different installed APK versions despite an assumption that they used the same APK.

Comparison worksheet

Check Affected cabinet Working reference What matters
Full Kiosk-X machine ID Record Record Keep each cabinet's own ID
Physical Nayax Device Number Record Record Must match that cabinet's two binding fields
Actual installed APK version Record Record Verify on device/telemetry, not the download filename
Heartbeat and screenshot time Record Record New evidence during this investigation
cardTapStorefront Record Record True after binding/hardware checks
cardTapForceTile / testMode Record Record False for real acceptance
mdbEnabled Record Record True for this MDB integration
Configured / detected controller Record both Record both Must agree with actual hardware
Vend UART and baud Record Record Correct port for each board
MDB UART / cashless state Record Record Correct bridge; fresh ready/enabled state
Board initialization / fault Record Record Successful initialization, no blocking fault
Nayax protocol / start mode Record Record Compatible with actual controller/bridge
Actor and settlement owner Record Record Correct operator, never copied blindly

Step 2 — Establish whether checkout actually opens

  1. Confirm a stocked, available product has a valid price and currency. Leave service/test mode and any unfinished checkout through the normal UI.
  2. On the physical screen, select the product and press Buy Now once. Note the exact local time and timezone. Record whether the screen stays unchanged, opens an empty payment panel, or shows other payment methods.
  3. Inspect a newly captured screen and the corresponding screen/checkout events. A command marked queued or delivered is not a fresh screen. A stale heartbeat is not proof the app received a recent change.
  4. If no checkout opens at all, investigate the storefront, its network requests, catalog/stock eligibility and any board/checkout refusal. Do not start by changing the Nayax actor or replacing MDB wiring: no reader request may have been made.
  5. If checkout opens but Card is missing, continue to Step 3. If all payment options are missing, retain that distinction in the ticket.

Pass: a new checkout exists for the selected product and amount. Record its order/session identifier if one is created.

Step 3 — Check the two separate card controls

Open this cabinet's settings/diagnostics in Operator X. UI labels vary by release; if a field is not exposed, an authorized platform technician uses the API appendix below. Do not assume the service menu includes every cloud feature switch.

  1. Check agent-config.mdbEnabled=true. This enables hardware integration/discovery.
  2. Separately check features.cardTapStorefront=true. This opts the ZHZN hosted storefront into showing Card. MDB enabled alone does not enable the Card option.
  3. Keep cardTapForceTile=false. A diagnostic override can make a button appear despite failed readiness; that is not a repair.
  4. Check fresh reader readiness, board initialization, any explicit card-visibility refusal and an existing active checkout. An enabled feature cannot overcome every hardware or checkout block.
  5. If only the storefront flag is confirmed wrong, save its before value, change that field, and perform an independent readback. Start a fresh checkout after the app receives the change.

Pass: Card is visible and selectable with a real ready reader and without a force override. htmlStorefront is not the ZHZN card switch; it selects a Reyeah storefront behavior.

Step 4 — Check the app, controller and MDB connection

  1. On supported ZHZN APKs, open the service menu by tapping the top-left corner seven times within five seconds, then enter the authorized cabinet PIN. Use Board codes / 主板代码 for diagnostics or Factory test / 工厂测试 under the approved service procedure. See Android operation. Older versions may expose different screens; use device telemetry when needed.
  2. Inspect fresh board initialization and the detected module, vend UART and baud. Compare them with the saved cloud configuration. A working auto-detected module can conceal an incorrect saved fallback.
  3. Inspect MDB bridge initialization, selected UART, detected cashless address and ready/state. An earlier successful discovery is insufficient if the current app is disconnected.
  4. Select Card and correlate that checkout with the APK's local card-sale request, requested amount and MDB response. If the UI records Card selection but no local request arrives, investigate storefront-to-agent communication. If a request arrives but no reader response follows, investigate the bridge/profile/harness.
  5. For the two observed SH/CSM cabinets, the working links were vend /dev/ttyS4 at 9600 and MDB /dev/ttyS1, with cashless address 16 (0x10). These are evidence for matching hardware, not universal ports to force onto every ZHZN model.
  6. Have a qualified technician inspect/reseat the correct MDB harness and bridge with cabinet power isolated according to the manufacturer's procedure. A powered screen only proves some power is present. Do not hot-swap cables or improvise power adapters.
  7. Correct only a confirmed mismatch. Then perform the complete-cabinet restart in Step 8 and collect new initialization evidence.

Pass: the reader displays the selected price and currency when Card is chosen. If the price is wrong, stop before tapping and compare the catalog amount, sale request, currency and reader scaling/profile.

Nayax screen codes and profiles

Nayax documents V00 as missing MDB signal, V01 as an inactive connection awaiting initialization, and V02 as a reader disabled by the controller. For V02, check door/service state and outstanding credit as well as faults. These distinctions help choose the next check; they do not prove a particular component is defective. Nayax's official code guide.

The observed working ZHZN bridge used MDB Level 3 Always Idle / Product transaction start. The historical Reyeah procedure and generic Nayax flag recipes target other conditions. Before changing an MDB level, Ignore flag or start mode, record the current profile and confirm compatibility with the actual controller/bridge through its manufacturer or Nayax. Apply the intended change through Core, then verify that the device received it; a queued update or unchanged Online badge does not establish application. Nayax MDB attribute reference.

Step 5 — Price appears, but payment fails

  1. Record the reader's exact message/code and the attempted amount/time. Do not infer the meaning of an undocumented numeric transaction status.
  2. In Nayax Core's transaction report, filter the exact reader/machine and the correct time interval. Account for the report timezone. Determine whether there is no attempt, a decline, an authorization or a settlement.
  3. If no transaction exists, check the reader's connectivity and activation, plus whether the card was actually read. Reader cellular connectivity and Android internet connectivity are separate paths.
  4. If there is a decline, use the processor's stated reason and the operator's established support procedure. Repeated paid attempts are not a useful cable test.
  5. If approved, follow the same transaction into the vend result in Step 6. A temporary authorization does not establish final settlement.

Pass: an identified transaction proceeds to an approved vend attempt, or its exact failure has been isolated and corrected before another supervised test.

Step 6 — Payment approved, product missing

  1. Pause further paid tests for the affected selection. Record the order ID, Nayax transaction, amount, aisle and time.
  2. Inspect the vend command, board acknowledgment, motor result, product-fall evidence and physical stock. A motor spin or a generic shipped label does not prove the customer received a product.
  3. Inspect the APK's success/failure report to the reader and the final Nayax transaction result. Resolve the original charge using the established operator/Nayax reversal or refund process after verifying its actual state; do not issue a second action blindly.
  4. Repair the physical dispense, selection mapping or result-reporting fault. Do not increase vend-result timeouts merely to conceal missing completion reports.
  5. Complete an attended delivery and settlement check before reopening that selection.

Pass: the product is physically received, the board reports the appropriate result, inventory changes correctly, and the financial result matches what happened.

Step 7 — Reconcile a successful vend

Compare the same full machine ID/reader, order ID, amount, currency, selection and timestamp with the Nayax transaction report. Preserve the Nayax transaction ID and final settled amount in the private acceptance record.

Evidence What it establishes What it does not establish
Local readerSettlement.captured=true Agent reported reader approval/capture evidence Independent processor settlement
Board success / deliveryConfirmed=true Software received a successful delivery result A person's observation of the product
Nayax settled transaction Processor-side settlement for that transaction Correct Kiosk-X attribution by itself
Kiosk-X transactionId=null / settlement pending Processor reference or reconciliation is incomplete That the sale was necessarily unpaid

If Nayax confirms settlement but Kiosk-X remains pending, investigate webhook delivery, attribution and both reader aliases. Keep the discrepancy explicit. Do not edit old orders to manufacture a match. See Payments and Nayax.

Step 8 — Restart and prove recovery

  1. Wait until the cabinet has no active payment, vend or update. Preserve the before/after settings and relevant order evidence.
  2. Use the manufacturer's normal complete cabinet power procedure so Android, the controller, MDB bridge and reader initialize together. A reader restart, APK relaunch or Android-only restart is not evidence of a complete cabinet power cycle.
  3. Confirm the APK automatically returns with the same full machine ID. Check a new heartbeat, successful board initialization and fresh MDB ready/enabled state.
  4. Select a stocked product, press Buy Now and select Card. Confirm the reader's exact price and currency before presenting a card.
  5. Conduct one supervised purchase. Observe the physical product, verify stock changed once, and match the order with its Nayax settled transaction. Record any pending settlement separately if final settlement is not yet available.
  6. Record the operator/technician, time and each result. Reopen only the functions that passed. If a configuration change worsens behavior, restore that specific recorded value and keep the failed payment path unavailable while diagnosing.

Worked RCA: the September 2026 ZHZN case

The reported symptom was no usable Card option after a reader had been tried on a Reyeah machine and returned to a ZHZN cabinet. The reader and board had working communication evidence. The confirmed immediate blocker was cardTapStorefront=false; enabling it was followed by real Card selection, reader approval and a board-success report. A matching $8 Nayax settlement was independently verified.

Two separate defects were also corrected: a saved controller fallback disagreed with the detected SH controller, and the returned machine retained the moved reader in deviceSerial. That stale alias could confuse settlement attribution because both binding fields are matched. It did not explain the disabled Card option. The APK versions were also different, so “same APK” was not an established fact.

The full cabinet power cycle, the price physically displayed on the reader and a person's observation of the drop were not directly verified in that investigation. This distinction is why the acceptance checklist requires both remote records and on-site observations. Internal asset numbers, transaction identifiers and screenshots stay in the private incident record.

Authorized technician API appendix

Use the live API reference and an authorized operator/platform session. Substitute the full machine ID; never paste another cabinet's ID. Access is role dependent, and raw telemetry requires platform administration. A 401/403 is an access problem, not proof the hardware is offline.

Operation Endpoint Purpose
GET /api/v1/machines/{id}/features Read hosted card and diagnostic feature flags
GET /api/v1/machines/{id}/agent-config Read controller and MDB configuration
GET /api/v1/machines/{id}/telemetry Inspect timestamped device/board/MDB evidence
GET /api/v1/machines/{id}/nayax Read terminal binding
GET /api/v1/machines/{id}/identity Check device association/conflicts
GET /api/v1/machines/{id}/device-credential Check enrollment and authentication state
PUT /api/v1/machines/{id}/features Correct a confirmed feature difference
PUT /api/v1/machines/{id}/agent-config Correct a confirmed hardware profile difference

For the confirmed missing-option fault, the minimal features body was:

{"cardTapStorefront": true}

Read back the value independently. This change is appropriate only after confirming the reader assignment and usable hardware. To disable that option again, send false for the same field. Preserve existing unrelated settings and do not send a wholesale copy of the working machine's configuration.

Escalation packet

Copy this into the private service ticket. Contact the platform team for checkout/configuration, the cabinet/bridge supplier for hardware communication or delivery, and Nayax/the registered actor for reader activation, profiles and processor results.

Date/time/timezone and technician:
Full Kiosk-X machine ID / site:
Cabinet model / board / bridge:
Installed APK version:
Physical Nayax Device Number / Core Machine ID / actor:
Exact shopper symptom and reader message:
Last fresh heartbeat and screen time:
Configured vs detected module / vend port / baud / MDB port:
MDB ready/state/address and board init/fault:
Card flags before → after, with independent readback:
Old/returned records checked for both reader aliases:
Order ID / Nayax transaction ID / amount / currency / result:
Complete cabinet restart observed? When?
Reader price observed? Physical product received? Stock correct?
Changes tried, outcomes, rollback and remaining failed step: