apiKey ist der api_key des Kontos (kr_live_… / kr_test_…) und
gehoert auf einen Server. Ein Partner-Schluessel (pk_…) oder ein
Kassen-Token (cb_…) wirft schon hier.
Legt eine Variante in einer aktiven Gruppe an. Antwort: der Artikel wie
createArticle. Gibt es die Kombination schon, kommt
variant_already_exists mit articleId der bestehenden Variante; nach
dem Stilllegen einer Variante ist ihre Kombination wieder frei.
Abschliessen (nur aus review, sonst stocktake_not_in_review; offene
Nachzaehlungen ergeben stocktake_recount_open, eine noch rechnende
Pruefung stocktake_review_running). Der Server bucht in Teilen weiter;
die Antwort traegt meist status: 'closing'. Ein erneuter Aufruf waehrend
closing stoesst den Abschluss wieder an.
Legt einen Artikel an. Mit ean ein Fremdartikel mit diesem Code
(gueltige Pruefziffer, frei im Konto), sonst vergibt der Server den
naechsten eigenen Code. Antwort: der Artikel wie getArticle.
Reserviert Ware (Checkout im Shop): ganz oder gar nicht, gemessen am
verfuegbaren Bestand (onHand - reserved). Fehlt etwas, entsteht nichts:
insufficient_available, die fehlenden Positionen in
inventoryShortfalls. Eingeloest wird ueber eine Rechnung
(InvoiceApi.issueInvoice mit IssueInvoiceItemInput.reservationId),
sonst laeuft die Reservierung ab und gibt die Ware wieder frei.
Legt eine Inventur an. Je Standort hoechstens eine offene
(stocktake_location_busy, inventoryBusyStocktakeId nennt sie); Umfang
groups bzw. articles nur mit bestandsgefuehrten Artikeln
(article_not_tracked). Jede Inventur beginnt in counting.
Legt eine Variantengruppe an: mit createMatrix: true alle Kombinationen
der Werte (hoechstens 100), sonst die genannten variants (hoechstens
100), ohne beides nur die Gruppe. Jede Variante entsteht als Artikel mit
den Feldern wie bei createArticle; was sie nicht nennt, fuellen die
Vorgaben. Antwort: die Gruppe mit variants (Kennung und Merkmale je
Variante).
Legt einen Webhook an (hoechstens 5 je Konto, webhook_limit). url ist
eine vollstaendige https://-Adresse, events mindestens eines aus
inventoryWebhookEvents.
Das Inventurprotokoll (PDF), erst nach dem Abschluss
(stocktake_not_closed, auch fuer eine abgebrochene Inventur). Mit dem
Recht costs die Fassung mit Werten, sonst die nur mit Mengen. Bis 9 MiB
kommt die Datei selbst (StocktakePdfFile), darueber ein signierter
Lese-Link fuer 15 Minuten (StocktakePdfLink); die geladene Datei an
download.sha256 pruefen. Lesen: nach einem Zeitlimit darf der Aufruf
wiederholt werden.
Alle Artikel der Abfrage, Seite fuer Seite ueber nextCursor. cursor
ist der Startpunkt; nennt der Server denselben Cursor zweimal, endet der
Strom mit einem Antwortfehler statt einer Endlosschleife.
Eine Seite Bestandszeilen. belowMinimum: nur Zeilen, deren onHand
unter dem Mindestbestand ihres Standorts liegt (dieselbe Regel wie
stock.below_minimum). changedSince (inklusive), nach updatedAt
aufsteigend.
Das Lagerprotokoll, neueste zuerst. Nur nach articleIdoderlocationId filtern, nicht beides (sonst validation). type aus
stockMovementTypes, source aus stockMovementSources.
Eine Seite Inventuren des Kontos. Ohne updatedSince zuletzt geaenderte
zuerst (updatedAt absteigend; offene stehen dabei nicht zwingend oben,
dafuer gibt es status). Mit updatedSince aufsteigend und inklusive:
ein Abgleich mit dem groessten gesehenen updatedAt als naechstem
updatedSince ist lueckenlos (der Eintrag an der Grenze kommt noch einmal).
Ein aktiver Artikel per code (number, ean oder internalCode) oder
per eigener Kennung aus externalIds (externalSystem mit
externalId), nie beides. Ein stillgelegter Artikel gilt als nicht
gefunden (article_not_found).
Vorschau eines Wareneingangs (receiveGoods mit dryRun: true): prueft
Positionen, Artikel, Preise und Nebenkosten und rechnet die Verteilung,
schreibt aber nichts. Ein idempotencyKey ist freigestellt, wird nur auf
seine Form geprueft und nicht verbraucht. Werte (baseCents …) nur mit
dem Recht costs. Fehler tragen den Aufrufnamen receiveGoods.
Bucht einen Wareneingang. Ohne locationId am Standard-Standort; die
Antwort traegt keine Werte, auch mit dem Recht costs nicht. Fuer die
Vorschau mit Werten: previewGoodsReceipt.
Eine Zaehlung. Antwort: die Zaehlung und ihre Position danach (Summe der
Runde in item.quantity, ohne Seriennummern). Gezaehlt wird in
counting, in review nur an Positionen, die zum Nachzaehlen frei sind
(sonst stocktake_not_open).
Nachzaehlen: je genannter Position eine neue Runde; danach zaehlen und
erneut reviewStocktake. Solange die Pruefung noch rechnet
(review.complete: false), kommt stocktake_review_running.
Gibt reservierte Ware frei: ohne items alles, sonst je Position (ohne
quantity der ganze offene Rest). Die Antwort traegt den Stand danach;
released wird der Status erst, wenn nichts mehr offen ist.
Pruefen: counting → review, in review neu rechnen (nach dem
Nachzaehlen). Die Antwort kommt sofort mit review.complete: false; Soll
und Differenz stehen an den Positionen, sobald completetrue ist.
Eine Probe genau dieses Ereignisses an genau diesen Webhook, mit
erfundener Nutzlast und test: true in der Huelle. Der Webhook muss das
Ereignis abonnieren (event_not_subscribed) und aktiv sein
(webhook_inactive); hoechstens 20 je Konto und Wiener Kalendertag.
Aendert eine aktive Gruppe (Name, Vorgaben, neue Werte) oder legt sie mit
active: false still: die Gruppe und alle ihre Varianten, endgueltig. Die
Antwort kommt erst, wenn alle Varianten stillgelegt sind. Bestehende
Varianten aendern Name und Vorgaben nicht (dafuer updateArticle).