Nayax and Vending Machines: Getting Sales Data Out for Analysis
Back to blog
automation·September 5, 2026·4 min read·By Yehonatan Saadia

Nayax and Vending Machines: Getting Sales Data Out for Analysis

Nayax transaction rows do not come from the management API. They arrive on a separate channel: Amazon SQS in real time, or scheduled SFTP and email files.

Key takeaways

  • Stop looking for an endpoint that returns transactions. In Nayax, transactions are pushed to you rather than pulled by you.
  • Three delivery methods are documented: Amazon SQS, SFTP and email. The first is real time, the other two run hourly or daily.
  • The configuration lives in Nayax Core under Administration, then Operator, in the Transactions Report tab.
  • The format differs by channel: JSON over SQS, XML or CSV with a delimiter of your choice over SFTP and email.
  • Anyone who does not explicitly select the special transaction types - free, cancelled, refunds and declines - ends up with a report that produces wrong sales figures.

Nayax sales data does not come out of the management API. Nayax Core configures a separate transaction reporting channel: Amazon SQS in real time, or a scheduled file over SFTP or email. The management API, Lynx, covers machines, devices, inventory and cards - not the transaction rows themselves.

Three different doors into the same system

Nayax publishes several interface families on its developer portal, and each answers a different question. The common mistake is trying to extract sales data through the wrong door:

  • Lynx is described as the Management API: managing machines, devices, inventory and cards from your own environment. The documented base URLs are https://qa-lynx.nayax.com/operational for QA and https://lynx.nayax.com/operational for production. This is the operations interface, not the reporting one.
  • Transaction reporting is an entirely separate channel, configured in the management interface rather than in code: SQS, SFTP or email.
  • Cortina is the payment side on the device itself - credit card, QR, prepaid card - with documented flows for sale, cancel, refund and decline reasons.

Anyone starting from Lynx because it is the thing labelled API will burn days before discovering the transactions simply are not there.

How do you actually extract transaction rows from Nayax?

Through configuration in the interface, not through a call. The documented path is Administration, then Operator, select the operator, then the Transactions Report tab. That is where you choose the delivery method and what is sent.

Amazon SQSSFTPEmail
CadenceReal time, to a queueScheduledScheduled
FormatJSONXML or CSVXML or CSV
What you configureQueue URL, Access Key, Secret KeyIP or hostname, port, username, passwordRecipient addresses
SuitsStreaming into a warehouse or an event pipelineA daily drop into an ETL jobHuman monitoring only
What breaks itPermissions on the AWS sideA password rotated with nobody toldA mailbox that filled up

The fields sent over SQS are selectable, in the same way you pick columns for a scheduled report. For the scheduled report you also choose the file type, the delimiter - tab, semicolon, comma, space, pipe or a custom one - and whether to include a header row. Delivery frequency is either hourly, choosing the minute, or daily, choosing the time of day.

Two user roles are documented as prerequisites for configuring any of it at all: Transaction Dispatcher and Transactions Report Subscriber. If you can see the tab but cannot save, that is the first thing to check.

Real time or a scheduled file - which do you actually need?

The answer follows from the question you are answering, not from how impressive the architecture sounds.

  • If the question is "how much did we sell this month by machine and by product", a daily file is entirely sufficient and far easier to maintain.
  • If the question is "has a machine stopped selling in the last two hours", you need a real-time stream and alerting logic on top of it.
  • If the question is "did the payment failure this customer reported also hit other customers", you need declined transactions too, and that is a separate selection.
  • If you are building both alerts and reports, take both: SQS for what is urgent, a daily file for the historical truth.

The rule that saves the most work: the scheduled file is the source of truth and the real-time stream is an alerting mechanism. The reverse produces reports that change every time you look at them.

What a vending dataset has to contain

Before anyone opens a chart, make sure these fields exist on every row. Without them no business question can be answered:

  • A machine identifier and the identifier of the device fitted to it, because devices get swapped while the machine stays.
  • The selection or product identifier as it is configured in the machine, not as marketing names it.
  • The transaction time with an explicit timezone. This is the mistake that ruins day-over-day comparisons.
  • The amount, the currency and the payment method.
  • The transaction status, including whether it is a refund, a cancellation, a free vend or a declined attempt.
  • A unique transaction identifier, used to prevent duplicates when a batch is ingested twice.

Nayax lets you explicitly select the special types in the report: Free Transactions, Cancelled Transactions, Refund Transactions and Declined Transactions. That is not a technical question but a business definition: a report that includes declines without flagging them inflates sales, and one that omits them entirely hides a recurring payment fault.

What you can answer once the data is yours

  • Which machines produce most of the revenue, and which barely cover the cost of their location.
  • Which selections sell at each site and which are occupying a tray.
  • What the real buying hours are, per machine rather than as a national average.
  • The share of declined attempts per machine, and whether it spikes on one device.
  • How long passes between a refill and a sale, once you join against replenishment records.
  • Whether a price change moved volume or only revenue.

What goes wrong on ingestion, and how you find out

  • Duplicates. A message queue guarantees delivery, not single delivery. Ingestion that is not idempotent will count sales twice.
  • Timezone. An hourly report on one clock and analysis on another produce a "day" that is not a day.
  • A swapped device. Attributing history by device identifier instead of machine identifier breaks the time series precisely on the day something happened.
  • A file that never arrived. Silence is not success. You need an alert on a missing file, not only on a malformed one.
  • A column change. Someone picks columns in the interface and forgets the schema, so a valid file is ingested incorrectly.
  • Mixing payment reports with machine audit reports. These are two different sources counting different things.

This is a technical description of the reporting channels as documented on the Nayax developer portal in September 2026. Screen and field names change between versions, and should be verified against your own interface.

Related: what a data pipeline is, automating business reports, reconciling card transactions.

Sources

#Nayax#vending machines#sales data#Amazon SQS#integration#אינטגרציה

Frequently asked questions

Does Nayax have an endpoint that returns a list of transactions?

The public documentation describes transaction reporting as a delivery channel - Amazon SQS in real time, or SFTP and email on a schedule - and Lynx as the Management API for machines, devices, inventory and cards. Pulling transactions with an outbound call is not documented there, so plan ingestion from the channel that is pushed to you.

What format does the data arrive in?

It depends on the channel. Over Amazon SQS the messages are JSON, with the fields chosen through column selection. For a scheduled report over SFTP or email you choose XML or CSV, and you also choose a delimiter - tab, semicolon, comma, space, pipe or a custom one - and whether to include a header row.

Why are my sales figures higher than what was actually collected?

Almost always because transaction types were included without being flagged. The report configuration lets you explicitly select Free Transactions, Cancelled Transactions, Refund Transactions and Declined Transactions. If they land in the same amount column as a normal sale, every total is inflated. Split them out into a status field.

What is required to configure this at all?

According to the documentation, two user roles: Transaction Dispatcher and Transactions Report Subscriber. In addition, SQS needs a queue URL, an Access Key and a Secret Key from the AWS side, and SFTP needs an IP or hostname, port, username and password. Without those you can see the screen but cannot finish the setup.

Keep reading

Related service

Integrations

Make the systems you already pay for talk to each other.

Learn more →←

About the author

Yehonatan Saadia

Freelance automation, web & MVP developer

I'm Yehonatan Saadia, a senior developer who builds business automation, custom websites, and MVPs for small and mid-sized companies across the US, Europe, and Israel. These guides come from real client work, not theory.

Work with me

Have a project like this?

Tell me what you're trying to automate or build. I reply within 24 business hours with a few targeted questions, then we walk through it on a free 30-minute call, with no commitment. You come away with a scope, a timeline and a fixed price - or a straight answer that it isn't worth building.