NexSigns DataStream - POS Integration Comparison

NexSigns DataStream - POS Integration Comparison

Written by AI, not reviewed by a human. Please apply the written-by-ai-not-reviewed label. Capability rows are drawn from each integration's shipped field picker and resolver, so they describe what the code actually offers. Several sources have never been run against a live vendor account — see Verification status before relying on a row for a customer commitment.

This is the single side-by-side view of every POS/ordering data source supported by the NexSigns DataStream subsystem, which feeds live menu data into the Digital Menu Board (Smart Menu) Editor. Each source also has its own page — linked in the last section — for configuration, troubleshooting and gaps.

This page is the one place comparison tables live. The individual POS pages deliberately do not repeat them, so there is no second copy to drift out of date. If you change a capability here, change it only here.

1. What a menu board can actually display

Start here. This is the table to check before promising a customer a design, because it is a property of each vendor's API rather than of our integration.

Source

Images

Descriptions

Sizes / variants

Calories

Allergen / dietary

Availability

Source

Images

Descriptions

Sizes / variants

Calories

Allergen / dietary

Availability

ToastPOS

No

Yes

Yes

Yes

No

Optional

OLO

No

Yes

No

Yes

No

No

GeniusPOS

Yes

Yes

Yes

Yes

No

Yes

SquarePOS

Yes

Yes

Yes

Yes

No

Yes

CloverPOS

No

No

Yes

No

No

Yes

PARPOS

Yes

Yes

Yes (opt-in crawl)

Yes

Yes — allergens

Optional

NCRPOS

Yes

Yes

Yes

Yes

Tags + serving size

Yes

RevelPOS

Yes

Yes

Yes (3 mechanisms)

No

No

Optional

SimphonyPOS

Yes

Yes

Yes (native)

No

Yes — dietary labels

No

LightspeedPOS

Yes

Yes

Yes

No

Yes — allergens + alcohol

Optional

LoyversePOS

Yes

Yes

Yes (native)

No

No

Yes

CloPOS

Yes

Yes

Yes

No

No

Optional

SpotOnPOS

No

No

No

No

No

Yes

Eats365POS

Yes

Yes

Yes

No

No

Optional

"Optional" means the integration can read availability but the switch is off by default, because the vendor exposes a bare stock number rather than an operator-set flag — and a number is meaningless for the many products a site does not inventory-track, where it sits at zero forever. Turning it on there would black out a board.

Only three sources carry anything usable for allergen or dietary signage: PARPOS (a readable allergen list, e.g. "Gluten, Dairy"), LightspeedPOS (allergen codes plus alcohol content, and only with rich content enabled) and SimphonyPOS (Oracle's dietary labels). NCRPOS has free-form tags and a serving size, which an operator may or may not be using for that purpose. Nothing else has a field for it.

The two to be careful about. SpotOnPOS gives a menu item a name, one price and a category and nothing else — a SpotOn board is text and prices. CloverPOS has sizes and availability but no images, descriptions or calories. Both are properties of the vendor API, not gaps in our work.

2. Data fields offered in the Smart Menu Editor

Exactly what appears in the field picker for each source. Anything not listed resolves to a blank rather than an error token, so a design carried from one POS to another degrades quietly.

Source

Fields

Source

Fields

ToastPOS

name, description, price, plu, sku, unitOfMeasure, calories, inventoryStatus

OLO

name, description, shortdescription, cost, basecalories, maxcalories

GeniusPOS

name, caption, description, item_description_short, unit_price, product_id, calories, image, inventoryStatus

SquarePOS

name, variation_name, description, price, calories, image, id, inventoryStatus

CloverPOS

name, variation_name, price, alternate_name, sku, code, unit_name, stock_quantity, id, inventoryStatus

PARPOS

name, variation_name, description, price, calories, calories_from, calories_to, allergens, image, thumbnail, external_id, id, inventoryStatus

NCRPOS

name, variation_name, description, price, calories, calories_from, calories_to, serving_size, tags, availability, image, thumbnail, pos_name, reference_id, product_id, external_id, id, inventoryStatus

RevelPOS

name, variation_name, description, price, availability, stock_amount, image, thumbnail, sku, barcode, uom, course_number, point_value, currency, currency_symbol, business_name, id, inventoryStatus

SimphonyPOS

name, variation_name, price, description, image, thumbnail, alt_text, object_num, dietary_labels, prep_time, menu_level, def_sequence_num, currency, id, inventoryStatus

LightspeedPOS

name, variation_name, price, extra_price, description, image, thumbnail, raw_image, sku, allergens, contains_alcohol, alcohol_percentage, stock_count, menu_name, currency, id, inventoryStatus

LoyversePOS

name, variation_name, price, description, image, thumbnail, sku, barcode, reference_id, option_names, cost, in_stock, store_name, business_name, currency, id, inventoryStatus

CloPOS

name, variation_name, price, description, image, thumbnail, barcode, cost_price, cooking_time, product_type, venue_name, currency, id, inventoryStatus

SpotOnPOS

name, price, plu, location_name, currency, id, inventoryStatus

Eats365POS

name, variation_name, price, price_dine_in, price_takeout, description, image, code, external_id, remaining_quantity, restaurant_code, currency, id, inventoryStatus

inventoryStatus shares a "1" available / "0" out-of-stock contract across every source that has it, so the same menu template works anywhere. OLO is the only source with no availability field at all.

3. Price units — the most dangerous axis

Getting this wrong renders every price a hundredth (or a hundred times) its real value, and nothing on screen shows it happened. Never copy a price path between sources without checking this table.

Units

Sources

Handling

Units

Sources

Handling

Integer minor units (÷ 100)

SquarePOS, CloverPOS, PARPOS

Square and Clover carry a zero-decimal ISO currency table (JPY, KRW, VND …) and skip the division for those. PARPOS does not — PAR sends ×100 for every currency including JPY, so a zero-decimal table there would be wrong.

Decimal major units (no division)

ToastPOS, OLO, GeniusPOS, NCRPOS, RevelPOS, SimphonyPOS, LightspeedPOS, LoyversePOS, CloPOS, Eats365POS

8.49 means eight dollars forty-nine. Formatted N2 invariant, except where noted below.

Decimal string

SpotOnPOS

"1.4" means $1.40. Parsed once at sync time into a real number, then treated as major units.

Three sources do not hard-code two decimals:

  • LoyversePOS reads the merchant's own currency.decimal_places — the only source of the fourteen that reports its own precision, so it needs no ISO table at all.

  • SimphonyPOS and Eats365POS take a PriceDecimalPlaces setting, because neither names a currency anywhere on its menu resources. A JPY restaurant sets 0.

4. How each vendor expresses "size"

Upcharge versus full price is the single most consequential difference in this table. Confusing them silently doubles or halves every sized item.

Source

Mechanism

Price of a size

Source

Mechanism

Price of a size

ToastPOS

SIZE_PRICE pricing strategy, dereferenced through a modifier group

the modifier's own price

OLO

none projected

n/a

GeniusPOS

options[] on the item — a sized item has no top-level price at all

the option's own price

SquarePOS

native item variations

its own price

CloverPOS

an item GROUP holding N separate items, folded into one logical item — the inverse of Square

the member item's own price

PARPOS

product groups, via an opt-in resumable crawl (the only way to get sizes at all)

its own price

NCRPOS

link groups / linked items, inline in the one menu call

upcharge

RevelPOS

three ways: a required single-select modifier class, a matrix parent product (opt-in crawl), or neither

modifier class = upcharge; matrix child = its own full price

SimphonyPOS

a menu item master owns up to 64 definitions — native, and the only source needing no heuristic

the definition's own price record

LightspeedPOS

required single-select modifier group

upcharge

LoyversePOS

native variants (option1/2/3 values)

its own price

CloPOS

"modifications" — child product rows

its own full price

SpotOnPOS

none exists

n/a

Eats365POS

required single-select modifier

upcharge

The single-select heuristic, and its known trade-off

NCRPOS, RevelPOS, LightspeedPOS and Eats365POS all infer "this modifier group is the size" from required, single-select, two or more choices. That also matches a required choice which is not a size — "choose your bread", "ice level", "temperature". Those fold into the Variation dropdown too.

This is harmless in practice and deliberately accepted: the item's own price flows through to every variation, so the price binding stays correct either way and the design merely gains a usable variation name. SimphonyPOS, SquarePOS, LoyversePOS and CloverPOS need no such inference.

Variation ordering

Order

Sources

Order

Sources

Operator's own order (Small, Medium, Large)

SimphonyPOS (defSequenceNum), LightspeedPOS, Eats365POS, NCRPOS, RevelPOS

Alphabetical — so Large sorts before Small

CloverPOS, LoyversePOS, CloPOS — these vendors expose no ordinal on a variant at all, and stability matters because the change-detection hash runs over the document

Ordering affects the dropdown only, never the price; the customer picks a default explicitly in the design.

5. Credentials and authentication

Source

Whose credentials

Scheme

Token life

Source

Whose credentials

Scheme

Token life

ToastPOS

Kuusoft (company-level)

OAuth client credentials; customer supplies the restaurant GUID

cached on the shared template row

OLO

Customer

Key + client credentials; ExtRef resolved to a RestaurantID at save time

n/a

GeniusPOS

Kuusoft (company-level)

Integrator token; customer supplies CompanyID + SiteID

21 days, shared across all GeniusPOS streams

SquarePOS

Customer

Personal access token (bearer)

permanent

CloverPOS

Customer

Merchant API token (bearer); every store is its own merchant

permanent

PARPOS

Customer

Per-brand Application Key + three mandatory headers; nine environment hosts

permanent

NCRPOS

Customer

BSP access key pair, HMAC-SHA512 signed per request

n/a (per-request signature)

RevelPOS

Customer

Two schemes by AuthMode: merchant key:secret header, or partner OAuth2 bearer + Client-Id

permanent / 24h

SimphonyPOS

Customer

3-step OIDC + PKCE (authorize → signin → token); bearer is the id_token, not the access token

14 days (refresh 28d)

LightspeedPOS

Customer

OAuth2 refresh-token grant, HTTP Basic client auth

25 min; refresh token rotates every use

LoyversePOS

Customer

Personal access token (bearer) — the simplest of the fourteen

permanent

CloPOS

Customer

Four credentials incl. a partner integrator_id; JWT rides in x-token, not Authorization

1 hour