@kreiseck/kasseneck-api 1.4.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/CHANGELOG.md +166 -0
  2. package/README.md +255 -36
  3. package/dist/cjs/client/aufrufe.d.ts +58 -4
  4. package/dist/cjs/client/aufrufe.js +196 -1
  5. package/dist/cjs/client/errors.d.ts +32 -19
  6. package/dist/cjs/client/errors.js +28 -17
  7. package/dist/cjs/client/index.d.ts +2 -2
  8. package/dist/cjs/client/index.js +2 -1
  9. package/dist/cjs/client/transport.d.ts +27 -1
  10. package/dist/cjs/client/transport.js +25 -27
  11. package/dist/cjs/index.d.ts +1 -1
  12. package/dist/cjs/index.js +3 -2
  13. package/dist/cjs/inventory/api.d.ts +19 -3
  14. package/dist/cjs/inventory/api.js +18 -2
  15. package/dist/cjs/inventory/endpunkte.d.ts +22 -2
  16. package/dist/cjs/inventory/endpunkte.js +6 -1
  17. package/dist/cjs/inventory/fehler.d.ts +11 -1
  18. package/dist/cjs/inventory/fehler.js +19 -0
  19. package/dist/cjs/inventory/index.d.ts +6 -4
  20. package/dist/cjs/inventory/index.js +32 -2
  21. package/dist/cjs/inventory/lesen.d.ts +8 -1
  22. package/dist/cjs/inventory/lesen.js +131 -1
  23. package/dist/cjs/inventory/schreiben.d.ts +86 -0
  24. package/dist/cjs/inventory/schreiben.js +320 -0
  25. package/dist/cjs/inventory/typen.d.ts +371 -11
  26. package/dist/cjs/inventory/vertrag.d.ts +76 -16
  27. package/dist/cjs/inventory/vertrag.js +138 -13
  28. package/dist/cjs/inventory/webhook.d.ts +3 -1
  29. package/dist/cjs/inventory/webhook.js +7 -1
  30. package/dist/cjs/invoice/endpunkte.d.ts +6 -0
  31. package/dist/cjs/invoice/endpunkte.js +13 -2
  32. package/dist/cjs/invoice/index.d.ts +2 -2
  33. package/dist/cjs/invoice/index.js +2 -1
  34. package/dist/cjs/invoice/typen.d.ts +46 -2
  35. package/dist/cjs/invoice/vertrag.d.ts +19 -5
  36. package/dist/cjs/invoice/vertrag.js +37 -5
  37. package/dist/cjs/pos/texte.d.ts +11 -6
  38. package/dist/cjs/pos/texte.js +11 -6
  39. package/dist/cjs/stored/vokabular.d.ts +1 -1
  40. package/dist/cjs/stored/vokabular.js +5 -3
  41. package/dist/cjs/version.d.ts +1 -1
  42. package/dist/cjs/version.js +1 -1
  43. package/dist/esm/client/aufrufe.d.ts +58 -4
  44. package/dist/esm/client/aufrufe.js +194 -0
  45. package/dist/esm/client/errors.d.ts +32 -19
  46. package/dist/esm/client/errors.js +28 -17
  47. package/dist/esm/client/index.d.ts +2 -2
  48. package/dist/esm/client/index.js +1 -1
  49. package/dist/esm/client/transport.d.ts +27 -1
  50. package/dist/esm/client/transport.js +26 -28
  51. package/dist/esm/index.d.ts +1 -1
  52. package/dist/esm/index.js +1 -1
  53. package/dist/esm/inventory/api.d.ts +19 -3
  54. package/dist/esm/inventory/api.js +18 -2
  55. package/dist/esm/inventory/endpunkte.d.ts +22 -2
  56. package/dist/esm/inventory/endpunkte.js +6 -5
  57. package/dist/esm/inventory/fehler.d.ts +11 -1
  58. package/dist/esm/inventory/fehler.js +18 -1
  59. package/dist/esm/inventory/index.d.ts +6 -4
  60. package/dist/esm/inventory/index.js +5 -3
  61. package/dist/esm/inventory/lesen.d.ts +8 -1
  62. package/dist/esm/inventory/lesen.js +127 -1
  63. package/dist/esm/inventory/schreiben.d.ts +86 -0
  64. package/dist/esm/inventory/schreiben.js +303 -0
  65. package/dist/esm/inventory/typen.d.ts +371 -11
  66. package/dist/esm/inventory/vertrag.d.ts +76 -16
  67. package/dist/esm/inventory/vertrag.js +137 -12
  68. package/dist/esm/inventory/webhook.d.ts +3 -1
  69. package/dist/esm/inventory/webhook.js +8 -2
  70. package/dist/esm/invoice/endpunkte.d.ts +6 -0
  71. package/dist/esm/invoice/endpunkte.js +13 -2
  72. package/dist/esm/invoice/index.d.ts +2 -2
  73. package/dist/esm/invoice/index.js +1 -1
  74. package/dist/esm/invoice/typen.d.ts +46 -2
  75. package/dist/esm/invoice/vertrag.d.ts +19 -5
  76. package/dist/esm/invoice/vertrag.js +36 -4
  77. package/dist/esm/pos/texte.d.ts +11 -6
  78. package/dist/esm/pos/texte.js +11 -6
  79. package/dist/esm/stored/vokabular.d.ts +1 -1
  80. package/dist/esm/stored/vokabular.js +5 -3
  81. package/dist/esm/version.d.ts +1 -1
  82. package/dist/esm/version.js +1 -1
  83. package/fixtures/hobex-hps-codes.json +1 -1
  84. package/fixtures/invoice-api-examples/credit-error-reservation.json +26 -0
  85. package/fixtures/invoice-api-examples/issue-error-reservation-article.json +25 -0
  86. package/fixtures/invoice-api-examples/issue-error-vat-id-risk.json +26 -0
  87. package/fixtures/invoice-api-examples/issue-reservation.json +24 -0
  88. package/fixtures/invoice-api-examples/issue-vat-id-risk.json +28 -0
  89. package/fixtures/invoice-api.schema.json +15 -2
  90. package/fixtures/invoice-texts.json +1 -1
  91. package/fixtures/pos-texts.json +1 -1
  92. package/fixtures/surface.json +206 -9
  93. package/fixtures/v3/antworten/belege.json +2 -2
  94. package/fixtures/v3/antworten/belegmail.json +2 -2
  95. package/fixtures/v3/antworten/kasse-belege.json +2 -2
  96. package/fixtures/v3/antworten/kasse.json +3 -3
  97. package/fixtures/v3/antworten/lager.json +2491 -130
  98. package/fixtures/v3/antworten/rechnungen.json +267 -44
  99. package/fixtures/v3/antworten/storno.json +2 -2
  100. package/fixtures/v3/stored/belege.json +2 -2
  101. package/fixtures/v3/stored/kasse.json +3 -3
  102. package/fixtures/v3/stored/rechnungen.json +174 -18
  103. package/fixtures/v3/v3-vokabular.json +593 -23
  104. package/fixtures/v3/zahlbetrag-faelle.json +2 -2
  105. package/package.json +1 -1
@@ -1,27 +1,37 @@
1
1
  {
2
2
  "_hinweis": "Vertrags-Export /v3, erzeugt aus den echten Handlern (npm run vertrag:v3 in functions/ und functions-kasse/). Nicht von Hand pflegen.",
3
3
  "_quelle": {
4
- "sha256": "ca5579cac3997ad4ad7269d7645bb67aabdf29ab4fce4645592ea4c3c1d5c30b",
5
- "inputsSha256": "f49e446a8b696f54ca18db0c83a35792294ce53e54b1be31fc1bd69dd8f99d13",
4
+ "sha256": "bee3e2b26656925092ecdf894d7c85bfd8635bb1913db9d7784866da65b41013",
5
+ "inputsSha256": "e1a499894424aebac421c3c28e9cc866acb0daa16c27a75a8c2f69dc8d1166d5",
6
6
  "backendPackage": "@kreiseck/kasseneck-api@0.14.0",
7
7
  "inputs": [
8
+ "functions-kasse/article-endpoints.js",
9
+ "functions-kasse/articles-core.js",
8
10
  "functions-kasse/gemeinsam/api-rand.js",
9
11
  "functions-kasse/gemeinsam/api-vokabular-v3.js",
10
12
  "functions-kasse/gemeinsam/webhook-versand.js",
11
13
  "functions-kasse/konto-webhook-core.js",
14
+ "functions-kasse/lager-api-artikel.js",
15
+ "functions-kasse/lager-api-buchen.js",
12
16
  "functions-kasse/lager-api-core.js",
13
17
  "functions-kasse/lager-api-endpoints.js",
14
18
  "functions-kasse/lager-api-ereignisse.js",
19
+ "functions-kasse/lager-api-reservierung.js",
15
20
  "functions-kasse/lager-buchung.js",
16
21
  "functions-kasse/lager-core.js",
17
22
  "functions-kasse/lager-endpoints.js",
23
+ "functions-kasse/lager-reservierung-core.js",
24
+ "functions-kasse/lager-reservierung.js",
25
+ "functions-kasse/lager-trigger.js",
26
+ "functions-kasse/lager-verkauf-core.js",
27
+ "functions-kasse/lager-vorgaenge.js",
18
28
  "functions-kasse/test/unit/fixtures/v3-waechter.js",
19
29
  "functions-kasse/test/unit/v3-vertrag-export-lager.test.js",
20
30
  "functions/test/unit/fixtures/vertrag-v3/ablage.js"
21
31
  ]
22
32
  },
23
33
  "channel": "api",
24
- "note": "Lager-API (Stufe 5a) unter /v3: Faelle in Ablaufreihenfolge (ein Konto, Standort haupt), dazu webhookEvents = zugestellte Konto-Webhooks (Huelle wie gesendet, ohne Probesendungen). Secrets als Platzhalter.",
34
+ "note": "Lager-API (Stufe 5a, Artikel schreiben, Buchen und Reservierung 5b) unter /v3: Faelle in Ablaufreihenfolge (ein Konto, Standort haupt); Reservierungen antworten mit reservation (wie getReservation; Wiederholung = gespeicherte Antwort), laufen ueber einen Auftrag zum Ablaufzeitpunkt ab (Verlaengern ersetzt ihn), werden ueber issueInvoice (items[].reservationId) beim Buchen der Rechnung eingeloest und melden reservation.expired/released/redeemed; Buchungen antworten mit operationId, movementIds, lotIds und warnings[] (Hinweise aus warningCodes.inventory, kein Fehler); Preise duerfen ohne Schalter kosten gesendet werden, Werte kommen nur mit ihm zurueck; Mindestbestand je Standort = minStockByLocation (Tausendstel, Schwelle fuer below_minimum, gemessen an available = onHand − reserved), minStock ist ein Altfeld ohne Wirkung darauf; dazu webhookEvents = zugestellte Konto-Webhooks (Huelle wie gesendet, ohne Probesendungen). Secrets als Platzhalter.",
25
35
  "cases": [
26
36
  {
27
37
  "channel": "api",
@@ -137,6 +147,7 @@
137
147
  "article": {
138
148
  "id": "roggenbrot",
139
149
  "name": "Roggenbrot 1 kg",
150
+ "description": null,
140
151
  "unitPriceCents": 450,
141
152
  "vatRate": 10,
142
153
  "unit": "Stk",
@@ -146,13 +157,17 @@
146
157
  "groupId": "brot",
147
158
  "revenueGroupId": null,
148
159
  "stockTracked": true,
160
+ "stockKind": "quantity",
149
161
  "minStock": 5000,
150
162
  "active": true,
151
163
  "createdAt": "2026-10-01T04:00:00.000Z",
152
164
  "updatedAt": "2026-10-06T06:00:04.000Z",
153
165
  "stockLocationIds": [
154
166
  "haupt"
155
- ]
167
+ ],
168
+ "minStockByLocation": {
169
+ "haupt": 5000
170
+ }
156
171
  }
157
172
  }
158
173
  }
@@ -200,6 +215,7 @@
200
215
  {
201
216
  "id": "kipferl",
202
217
  "name": "Butterkipferl",
218
+ "description": null,
203
219
  "unitPriceCents": 130,
204
220
  "vatRate": 10,
205
221
  "unit": "Stk",
@@ -209,6 +225,7 @@
209
225
  "groupId": "gebaeck",
210
226
  "revenueGroupId": null,
211
227
  "stockTracked": true,
228
+ "stockKind": "quantity",
212
229
  "minStock": null,
213
230
  "active": true,
214
231
  "createdAt": "2026-10-01T04:30:00.000Z",
@@ -216,11 +233,13 @@
216
233
  "stockLocationIds": [
217
234
  "haupt",
218
235
  "lieferwagen"
219
- ]
236
+ ],
237
+ "minStockByLocation": {}
220
238
  },
221
239
  {
222
240
  "id": "roggenbrot",
223
241
  "name": "Roggenbrot 1 kg",
242
+ "description": null,
224
243
  "unitPriceCents": 450,
225
244
  "vatRate": 10,
226
245
  "unit": "Stk",
@@ -230,13 +249,17 @@
230
249
  "groupId": "brot",
231
250
  "revenueGroupId": null,
232
251
  "stockTracked": true,
252
+ "stockKind": "quantity",
233
253
  "minStock": 5000,
234
254
  "active": true,
235
255
  "createdAt": "2026-10-01T04:00:00.000Z",
236
256
  "updatedAt": "2026-10-06T06:00:04.000Z",
237
257
  "stockLocationIds": [
238
258
  "haupt"
239
- ]
259
+ ],
260
+ "minStockByLocation": {
261
+ "haupt": 5000
262
+ }
240
263
  }
241
264
  ],
242
265
  "nextCursor": "eyJ6ZWl0IjoxNzkxMjY2NDA0MDAwMDAwLCJpZCI6InJvZ2dlbmJyb3QifQ"
@@ -265,6 +288,7 @@
265
288
  {
266
289
  "id": "semmel",
267
290
  "name": "Kaisersemmel",
291
+ "description": null,
268
292
  "unitPriceCents": 120,
269
293
  "vatRate": 10,
270
294
  "unit": "Stk",
@@ -274,13 +298,15 @@
274
298
  "groupId": "gebaeck",
275
299
  "revenueGroupId": null,
276
300
  "stockTracked": true,
301
+ "stockKind": "quantity",
277
302
  "minStock": null,
278
303
  "active": false,
279
304
  "createdAt": "2026-10-06T06:00:04.000Z",
280
305
  "updatedAt": "2026-10-06T06:00:04.001Z",
281
306
  "stockLocationIds": [
282
307
  "haupt"
283
- ]
308
+ ],
309
+ "minStockByLocation": {}
284
310
  }
285
311
  ],
286
312
  "nextCursor": null
@@ -309,6 +335,7 @@
309
335
  {
310
336
  "id": "kipferl",
311
337
  "name": "Butterkipferl",
338
+ "description": null,
312
339
  "unitPriceCents": 130,
313
340
  "vatRate": 10,
314
341
  "unit": "Stk",
@@ -318,6 +345,7 @@
318
345
  "groupId": "gebaeck",
319
346
  "revenueGroupId": null,
320
347
  "stockTracked": true,
348
+ "stockKind": "quantity",
321
349
  "minStock": null,
322
350
  "active": true,
323
351
  "createdAt": "2026-10-01T04:30:00.000Z",
@@ -325,11 +353,13 @@
325
353
  "stockLocationIds": [
326
354
  "haupt",
327
355
  "lieferwagen"
328
- ]
356
+ ],
357
+ "minStockByLocation": {}
329
358
  },
330
359
  {
331
360
  "id": "roggenbrot",
332
361
  "name": "Roggenbrot 1 kg",
362
+ "description": null,
333
363
  "unitPriceCents": 450,
334
364
  "vatRate": 10,
335
365
  "unit": "Stk",
@@ -339,13 +369,17 @@
339
369
  "groupId": "brot",
340
370
  "revenueGroupId": null,
341
371
  "stockTracked": true,
372
+ "stockKind": "quantity",
342
373
  "minStock": 5000,
343
374
  "active": true,
344
375
  "createdAt": "2026-10-01T04:00:00.000Z",
345
376
  "updatedAt": "2026-10-06T06:00:04.000Z",
346
377
  "stockLocationIds": [
347
378
  "haupt"
348
- ]
379
+ ],
380
+ "minStockByLocation": {
381
+ "haupt": 5000
382
+ }
349
383
  }
350
384
  ],
351
385
  "nextCursor": null
@@ -422,6 +456,7 @@
422
456
  "article": {
423
457
  "id": "roggenbrot",
424
458
  "name": "Roggenbrot 1 kg",
459
+ "description": null,
425
460
  "unitPriceCents": 450,
426
461
  "vatRate": 10,
427
462
  "unit": "Stk",
@@ -431,13 +466,17 @@
431
466
  "groupId": "brot",
432
467
  "revenueGroupId": null,
433
468
  "stockTracked": true,
469
+ "stockKind": "quantity",
434
470
  "minStock": 5000,
435
471
  "active": true,
436
472
  "createdAt": "2026-10-01T04:00:00.000Z",
437
473
  "updatedAt": "2026-10-06T06:00:04.000Z",
438
474
  "stockLocationIds": [
439
475
  "haupt"
440
- ]
476
+ ],
477
+ "minStockByLocation": {
478
+ "haupt": 5000
479
+ }
441
480
  }
442
481
  }
443
482
  }
@@ -597,9 +636,11 @@
597
636
  "locationId": "haupt",
598
637
  "condition": "sellable",
599
638
  "quantityDelta": -8000,
639
+ "reservedDelta": 0,
600
640
  "stockAfter": {
601
641
  "sellable": 4000,
602
- "defective": 0
642
+ "defective": 0,
643
+ "reserved": null
603
644
  },
604
645
  "operationId": "auto2",
605
646
  "source": {
@@ -628,9 +669,11 @@
628
669
  "locationId": "haupt",
629
670
  "condition": "sellable",
630
671
  "quantityDelta": 12000,
672
+ "reservedDelta": 0,
631
673
  "stockAfter": {
632
674
  "sellable": 12000,
633
- "defective": 0
675
+ "defective": 0,
676
+ "reserved": null
634
677
  },
635
678
  "operationId": "auto1",
636
679
  "source": {
@@ -684,9 +727,11 @@
684
727
  "locationId": "haupt",
685
728
  "condition": "sellable",
686
729
  "quantityDelta": 40000,
730
+ "reservedDelta": 0,
687
731
  "stockAfter": {
688
732
  "sellable": 40000,
689
- "defective": 0
733
+ "defective": 0,
734
+ "reserved": null
690
735
  },
691
736
  "operationId": "auto1",
692
737
  "source": {
@@ -715,9 +760,11 @@
715
760
  "locationId": "haupt",
716
761
  "condition": "sellable",
717
762
  "quantityDelta": 12000,
763
+ "reservedDelta": 0,
718
764
  "stockAfter": {
719
765
  "sellable": 12000,
720
- "defective": 0
766
+ "defective": 0,
767
+ "reserved": null
721
768
  },
722
769
  "operationId": "auto1",
723
770
  "source": {
@@ -793,6 +840,7 @@
793
840
  "article": {
794
841
  "id": "roggenbrot",
795
842
  "name": "Roggenbrot 1 kg",
843
+ "description": null,
796
844
  "unitPriceCents": 450,
797
845
  "vatRate": 10,
798
846
  "unit": "Stk",
@@ -802,6 +850,7 @@
802
850
  "groupId": "brot",
803
851
  "revenueGroupId": null,
804
852
  "stockTracked": true,
853
+ "stockKind": "quantity",
805
854
  "minStock": 5000,
806
855
  "active": true,
807
856
  "createdAt": "2026-10-01T04:00:00.000Z",
@@ -809,6 +858,9 @@
809
858
  "stockLocationIds": [
810
859
  "haupt"
811
860
  ],
861
+ "minStockByLocation": {
862
+ "haupt": 5000
863
+ },
812
864
  "purchasePriceMicros": 1200000
813
865
  }
814
866
  }
@@ -880,9 +932,11 @@
880
932
  "locationId": "haupt",
881
933
  "condition": "sellable",
882
934
  "quantityDelta": -8000,
935
+ "reservedDelta": 0,
883
936
  "stockAfter": {
884
937
  "sellable": 4000,
885
- "defective": 0
938
+ "defective": 0,
939
+ "reserved": null
886
940
  },
887
941
  "operationId": "auto2",
888
942
  "source": {
@@ -954,7 +1008,10 @@
954
1008
  "stock.below_minimum",
955
1009
  "article.created",
956
1010
  "article.updated",
957
- "article.deactivated"
1011
+ "article.deactivated",
1012
+ "reservation.expired",
1013
+ "reservation.released",
1014
+ "reservation.redeemed"
958
1015
  ]
959
1016
  }
960
1017
  }
@@ -1368,151 +1425,2455 @@
1368
1425
  },
1369
1426
  "code": "webhook_not_found"
1370
1427
  }
1371
- }
1372
- ],
1373
- "webhookEvents": [
1428
+ },
1374
1429
  {
1375
- "event": "stock.below_minimum",
1376
- "body": {
1377
- "id": "evt_wKLtZJFBjowUBsa875du",
1378
- "type": "stock.below_minimum",
1379
- "createdAt": 1791266404000,
1380
- "accountId": "kornblum",
1430
+ "channel": "api",
1431
+ "name": "create_article",
1432
+ "endpoint": "createArticle",
1433
+ "path": "/v3/createArticle",
1434
+ "params": {
1435
+ "idempotencyKey": "shop-artikel-1001",
1436
+ "name": "Kaisersemmel",
1437
+ "description": "Handgeschlagen, mit Mohn bestreut",
1438
+ "unitPriceCents": 65,
1439
+ "vatRate": 10,
1440
+ "stockTracked": true,
1441
+ "stockLocationIds": [
1442
+ "haupt"
1443
+ ],
1444
+ "minStockByLocation": {
1445
+ "haupt": 20000
1446
+ },
1447
+ "externalIds": {
1448
+ "shop": "1001"
1449
+ },
1450
+ "metadata": {
1451
+ "seoSlug": "kaisersemmel-mohn"
1452
+ }
1453
+ },
1454
+ "httpStatus": 200,
1455
+ "headers": {
1456
+ "Kasseneck-Api-Version": "v3",
1457
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1458
+ },
1459
+ "response": {
1460
+ "status": "success",
1461
+ "message": "",
1381
1462
  "data": {
1382
- "articleId": "roggenbrot",
1383
- "locationId": "haupt",
1384
- "available": 4000,
1385
- "minStock": 5000
1463
+ "article": {
1464
+ "id": "auto29",
1465
+ "name": "Kaisersemmel",
1466
+ "description": "Handgeschlagen, mit Mohn bestreut",
1467
+ "unitPriceCents": 65,
1468
+ "vatRate": 10,
1469
+ "unit": "Stk",
1470
+ "number": null,
1471
+ "ean": null,
1472
+ "internalCode": "1",
1473
+ "groupId": null,
1474
+ "revenueGroupId": null,
1475
+ "stockTracked": true,
1476
+ "stockKind": "quantity",
1477
+ "minStock": null,
1478
+ "active": true,
1479
+ "externalIds": {
1480
+ "shop": "1001"
1481
+ },
1482
+ "metadata": {
1483
+ "seoSlug": "kaisersemmel-mohn"
1484
+ },
1485
+ "createdAt": "2026-10-06T06:01:32.000Z",
1486
+ "updatedAt": "2026-10-06T06:01:32.000Z",
1487
+ "stockLocationIds": [
1488
+ "haupt"
1489
+ ],
1490
+ "minStockByLocation": {
1491
+ "haupt": 20000
1492
+ }
1493
+ }
1386
1494
  }
1387
1495
  }
1388
1496
  },
1389
1497
  {
1390
- "event": "stock.changed",
1391
- "body": {
1392
- "id": "evt_6SjOpc8E0wUJamYx4wDc",
1393
- "type": "stock.changed",
1394
- "createdAt": 1791266404000,
1395
- "accountId": "kornblum",
1498
+ "channel": "api",
1499
+ "name": "create_article_replayed",
1500
+ "endpoint": "createArticle",
1501
+ "path": "/v3/createArticle",
1502
+ "params": {
1503
+ "idempotencyKey": "shop-artikel-1001",
1504
+ "name": "Kaisersemmel",
1505
+ "description": "Handgeschlagen, mit Mohn bestreut",
1506
+ "unitPriceCents": 65,
1507
+ "vatRate": 10,
1508
+ "stockTracked": true,
1509
+ "stockLocationIds": [
1510
+ "haupt"
1511
+ ],
1512
+ "minStockByLocation": {
1513
+ "haupt": 20000
1514
+ },
1515
+ "externalIds": {
1516
+ "shop": "1001"
1517
+ },
1518
+ "metadata": {
1519
+ "seoSlug": "kaisersemmel-mohn"
1520
+ }
1521
+ },
1522
+ "httpStatus": 200,
1523
+ "headers": {
1524
+ "Kasseneck-Api-Version": "v3",
1525
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1526
+ },
1527
+ "response": {
1528
+ "status": "success",
1529
+ "message": "",
1396
1530
  "data": {
1397
- "articleId": "kipferl",
1398
- "locationId": "haupt",
1399
- "onHand": 40000,
1400
- "reserved": 0,
1401
- "available": 40000,
1402
- "defective": 0,
1403
- "sequence": 1,
1404
- "updatedAt": "2026-10-06T06:00:03.000Z",
1405
- "cause": "goods_receipt",
1406
- "movementId": "auto1_1"
1531
+ "article": {
1532
+ "id": "auto29",
1533
+ "name": "Kaisersemmel",
1534
+ "description": "Handgeschlagen, mit Mohn bestreut",
1535
+ "unitPriceCents": 65,
1536
+ "vatRate": 10,
1537
+ "unit": "Stk",
1538
+ "number": null,
1539
+ "ean": null,
1540
+ "internalCode": "1",
1541
+ "groupId": null,
1542
+ "revenueGroupId": null,
1543
+ "stockTracked": true,
1544
+ "stockKind": "quantity",
1545
+ "minStock": null,
1546
+ "active": true,
1547
+ "externalIds": {
1548
+ "shop": "1001"
1549
+ },
1550
+ "metadata": {
1551
+ "seoSlug": "kaisersemmel-mohn"
1552
+ },
1553
+ "createdAt": "2026-10-06T06:01:32.000Z",
1554
+ "updatedAt": "2026-10-06T06:01:32.000Z",
1555
+ "stockLocationIds": [
1556
+ "haupt"
1557
+ ],
1558
+ "minStockByLocation": {
1559
+ "haupt": 20000
1560
+ }
1561
+ }
1407
1562
  }
1408
1563
  }
1409
1564
  },
1410
1565
  {
1411
- "event": "stock.changed",
1412
- "body": {
1413
- "id": "evt_xF1Ox0CUvFfDWlmVM9xp",
1414
- "type": "stock.changed",
1415
- "createdAt": 1791266404000,
1416
- "accountId": "kornblum",
1417
- "data": {
1418
- "articleId": "roggenbrot",
1419
- "locationId": "haupt",
1420
- "onHand": 4000,
1421
- "reserved": 0,
1422
- "available": 4000,
1423
- "defective": 0,
1424
- "sequence": 2,
1425
- "updatedAt": "2026-10-06T06:00:04.000Z",
1426
- "cause": "loss",
1427
- "movementId": "auto2_0"
1566
+ "channel": "api",
1567
+ "name": "error_create_article_idempotency_conflict",
1568
+ "endpoint": "createArticle",
1569
+ "path": "/v3/createArticle",
1570
+ "params": {
1571
+ "idempotencyKey": "shop-artikel-1001",
1572
+ "name": "Kaisersemmel",
1573
+ "description": "Handgeschlagen, mit Mohn bestreut",
1574
+ "unitPriceCents": 70,
1575
+ "vatRate": 10,
1576
+ "stockTracked": true,
1577
+ "stockLocationIds": [
1578
+ "haupt"
1579
+ ],
1580
+ "minStockByLocation": {
1581
+ "haupt": 20000
1582
+ },
1583
+ "externalIds": {
1584
+ "shop": "1001"
1585
+ },
1586
+ "metadata": {
1587
+ "seoSlug": "kaisersemmel-mohn"
1428
1588
  }
1589
+ },
1590
+ "httpStatus": 200,
1591
+ "headers": {
1592
+ "Kasseneck-Api-Version": "v3",
1593
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1594
+ },
1595
+ "response": {
1596
+ "status": "error",
1597
+ "message": "Derselbe idempotencyKey wurde mit anderem Inhalt verwendet.",
1598
+ "data": {
1599
+ "code": "idempotency_conflict"
1600
+ },
1601
+ "code": "idempotency_conflict"
1429
1602
  }
1430
1603
  },
1431
1604
  {
1432
- "event": "article.updated",
1433
- "body": {
1434
- "id": "evt_y3OmCZX2aGSmO51tvMVg",
1435
- "type": "article.updated",
1436
- "createdAt": 1791266404000,
1437
- "accountId": "kornblum",
1605
+ "channel": "api",
1606
+ "name": "create_article_foreign",
1607
+ "endpoint": "createArticle",
1608
+ "path": "/v3/createArticle",
1609
+ "params": {
1610
+ "idempotencyKey": "shop-artikel-1002",
1611
+ "name": "Bio-Hafermilch 1 l",
1612
+ "ean": "9001234567810",
1613
+ "unitPriceCents": 249,
1614
+ "vatRate": 10,
1615
+ "stockTracked": true,
1616
+ "stockKind": "quantity"
1617
+ },
1618
+ "httpStatus": 200,
1619
+ "headers": {
1620
+ "Kasseneck-Api-Version": "v3",
1621
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1622
+ },
1623
+ "response": {
1624
+ "status": "success",
1625
+ "message": "",
1438
1626
  "data": {
1439
- "id": "kipferl",
1440
- "name": "Butterkipferl",
1441
- "unitPriceCents": 130,
1442
- "vatRate": 10,
1443
- "unit": "Stk",
1444
- "number": "A-200",
1445
- "ean": null,
1446
- "internalCode": "KB-200",
1447
- "groupId": "gebaeck",
1448
- "revenueGroupId": null,
1449
- "stockTracked": true,
1450
- "minStock": null,
1451
- "active": true,
1452
- "createdAt": "2026-10-01T04:30:00.000Z",
1453
- "updatedAt": "2026-10-06T06:00:04.000Z",
1454
- "stockLocationIds": [
1455
- "haupt",
1456
- "lieferwagen"
1457
- ]
1627
+ "article": {
1628
+ "id": "auto30",
1629
+ "name": "Bio-Hafermilch 1 l",
1630
+ "description": null,
1631
+ "unitPriceCents": 249,
1632
+ "vatRate": 10,
1633
+ "unit": "Stk",
1634
+ "number": null,
1635
+ "ean": "9001234567810",
1636
+ "internalCode": null,
1637
+ "groupId": null,
1638
+ "revenueGroupId": null,
1639
+ "stockTracked": true,
1640
+ "stockKind": "quantity",
1641
+ "minStock": null,
1642
+ "active": true,
1643
+ "createdAt": "2026-10-06T06:01:35.000Z",
1644
+ "updatedAt": "2026-10-06T06:01:35.000Z",
1645
+ "stockLocationIds": [],
1646
+ "minStockByLocation": {}
1647
+ }
1458
1648
  }
1459
1649
  }
1460
1650
  },
1461
1651
  {
1462
- "event": "article.created",
1463
- "body": {
1464
- "id": "evt_OBMDnXTaeE7t8CbeZjMY",
1465
- "type": "article.created",
1466
- "createdAt": 1791266404000,
1467
- "accountId": "kornblum",
1652
+ "channel": "api",
1653
+ "name": "error_create_article_code_taken",
1654
+ "endpoint": "createArticle",
1655
+ "path": "/v3/createArticle",
1656
+ "params": {
1657
+ "idempotencyKey": "shop-artikel-1003",
1658
+ "name": "Roggenbrot",
1659
+ "ean": "9001234567896"
1660
+ },
1661
+ "httpStatus": 200,
1662
+ "headers": {
1663
+ "Kasseneck-Api-Version": "v3",
1664
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1665
+ },
1666
+ "response": {
1667
+ "status": "error",
1668
+ "message": "Diese EAN gehört schon zu einem anderen Artikel.",
1468
1669
  "data": {
1469
- "id": "semmel",
1470
- "name": "Kaisersemmel",
1471
- "unitPriceCents": 120,
1472
- "vatRate": 10,
1473
- "unit": "Stk",
1474
- "number": "A-300",
1475
- "ean": null,
1476
- "internalCode": "KB-300",
1477
- "groupId": "gebaeck",
1478
- "revenueGroupId": null,
1479
- "stockTracked": true,
1480
- "minStock": null,
1481
- "active": true,
1482
- "createdAt": "2026-10-06T06:00:04.000Z",
1483
- "updatedAt": "2026-10-06T06:00:04.000Z",
1484
- "stockLocationIds": [
1485
- "haupt"
1486
- ]
1670
+ "code": "code_taken",
1671
+ "field": "ean",
1672
+ "articleId": "roggenbrot"
1673
+ },
1674
+ "code": "code_taken"
1675
+ }
1676
+ },
1677
+ {
1678
+ "channel": "api",
1679
+ "name": "error_create_article_external_id_taken",
1680
+ "endpoint": "createArticle",
1681
+ "path": "/v3/createArticle",
1682
+ "params": {
1683
+ "idempotencyKey": "shop-artikel-1004",
1684
+ "name": "Semmel",
1685
+ "externalIds": {
1686
+ "shop": "1001"
1487
1687
  }
1688
+ },
1689
+ "httpStatus": 200,
1690
+ "headers": {
1691
+ "Kasseneck-Api-Version": "v3",
1692
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1693
+ },
1694
+ "response": {
1695
+ "status": "error",
1696
+ "message": "Die Kennung shop gehört schon zu einem anderen Artikel.",
1697
+ "data": {
1698
+ "code": "external_id_taken",
1699
+ "field": "externalIds.shop",
1700
+ "articleId": "auto29"
1701
+ },
1702
+ "code": "external_id_taken"
1488
1703
  }
1489
1704
  },
1490
1705
  {
1491
- "event": "article.deactivated",
1492
- "body": {
1493
- "id": "evt_VKmC9XoEcVNwBCwlbdw7",
1494
- "type": "article.deactivated",
1495
- "createdAt": 1791266404000,
1496
- "accountId": "kornblum",
1706
+ "channel": "api",
1707
+ "name": "error_create_article_validation",
1708
+ "endpoint": "createArticle",
1709
+ "path": "/v3/createArticle",
1710
+ "params": {
1711
+ "idempotencyKey": "shop-artikel-1005",
1712
+ "name": "Mohnweckerl",
1713
+ "ean": "9001234567897",
1714
+ "minStock": 1500
1715
+ },
1716
+ "httpStatus": 200,
1717
+ "headers": {
1718
+ "Kasseneck-Api-Version": "v3",
1719
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1720
+ },
1721
+ "response": {
1722
+ "status": "error",
1723
+ "message": "Bitte Eingaben prüfen.",
1497
1724
  "data": {
1498
- "id": "semmel",
1499
- "name": "Kaisersemmel",
1500
- "unitPriceCents": 120,
1501
- "vatRate": 10,
1502
- "unit": "Stk",
1503
- "number": "A-300",
1504
- "ean": null,
1505
- "internalCode": "KB-300",
1506
- "groupId": "gebaeck",
1507
- "revenueGroupId": null,
1508
- "stockTracked": true,
1509
- "minStock": null,
1725
+ "code": "validation",
1726
+ "errors": [
1727
+ {
1728
+ "field": "ean",
1729
+ "message": "GTIN/EAN aus 8 bis 14 Ziffern mit gültiger Prüfziffer."
1730
+ },
1731
+ {
1732
+ "field": "minStock",
1733
+ "message": "Tausendstel ≥ 0 in ganzen Einheiten (Vielfaches von 1000) oder null."
1734
+ }
1735
+ ]
1736
+ },
1737
+ "code": "validation"
1738
+ }
1739
+ },
1740
+ {
1741
+ "channel": "api",
1742
+ "name": "error_create_article_idempotency_key_required",
1743
+ "endpoint": "createArticle",
1744
+ "path": "/v3/createArticle",
1745
+ "params": {
1746
+ "name": "Mohnweckerl"
1747
+ },
1748
+ "httpStatus": 200,
1749
+ "headers": {
1750
+ "Kasseneck-Api-Version": "v3",
1751
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1752
+ },
1753
+ "response": {
1754
+ "status": "error",
1755
+ "message": "idempotencyKey fehlt.",
1756
+ "data": {
1757
+ "code": "idempotency_key_required"
1758
+ },
1759
+ "code": "idempotency_key_required"
1760
+ }
1761
+ },
1762
+ {
1763
+ "channel": "api",
1764
+ "name": "create_article_with_costs",
1765
+ "endpoint": "createArticle",
1766
+ "path": "/v3/createArticle",
1767
+ "params": {
1768
+ "idempotencyKey": "shop-artikel-1006",
1769
+ "name": "Nussbeugel",
1770
+ "unitPriceCents": 320,
1771
+ "vatRate": 10,
1772
+ "purchasePriceMicros": 1150000
1773
+ },
1774
+ "httpStatus": 200,
1775
+ "headers": {
1776
+ "Kasseneck-Api-Version": "v3",
1777
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1778
+ },
1779
+ "response": {
1780
+ "status": "success",
1781
+ "message": "",
1782
+ "data": {
1783
+ "article": {
1784
+ "id": "auto33",
1785
+ "name": "Nussbeugel",
1786
+ "description": null,
1787
+ "unitPriceCents": 320,
1788
+ "vatRate": 10,
1789
+ "unit": "Stk",
1790
+ "number": null,
1791
+ "ean": null,
1792
+ "internalCode": "2",
1793
+ "groupId": null,
1794
+ "revenueGroupId": null,
1795
+ "stockTracked": false,
1796
+ "stockKind": "quantity",
1797
+ "minStock": null,
1798
+ "active": true,
1799
+ "createdAt": "2026-10-06T06:01:40.000Z",
1800
+ "updatedAt": "2026-10-06T06:01:40.000Z",
1801
+ "stockLocationIds": [],
1802
+ "minStockByLocation": {},
1803
+ "purchasePriceMicros": 1150000
1804
+ }
1805
+ }
1806
+ }
1807
+ },
1808
+ {
1809
+ "channel": "api",
1810
+ "name": "update_article",
1811
+ "endpoint": "updateArticle",
1812
+ "path": "/v3/updateArticle",
1813
+ "params": {
1814
+ "idempotencyKey": "shop-update-1001-1",
1815
+ "articleId": "auto29",
1816
+ "unitPriceCents": 70,
1817
+ "description": null,
1818
+ "metadata": {
1819
+ "seoSlug": "kaisersemmel"
1820
+ }
1821
+ },
1822
+ "httpStatus": 200,
1823
+ "headers": {
1824
+ "Kasseneck-Api-Version": "v3",
1825
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1826
+ },
1827
+ "response": {
1828
+ "status": "success",
1829
+ "message": "",
1830
+ "data": {
1831
+ "article": {
1832
+ "id": "auto29",
1833
+ "name": "Kaisersemmel",
1834
+ "description": null,
1835
+ "unitPriceCents": 70,
1836
+ "vatRate": 10,
1837
+ "unit": "Stk",
1838
+ "number": null,
1839
+ "ean": null,
1840
+ "internalCode": "1",
1841
+ "groupId": null,
1842
+ "revenueGroupId": null,
1843
+ "stockTracked": true,
1844
+ "stockKind": "quantity",
1845
+ "minStock": null,
1846
+ "active": true,
1847
+ "externalIds": {
1848
+ "shop": "1001"
1849
+ },
1850
+ "metadata": {
1851
+ "seoSlug": "kaisersemmel"
1852
+ },
1853
+ "createdAt": "2026-10-06T06:01:32.000Z",
1854
+ "updatedAt": "2026-10-06T06:01:41.000Z",
1855
+ "stockLocationIds": [
1856
+ "haupt"
1857
+ ],
1858
+ "minStockByLocation": {
1859
+ "haupt": 20000
1860
+ }
1861
+ }
1862
+ }
1863
+ }
1864
+ },
1865
+ {
1866
+ "channel": "api",
1867
+ "name": "update_article_min_stock_by_location",
1868
+ "endpoint": "updateArticle",
1869
+ "path": "/v3/updateArticle",
1870
+ "params": {
1871
+ "idempotencyKey": "shop-update-1001-2",
1872
+ "articleId": "auto29",
1873
+ "minStockByLocation": {
1874
+ "haupt": null,
1875
+ "lieferwagen": 10000
1876
+ }
1877
+ },
1878
+ "httpStatus": 200,
1879
+ "headers": {
1880
+ "Kasseneck-Api-Version": "v3",
1881
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1882
+ },
1883
+ "response": {
1884
+ "status": "success",
1885
+ "message": "",
1886
+ "data": {
1887
+ "article": {
1888
+ "id": "auto29",
1889
+ "name": "Kaisersemmel",
1890
+ "description": null,
1891
+ "unitPriceCents": 70,
1892
+ "vatRate": 10,
1893
+ "unit": "Stk",
1894
+ "number": null,
1895
+ "ean": null,
1896
+ "internalCode": "1",
1897
+ "groupId": null,
1898
+ "revenueGroupId": null,
1899
+ "stockTracked": true,
1900
+ "stockKind": "quantity",
1901
+ "minStock": null,
1902
+ "active": true,
1903
+ "externalIds": {
1904
+ "shop": "1001"
1905
+ },
1906
+ "metadata": {
1907
+ "seoSlug": "kaisersemmel"
1908
+ },
1909
+ "createdAt": "2026-10-06T06:01:32.000Z",
1910
+ "updatedAt": "2026-10-06T06:01:42.000Z",
1911
+ "stockLocationIds": [
1912
+ "haupt"
1913
+ ],
1914
+ "minStockByLocation": {
1915
+ "lieferwagen": 10000
1916
+ }
1917
+ }
1918
+ }
1919
+ }
1920
+ },
1921
+ {
1922
+ "channel": "api",
1923
+ "name": "error_update_article_stock_kind_locked",
1924
+ "endpoint": "updateArticle",
1925
+ "path": "/v3/updateArticle",
1926
+ "params": {
1927
+ "idempotencyKey": "shop-update-rb-1",
1928
+ "articleId": "roggenbrot",
1929
+ "stockKind": "serial"
1930
+ },
1931
+ "httpStatus": 200,
1932
+ "headers": {
1933
+ "Kasseneck-Api-Version": "v3",
1934
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1935
+ },
1936
+ "response": {
1937
+ "status": "error",
1938
+ "message": "Die Bestandsart ist nach der ersten Lagerbewegung fest.",
1939
+ "data": {
1940
+ "code": "stock_kind_locked"
1941
+ },
1942
+ "code": "stock_kind_locked"
1943
+ }
1944
+ },
1945
+ {
1946
+ "channel": "api",
1947
+ "name": "error_update_article_not_found",
1948
+ "endpoint": "updateArticle",
1949
+ "path": "/v3/updateArticle",
1950
+ "params": {
1951
+ "idempotencyKey": "shop-update-x-1",
1952
+ "articleId": "gibt_es_nicht",
1953
+ "name": "x"
1954
+ },
1955
+ "httpStatus": 200,
1956
+ "headers": {
1957
+ "Kasseneck-Api-Version": "v3",
1958
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1959
+ },
1960
+ "response": {
1961
+ "status": "error",
1962
+ "message": "Artikel nicht gefunden.",
1963
+ "data": {
1964
+ "code": "article_not_found"
1965
+ },
1966
+ "code": "article_not_found"
1967
+ }
1968
+ },
1969
+ {
1970
+ "channel": "api",
1971
+ "name": "deactivate_article",
1972
+ "endpoint": "deactivateArticle",
1973
+ "path": "/v3/deactivateArticle",
1974
+ "params": {
1975
+ "idempotencyKey": "shop-deactivate-1001",
1976
+ "articleId": "auto29"
1977
+ },
1978
+ "httpStatus": 200,
1979
+ "headers": {
1980
+ "Kasseneck-Api-Version": "v3",
1981
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1982
+ },
1983
+ "response": {
1984
+ "status": "success",
1985
+ "message": "",
1986
+ "data": {
1987
+ "article": {
1988
+ "id": "auto29",
1989
+ "name": "Kaisersemmel",
1990
+ "description": null,
1991
+ "unitPriceCents": 70,
1992
+ "vatRate": 10,
1993
+ "unit": "Stk",
1994
+ "number": null,
1995
+ "ean": null,
1996
+ "internalCode": "1",
1997
+ "groupId": null,
1998
+ "revenueGroupId": null,
1999
+ "stockTracked": true,
2000
+ "stockKind": "quantity",
2001
+ "minStock": null,
2002
+ "active": false,
2003
+ "externalIds": {
2004
+ "shop": "1001"
2005
+ },
2006
+ "metadata": {
2007
+ "seoSlug": "kaisersemmel"
2008
+ },
2009
+ "createdAt": "2026-10-06T06:01:32.000Z",
2010
+ "updatedAt": "2026-10-06T06:01:45.000Z",
2011
+ "stockLocationIds": [
2012
+ "haupt"
2013
+ ],
2014
+ "minStockByLocation": {
2015
+ "lieferwagen": 10000
2016
+ }
2017
+ }
2018
+ }
2019
+ }
2020
+ },
2021
+ {
2022
+ "channel": "api",
2023
+ "name": "error_update_article_inactive",
2024
+ "endpoint": "updateArticle",
2025
+ "path": "/v3/updateArticle",
2026
+ "params": {
2027
+ "idempotencyKey": "shop-update-1001-3",
2028
+ "articleId": "auto29",
2029
+ "name": "Kaisersemmel neu"
2030
+ },
2031
+ "httpStatus": 200,
2032
+ "headers": {
2033
+ "Kasseneck-Api-Version": "v3",
2034
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2035
+ },
2036
+ "response": {
2037
+ "status": "error",
2038
+ "message": "Der Artikel ist stillgelegt und lässt sich nicht mehr ändern.",
2039
+ "data": {
2040
+ "code": "article_inactive"
2041
+ },
2042
+ "code": "article_inactive"
2043
+ }
2044
+ },
2045
+ {
2046
+ "channel": "api",
2047
+ "name": "receive_goods_dry_run",
2048
+ "endpoint": "receiveGoods",
2049
+ "path": "/v3/receiveGoods",
2050
+ "params": {
2051
+ "items": [
2052
+ {
2053
+ "articleId": "roggenbrot",
2054
+ "quantity": 20000,
2055
+ "totalCents": 2400,
2056
+ "expiresOn": "2026-10-12",
2057
+ "batch": "C-41"
2058
+ },
2059
+ {
2060
+ "articleId": "kipferl",
2061
+ "quantity": 60000,
2062
+ "unitPriceMicros": 380000
2063
+ }
2064
+ ],
2065
+ "landedCosts": [
2066
+ {
2067
+ "type": "freight",
2068
+ "amountCents": 450
2069
+ },
2070
+ {
2071
+ "type": "cash_discount",
2072
+ "amountCents": 50
2073
+ }
2074
+ ],
2075
+ "allocation": "value",
2076
+ "supplier": {
2077
+ "name": "Mühle Hollerer",
2078
+ "address": "Mühlgasse 4, 5020 Salzburg"
2079
+ },
2080
+ "reference": "LS-2026-118",
2081
+ "note": "Frühlieferung",
2082
+ "dryRun": true
2083
+ },
2084
+ "httpStatus": 200,
2085
+ "headers": {
2086
+ "Kasseneck-Api-Version": "v3",
2087
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2088
+ },
2089
+ "response": {
2090
+ "status": "success",
2091
+ "message": "",
2092
+ "data": {
2093
+ "preview": [
2094
+ {
2095
+ "articleId": "roggenbrot",
2096
+ "quantity": 20000,
2097
+ "expiresOn": "2026-10-12",
2098
+ "batch": "C-41",
2099
+ "serialNumbers": [],
2100
+ "priceFromArticle": false
2101
+ },
2102
+ {
2103
+ "articleId": "kipferl",
2104
+ "quantity": 60000,
2105
+ "expiresOn": null,
2106
+ "batch": null,
2107
+ "serialNumbers": [],
2108
+ "priceFromArticle": false
2109
+ }
2110
+ ]
2111
+ }
2112
+ }
2113
+ },
2114
+ {
2115
+ "channel": "api",
2116
+ "name": "receive_goods_dry_run_with_costs",
2117
+ "endpoint": "receiveGoods",
2118
+ "path": "/v3/receiveGoods",
2119
+ "params": {
2120
+ "items": [
2121
+ {
2122
+ "articleId": "roggenbrot",
2123
+ "quantity": 20000,
2124
+ "totalCents": 2400,
2125
+ "expiresOn": "2026-10-12",
2126
+ "batch": "C-41"
2127
+ },
2128
+ {
2129
+ "articleId": "kipferl",
2130
+ "quantity": 60000,
2131
+ "unitPriceMicros": 380000
2132
+ }
2133
+ ],
2134
+ "landedCosts": [
2135
+ {
2136
+ "type": "freight",
2137
+ "amountCents": 450
2138
+ },
2139
+ {
2140
+ "type": "cash_discount",
2141
+ "amountCents": 50
2142
+ }
2143
+ ],
2144
+ "allocation": "value",
2145
+ "supplier": {
2146
+ "name": "Mühle Hollerer",
2147
+ "address": "Mühlgasse 4, 5020 Salzburg"
2148
+ },
2149
+ "reference": "LS-2026-118",
2150
+ "note": "Frühlieferung",
2151
+ "dryRun": true
2152
+ },
2153
+ "httpStatus": 200,
2154
+ "headers": {
2155
+ "Kasseneck-Api-Version": "v3",
2156
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2157
+ },
2158
+ "response": {
2159
+ "status": "success",
2160
+ "message": "",
2161
+ "data": {
2162
+ "preview": [
2163
+ {
2164
+ "articleId": "roggenbrot",
2165
+ "quantity": 20000,
2166
+ "expiresOn": "2026-10-12",
2167
+ "batch": "C-41",
2168
+ "serialNumbers": [],
2169
+ "priceFromArticle": false,
2170
+ "baseCents": 2400,
2171
+ "landedCostCents": 205,
2172
+ "valueCents": 2605,
2173
+ "unitCostMicros": 1302500
2174
+ },
2175
+ {
2176
+ "articleId": "kipferl",
2177
+ "quantity": 60000,
2178
+ "expiresOn": null,
2179
+ "batch": null,
2180
+ "serialNumbers": [],
2181
+ "priceFromArticle": false,
2182
+ "baseCents": 2280,
2183
+ "landedCostCents": 195,
2184
+ "valueCents": 2475,
2185
+ "unitCostMicros": 412500
2186
+ }
2187
+ ]
2188
+ }
2189
+ }
2190
+ },
2191
+ {
2192
+ "channel": "api",
2193
+ "name": "receive_goods",
2194
+ "endpoint": "receiveGoods",
2195
+ "path": "/v3/receiveGoods",
2196
+ "params": {
2197
+ "idempotencyKey": "shop-we-118",
2198
+ "items": [
2199
+ {
2200
+ "articleId": "roggenbrot",
2201
+ "quantity": 20000,
2202
+ "totalCents": 2400,
2203
+ "expiresOn": "2026-10-12",
2204
+ "batch": "C-41"
2205
+ },
2206
+ {
2207
+ "articleId": "kipferl",
2208
+ "quantity": 60000,
2209
+ "unitPriceMicros": 380000
2210
+ }
2211
+ ],
2212
+ "landedCosts": [
2213
+ {
2214
+ "type": "freight",
2215
+ "amountCents": 450
2216
+ },
2217
+ {
2218
+ "type": "cash_discount",
2219
+ "amountCents": 50
2220
+ }
2221
+ ],
2222
+ "allocation": "value",
2223
+ "supplier": {
2224
+ "name": "Mühle Hollerer",
2225
+ "address": "Mühlgasse 4, 5020 Salzburg"
2226
+ },
2227
+ "reference": "LS-2026-118",
2228
+ "note": "Frühlieferung"
2229
+ },
2230
+ "httpStatus": 200,
2231
+ "headers": {
2232
+ "Kasseneck-Api-Version": "v3",
2233
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2234
+ },
2235
+ "response": {
2236
+ "status": "success",
2237
+ "message": "",
2238
+ "data": {
2239
+ "operationId": "auto34",
2240
+ "movementIds": [
2241
+ "auto34_0",
2242
+ "auto34_1"
2243
+ ],
2244
+ "lotIds": [
2245
+ "auto34_L0",
2246
+ "auto34_L1"
2247
+ ],
2248
+ "warnings": []
2249
+ }
2250
+ }
2251
+ },
2252
+ {
2253
+ "channel": "api",
2254
+ "name": "receive_goods_replayed",
2255
+ "endpoint": "receiveGoods",
2256
+ "path": "/v3/receiveGoods",
2257
+ "params": {
2258
+ "idempotencyKey": "shop-we-118",
2259
+ "items": [
2260
+ {
2261
+ "articleId": "roggenbrot",
2262
+ "quantity": 20000,
2263
+ "totalCents": 2400,
2264
+ "expiresOn": "2026-10-12",
2265
+ "batch": "C-41"
2266
+ },
2267
+ {
2268
+ "articleId": "kipferl",
2269
+ "quantity": 60000,
2270
+ "unitPriceMicros": 380000
2271
+ }
2272
+ ],
2273
+ "landedCosts": [
2274
+ {
2275
+ "type": "freight",
2276
+ "amountCents": 450
2277
+ },
2278
+ {
2279
+ "type": "cash_discount",
2280
+ "amountCents": 50
2281
+ }
2282
+ ],
2283
+ "allocation": "value",
2284
+ "supplier": {
2285
+ "name": "Mühle Hollerer",
2286
+ "address": "Mühlgasse 4, 5020 Salzburg"
2287
+ },
2288
+ "reference": "LS-2026-118",
2289
+ "note": "Frühlieferung"
2290
+ },
2291
+ "httpStatus": 200,
2292
+ "headers": {
2293
+ "Kasseneck-Api-Version": "v3",
2294
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2295
+ },
2296
+ "response": {
2297
+ "status": "success",
2298
+ "message": "",
2299
+ "data": {
2300
+ "operationId": "auto34",
2301
+ "movementIds": [
2302
+ "auto34_0",
2303
+ "auto34_1"
2304
+ ],
2305
+ "lotIds": [
2306
+ "auto34_L0",
2307
+ "auto34_L1"
2308
+ ],
2309
+ "warnings": []
2310
+ }
2311
+ }
2312
+ },
2313
+ {
2314
+ "channel": "api",
2315
+ "name": "error_receive_goods_idempotency_conflict",
2316
+ "endpoint": "receiveGoods",
2317
+ "path": "/v3/receiveGoods",
2318
+ "params": {
2319
+ "idempotencyKey": "shop-we-118",
2320
+ "items": [
2321
+ {
2322
+ "articleId": "roggenbrot",
2323
+ "quantity": 20000,
2324
+ "totalCents": 2400,
2325
+ "expiresOn": "2026-10-12",
2326
+ "batch": "C-41"
2327
+ },
2328
+ {
2329
+ "articleId": "kipferl",
2330
+ "quantity": 60000,
2331
+ "unitPriceMicros": 380000
2332
+ }
2333
+ ],
2334
+ "landedCosts": [
2335
+ {
2336
+ "type": "freight",
2337
+ "amountCents": 450
2338
+ },
2339
+ {
2340
+ "type": "cash_discount",
2341
+ "amountCents": 50
2342
+ }
2343
+ ],
2344
+ "allocation": "value",
2345
+ "supplier": {
2346
+ "name": "Mühle Hollerer",
2347
+ "address": "Mühlgasse 4, 5020 Salzburg"
2348
+ },
2349
+ "reference": "LS-2026-119",
2350
+ "note": "Frühlieferung"
2351
+ },
2352
+ "httpStatus": 200,
2353
+ "headers": {
2354
+ "Kasseneck-Api-Version": "v3",
2355
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2356
+ },
2357
+ "response": {
2358
+ "status": "error",
2359
+ "message": "Derselbe idempotencyKey wurde mit anderem Inhalt verwendet.",
2360
+ "data": {
2361
+ "code": "idempotency_conflict"
2362
+ },
2363
+ "code": "idempotency_conflict"
2364
+ }
2365
+ },
2366
+ {
2367
+ "channel": "api",
2368
+ "name": "error_receive_goods_validation",
2369
+ "endpoint": "receiveGoods",
2370
+ "path": "/v3/receiveGoods",
2371
+ "params": {
2372
+ "idempotencyKey": "shop-we-120",
2373
+ "items": [
2374
+ {
2375
+ "articleId": "roggenbrot",
2376
+ "quantity": 1.5
2377
+ }
2378
+ ]
2379
+ },
2380
+ "httpStatus": 200,
2381
+ "headers": {
2382
+ "Kasseneck-Api-Version": "v3",
2383
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2384
+ },
2385
+ "response": {
2386
+ "status": "error",
2387
+ "message": "Bitte Eingaben prüfen.",
2388
+ "data": {
2389
+ "code": "validation",
2390
+ "errors": [
2391
+ {
2392
+ "field": "items[0].quantity",
2393
+ "message": "Ganze Zahl erwartet."
2394
+ }
2395
+ ]
2396
+ },
2397
+ "code": "validation"
2398
+ }
2399
+ },
2400
+ {
2401
+ "channel": "api",
2402
+ "name": "transfer_stock",
2403
+ "endpoint": "transferStock",
2404
+ "path": "/v3/transferStock",
2405
+ "params": {
2406
+ "idempotencyKey": "shop-um-1",
2407
+ "fromLocationId": "haupt",
2408
+ "toLocationId": "lieferwagen",
2409
+ "items": [
2410
+ {
2411
+ "articleId": "kipferl",
2412
+ "quantity": 24000
2413
+ }
2414
+ ],
2415
+ "note": "Tour Nord"
2416
+ },
2417
+ "httpStatus": 200,
2418
+ "headers": {
2419
+ "Kasseneck-Api-Version": "v3",
2420
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2421
+ },
2422
+ "response": {
2423
+ "status": "success",
2424
+ "message": "",
2425
+ "data": {
2426
+ "operationId": "auto35",
2427
+ "movementIds": [
2428
+ "auto35_0",
2429
+ "auto35_1"
2430
+ ],
2431
+ "lotIds": [
2432
+ "auto35_L0"
2433
+ ],
2434
+ "warnings": []
2435
+ }
2436
+ }
2437
+ },
2438
+ {
2439
+ "channel": "api",
2440
+ "name": "error_transfer_stock_exceeds_stock",
2441
+ "endpoint": "transferStock",
2442
+ "path": "/v3/transferStock",
2443
+ "params": {
2444
+ "idempotencyKey": "shop-um-2",
2445
+ "fromLocationId": "lieferwagen",
2446
+ "toLocationId": "haupt",
2447
+ "items": [
2448
+ {
2449
+ "articleId": "kipferl",
2450
+ "quantity": 30000
2451
+ }
2452
+ ]
2453
+ },
2454
+ "httpStatus": 200,
2455
+ "headers": {
2456
+ "Kasseneck-Api-Version": "v3",
2457
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2458
+ },
2459
+ "response": {
2460
+ "status": "error",
2461
+ "message": "Mehr als am Standort vorhanden.",
2462
+ "data": {
2463
+ "code": "exceeds_stock"
2464
+ },
2465
+ "code": "exceeds_stock"
2466
+ }
2467
+ },
2468
+ {
2469
+ "channel": "api",
2470
+ "name": "record_stock_loss",
2471
+ "endpoint": "recordStockLoss",
2472
+ "path": "/v3/recordStockLoss",
2473
+ "params": {
2474
+ "idempotencyKey": "shop-ab-1",
2475
+ "reason": "breakage",
2476
+ "items": [
2477
+ {
2478
+ "articleId": "roggenbrot",
2479
+ "quantity": 20000
2480
+ }
2481
+ ]
2482
+ },
2483
+ "httpStatus": 200,
2484
+ "headers": {
2485
+ "Kasseneck-Api-Version": "v3",
2486
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2487
+ },
2488
+ "response": {
2489
+ "status": "success",
2490
+ "message": "",
2491
+ "data": {
2492
+ "operationId": "auto37",
2493
+ "movementIds": [
2494
+ "auto37_0"
2495
+ ],
2496
+ "lotIds": [],
2497
+ "warnings": [
2498
+ {
2499
+ "code": "below_minimum",
2500
+ "articleId": "roggenbrot",
2501
+ "locationId": "haupt",
2502
+ "message": "Roggenbrot 1 kg: unter dem Mindestbestand."
2503
+ }
2504
+ ]
2505
+ }
2506
+ }
2507
+ },
2508
+ {
2509
+ "channel": "api",
2510
+ "name": "record_stock_loss_withdrawal",
2511
+ "endpoint": "recordStockLoss",
2512
+ "path": "/v3/recordStockLoss",
2513
+ "params": {
2514
+ "idempotencyKey": "shop-ab-2",
2515
+ "reason": "withdrawal",
2516
+ "withdrawalType": "staff",
2517
+ "items": [
2518
+ {
2519
+ "articleId": "kipferl",
2520
+ "quantity": 2000
2521
+ }
2522
+ ]
2523
+ },
2524
+ "httpStatus": 200,
2525
+ "headers": {
2526
+ "Kasseneck-Api-Version": "v3",
2527
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2528
+ },
2529
+ "response": {
2530
+ "status": "success",
2531
+ "message": "",
2532
+ "data": {
2533
+ "operationId": "auto38",
2534
+ "movementIds": [
2535
+ "auto38_0"
2536
+ ],
2537
+ "lotIds": [],
2538
+ "warnings": []
2539
+ }
2540
+ }
2541
+ },
2542
+ {
2543
+ "channel": "api",
2544
+ "name": "error_record_stock_loss_invalid_reason",
2545
+ "endpoint": "recordStockLoss",
2546
+ "path": "/v3/recordStockLoss",
2547
+ "params": {
2548
+ "idempotencyKey": "shop-ab-3",
2549
+ "reason": "lost",
2550
+ "items": [
2551
+ {
2552
+ "articleId": "kipferl",
2553
+ "quantity": 1000
2554
+ }
2555
+ ]
2556
+ },
2557
+ "httpStatus": 200,
2558
+ "headers": {
2559
+ "Kasseneck-Api-Version": "v3",
2560
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2561
+ },
2562
+ "response": {
2563
+ "status": "error",
2564
+ "message": "Unbekannter Abgangsgrund.",
2565
+ "data": {
2566
+ "code": "invalid_reason"
2567
+ },
2568
+ "code": "invalid_reason"
2569
+ }
2570
+ },
2571
+ {
2572
+ "channel": "api",
2573
+ "name": "error_record_stock_loss_withdrawal_type_required",
2574
+ "endpoint": "recordStockLoss",
2575
+ "path": "/v3/recordStockLoss",
2576
+ "params": {
2577
+ "idempotencyKey": "shop-ab-4",
2578
+ "reason": "withdrawal",
2579
+ "items": [
2580
+ {
2581
+ "articleId": "kipferl",
2582
+ "quantity": 1000
2583
+ }
2584
+ ]
2585
+ },
2586
+ "httpStatus": 200,
2587
+ "headers": {
2588
+ "Kasseneck-Api-Version": "v3",
2589
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2590
+ },
2591
+ "response": {
2592
+ "status": "error",
2593
+ "message": "Bei einer Entnahme ist die Art Pflicht (private, staff, gift, sample).",
2594
+ "data": {
2595
+ "code": "withdrawal_type_required"
2596
+ },
2597
+ "code": "withdrawal_type_required"
2598
+ }
2599
+ },
2600
+ {
2601
+ "channel": "api",
2602
+ "name": "error_record_stock_loss_exceeds_stock",
2603
+ "endpoint": "recordStockLoss",
2604
+ "path": "/v3/recordStockLoss",
2605
+ "params": {
2606
+ "idempotencyKey": "shop-ab-5",
2607
+ "reason": "theft",
2608
+ "items": [
2609
+ {
2610
+ "articleId": "roggenbrot",
2611
+ "quantity": 6000
2612
+ }
2613
+ ]
2614
+ },
2615
+ "httpStatus": 200,
2616
+ "headers": {
2617
+ "Kasseneck-Api-Version": "v3",
2618
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2619
+ },
2620
+ "response": {
2621
+ "status": "error",
2622
+ "message": "Mehr als am Standort vorhanden.",
2623
+ "data": {
2624
+ "code": "exceeds_stock"
2625
+ },
2626
+ "code": "exceeds_stock"
2627
+ }
2628
+ },
2629
+ {
2630
+ "channel": "api",
2631
+ "name": "change_stock_condition",
2632
+ "endpoint": "changeStockCondition",
2633
+ "path": "/v3/changeStockCondition",
2634
+ "params": {
2635
+ "idempotencyKey": "shop-zu-1",
2636
+ "from": "sellable",
2637
+ "to": "defective",
2638
+ "items": [
2639
+ {
2640
+ "articleId": "kipferl",
2641
+ "quantity": 3000
2642
+ }
2643
+ ]
2644
+ },
2645
+ "httpStatus": 200,
2646
+ "headers": {
2647
+ "Kasseneck-Api-Version": "v3",
2648
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2649
+ },
2650
+ "response": {
2651
+ "status": "success",
2652
+ "message": "",
2653
+ "data": {
2654
+ "operationId": "auto40",
2655
+ "movementIds": [
2656
+ "auto40_0",
2657
+ "auto40_1"
2658
+ ],
2659
+ "lotIds": [
2660
+ "auto40_L0"
2661
+ ],
2662
+ "warnings": []
2663
+ }
2664
+ }
2665
+ },
2666
+ {
2667
+ "channel": "api",
2668
+ "name": "error_change_stock_condition_invalid_condition",
2669
+ "endpoint": "changeStockCondition",
2670
+ "path": "/v3/changeStockCondition",
2671
+ "params": {
2672
+ "idempotencyKey": "shop-zu-2",
2673
+ "from": "sellable",
2674
+ "to": "broken",
2675
+ "items": [
2676
+ {
2677
+ "articleId": "kipferl",
2678
+ "quantity": 1000
2679
+ }
2680
+ ]
2681
+ },
2682
+ "httpStatus": 200,
2683
+ "headers": {
2684
+ "Kasseneck-Api-Version": "v3",
2685
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2686
+ },
2687
+ "response": {
2688
+ "status": "error",
2689
+ "message": "Zustand muss sellable oder defective sein.",
2690
+ "data": {
2691
+ "code": "invalid_condition"
2692
+ },
2693
+ "code": "invalid_condition"
2694
+ }
2695
+ },
2696
+ {
2697
+ "channel": "api",
2698
+ "name": "reverse_stock_movement",
2699
+ "endpoint": "reverseStockMovement",
2700
+ "path": "/v3/reverseStockMovement",
2701
+ "params": {
2702
+ "idempotencyKey": "shop-gb-1",
2703
+ "operationId": "auto40",
2704
+ "reason": "Doch einwandfrei"
2705
+ },
2706
+ "httpStatus": 200,
2707
+ "headers": {
2708
+ "Kasseneck-Api-Version": "v3",
2709
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2710
+ },
2711
+ "response": {
2712
+ "status": "success",
2713
+ "message": "",
2714
+ "data": {
2715
+ "operationId": "auto41",
2716
+ "movementIds": [
2717
+ "auto41_0",
2718
+ "auto41_1"
2719
+ ],
2720
+ "lotIds": [
2721
+ "auto41_L0"
2722
+ ],
2723
+ "warnings": []
2724
+ }
2725
+ }
2726
+ },
2727
+ {
2728
+ "channel": "api",
2729
+ "name": "error_reverse_stock_movement_already_reversed",
2730
+ "endpoint": "reverseStockMovement",
2731
+ "path": "/v3/reverseStockMovement",
2732
+ "params": {
2733
+ "idempotencyKey": "shop-gb-2",
2734
+ "operationId": "auto40",
2735
+ "reason": "Nochmal"
2736
+ },
2737
+ "httpStatus": 200,
2738
+ "headers": {
2739
+ "Kasseneck-Api-Version": "v3",
2740
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2741
+ },
2742
+ "response": {
2743
+ "status": "error",
2744
+ "message": "Dieser Vorgang wurde schon gegengebucht.",
2745
+ "data": {
2746
+ "code": "already_reversed"
2747
+ },
2748
+ "code": "already_reversed"
2749
+ }
2750
+ },
2751
+ {
2752
+ "channel": "api",
2753
+ "name": "error_reverse_stock_movement_operation_not_found",
2754
+ "endpoint": "reverseStockMovement",
2755
+ "path": "/v3/reverseStockMovement",
2756
+ "params": {
2757
+ "idempotencyKey": "shop-gb-3",
2758
+ "operationId": "gibt_es_nicht",
2759
+ "reason": "Irrtum"
2760
+ },
2761
+ "httpStatus": 200,
2762
+ "headers": {
2763
+ "Kasseneck-Api-Version": "v3",
2764
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2765
+ },
2766
+ "response": {
2767
+ "status": "error",
2768
+ "message": "Vorgang nicht gefunden.",
2769
+ "data": {
2770
+ "code": "operation_not_found"
2771
+ },
2772
+ "code": "operation_not_found"
2773
+ }
2774
+ },
2775
+ {
2776
+ "channel": "api",
2777
+ "name": "list_stock_movements_from_api",
2778
+ "endpoint": "listStockMovements",
2779
+ "path": "/v3/listStockMovements",
2780
+ "params": {
2781
+ "source": "api",
2782
+ "limit": 3
2783
+ },
2784
+ "httpStatus": 200,
2785
+ "headers": {
2786
+ "Kasseneck-Api-Version": "v3",
2787
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2788
+ },
2789
+ "response": {
2790
+ "status": "success",
2791
+ "message": "",
2792
+ "data": {
2793
+ "movements": [
2794
+ {
2795
+ "id": "auto41_1",
2796
+ "articleId": "kipferl",
2797
+ "type": "condition_in",
2798
+ "locationId": "haupt",
2799
+ "condition": "sellable",
2800
+ "quantityDelta": 3000,
2801
+ "reservedDelta": 0,
2802
+ "stockAfter": {
2803
+ "sellable": 74000,
2804
+ "defective": 0,
2805
+ "reserved": null
2806
+ },
2807
+ "operationId": "auto41",
2808
+ "source": {
2809
+ "id": null,
2810
+ "position": null,
2811
+ "type": "api",
2812
+ "register": null
2813
+ },
2814
+ "viennaDay": "2026-10-06",
2815
+ "time": "2026-10-06T06:02:10.000Z",
2816
+ "lots": [
2817
+ {
2818
+ "lotId": "auto41_L0",
2819
+ "quantity": 3000,
2820
+ "expiresOn": null,
2821
+ "batch": null,
2822
+ "serialNumber": null,
2823
+ "receivedAt": "2026-10-06T06:00:03.000Z"
2824
+ }
2825
+ ]
2826
+ },
2827
+ {
2828
+ "id": "auto41_0",
2829
+ "articleId": "kipferl",
2830
+ "type": "condition_out",
2831
+ "locationId": "haupt",
2832
+ "condition": "defective",
2833
+ "quantityDelta": -3000,
2834
+ "reservedDelta": 0,
2835
+ "stockAfter": {
2836
+ "sellable": 71000,
2837
+ "defective": 0,
2838
+ "reserved": null
2839
+ },
2840
+ "operationId": "auto41",
2841
+ "source": {
2842
+ "id": null,
2843
+ "position": null,
2844
+ "type": "api",
2845
+ "register": null
2846
+ },
2847
+ "viennaDay": "2026-10-06",
2848
+ "time": "2026-10-06T06:02:10.000Z",
2849
+ "lots": [
2850
+ {
2851
+ "lotId": "auto40_L0",
2852
+ "quantity": 3000,
2853
+ "expiresOn": null,
2854
+ "batch": null,
2855
+ "serialNumber": null,
2856
+ "receivedAt": "2026-10-06T06:00:03.000Z"
2857
+ }
2858
+ ]
2859
+ },
2860
+ {
2861
+ "id": "auto40_1",
2862
+ "articleId": "kipferl",
2863
+ "type": "condition_in",
2864
+ "locationId": "haupt",
2865
+ "condition": "defective",
2866
+ "quantityDelta": 3000,
2867
+ "reservedDelta": 0,
2868
+ "stockAfter": {
2869
+ "sellable": 71000,
2870
+ "defective": 3000,
2871
+ "reserved": null
2872
+ },
2873
+ "operationId": "auto40",
2874
+ "source": {
2875
+ "id": null,
2876
+ "position": null,
2877
+ "type": "api",
2878
+ "register": null
2879
+ },
2880
+ "viennaDay": "2026-10-06",
2881
+ "time": "2026-10-06T06:02:07.000Z",
2882
+ "lots": [
2883
+ {
2884
+ "lotId": "auto40_L0",
2885
+ "quantity": 3000,
2886
+ "expiresOn": null,
2887
+ "batch": null,
2888
+ "serialNumber": null,
2889
+ "receivedAt": "2026-10-06T06:00:03.000Z"
2890
+ }
2891
+ ]
2892
+ }
2893
+ ],
2894
+ "nextCursor": "eyJ6ZWl0IjoxNzkxMjY2NTI3MDAwLCJpZCI6ImF1dG80MF8xIn0"
2895
+ }
2896
+ }
2897
+ },
2898
+ {
2899
+ "channel": "api",
2900
+ "name": "create_reservation",
2901
+ "endpoint": "createReservation",
2902
+ "path": "/v3/createReservation",
2903
+ "params": {
2904
+ "idempotencyKey": "shop-res-1001",
2905
+ "items": [
2906
+ {
2907
+ "articleId": "roggenbrot",
2908
+ "quantity": 2000
2909
+ },
2910
+ {
2911
+ "articleId": "kipferl",
2912
+ "quantity": 6000,
2913
+ "locationId": "lieferwagen"
2914
+ }
2915
+ ],
2916
+ "reference": "Bestellung 1001",
2917
+ "expiresInMinutes": 30
2918
+ },
2919
+ "httpStatus": 200,
2920
+ "headers": {
2921
+ "Kasseneck-Api-Version": "v3",
2922
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2923
+ },
2924
+ "response": {
2925
+ "status": "success",
2926
+ "message": "",
2927
+ "data": {
2928
+ "reservation": {
2929
+ "id": "auto43",
2930
+ "status": "active",
2931
+ "reference": "Bestellung 1001",
2932
+ "items": [
2933
+ {
2934
+ "articleId": "roggenbrot",
2935
+ "locationId": "haupt",
2936
+ "quantity": 2000,
2937
+ "redeemed": 0,
2938
+ "released": 0
2939
+ },
2940
+ {
2941
+ "articleId": "kipferl",
2942
+ "locationId": "lieferwagen",
2943
+ "quantity": 6000,
2944
+ "redeemed": 0,
2945
+ "released": 0
2946
+ }
2947
+ ],
2948
+ "expiresAt": "2026-10-06T06:32:17.000Z",
2949
+ "createdAt": "2026-10-06T06:02:17.000Z"
2950
+ }
2951
+ }
2952
+ }
2953
+ },
2954
+ {
2955
+ "channel": "api",
2956
+ "name": "create_reservation_replayed",
2957
+ "endpoint": "createReservation",
2958
+ "path": "/v3/createReservation",
2959
+ "params": {
2960
+ "idempotencyKey": "shop-res-1001",
2961
+ "items": [
2962
+ {
2963
+ "articleId": "roggenbrot",
2964
+ "quantity": 2000
2965
+ },
2966
+ {
2967
+ "articleId": "kipferl",
2968
+ "quantity": 6000,
2969
+ "locationId": "lieferwagen"
2970
+ }
2971
+ ],
2972
+ "reference": "Bestellung 1001",
2973
+ "expiresInMinutes": 30
2974
+ },
2975
+ "httpStatus": 200,
2976
+ "headers": {
2977
+ "Kasseneck-Api-Version": "v3",
2978
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
2979
+ },
2980
+ "response": {
2981
+ "status": "success",
2982
+ "message": "",
2983
+ "data": {
2984
+ "reservation": {
2985
+ "id": "auto43",
2986
+ "status": "active",
2987
+ "reference": "Bestellung 1001",
2988
+ "items": [
2989
+ {
2990
+ "articleId": "roggenbrot",
2991
+ "locationId": "haupt",
2992
+ "quantity": 2000,
2993
+ "redeemed": 0,
2994
+ "released": 0
2995
+ },
2996
+ {
2997
+ "articleId": "kipferl",
2998
+ "locationId": "lieferwagen",
2999
+ "quantity": 6000,
3000
+ "redeemed": 0,
3001
+ "released": 0
3002
+ }
3003
+ ],
3004
+ "expiresAt": "2026-10-06T06:32:17.000Z",
3005
+ "createdAt": "2026-10-06T06:02:17.000Z"
3006
+ }
3007
+ }
3008
+ }
3009
+ },
3010
+ {
3011
+ "channel": "api",
3012
+ "name": "error_create_reservation_insufficient_available",
3013
+ "endpoint": "createReservation",
3014
+ "path": "/v3/createReservation",
3015
+ "params": {
3016
+ "idempotencyKey": "shop-res-1002",
3017
+ "items": [
3018
+ {
3019
+ "articleId": "roggenbrot",
3020
+ "quantity": 3000
3021
+ },
3022
+ {
3023
+ "articleId": "kipferl",
3024
+ "quantity": 1000
3025
+ }
3026
+ ]
3027
+ },
3028
+ "httpStatus": 200,
3029
+ "headers": {
3030
+ "Kasseneck-Api-Version": "v3",
3031
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3032
+ },
3033
+ "response": {
3034
+ "status": "error",
3035
+ "message": "Nicht genug verfügbarer Bestand für die Reservierung.",
3036
+ "data": {
3037
+ "code": "insufficient_available",
3038
+ "details": [
3039
+ {
3040
+ "articleId": "roggenbrot",
3041
+ "locationId": "haupt",
3042
+ "requested": 3000,
3043
+ "available": 2000
3044
+ }
3045
+ ]
3046
+ },
3047
+ "code": "insufficient_available"
3048
+ }
3049
+ },
3050
+ {
3051
+ "channel": "api",
3052
+ "name": "error_create_reservation_validation",
3053
+ "endpoint": "createReservation",
3054
+ "path": "/v3/createReservation",
3055
+ "params": {
3056
+ "idempotencyKey": "shop-res-1003",
3057
+ "items": [
3058
+ {
3059
+ "articleId": "kipferl",
3060
+ "quantity": 1000
3061
+ }
3062
+ ],
3063
+ "expiresInMinutes": 2
3064
+ },
3065
+ "httpStatus": 200,
3066
+ "headers": {
3067
+ "Kasseneck-Api-Version": "v3",
3068
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3069
+ },
3070
+ "response": {
3071
+ "status": "error",
3072
+ "message": "Bitte Eingaben prüfen.",
3073
+ "data": {
3074
+ "code": "validation",
3075
+ "errors": [
3076
+ {
3077
+ "field": "expiresInMinutes",
3078
+ "message": "Ganze Minuten von 5 bis 43200."
3079
+ }
3080
+ ]
3081
+ },
3082
+ "code": "validation"
3083
+ }
3084
+ },
3085
+ {
3086
+ "channel": "api",
3087
+ "name": "get_reservation",
3088
+ "endpoint": "getReservation",
3089
+ "path": "/v3/getReservation",
3090
+ "params": {
3091
+ "reservationId": "auto43"
3092
+ },
3093
+ "httpStatus": 200,
3094
+ "headers": {
3095
+ "Kasseneck-Api-Version": "v3",
3096
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3097
+ },
3098
+ "response": {
3099
+ "status": "success",
3100
+ "message": "",
3101
+ "data": {
3102
+ "reservation": {
3103
+ "id": "auto43",
3104
+ "status": "active",
3105
+ "reference": "Bestellung 1001",
3106
+ "items": [
3107
+ {
3108
+ "articleId": "roggenbrot",
3109
+ "locationId": "haupt",
3110
+ "quantity": 2000,
3111
+ "redeemed": 0,
3112
+ "released": 0
3113
+ },
3114
+ {
3115
+ "articleId": "kipferl",
3116
+ "locationId": "lieferwagen",
3117
+ "quantity": 6000,
3118
+ "redeemed": 0,
3119
+ "released": 0
3120
+ }
3121
+ ],
3122
+ "expiresAt": "2026-10-06T06:32:17.000Z",
3123
+ "createdAt": "2026-10-06T06:02:17.000Z"
3124
+ }
3125
+ }
3126
+ }
3127
+ },
3128
+ {
3129
+ "channel": "api",
3130
+ "name": "error_get_reservation_not_found",
3131
+ "endpoint": "getReservation",
3132
+ "path": "/v3/getReservation",
3133
+ "params": {
3134
+ "reservationId": "gibt_es_nicht"
3135
+ },
3136
+ "httpStatus": 200,
3137
+ "headers": {
3138
+ "Kasseneck-Api-Version": "v3",
3139
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3140
+ },
3141
+ "response": {
3142
+ "status": "error",
3143
+ "message": "Reservierung nicht gefunden.",
3144
+ "data": {
3145
+ "code": "reservation_not_found"
3146
+ },
3147
+ "code": "reservation_not_found"
3148
+ }
3149
+ },
3150
+ {
3151
+ "channel": "api",
3152
+ "name": "extend_reservation",
3153
+ "endpoint": "extendReservation",
3154
+ "path": "/v3/extendReservation",
3155
+ "params": {
3156
+ "idempotencyKey": "shop-res-1001-verl",
3157
+ "reservationId": "auto43",
3158
+ "expiresInMinutes": 60
3159
+ },
3160
+ "httpStatus": 200,
3161
+ "headers": {
3162
+ "Kasseneck-Api-Version": "v3",
3163
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3164
+ },
3165
+ "response": {
3166
+ "status": "success",
3167
+ "message": "",
3168
+ "data": {
3169
+ "reservation": {
3170
+ "id": "auto43",
3171
+ "status": "active",
3172
+ "reference": "Bestellung 1001",
3173
+ "items": [
3174
+ {
3175
+ "articleId": "roggenbrot",
3176
+ "locationId": "haupt",
3177
+ "quantity": 2000,
3178
+ "redeemed": 0,
3179
+ "released": 0
3180
+ },
3181
+ {
3182
+ "articleId": "kipferl",
3183
+ "locationId": "lieferwagen",
3184
+ "quantity": 6000,
3185
+ "redeemed": 0,
3186
+ "released": 0
3187
+ }
3188
+ ],
3189
+ "expiresAt": "2026-10-06T07:02:23.000Z",
3190
+ "createdAt": "2026-10-06T06:02:17.000Z"
3191
+ }
3192
+ }
3193
+ }
3194
+ },
3195
+ {
3196
+ "channel": "api",
3197
+ "name": "release_reservation_partial",
3198
+ "endpoint": "releaseReservation",
3199
+ "path": "/v3/releaseReservation",
3200
+ "params": {
3201
+ "idempotencyKey": "shop-res-1001-frei",
3202
+ "reservationId": "auto43",
3203
+ "items": [
3204
+ {
3205
+ "articleId": "kipferl",
3206
+ "quantity": 2000
3207
+ }
3208
+ ]
3209
+ },
3210
+ "httpStatus": 200,
3211
+ "headers": {
3212
+ "Kasseneck-Api-Version": "v3",
3213
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3214
+ },
3215
+ "response": {
3216
+ "status": "success",
3217
+ "message": "",
3218
+ "data": {
3219
+ "reservation": {
3220
+ "id": "auto43",
3221
+ "status": "active",
3222
+ "reference": "Bestellung 1001",
3223
+ "items": [
3224
+ {
3225
+ "articleId": "roggenbrot",
3226
+ "locationId": "haupt",
3227
+ "quantity": 2000,
3228
+ "redeemed": 0,
3229
+ "released": 0
3230
+ },
3231
+ {
3232
+ "articleId": "kipferl",
3233
+ "locationId": "lieferwagen",
3234
+ "quantity": 6000,
3235
+ "redeemed": 0,
3236
+ "released": 2000
3237
+ }
3238
+ ],
3239
+ "expiresAt": "2026-10-06T07:02:23.000Z",
3240
+ "createdAt": "2026-10-06T06:02:17.000Z"
3241
+ }
3242
+ }
3243
+ }
3244
+ },
3245
+ {
3246
+ "channel": "api",
3247
+ "name": "create_reservation_default_duration",
3248
+ "endpoint": "createReservation",
3249
+ "path": "/v3/createReservation",
3250
+ "params": {
3251
+ "idempotencyKey": "shop-res-1004",
3252
+ "items": [
3253
+ {
3254
+ "articleId": "kipferl",
3255
+ "quantity": 3000
3256
+ }
3257
+ ],
3258
+ "reference": "Bestellung 1004"
3259
+ },
3260
+ "httpStatus": 200,
3261
+ "headers": {
3262
+ "Kasseneck-Api-Version": "v3",
3263
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3264
+ },
3265
+ "response": {
3266
+ "status": "success",
3267
+ "message": "",
3268
+ "data": {
3269
+ "reservation": {
3270
+ "id": "auto49",
3271
+ "status": "active",
3272
+ "reference": "Bestellung 1004",
3273
+ "items": [
3274
+ {
3275
+ "articleId": "kipferl",
3276
+ "locationId": "haupt",
3277
+ "quantity": 3000,
3278
+ "redeemed": 0,
3279
+ "released": 0
3280
+ }
3281
+ ],
3282
+ "expiresAt": "2026-10-13T06:02:27.000Z",
3283
+ "createdAt": "2026-10-06T06:02:27.000Z"
3284
+ }
3285
+ }
3286
+ }
3287
+ },
3288
+ {
3289
+ "channel": "api",
3290
+ "name": "release_reservation",
3291
+ "endpoint": "releaseReservation",
3292
+ "path": "/v3/releaseReservation",
3293
+ "params": {
3294
+ "idempotencyKey": "shop-res-1004-frei",
3295
+ "reservationId": "auto49"
3296
+ },
3297
+ "httpStatus": 200,
3298
+ "headers": {
3299
+ "Kasseneck-Api-Version": "v3",
3300
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3301
+ },
3302
+ "response": {
3303
+ "status": "success",
3304
+ "message": "",
3305
+ "data": {
3306
+ "reservation": {
3307
+ "id": "auto49",
3308
+ "status": "released",
3309
+ "reference": "Bestellung 1004",
3310
+ "items": [
3311
+ {
3312
+ "articleId": "kipferl",
3313
+ "locationId": "haupt",
3314
+ "quantity": 3000,
3315
+ "redeemed": 0,
3316
+ "released": 3000
3317
+ }
3318
+ ],
3319
+ "expiresAt": "2026-10-13T06:02:27.000Z",
3320
+ "createdAt": "2026-10-06T06:02:27.000Z"
3321
+ }
3322
+ }
3323
+ }
3324
+ },
3325
+ {
3326
+ "channel": "api",
3327
+ "name": "error_extend_reservation_not_active",
3328
+ "endpoint": "extendReservation",
3329
+ "path": "/v3/extendReservation",
3330
+ "params": {
3331
+ "idempotencyKey": "shop-res-1004-verl",
3332
+ "reservationId": "auto49",
3333
+ "expiresInMinutes": 30
3334
+ },
3335
+ "httpStatus": 200,
3336
+ "headers": {
3337
+ "Kasseneck-Api-Version": "v3",
3338
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3339
+ },
3340
+ "response": {
3341
+ "status": "error",
3342
+ "message": "Die Reservierung ist nicht mehr aktiv.",
3343
+ "data": {
3344
+ "code": "reservation_not_active"
3345
+ },
3346
+ "code": "reservation_not_active"
3347
+ }
3348
+ },
3349
+ {
3350
+ "channel": "api",
3351
+ "name": "list_reservations_active",
3352
+ "endpoint": "listReservations",
3353
+ "path": "/v3/listReservations",
3354
+ "params": {
3355
+ "status": "active"
3356
+ },
3357
+ "httpStatus": 200,
3358
+ "headers": {
3359
+ "Kasseneck-Api-Version": "v3",
3360
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3361
+ },
3362
+ "response": {
3363
+ "status": "success",
3364
+ "message": "",
3365
+ "data": {
3366
+ "reservations": [
3367
+ {
3368
+ "id": "auto43",
3369
+ "status": "active",
3370
+ "reference": "Bestellung 1001",
3371
+ "items": [
3372
+ {
3373
+ "articleId": "roggenbrot",
3374
+ "locationId": "haupt",
3375
+ "quantity": 2000,
3376
+ "redeemed": 0,
3377
+ "released": 0
3378
+ },
3379
+ {
3380
+ "articleId": "kipferl",
3381
+ "locationId": "lieferwagen",
3382
+ "quantity": 6000,
3383
+ "redeemed": 0,
3384
+ "released": 2000
3385
+ }
3386
+ ],
3387
+ "expiresAt": "2026-10-06T07:02:23.000Z",
3388
+ "createdAt": "2026-10-06T06:02:17.000Z"
3389
+ }
3390
+ ],
3391
+ "nextCursor": null
3392
+ }
3393
+ }
3394
+ },
3395
+ {
3396
+ "channel": "api",
3397
+ "name": "list_reservations_by_reference",
3398
+ "endpoint": "listReservations",
3399
+ "path": "/v3/listReservations",
3400
+ "params": {
3401
+ "reference": "Bestellung 1004"
3402
+ },
3403
+ "httpStatus": 200,
3404
+ "headers": {
3405
+ "Kasseneck-Api-Version": "v3",
3406
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3407
+ },
3408
+ "response": {
3409
+ "status": "success",
3410
+ "message": "",
3411
+ "data": {
3412
+ "reservations": [
3413
+ {
3414
+ "id": "auto49",
3415
+ "status": "released",
3416
+ "reference": "Bestellung 1004",
3417
+ "items": [
3418
+ {
3419
+ "articleId": "kipferl",
3420
+ "locationId": "haupt",
3421
+ "quantity": 3000,
3422
+ "redeemed": 0,
3423
+ "released": 3000
3424
+ }
3425
+ ],
3426
+ "expiresAt": "2026-10-13T06:02:27.000Z",
3427
+ "createdAt": "2026-10-06T06:02:27.000Z"
3428
+ }
3429
+ ],
3430
+ "nextCursor": null
3431
+ }
3432
+ }
3433
+ },
3434
+ {
3435
+ "channel": "api",
3436
+ "name": "list_stock_movements_reservation",
3437
+ "endpoint": "listStockMovements",
3438
+ "path": "/v3/listStockMovements",
3439
+ "params": {
3440
+ "articleId": "kipferl",
3441
+ "type": "reservation",
3442
+ "limit": 3
3443
+ },
3444
+ "httpStatus": 200,
3445
+ "headers": {
3446
+ "Kasseneck-Api-Version": "v3",
3447
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3448
+ },
3449
+ "response": {
3450
+ "status": "success",
3451
+ "message": "",
3452
+ "data": {
3453
+ "movements": [
3454
+ {
3455
+ "id": "auto51_0",
3456
+ "articleId": "kipferl",
3457
+ "type": "reservation",
3458
+ "locationId": "haupt",
3459
+ "condition": "sellable",
3460
+ "quantityDelta": 0,
3461
+ "reservedDelta": -3000,
3462
+ "stockAfter": {
3463
+ "sellable": 74000,
3464
+ "defective": 0,
3465
+ "reserved": 0
3466
+ },
3467
+ "operationId": "auto51",
3468
+ "source": {
3469
+ "id": null,
3470
+ "position": null,
3471
+ "type": "api",
3472
+ "register": null
3473
+ },
3474
+ "viennaDay": "2026-10-06",
3475
+ "time": "2026-10-06T06:02:29.000Z",
3476
+ "lots": []
3477
+ },
3478
+ {
3479
+ "id": "auto50_0",
3480
+ "articleId": "kipferl",
3481
+ "type": "reservation",
3482
+ "locationId": "haupt",
3483
+ "condition": "sellable",
3484
+ "quantityDelta": 0,
3485
+ "reservedDelta": 3000,
3486
+ "stockAfter": {
3487
+ "sellable": 74000,
3488
+ "defective": 0,
3489
+ "reserved": 3000
3490
+ },
3491
+ "operationId": "auto50",
3492
+ "source": {
3493
+ "id": null,
3494
+ "position": null,
3495
+ "type": "api",
3496
+ "register": null
3497
+ },
3498
+ "viennaDay": "2026-10-06",
3499
+ "time": "2026-10-06T06:02:27.000Z",
3500
+ "lots": []
3501
+ },
3502
+ {
3503
+ "id": "auto47_0",
3504
+ "articleId": "kipferl",
3505
+ "type": "reservation",
3506
+ "locationId": "lieferwagen",
3507
+ "condition": "sellable",
3508
+ "quantityDelta": 0,
3509
+ "reservedDelta": -2000,
3510
+ "stockAfter": {
3511
+ "sellable": 24000,
3512
+ "defective": 0,
3513
+ "reserved": 4000
3514
+ },
3515
+ "operationId": "auto47",
3516
+ "source": {
3517
+ "id": null,
3518
+ "position": null,
3519
+ "type": "api",
3520
+ "register": null
3521
+ },
3522
+ "viennaDay": "2026-10-06",
3523
+ "time": "2026-10-06T06:02:25.000Z",
3524
+ "lots": []
3525
+ }
3526
+ ],
3527
+ "nextCursor": "eyJ6ZWl0IjoxNzkxMjY2NTQ1MDAwLCJpZCI6ImF1dG80N18wIn0"
3528
+ }
3529
+ }
3530
+ },
3531
+ {
3532
+ "channel": "api",
3533
+ "name": "get_reservation_redeemed",
3534
+ "endpoint": "getReservation",
3535
+ "path": "/v3/getReservation",
3536
+ "params": {
3537
+ "reservationId": "auto53"
3538
+ },
3539
+ "httpStatus": 200,
3540
+ "headers": {
3541
+ "Kasseneck-Api-Version": "v3",
3542
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3543
+ },
3544
+ "response": {
3545
+ "status": "success",
3546
+ "message": "",
3547
+ "data": {
3548
+ "reservation": {
3549
+ "id": "auto53",
3550
+ "status": "redeemed",
3551
+ "reference": "Bestellung 1005",
3552
+ "items": [
3553
+ {
3554
+ "articleId": "roggenbrot",
3555
+ "locationId": "haupt",
3556
+ "quantity": 1000,
3557
+ "redeemed": 1000,
3558
+ "released": 0
3559
+ }
3560
+ ],
3561
+ "expiresAt": "2026-10-13T06:02:35.000Z",
3562
+ "createdAt": "2026-10-06T06:02:35.000Z"
3563
+ }
3564
+ }
3565
+ }
3566
+ },
3567
+ {
3568
+ "channel": "api",
3569
+ "name": "get_reservation_expired",
3570
+ "endpoint": "getReservation",
3571
+ "path": "/v3/getReservation",
3572
+ "params": {
3573
+ "reservationId": "auto43"
3574
+ },
3575
+ "httpStatus": 200,
3576
+ "headers": {
3577
+ "Kasseneck-Api-Version": "v3",
3578
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
3579
+ },
3580
+ "response": {
3581
+ "status": "success",
3582
+ "message": "",
3583
+ "data": {
3584
+ "reservation": {
3585
+ "id": "auto43",
3586
+ "status": "expired",
3587
+ "reference": "Bestellung 1001",
3588
+ "items": [
3589
+ {
3590
+ "articleId": "roggenbrot",
3591
+ "locationId": "haupt",
3592
+ "quantity": 2000,
3593
+ "redeemed": 0,
3594
+ "released": 2000
3595
+ },
3596
+ {
3597
+ "articleId": "kipferl",
3598
+ "locationId": "lieferwagen",
3599
+ "quantity": 6000,
3600
+ "redeemed": 0,
3601
+ "released": 6000
3602
+ }
3603
+ ],
3604
+ "expiresAt": "2026-10-06T07:02:23.000Z",
3605
+ "createdAt": "2026-10-06T06:02:17.000Z"
3606
+ }
3607
+ }
3608
+ }
3609
+ }
3610
+ ],
3611
+ "webhookEvents": [
3612
+ {
3613
+ "event": "stock.below_minimum",
3614
+ "body": {
3615
+ "id": "evt_wKLtZJFBjowUBsa875du",
3616
+ "type": "stock.below_minimum",
3617
+ "createdAt": 1791266404000,
3618
+ "accountId": "kornblum",
3619
+ "data": {
3620
+ "articleId": "roggenbrot",
3621
+ "locationId": "haupt",
3622
+ "available": 4000,
3623
+ "minStock": 5000
3624
+ }
3625
+ }
3626
+ },
3627
+ {
3628
+ "event": "stock.changed",
3629
+ "body": {
3630
+ "id": "evt_6SjOpc8E0wUJamYx4wDc",
3631
+ "type": "stock.changed",
3632
+ "createdAt": 1791266404000,
3633
+ "accountId": "kornblum",
3634
+ "data": {
3635
+ "articleId": "kipferl",
3636
+ "locationId": "haupt",
3637
+ "onHand": 40000,
3638
+ "reserved": 0,
3639
+ "available": 40000,
3640
+ "defective": 0,
3641
+ "sequence": 1,
3642
+ "updatedAt": "2026-10-06T06:00:03.000Z",
3643
+ "cause": "goods_receipt",
3644
+ "movementId": "auto1_1"
3645
+ }
3646
+ }
3647
+ },
3648
+ {
3649
+ "event": "stock.changed",
3650
+ "body": {
3651
+ "id": "evt_xF1Ox0CUvFfDWlmVM9xp",
3652
+ "type": "stock.changed",
3653
+ "createdAt": 1791266404000,
3654
+ "accountId": "kornblum",
3655
+ "data": {
3656
+ "articleId": "roggenbrot",
3657
+ "locationId": "haupt",
3658
+ "onHand": 4000,
3659
+ "reserved": 0,
3660
+ "available": 4000,
3661
+ "defective": 0,
3662
+ "sequence": 2,
3663
+ "updatedAt": "2026-10-06T06:00:04.000Z",
3664
+ "cause": "loss",
3665
+ "movementId": "auto2_0"
3666
+ }
3667
+ }
3668
+ },
3669
+ {
3670
+ "event": "article.updated",
3671
+ "body": {
3672
+ "id": "evt_y3OmCZX2aGSmO51tvMVg",
3673
+ "type": "article.updated",
3674
+ "createdAt": 1791266404000,
3675
+ "accountId": "kornblum",
3676
+ "data": {
3677
+ "id": "kipferl",
3678
+ "name": "Butterkipferl",
3679
+ "description": null,
3680
+ "unitPriceCents": 130,
3681
+ "vatRate": 10,
3682
+ "unit": "Stk",
3683
+ "number": "A-200",
3684
+ "ean": null,
3685
+ "internalCode": "KB-200",
3686
+ "groupId": "gebaeck",
3687
+ "revenueGroupId": null,
3688
+ "stockTracked": true,
3689
+ "stockKind": "quantity",
3690
+ "minStock": null,
3691
+ "active": true,
3692
+ "createdAt": "2026-10-01T04:30:00.000Z",
3693
+ "updatedAt": "2026-10-06T06:00:04.000Z",
3694
+ "stockLocationIds": [
3695
+ "haupt",
3696
+ "lieferwagen"
3697
+ ],
3698
+ "minStockByLocation": {}
3699
+ }
3700
+ }
3701
+ },
3702
+ {
3703
+ "event": "article.created",
3704
+ "body": {
3705
+ "id": "evt_OBMDnXTaeE7t8CbeZjMY",
3706
+ "type": "article.created",
3707
+ "createdAt": 1791266404000,
3708
+ "accountId": "kornblum",
3709
+ "data": {
3710
+ "id": "semmel",
3711
+ "name": "Kaisersemmel",
3712
+ "description": null,
3713
+ "unitPriceCents": 120,
3714
+ "vatRate": 10,
3715
+ "unit": "Stk",
3716
+ "number": "A-300",
3717
+ "ean": null,
3718
+ "internalCode": "KB-300",
3719
+ "groupId": "gebaeck",
3720
+ "revenueGroupId": null,
3721
+ "stockTracked": true,
3722
+ "stockKind": "quantity",
3723
+ "minStock": null,
3724
+ "active": true,
3725
+ "createdAt": "2026-10-06T06:00:04.000Z",
3726
+ "updatedAt": "2026-10-06T06:00:04.000Z",
3727
+ "stockLocationIds": [
3728
+ "haupt"
3729
+ ],
3730
+ "minStockByLocation": {}
3731
+ }
3732
+ }
3733
+ },
3734
+ {
3735
+ "event": "article.deactivated",
3736
+ "body": {
3737
+ "id": "evt_VKmC9XoEcVNwBCwlbdw7",
3738
+ "type": "article.deactivated",
3739
+ "createdAt": 1791266404000,
3740
+ "accountId": "kornblum",
3741
+ "data": {
3742
+ "id": "semmel",
3743
+ "name": "Kaisersemmel",
3744
+ "description": null,
3745
+ "unitPriceCents": 120,
3746
+ "vatRate": 10,
3747
+ "unit": "Stk",
3748
+ "number": "A-300",
3749
+ "ean": null,
3750
+ "internalCode": "KB-300",
3751
+ "groupId": "gebaeck",
3752
+ "revenueGroupId": null,
3753
+ "stockTracked": true,
3754
+ "stockKind": "quantity",
3755
+ "minStock": null,
1510
3756
  "active": false,
1511
3757
  "createdAt": "2026-10-06T06:00:04.000Z",
1512
3758
  "updatedAt": "2026-10-06T06:00:04.001Z",
1513
3759
  "stockLocationIds": [
1514
3760
  "haupt"
1515
- ]
3761
+ ],
3762
+ "minStockByLocation": {}
3763
+ }
3764
+ }
3765
+ },
3766
+ {
3767
+ "event": "reservation.released",
3768
+ "body": {
3769
+ "id": "evt_Dfmu8JDwcnPAV1FQs0I1",
3770
+ "type": "reservation.released",
3771
+ "createdAt": 1791266545000,
3772
+ "accountId": "kornblum",
3773
+ "data": {
3774
+ "id": "auto43",
3775
+ "status": "active",
3776
+ "reference": "Bestellung 1001",
3777
+ "items": [
3778
+ {
3779
+ "articleId": "roggenbrot",
3780
+ "locationId": "haupt",
3781
+ "quantity": 2000,
3782
+ "redeemed": 0,
3783
+ "released": 0
3784
+ },
3785
+ {
3786
+ "articleId": "kipferl",
3787
+ "locationId": "lieferwagen",
3788
+ "quantity": 6000,
3789
+ "redeemed": 0,
3790
+ "released": 2000
3791
+ }
3792
+ ],
3793
+ "expiresAt": "2026-10-06T07:02:23.000Z",
3794
+ "createdAt": "2026-10-06T06:02:17.000Z"
3795
+ }
3796
+ }
3797
+ },
3798
+ {
3799
+ "event": "reservation.released",
3800
+ "body": {
3801
+ "id": "evt_rUOsoTiFTFFLwqzYMk0T",
3802
+ "type": "reservation.released",
3803
+ "createdAt": 1791266549000,
3804
+ "accountId": "kornblum",
3805
+ "data": {
3806
+ "id": "auto49",
3807
+ "status": "released",
3808
+ "reference": "Bestellung 1004",
3809
+ "items": [
3810
+ {
3811
+ "articleId": "kipferl",
3812
+ "locationId": "haupt",
3813
+ "quantity": 3000,
3814
+ "redeemed": 0,
3815
+ "released": 3000
3816
+ }
3817
+ ],
3818
+ "expiresAt": "2026-10-13T06:02:27.000Z",
3819
+ "createdAt": "2026-10-06T06:02:27.000Z"
3820
+ }
3821
+ }
3822
+ },
3823
+ {
3824
+ "event": "reservation.redeemed",
3825
+ "body": {
3826
+ "id": "evt_8OrjPFWWKMAG8SzUBqCW",
3827
+ "type": "reservation.redeemed",
3828
+ "createdAt": 1791266555000,
3829
+ "accountId": "kornblum",
3830
+ "data": {
3831
+ "id": "auto53",
3832
+ "status": "redeemed",
3833
+ "reference": "Bestellung 1005",
3834
+ "items": [
3835
+ {
3836
+ "articleId": "roggenbrot",
3837
+ "locationId": "haupt",
3838
+ "quantity": 1000,
3839
+ "redeemed": 1000,
3840
+ "released": 0
3841
+ }
3842
+ ],
3843
+ "expiresAt": "2026-10-13T06:02:35.000Z",
3844
+ "createdAt": "2026-10-06T06:02:35.000Z"
3845
+ }
3846
+ }
3847
+ },
3848
+ {
3849
+ "event": "reservation.expired",
3850
+ "body": {
3851
+ "id": "evt_yURAAwBJvs0LxnT5JTcl",
3852
+ "type": "reservation.expired",
3853
+ "createdAt": 1791273757000,
3854
+ "accountId": "kornblum",
3855
+ "data": {
3856
+ "id": "auto43",
3857
+ "status": "expired",
3858
+ "reference": "Bestellung 1001",
3859
+ "items": [
3860
+ {
3861
+ "articleId": "roggenbrot",
3862
+ "locationId": "haupt",
3863
+ "quantity": 2000,
3864
+ "redeemed": 0,
3865
+ "released": 2000
3866
+ },
3867
+ {
3868
+ "articleId": "kipferl",
3869
+ "locationId": "lieferwagen",
3870
+ "quantity": 6000,
3871
+ "redeemed": 0,
3872
+ "released": 6000
3873
+ }
3874
+ ],
3875
+ "expiresAt": "2026-10-06T07:02:23.000Z",
3876
+ "createdAt": "2026-10-06T06:02:17.000Z"
1516
3877
  }
1517
3878
  }
1518
3879
  }