In der Amadeus360 Third Party API (TP API) werden an den verschiedenen Endpunkten Daten gelesen/geschrieben.
Bei den Artikelstammdaten werden die Rezepturen der Verkaufsartikel aus der Richtung der Einkaufsartikel (Lieferanten, Rezepturen, Inhaltsstoffe, Wareneinsatz usw.) definiert.

Voraussetzungen für den Zugriff auf merchendiseman sind in Endpunkte Artikelstammdaten - Allgemein beschrieben.



INHALTSVERZEICHNIS



Alle Rezepte auflisten

Um die Rezepte abzufragen werden keine speziellen Parameter benötigt. Der Aufruf erfolgt nach Authentifizierung 

Aufruf:

GET https://login.amadeus360.de/extern/merchandiseman/recipe

Antwort-Beispiel:

[
    {
        "id": "jvAE-T6I7gYp8p0BVREbCcnzmoI",
        "number": 1234,
        "name": "Testartikel",
        "active": false,
        "function": "MAIN",
        "detailcategory": 0,
        "meccode": null,
        "productUse": 0,
        "prices": [
            {
                "active": true,
                "priceperunit": 0,
                "pricefixed": 0,
                "menucard": 0,
                "site": 0,
                "vat1": null,
                "vat2": null,
                "vat3": null,
                "pricelevels": [
                    {
                        "number": 1,
                        "price": "0"
                    },
                    {
                        "number": 2,
                        "price": "0"
                    },
                    {
                        "number": 3,
                        "price": "0"
                    }
                ]
            }
        ],
        "attributes": [
            {
                "attribute": 53,
                "value": 1
            },
            {
                "attribute": 54,
                "value": 1
            }
        ]
    }
]


Einzelnes Rezept abfragen

Mittels ID besteht die Möglichkeit ein einzelnes Rezept abzufragen. Die Struktur bleibt gegenüber der Liste aller Rezepte unverändert. Statt einem Array von Rezepten wird nur ein einzelnes Rezept (JSON-Objekt) zurückgegeben.

Aufruf:

GET https://login.amadeus360.de/extern/merchandiseman/recipe/id/{id}

Der Teil {id} muss hierbei durch die Artikel-ID ersetzt werden.

API-Doku: https://documenter.getpostman.com


Einzelnes Rezept updaten

Mithilfe einer ID, welche in der URL übergeben wird, kann ein einzelnes Rezept bearbeitet werden. Anstatt mit GET wird im Aufruf mit PUT gearbeitet.

Aufruf:

PUT https://login.amadeus360.de/extern/merchandiseman/recipe/id/{id}

Der Teil {id} muss hierbei durch die Artikel-ID ersetzt werden. Bei der Abfrage muss der Content-Type auf application/json stehen. Beim Updaten eines Rezepts muss die ID des Rezepts in den Daten nochmals mitgegeben werden! 

API-Doku: https://documenter.getpostman.com


Daten mitsenden:

{
    "id": 1234,
    "number": 22000,
    "name": "Testartikel2",
    "active": true,
    "function": "MAIN",
    "detailcategory": 5,
    "meccode": 2
}

Alle Attribute, welche ausgegeben werden beim Abfragen der Artikel (siehe Rezept auflisten) können auch aktualisiert werden - mit Ausnahme des Wareneinsatzes (productUse), welcher errechnet wird. Werden bestimmte Attribute nicht übermittelt, so werden diese nicht aktualisiert.


Antwort-Beispiel (Status 200):

Falls alles erfolgreich war, wird der Status 200 zurückgegeben.

{
    "status": "success",
    "message": "Item update was successful"
    "editedIds": [1234]
}


Mehrere Rezepte bearbeiten

Durch Übermitteln einer ähnlichen Struktur, welche beim Auflisten der Rezepte ausgegeben wird, können mehrere Rezepte aktualisiert werden.

API-Doku: https://documenter.getpostman.com


Der PUT Befehl macht exakt das, was im Datensatz steht. Artikelstammdaten werden sofort umkonfiguriert. Vor allem bei Verwendung von Massenoperationen und Schleifen ist dies genau zu prüfen. Es gibt kein 'UnDo' für die Befehle.

Aufruf:

PUT https://login.amadeus360.de/extern/merchandiseman/recipe

Daten mitsenden:

[
    {
        "id": 1234,
        "number": 22000,
        "name": "Testartikel2",
        "active": true,
        "function": "MAIN",
        "detailcategory": 5,
        "meccode": 2
    }, {
        "id": 1235,
        "number": 22001,
        "name": "Testartikel3",
        "active": true,
        "function": "MAIN",
        "detailcategory": 5,
        "meccode": 2
    },
]

Hierbei gelten die gleichen Regeln wie beim Bearbeiten eines einzelnen Artikels.


Antwort-Beispiel (Status 201):

Falls alles erfolgreich war, wird der Status 201 zurückgegeben.

{
    "status": "success",
    "message": "Item create or update was successful",
    "editedIds": [1234, 1235]
}


Mehrere Rezepte anlegen

Wird keine ID übermittelt, werden neue Rezepte hinzuzugefügt. Durch Übermitteln einer ähnlichen Struktur, welche beim Auflisten der Rezepte ausgegeben wird, können mehrere Rezepte angelegt werden.

API-Doku: https://documenter.getpostman.com

Aufruf:

PUT https://login.amadeus360.de/extern/merchandiseman/recipe

Daten mitsenden:

[
    {
        "id": 1234,
        "number": 22000,
        "name": "Testartikel2",
        "active": true,
        "function": "MAIN",
        "detailcategory": 5,
        "meccode": 2
    }, {
        "number": 22001,
        "name": "Testartikel3",
        "active": true,
        "function": "MAIN",
        "detailcategory": 5,
        "meccode": 2
    },
]

Werden neue Artikel mit fehlenden Attributen angegeben, dann werden die gleichen Standardwerte wie beim Anlegen eines neuen Artikels über die Oberfläche von Amadeus 360 verwendet.
Werden Artikel ohne Preis-Objekte angelegt, so werden die Preisobjekte vom ersten Artikel im gleichen MEC-Code übernommen. Auf diese Weise werden alle Einstellungen für Steuern oder auch die Druckersteuerung übernommen.

Antwort-Beispiel (Status 201):

Falls alles erfolgreich war, wird der Status 201 zurückgegeben.

{
    "status": "success",
    "message": "Item create or update was successful",
    "editedIds": [1234, 1235]
}


Fehlerbehandlung für Rezepte

Nachfolgende Liste gibt einen Überblick über die möglichen Fehler, die von Amadeus 360 zurückgegeben werden.


Antwort-Beispiel (Status 400):

Falls der Content-Type falsch gesetzt wurde, oder keine Daten übermittelt wurde, wird der Fehler 400 ausgegeben.

{
"status": "error",
"message": "Content-Type is not application/json"
}

Antwort-Beispiel (Status 403):

Falls das Hochladen von Artikeln nicht als Modul in Amadeus 360 gebucht ist, dann wird der Fehler 403 ausgegeben.

{
"status": "error",
"message": "Module is not enabled for payment"
}

Möglicher Fehler bei: POST, PUT


Antwort-Beispiel (Status 404):

Falls das Rezept nicht gefunden wird, erhält man bei der Abfrage den Status 404.

{
"status": "error",
"message": "Resource not found"
}

Möglicher Fehler bei: GET (mit ID), PUT


Antwort-Beispiel (Status 405):

Falls etwas anderes als GET, PUT oder POST übergeben wird, antwortet der Server mit Status 405.

{
"status": "error",
"message": "Verb not allowed"
}

Antwort-Beispiel (Status 500):

Falls ein oder mehrere Artikel wegen eines Serverfehlers nicht gespeichert werden können, wird Status 500 zurückgegeben.

{
"status": "success",
"message": "Processing data (partially) failed"
}


Datenstruktur von Verkaufsartikeln (Tabelle)

Nachfolgende Liste beschreibt die Daten, welche von der API abgerufen werden oder welche beim Anlegen oder Aktualisieren von Rezepten geschickt werden müssen.


FeldDatentypBeschreibung
idnull, integerID des Artikels; wird von Amadeus 360 generiert. Beim Anlegen eines neuen Artikels wird dieser Wert automatisch gesetzt.
numberintegerArtikelnummer des Artikels
namestringName des Artikels
activebooleanStatus des Artikels (aktiv oder inaktiv)
functionstringArtikelfunktion; kann folgende Werte annehmen:
  • MAIN -> Hauptartikel
  • TENDER -> Tender
  • COURSE_COMPILATION -> Menüzusammenstellung
  • INFORMATION -> Information
detailcategoryintegerID der Feinsparte
meccodenull, integerID des MEC-Codes
productUsedoubleBerechneter Wareneinsatz, readonly-Feld, welches von Amadeus360 beim Ändern der Rezeptur berechnet wird. 
fixedwedoublefixer Wareneinsatz; er legt den netto Wareneinsatz des Artikels fest
pricesarrayArray von Preisen
prices[].activebooleanStatus des Preises (aktiv oder inaktiv)
prices[].priceperunitdoubleAuf zwei Nachkommastellen beschränkter Preis pro Einheit (Standardpreis)
prices[].pricefixeddoubleAuf zwei Nachkommastellen beschränkter fixierter Preis
prices[].menucardintegerID des Angebots
prices[].siteintegerID der Verkaufsstelle
prices[].vat1null, integerID der Steuer 1
prices[].vat2null, integerID der Steuer 2
prices[].vat3null, integerID der Steuer 3
prices[].pricelevelsarrayArray von Preisen im Zusammenhang mit den Preisleveln
prices[].pricelevels[].numberintegerID des Preislevels
prices[].pricelevels[].pricedoublePreis mit zwei Nachkommastellen
attributesarrayArray der Attribute (Zusatzstoffe und Allergene)
attributes[].attributeintegerID des Attributs (siehe nachfolgende Tabelle)
attributes[].valueintegerFalls das Attribut Ja/Nein ist, dann kann der Wert 0 oder 1 sein. Ansonsten kann eine Nummer angegeben werden.



Attributarten Inhaltsstoffe und Allergene (LMIV), Nährwerte


AttributTypEinheitIDErlaubte Werte
mit FarbstoffAdditiv-1int: 0, 1
mit KonservierungsstoffAdditiv-2int: 0, 1
mit AntioxidationsmittelAdditiv-3int: 0, 1
mit GeschmacksverstärkerAdditiv-4int: 0, 1
geschwefeltAdditiv-5int: 0, 1
geschwärztAdditiv-6int: 0, 1
gewachstAdditiv-7int: 0, 1
mit SüßungsmittelAdditiv-8int: 0, 1
Aspartam- PhenylalaninquelleAdditiv-9int: 0, 1
mit PhosphatAdditiv-10int: 0, 1
coffeinhaltigAdditiv-11int: 0, 1
chininhaltigAdditiv-12int: 0, 1
glutenhaltigAllergen-46int: 0, 1
enthält KrebstiereAllergen-47int: 0, 1
enthält EierAllergen-48int: 0, 1
enthält FischAllergen-49int: 0, 1
enthält ErdnüsseAllergen-50int: 0, 1
enthält SojaAllergen-51int: 0, 1
enthält MilchAllergen-52int: 0, 1
enthält SchalenfrüchteAllergen-53int: 0, 1
enthält SellerieAllergen-54int: 0, 1
enthält SenfAllergen-55int: 0, 1
enthält SesamsamenAllergen-56int: 0, 1
enthält Schwefeldioxid/ SulfiteAllergen-57int: 0, 1
enthält LupinenAllergen-58int: 0, 1
enthält WeichtiereAllergen-59int: 0, 1
EnergieNährwertkcal60float
FettNährwertg61float
davon gesättigte FettsäurenNährwertg62float
KohlenhydrateNährwertg63float
davon ZuckerNährwertg64float
BallaststoffeNährwertg65float
EiweißNährwertg66float
SalzNährwertg67float