Der Externe-Katalog-API bietet eine schlanke, nur lesende Sicht auf die
Stammdaten eines APRO-Standorts — Artikel, Warengruppen und
Spots (Tische, Zimmer, Abholpunkte) — zur Verwendung in White-Label-
Apps, Kiosks, externen Speisekarten und Partnerintegrationen.
Die drei Endpunkte teilen sich dieselben Konventionen: Scope per
Standort, verschachtelte DTO-Struktur, Filterung über Query-Parameter
und Paginierung.
total ist die Gesamtanzahl aller passenden Datensätze über alle
Seiten — Grundlage für skip/take-Schleifen.
Filterung
Filter werden als bracketed Query-Parameter unter dem Schlüssel
filter übergeben — filter['<name>']=<value>. Schlichtes
?<name>=<value> wird ignoriert. Paginierung (skip, take) bleibt als
gewöhnliche Query-Parameter.
Listen-Filter (productIds, gtins, externalSpotIds, …) werden
kommagetrennt übergeben. Literale Kommas mit \, escapen.
GET /api/v1/external/product?filter['locationShortCode']=vienna-main
&filter['productNrs']=A-100,A-200
&filter['isVisible']=true
&filter['search']=schnitzel
&skip=0&take=100
Hinweise:
Der Klammer-Key ist case-insensitive — filter['LocationShortCode']
und filter['locationShortCode'] sind äquivalent.
filter["…"] (doppelte Anführungszeichen, URL-kodiert als %22)
funktioniert ebenfalls.
Unbekannte Filterparameter werden ignoriert.
Artikel
GET https://my.apro.at/api/v1/external/product
Query-Parameter
Parameter
Typ
Beschreibung
locationId
int?
Pflicht (oder locationShortCode).
locationShortCode
string
Pflicht (oder locationId).
cashboxId
int?
Auf eine Kassa einschränken. Muss zum Standort gehören.
search
string
Volltextsuche über Name, externer Name, productNr, GTIN und externe Artikel-ID.
productIds
int[]
Filter nach APRO-Artikel-ID.
productNrs
string[]
Filter nach productNr (der Wert, der bei External-Order-Einträgen zurückgegeben wird).
gtins
string[]
Filter nach GTIN (Barcode).
externalProductIds
string[]
Filter nach externer Artikel-ID (Drittsystem-Referenz).
isVisible
bool?
Filter nach Sichtbarkeit.
isLocked
bool?
Filter nach Sperr-Flag.
Product
Feld
Typ
Beschreibung
id
int
APRO-Cloud-Artikel-ID.
productNr
string
Identifier, mit dem die Bestell-Pipeline diesen Artikel auflöst. Diesen Wert direkt als productNr des Eintrags beim Anlegen einer Bestellung via Externe-Bestellung-API verwenden. Basiert auf der POS-Artikelnummer.
gtin
string
Barcode / GTIN.
externalProductId
string
POS-Artikel-ID — die im lokalen Kassensystem vergebene ID. Informativ; nicht der Wert, gegen den die External-Order-productNr aufgelöst wird.
name
string
Anzeigename.
externalName
string
Name für externe Oberflächen — Fallback auf name, wenn leer.
Strukturierte Nährwerte. Leer-Array, wenn nicht gepflegt.
Ingredient
Feld
Typ
Beschreibung
name
string
Zutaten-Bezeichnung (z. B. Lamm, Weizenmehl).
NutritionalValue
Feld
Typ
Beschreibung
name
string
Wert-Bezeichnung (z. B. Gewicht, Kalorien, Fett).
unit
string
Einheit, freier Text (z. B. g, ml, kcal).
value
string
Numerischer Wert, als String serialisiert, um das Quellformat zu erhalten. Client-seitig parsen, falls nötig.
belongsTo
int?
Optionale Referenz auf eine Unterkomponente / Variante (null, wenn der Wert für das Gesamtprodukt gilt).
Localization
Feld
Typ
Beschreibung
locale
string
Sprach- / Culture-Schlüssel der Übersetzung (z. B. en, it, de-DE).
name
string
Übersetzter Anzeigename.
subtitle
string
Übersetzter Untertitel.
description
string
Übersetzte ausführliche Beschreibung.
imageUrl
string
Sprachspezifisches Bild, sofern gepflegt.
name, subtitle, description und media.imageUrl auf oberster
Ebene enthalten weiterhin die Standardwerte (Deutsch) —
localizations ersetzt sie nicht, sondern ergänzt nur die vorhandenen
Übersetzungen. Einträge ohne Sprachschlüssel werden weggelassen, und
einzelne Felder eines Eintrags können null sein, wenn genau dieser
Text nicht übersetzt wurde. Zur Anzeige die gewünschte Sprache in
localizations suchen und auf das Feld der obersten Ebene zurückfallen.
Beispiel
GET /api/v1/external/product?filter['locationShortCode']=vienna-main&filter['isVisible']=true&take=2
GET https://my.apro.at/api/v1/external/product-category
Warengruppen entsprechen den APRO Product Groups — die
kassenbezogene Gruppierung, die Reports, Steuersätze und Druckreihenfolge
steuert. Das Feld productGroupExternalIds auf einem Artikel referenziert
genau die externalId, die hier zurückkommt — damit lassen sich beide
Antworten ohne zusätzliche Lookups verbinden.
Query-Parameter
Parameter
Typ
Beschreibung
locationId
int?
Pflicht (oder locationShortCode).
locationShortCode
string
Pflicht (oder locationId).
cashboxId
int?
Auf eine Kassa einschränken. Muss zum Standort gehören.
search
string
Volltextsuche über Name, externer Name und externe ID.
categoryIds
int[]
Filter nach APRO-Warengruppen-ID.
externalIds
string[]
Filter nach externer ID.
ProductCategory
Feld
Typ
Beschreibung
id
int
APRO-Cloud-Warengruppen-ID.
externalId
string
POS-Warengruppen-ID — die im lokalen Kassensystem vergebene ID.
Gepflegte Übersetzungen der Warengruppentexte und des Bildes, ein Eintrag je Sprache. Leer, wenn keine vorhanden sind.
CategoryCashbox
Feld
Typ
Beschreibung
cashboxId
int?
Zugehörige Kassa.
supplierId
int?
Standard-Lieferant für Artikel der Warengruppe.
CategoryTax
Feld
Typ
Beschreibung
taxRateId
int?
Standard-Steuersatz für Artikel der Warengruppe.
vat
double
USt-Prozentsatz (z. B. 20 für 20 %).
CategoryLocalization
Feld
Typ
Beschreibung
locale
string
Sprach- / Culture-Schlüssel der Übersetzung (z. B. en, it, de-DE).
name
string
Übersetzter Anzeigename.
description
string
Übersetzte Beschreibung.
imageUrl
string
Sprachspezifisches Bild, sofern gepflegt.
Es gelten dieselben Regeln wie bei Artikeln: name auf oberster Ebene
bleibt der deutsche Standardwert, localizations ergänzt nur das, was
vorhanden ist.
Beispiel
GET /api/v1/external/product-category?filter['locationShortCode']=vienna-main
Die drei Endpunkte sind so geschnitten, dass sie sich client-seitig
verbinden lassen:
product.productNr ↔ productNr (Entry / Addon) der
Externe-Bestellung-API —
case-insensitive, gematcht ausschließlich gegen Artikel auf der
Primär-Kassa des Standorts. Wenn productNr nicht auflöst,
greift im Bestell-Pipeline ein Fallback über den name-Wert des
Entries gegen product.name.
spot.id ↔ SpotID der External-Order-API — die id des
Spots direkt zurückgeben, um eine Bestellung an denselben Spot
zurückzurouten, von dem sie gelesen wurde. spot.qrCode entspricht
dem QRCode-Feld der External-Order-API.
Fehler
Status
Bedeutung
400 Bad Request
Weder locationId noch locationShortCode lieferten einen gültigen Standort.
401 Unauthorized
x-api-key fehlt oder ist ungültig.
403 Forbidden
Key nicht für den Standort autorisiert.
429 Too Many Requests
Rate-Limit — mit Jitter zurücknehmen und erneut versuchen.