@kreiseck/kasseneck-api 1.2.2 → 1.4.0

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 (81) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/README.md +119 -3
  3. package/dist/cjs/client/aufrufe.d.ts +2 -2
  4. package/dist/cjs/client/aufrufe.js +30 -0
  5. package/dist/cjs/inventory/api.d.ts +45 -0
  6. package/dist/cjs/inventory/api.js +38 -0
  7. package/dist/cjs/inventory/auth.d.ts +17 -0
  8. package/dist/cjs/inventory/auth.js +27 -0
  9. package/dist/cjs/inventory/endpunkte.d.ts +71 -0
  10. package/dist/cjs/inventory/endpunkte.js +285 -0
  11. package/dist/cjs/inventory/fehler.d.ts +33 -0
  12. package/dist/cjs/inventory/fehler.js +47 -0
  13. package/dist/cjs/inventory/index.d.ts +19 -0
  14. package/dist/cjs/inventory/index.js +64 -0
  15. package/dist/cjs/inventory/lesen.d.ts +38 -0
  16. package/dist/cjs/inventory/lesen.js +294 -0
  17. package/dist/cjs/inventory/typen.d.ts +319 -0
  18. package/dist/cjs/inventory/typen.js +14 -0
  19. package/dist/cjs/inventory/vertrag.d.ts +76 -0
  20. package/dist/cjs/inventory/vertrag.js +166 -0
  21. package/dist/cjs/inventory/webhook.d.ts +50 -0
  22. package/dist/cjs/inventory/webhook.js +110 -0
  23. package/dist/cjs/pos/artikel.d.ts +20 -0
  24. package/dist/cjs/pos/artikel.js +8 -0
  25. package/dist/cjs/pos/index.d.ts +1 -1
  26. package/dist/cjs/pos/index.js +2 -1
  27. package/dist/cjs/pos/texte.d.ts +41 -0
  28. package/dist/cjs/pos/texte.js +29 -1
  29. package/dist/cjs/stored/vokabular.d.ts +1 -1
  30. package/dist/cjs/stored/vokabular.js +1 -1
  31. package/dist/cjs/version.d.ts +1 -1
  32. package/dist/cjs/version.js +1 -1
  33. package/dist/esm/client/aufrufe.d.ts +2 -2
  34. package/dist/esm/client/aufrufe.js +30 -0
  35. package/dist/esm/inventory/api.d.ts +45 -0
  36. package/dist/esm/inventory/api.js +35 -0
  37. package/dist/esm/inventory/auth.d.ts +17 -0
  38. package/dist/esm/inventory/auth.js +24 -0
  39. package/dist/esm/inventory/endpunkte.d.ts +71 -0
  40. package/dist/esm/inventory/endpunkte.js +266 -0
  41. package/dist/esm/inventory/fehler.d.ts +33 -0
  42. package/dist/esm/inventory/fehler.js +40 -0
  43. package/dist/esm/inventory/index.d.ts +19 -0
  44. package/dist/esm/inventory/index.js +18 -0
  45. package/dist/esm/inventory/lesen.d.ts +38 -0
  46. package/dist/esm/inventory/lesen.js +278 -0
  47. package/dist/esm/inventory/typen.d.ts +319 -0
  48. package/dist/esm/inventory/typen.js +13 -0
  49. package/dist/esm/inventory/vertrag.d.ts +76 -0
  50. package/dist/esm/inventory/vertrag.js +163 -0
  51. package/dist/esm/inventory/webhook.d.ts +50 -0
  52. package/dist/esm/inventory/webhook.js +101 -0
  53. package/dist/esm/pos/artikel.d.ts +20 -0
  54. package/dist/esm/pos/artikel.js +8 -0
  55. package/dist/esm/pos/index.d.ts +1 -1
  56. package/dist/esm/pos/index.js +1 -1
  57. package/dist/esm/pos/texte.d.ts +41 -0
  58. package/dist/esm/pos/texte.js +28 -0
  59. package/dist/esm/stored/vokabular.d.ts +1 -1
  60. package/dist/esm/stored/vokabular.js +1 -1
  61. package/dist/esm/version.d.ts +1 -1
  62. package/dist/esm/version.js +1 -1
  63. package/fixtures/hobex-hps-codes.json +1 -1
  64. package/fixtures/invoice-api.schema.json +1 -1
  65. package/fixtures/invoice-texts.json +1 -1
  66. package/fixtures/pos-texts.json +36 -1
  67. package/fixtures/surface.json +161 -3
  68. package/fixtures/v3/README.md +9 -1
  69. package/fixtures/v3/antworten/belege.json +2 -2
  70. package/fixtures/v3/antworten/belegmail.json +2 -2
  71. package/fixtures/v3/antworten/kasse-belege.json +2 -2
  72. package/fixtures/v3/antworten/kasse.json +3 -3
  73. package/fixtures/v3/antworten/lager.json +1520 -0
  74. package/fixtures/v3/antworten/rechnungen.json +2 -2
  75. package/fixtures/v3/antworten/storno.json +2 -2
  76. package/fixtures/v3/stored/belege.json +2 -2
  77. package/fixtures/v3/stored/kasse.json +404 -4
  78. package/fixtures/v3/stored/rechnungen.json +2 -2
  79. package/fixtures/v3/v3-vokabular.json +423 -6
  80. package/fixtures/v3/zahlbetrag-faelle.json +2 -2
  81. package/package.json +14 -2
@@ -0,0 +1,1520 @@
1
+ {
2
+ "_hinweis": "Vertrags-Export /v3, erzeugt aus den echten Handlern (npm run vertrag:v3 in functions/ und functions-kasse/). Nicht von Hand pflegen.",
3
+ "_quelle": {
4
+ "sha256": "ca5579cac3997ad4ad7269d7645bb67aabdf29ab4fce4645592ea4c3c1d5c30b",
5
+ "inputsSha256": "f49e446a8b696f54ca18db0c83a35792294ce53e54b1be31fc1bd69dd8f99d13",
6
+ "backendPackage": "@kreiseck/kasseneck-api@0.14.0",
7
+ "inputs": [
8
+ "functions-kasse/gemeinsam/api-rand.js",
9
+ "functions-kasse/gemeinsam/api-vokabular-v3.js",
10
+ "functions-kasse/gemeinsam/webhook-versand.js",
11
+ "functions-kasse/konto-webhook-core.js",
12
+ "functions-kasse/lager-api-core.js",
13
+ "functions-kasse/lager-api-endpoints.js",
14
+ "functions-kasse/lager-api-ereignisse.js",
15
+ "functions-kasse/lager-buchung.js",
16
+ "functions-kasse/lager-core.js",
17
+ "functions-kasse/lager-endpoints.js",
18
+ "functions-kasse/test/unit/fixtures/v3-waechter.js",
19
+ "functions-kasse/test/unit/v3-vertrag-export-lager.test.js",
20
+ "functions/test/unit/fixtures/vertrag-v3/ablage.js"
21
+ ]
22
+ },
23
+ "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.",
25
+ "cases": [
26
+ {
27
+ "channel": "api",
28
+ "name": "create_webhook",
29
+ "endpoint": "createWebhook",
30
+ "path": "/v3/createWebhook",
31
+ "params": {
32
+ "url": "https://shop.baeckerei-kornblum.at/kasseneck-webhook",
33
+ "events": [
34
+ "stock.changed",
35
+ "stock.below_minimum",
36
+ "article.created",
37
+ "article.updated",
38
+ "article.deactivated"
39
+ ],
40
+ "description": "Webshop Kornblum"
41
+ },
42
+ "httpStatus": 200,
43
+ "headers": {
44
+ "Kasseneck-Api-Version": "v3",
45
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
46
+ },
47
+ "response": {
48
+ "status": "success",
49
+ "message": "",
50
+ "data": {
51
+ "secret": "whsec_EXAMPLEDF1171A2AAAAAAAAAAAAAAAAA",
52
+ "webhook": {
53
+ "id": "3pJJwmZZjQTW",
54
+ "url": "https://shop.baeckerei-kornblum.at/kasseneck-webhook",
55
+ "createdAt": "2026-10-06T06:00:02.000Z",
56
+ "events": [
57
+ "stock.changed",
58
+ "stock.below_minimum",
59
+ "article.created",
60
+ "article.updated",
61
+ "article.deactivated"
62
+ ],
63
+ "active": true,
64
+ "description": "Webshop Kornblum",
65
+ "lastDelivery": null,
66
+ "consecutiveFailures": 0
67
+ }
68
+ }
69
+ }
70
+ },
71
+ {
72
+ "channel": "api",
73
+ "name": "list_locations",
74
+ "endpoint": "listLocations",
75
+ "path": "/v3/listLocations",
76
+ "params": {},
77
+ "httpStatus": 200,
78
+ "headers": {
79
+ "Kasseneck-Api-Version": "v3",
80
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
81
+ },
82
+ "response": {
83
+ "status": "success",
84
+ "message": "",
85
+ "data": {
86
+ "locations": [
87
+ {
88
+ "id": "lager1",
89
+ "name": "Lager Kornblum",
90
+ "type": "warehouse",
91
+ "address": {
92
+ "street": "Mühlgasse 4",
93
+ "zip": "5020",
94
+ "city": "Salzburg",
95
+ "country": "AT"
96
+ },
97
+ "licensePlate": null,
98
+ "active": true
99
+ },
100
+ {
101
+ "id": "lieferwagen",
102
+ "name": "Lieferwagen",
103
+ "type": "vehicle",
104
+ "address": null,
105
+ "licensePlate": "S-123AB",
106
+ "active": true
107
+ },
108
+ {
109
+ "id": "haupt",
110
+ "name": "Hauptstandort",
111
+ "type": "store",
112
+ "address": null,
113
+ "licensePlate": null,
114
+ "active": true
115
+ }
116
+ ]
117
+ }
118
+ }
119
+ },
120
+ {
121
+ "channel": "api",
122
+ "name": "get_article",
123
+ "endpoint": "getArticle",
124
+ "path": "/v3/getArticle",
125
+ "params": {
126
+ "articleId": "roggenbrot"
127
+ },
128
+ "httpStatus": 200,
129
+ "headers": {
130
+ "Kasseneck-Api-Version": "v3",
131
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
132
+ },
133
+ "response": {
134
+ "status": "success",
135
+ "message": "",
136
+ "data": {
137
+ "article": {
138
+ "id": "roggenbrot",
139
+ "name": "Roggenbrot 1 kg",
140
+ "unitPriceCents": 450,
141
+ "vatRate": 10,
142
+ "unit": "Stk",
143
+ "number": "A-100",
144
+ "ean": "9001234567896",
145
+ "internalCode": null,
146
+ "groupId": "brot",
147
+ "revenueGroupId": null,
148
+ "stockTracked": true,
149
+ "minStock": 5000,
150
+ "active": true,
151
+ "createdAt": "2026-10-01T04:00:00.000Z",
152
+ "updatedAt": "2026-10-06T06:00:04.000Z",
153
+ "stockLocationIds": [
154
+ "haupt"
155
+ ]
156
+ }
157
+ }
158
+ }
159
+ },
160
+ {
161
+ "channel": "api",
162
+ "name": "error_get_article_not_found",
163
+ "endpoint": "getArticle",
164
+ "path": "/v3/getArticle",
165
+ "params": {
166
+ "articleId": "gibt_es_nicht"
167
+ },
168
+ "httpStatus": 200,
169
+ "headers": {
170
+ "Kasseneck-Api-Version": "v3",
171
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
172
+ },
173
+ "response": {
174
+ "status": "error",
175
+ "message": "Artikel nicht gefunden.",
176
+ "data": {
177
+ "code": "article_not_found"
178
+ },
179
+ "code": "article_not_found"
180
+ }
181
+ },
182
+ {
183
+ "channel": "api",
184
+ "name": "list_articles_first_page",
185
+ "endpoint": "listArticles",
186
+ "path": "/v3/listArticles",
187
+ "params": {
188
+ "limit": 2
189
+ },
190
+ "httpStatus": 200,
191
+ "headers": {
192
+ "Kasseneck-Api-Version": "v3",
193
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
194
+ },
195
+ "response": {
196
+ "status": "success",
197
+ "message": "",
198
+ "data": {
199
+ "articles": [
200
+ {
201
+ "id": "kipferl",
202
+ "name": "Butterkipferl",
203
+ "unitPriceCents": 130,
204
+ "vatRate": 10,
205
+ "unit": "Stk",
206
+ "number": "A-200",
207
+ "ean": null,
208
+ "internalCode": "KB-200",
209
+ "groupId": "gebaeck",
210
+ "revenueGroupId": null,
211
+ "stockTracked": true,
212
+ "minStock": null,
213
+ "active": true,
214
+ "createdAt": "2026-10-01T04:30:00.000Z",
215
+ "updatedAt": "2026-10-06T06:00:04.000Z",
216
+ "stockLocationIds": [
217
+ "haupt",
218
+ "lieferwagen"
219
+ ]
220
+ },
221
+ {
222
+ "id": "roggenbrot",
223
+ "name": "Roggenbrot 1 kg",
224
+ "unitPriceCents": 450,
225
+ "vatRate": 10,
226
+ "unit": "Stk",
227
+ "number": "A-100",
228
+ "ean": "9001234567896",
229
+ "internalCode": null,
230
+ "groupId": "brot",
231
+ "revenueGroupId": null,
232
+ "stockTracked": true,
233
+ "minStock": 5000,
234
+ "active": true,
235
+ "createdAt": "2026-10-01T04:00:00.000Z",
236
+ "updatedAt": "2026-10-06T06:00:04.000Z",
237
+ "stockLocationIds": [
238
+ "haupt"
239
+ ]
240
+ }
241
+ ],
242
+ "nextCursor": "eyJ6ZWl0IjoxNzkxMjY2NDA0MDAwMDAwLCJpZCI6InJvZ2dlbmJyb3QifQ"
243
+ }
244
+ }
245
+ },
246
+ {
247
+ "channel": "api",
248
+ "name": "list_articles_next_page",
249
+ "endpoint": "listArticles",
250
+ "path": "/v3/listArticles",
251
+ "params": {
252
+ "limit": 2,
253
+ "cursor": "eyJ6ZWl0IjoxNzkxMjY2NDA0MDAwMDAwLCJpZCI6InJvZ2dlbmJyb3QifQ"
254
+ },
255
+ "httpStatus": 200,
256
+ "headers": {
257
+ "Kasseneck-Api-Version": "v3",
258
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
259
+ },
260
+ "response": {
261
+ "status": "success",
262
+ "message": "",
263
+ "data": {
264
+ "articles": [
265
+ {
266
+ "id": "semmel",
267
+ "name": "Kaisersemmel",
268
+ "unitPriceCents": 120,
269
+ "vatRate": 10,
270
+ "unit": "Stk",
271
+ "number": "A-300",
272
+ "ean": null,
273
+ "internalCode": "KB-300",
274
+ "groupId": "gebaeck",
275
+ "revenueGroupId": null,
276
+ "stockTracked": true,
277
+ "minStock": null,
278
+ "active": false,
279
+ "createdAt": "2026-10-06T06:00:04.000Z",
280
+ "updatedAt": "2026-10-06T06:00:04.001Z",
281
+ "stockLocationIds": [
282
+ "haupt"
283
+ ]
284
+ }
285
+ ],
286
+ "nextCursor": null
287
+ }
288
+ }
289
+ },
290
+ {
291
+ "channel": "api",
292
+ "name": "list_articles_updated_since",
293
+ "endpoint": "listArticles",
294
+ "path": "/v3/listArticles",
295
+ "params": {
296
+ "updatedSince": "2026-10-05T04:15:00.000Z",
297
+ "active": true
298
+ },
299
+ "httpStatus": 200,
300
+ "headers": {
301
+ "Kasseneck-Api-Version": "v3",
302
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
303
+ },
304
+ "response": {
305
+ "status": "success",
306
+ "message": "",
307
+ "data": {
308
+ "articles": [
309
+ {
310
+ "id": "kipferl",
311
+ "name": "Butterkipferl",
312
+ "unitPriceCents": 130,
313
+ "vatRate": 10,
314
+ "unit": "Stk",
315
+ "number": "A-200",
316
+ "ean": null,
317
+ "internalCode": "KB-200",
318
+ "groupId": "gebaeck",
319
+ "revenueGroupId": null,
320
+ "stockTracked": true,
321
+ "minStock": null,
322
+ "active": true,
323
+ "createdAt": "2026-10-01T04:30:00.000Z",
324
+ "updatedAt": "2026-10-06T06:00:04.000Z",
325
+ "stockLocationIds": [
326
+ "haupt",
327
+ "lieferwagen"
328
+ ]
329
+ },
330
+ {
331
+ "id": "roggenbrot",
332
+ "name": "Roggenbrot 1 kg",
333
+ "unitPriceCents": 450,
334
+ "vatRate": 10,
335
+ "unit": "Stk",
336
+ "number": "A-100",
337
+ "ean": "9001234567896",
338
+ "internalCode": null,
339
+ "groupId": "brot",
340
+ "revenueGroupId": null,
341
+ "stockTracked": true,
342
+ "minStock": 5000,
343
+ "active": true,
344
+ "createdAt": "2026-10-01T04:00:00.000Z",
345
+ "updatedAt": "2026-10-06T06:00:04.000Z",
346
+ "stockLocationIds": [
347
+ "haupt"
348
+ ]
349
+ }
350
+ ],
351
+ "nextCursor": null
352
+ }
353
+ }
354
+ },
355
+ {
356
+ "channel": "api",
357
+ "name": "error_list_articles_invalid_cursor",
358
+ "endpoint": "listArticles",
359
+ "path": "/v3/listArticles",
360
+ "params": {
361
+ "cursor": "kaputt"
362
+ },
363
+ "httpStatus": 200,
364
+ "headers": {
365
+ "Kasseneck-Api-Version": "v3",
366
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
367
+ },
368
+ "response": {
369
+ "status": "error",
370
+ "message": "Der Blätter-Zeiger ist ungültig.",
371
+ "data": {
372
+ "code": "invalid_cursor"
373
+ },
374
+ "code": "invalid_cursor"
375
+ }
376
+ },
377
+ {
378
+ "channel": "api",
379
+ "name": "error_list_articles_validation",
380
+ "endpoint": "listArticles",
381
+ "path": "/v3/listArticles",
382
+ "params": {
383
+ "limit": 500
384
+ },
385
+ "httpStatus": 200,
386
+ "headers": {
387
+ "Kasseneck-Api-Version": "v3",
388
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
389
+ },
390
+ "response": {
391
+ "status": "error",
392
+ "message": "Bitte Eingaben prüfen.",
393
+ "data": {
394
+ "code": "validation",
395
+ "errors": [
396
+ {
397
+ "field": "limit",
398
+ "message": "Limit muss eine ganze Zahl von 1 bis 200 sein."
399
+ }
400
+ ]
401
+ },
402
+ "code": "validation"
403
+ }
404
+ },
405
+ {
406
+ "channel": "api",
407
+ "name": "lookup_article_by_ean",
408
+ "endpoint": "lookupArticleByCode",
409
+ "path": "/v3/lookupArticleByCode",
410
+ "params": {
411
+ "code": "9001234567896"
412
+ },
413
+ "httpStatus": 200,
414
+ "headers": {
415
+ "Kasseneck-Api-Version": "v3",
416
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
417
+ },
418
+ "response": {
419
+ "status": "success",
420
+ "message": "",
421
+ "data": {
422
+ "article": {
423
+ "id": "roggenbrot",
424
+ "name": "Roggenbrot 1 kg",
425
+ "unitPriceCents": 450,
426
+ "vatRate": 10,
427
+ "unit": "Stk",
428
+ "number": "A-100",
429
+ "ean": "9001234567896",
430
+ "internalCode": null,
431
+ "groupId": "brot",
432
+ "revenueGroupId": null,
433
+ "stockTracked": true,
434
+ "minStock": 5000,
435
+ "active": true,
436
+ "createdAt": "2026-10-01T04:00:00.000Z",
437
+ "updatedAt": "2026-10-06T06:00:04.000Z",
438
+ "stockLocationIds": [
439
+ "haupt"
440
+ ]
441
+ }
442
+ }
443
+ }
444
+ },
445
+ {
446
+ "channel": "api",
447
+ "name": "error_lookup_article_unknown_code",
448
+ "endpoint": "lookupArticleByCode",
449
+ "path": "/v3/lookupArticleByCode",
450
+ "params": {
451
+ "code": "4006381333931"
452
+ },
453
+ "httpStatus": 200,
454
+ "headers": {
455
+ "Kasseneck-Api-Version": "v3",
456
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
457
+ },
458
+ "response": {
459
+ "status": "error",
460
+ "message": "Artikel nicht gefunden.",
461
+ "data": {
462
+ "code": "article_not_found"
463
+ },
464
+ "code": "article_not_found"
465
+ }
466
+ },
467
+ {
468
+ "channel": "api",
469
+ "name": "get_stock",
470
+ "endpoint": "getStock",
471
+ "path": "/v3/getStock",
472
+ "params": {
473
+ "articleId": "roggenbrot"
474
+ },
475
+ "httpStatus": 200,
476
+ "headers": {
477
+ "Kasseneck-Api-Version": "v3",
478
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
479
+ },
480
+ "response": {
481
+ "status": "success",
482
+ "message": "",
483
+ "data": {
484
+ "stock": [
485
+ {
486
+ "articleId": "roggenbrot",
487
+ "locationId": "haupt",
488
+ "onHand": 4000,
489
+ "reserved": 0,
490
+ "available": 4000,
491
+ "defective": 0,
492
+ "sequence": 2,
493
+ "updatedAt": "2026-10-06T06:00:04.000Z"
494
+ }
495
+ ]
496
+ }
497
+ }
498
+ },
499
+ {
500
+ "channel": "api",
501
+ "name": "list_stock",
502
+ "endpoint": "listStock",
503
+ "path": "/v3/listStock",
504
+ "params": {
505
+ "locationId": "haupt"
506
+ },
507
+ "httpStatus": 200,
508
+ "headers": {
509
+ "Kasseneck-Api-Version": "v3",
510
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
511
+ },
512
+ "response": {
513
+ "status": "success",
514
+ "message": "",
515
+ "data": {
516
+ "stock": [
517
+ {
518
+ "articleId": "kipferl",
519
+ "locationId": "haupt",
520
+ "onHand": 40000,
521
+ "reserved": 0,
522
+ "available": 40000,
523
+ "defective": 0,
524
+ "sequence": 1,
525
+ "updatedAt": "2026-10-06T06:00:03.000Z"
526
+ },
527
+ {
528
+ "articleId": "roggenbrot",
529
+ "locationId": "haupt",
530
+ "onHand": 4000,
531
+ "reserved": 0,
532
+ "available": 4000,
533
+ "defective": 0,
534
+ "sequence": 2,
535
+ "updatedAt": "2026-10-06T06:00:04.000Z"
536
+ }
537
+ ],
538
+ "nextCursor": null
539
+ }
540
+ }
541
+ },
542
+ {
543
+ "channel": "api",
544
+ "name": "list_stock_below_minimum",
545
+ "endpoint": "listStock",
546
+ "path": "/v3/listStock",
547
+ "params": {
548
+ "belowMinimum": true
549
+ },
550
+ "httpStatus": 200,
551
+ "headers": {
552
+ "Kasseneck-Api-Version": "v3",
553
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
554
+ },
555
+ "response": {
556
+ "status": "success",
557
+ "message": "",
558
+ "data": {
559
+ "stock": [
560
+ {
561
+ "articleId": "roggenbrot",
562
+ "locationId": "haupt",
563
+ "onHand": 4000,
564
+ "reserved": 0,
565
+ "available": 4000,
566
+ "defective": 0,
567
+ "sequence": 2,
568
+ "updatedAt": "2026-10-06T06:00:04.000Z"
569
+ }
570
+ ],
571
+ "nextCursor": null
572
+ }
573
+ }
574
+ },
575
+ {
576
+ "channel": "api",
577
+ "name": "list_stock_movements",
578
+ "endpoint": "listStockMovements",
579
+ "path": "/v3/listStockMovements",
580
+ "params": {
581
+ "articleId": "roggenbrot"
582
+ },
583
+ "httpStatus": 200,
584
+ "headers": {
585
+ "Kasseneck-Api-Version": "v3",
586
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
587
+ },
588
+ "response": {
589
+ "status": "success",
590
+ "message": "",
591
+ "data": {
592
+ "movements": [
593
+ {
594
+ "id": "auto2_0",
595
+ "articleId": "roggenbrot",
596
+ "type": "loss",
597
+ "locationId": "haupt",
598
+ "condition": "sellable",
599
+ "quantityDelta": -8000,
600
+ "stockAfter": {
601
+ "sellable": 4000,
602
+ "defective": 0
603
+ },
604
+ "operationId": "auto2",
605
+ "source": {
606
+ "id": null,
607
+ "position": null,
608
+ "type": "panel",
609
+ "register": null
610
+ },
611
+ "viennaDay": "2026-10-06",
612
+ "time": "2026-10-06T06:00:04.000Z",
613
+ "lots": [
614
+ {
615
+ "lotId": "auto1_L0",
616
+ "quantity": 8000,
617
+ "expiresOn": null,
618
+ "batch": null,
619
+ "serialNumber": null,
620
+ "receivedAt": "2026-10-06T06:00:03.000Z"
621
+ }
622
+ ]
623
+ },
624
+ {
625
+ "id": "auto1_0",
626
+ "articleId": "roggenbrot",
627
+ "type": "goods_receipt",
628
+ "locationId": "haupt",
629
+ "condition": "sellable",
630
+ "quantityDelta": 12000,
631
+ "stockAfter": {
632
+ "sellable": 12000,
633
+ "defective": 0
634
+ },
635
+ "operationId": "auto1",
636
+ "source": {
637
+ "id": null,
638
+ "position": null,
639
+ "type": "panel",
640
+ "register": null
641
+ },
642
+ "viennaDay": "2026-10-06",
643
+ "time": "2026-10-06T06:00:03.000Z",
644
+ "lots": [
645
+ {
646
+ "lotId": "auto1_L0",
647
+ "quantity": 12000,
648
+ "expiresOn": null,
649
+ "batch": null,
650
+ "serialNumber": null,
651
+ "receivedAt": "2026-10-06T06:00:03.000Z"
652
+ }
653
+ ]
654
+ }
655
+ ],
656
+ "nextCursor": null
657
+ }
658
+ }
659
+ },
660
+ {
661
+ "channel": "api",
662
+ "name": "list_stock_movements_goods_receipt",
663
+ "endpoint": "listStockMovements",
664
+ "path": "/v3/listStockMovements",
665
+ "params": {
666
+ "locationId": "haupt",
667
+ "type": "goods_receipt",
668
+ "source": "panel"
669
+ },
670
+ "httpStatus": 200,
671
+ "headers": {
672
+ "Kasseneck-Api-Version": "v3",
673
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
674
+ },
675
+ "response": {
676
+ "status": "success",
677
+ "message": "",
678
+ "data": {
679
+ "movements": [
680
+ {
681
+ "id": "auto1_1",
682
+ "articleId": "kipferl",
683
+ "type": "goods_receipt",
684
+ "locationId": "haupt",
685
+ "condition": "sellable",
686
+ "quantityDelta": 40000,
687
+ "stockAfter": {
688
+ "sellable": 40000,
689
+ "defective": 0
690
+ },
691
+ "operationId": "auto1",
692
+ "source": {
693
+ "id": null,
694
+ "position": null,
695
+ "type": "panel",
696
+ "register": null
697
+ },
698
+ "viennaDay": "2026-10-06",
699
+ "time": "2026-10-06T06:00:03.000Z",
700
+ "lots": [
701
+ {
702
+ "lotId": "auto1_L1",
703
+ "quantity": 40000,
704
+ "expiresOn": null,
705
+ "batch": null,
706
+ "serialNumber": null,
707
+ "receivedAt": "2026-10-06T06:00:03.000Z"
708
+ }
709
+ ]
710
+ },
711
+ {
712
+ "id": "auto1_0",
713
+ "articleId": "roggenbrot",
714
+ "type": "goods_receipt",
715
+ "locationId": "haupt",
716
+ "condition": "sellable",
717
+ "quantityDelta": 12000,
718
+ "stockAfter": {
719
+ "sellable": 12000,
720
+ "defective": 0
721
+ },
722
+ "operationId": "auto1",
723
+ "source": {
724
+ "id": null,
725
+ "position": null,
726
+ "type": "panel",
727
+ "register": null
728
+ },
729
+ "viennaDay": "2026-10-06",
730
+ "time": "2026-10-06T06:00:03.000Z",
731
+ "lots": [
732
+ {
733
+ "lotId": "auto1_L0",
734
+ "quantity": 12000,
735
+ "expiresOn": null,
736
+ "batch": null,
737
+ "serialNumber": null,
738
+ "receivedAt": "2026-10-06T06:00:03.000Z"
739
+ }
740
+ ]
741
+ }
742
+ ],
743
+ "nextCursor": null
744
+ }
745
+ }
746
+ },
747
+ {
748
+ "channel": "api",
749
+ "name": "error_list_stock_movements_validation",
750
+ "endpoint": "listStockMovements",
751
+ "path": "/v3/listStockMovements",
752
+ "params": {
753
+ "articleId": "roggenbrot",
754
+ "locationId": "haupt"
755
+ },
756
+ "httpStatus": 200,
757
+ "headers": {
758
+ "Kasseneck-Api-Version": "v3",
759
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
760
+ },
761
+ "response": {
762
+ "status": "error",
763
+ "message": "Bitte Eingaben prüfen.",
764
+ "data": {
765
+ "code": "validation",
766
+ "errors": [
767
+ {
768
+ "field": "locationId",
769
+ "message": "Bitte nur nach articleId ODER locationId filtern."
770
+ }
771
+ ]
772
+ },
773
+ "code": "validation"
774
+ }
775
+ },
776
+ {
777
+ "channel": "api",
778
+ "name": "get_article_with_costs",
779
+ "endpoint": "getArticle",
780
+ "path": "/v3/getArticle",
781
+ "params": {
782
+ "articleId": "roggenbrot"
783
+ },
784
+ "httpStatus": 200,
785
+ "headers": {
786
+ "Kasseneck-Api-Version": "v3",
787
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
788
+ },
789
+ "response": {
790
+ "status": "success",
791
+ "message": "",
792
+ "data": {
793
+ "article": {
794
+ "id": "roggenbrot",
795
+ "name": "Roggenbrot 1 kg",
796
+ "unitPriceCents": 450,
797
+ "vatRate": 10,
798
+ "unit": "Stk",
799
+ "number": "A-100",
800
+ "ean": "9001234567896",
801
+ "internalCode": null,
802
+ "groupId": "brot",
803
+ "revenueGroupId": null,
804
+ "stockTracked": true,
805
+ "minStock": 5000,
806
+ "active": true,
807
+ "createdAt": "2026-10-01T04:00:00.000Z",
808
+ "updatedAt": "2026-10-06T06:00:04.000Z",
809
+ "stockLocationIds": [
810
+ "haupt"
811
+ ],
812
+ "purchasePriceMicros": 1200000
813
+ }
814
+ }
815
+ }
816
+ },
817
+ {
818
+ "channel": "api",
819
+ "name": "list_stock_with_costs",
820
+ "endpoint": "listStock",
821
+ "path": "/v3/listStock",
822
+ "params": {
823
+ "articleId": "roggenbrot"
824
+ },
825
+ "httpStatus": 200,
826
+ "headers": {
827
+ "Kasseneck-Api-Version": "v3",
828
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
829
+ },
830
+ "response": {
831
+ "status": "success",
832
+ "message": "",
833
+ "data": {
834
+ "stock": [
835
+ {
836
+ "articleId": "roggenbrot",
837
+ "locationId": "haupt",
838
+ "onHand": 4000,
839
+ "reserved": 0,
840
+ "available": 4000,
841
+ "defective": 0,
842
+ "sequence": 2,
843
+ "updatedAt": "2026-10-06T06:00:04.000Z"
844
+ }
845
+ ],
846
+ "nextCursor": null,
847
+ "values": [
848
+ {
849
+ "articleId": "roggenbrot",
850
+ "stockValueCents": 480,
851
+ "averageCostMicros": 1200000
852
+ }
853
+ ]
854
+ }
855
+ }
856
+ },
857
+ {
858
+ "channel": "api",
859
+ "name": "list_stock_movements_with_costs",
860
+ "endpoint": "listStockMovements",
861
+ "path": "/v3/listStockMovements",
862
+ "params": {
863
+ "articleId": "roggenbrot",
864
+ "limit": 1
865
+ },
866
+ "httpStatus": 200,
867
+ "headers": {
868
+ "Kasseneck-Api-Version": "v3",
869
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
870
+ },
871
+ "response": {
872
+ "status": "success",
873
+ "message": "",
874
+ "data": {
875
+ "movements": [
876
+ {
877
+ "id": "auto2_0",
878
+ "articleId": "roggenbrot",
879
+ "type": "loss",
880
+ "locationId": "haupt",
881
+ "condition": "sellable",
882
+ "quantityDelta": -8000,
883
+ "stockAfter": {
884
+ "sellable": 4000,
885
+ "defective": 0
886
+ },
887
+ "operationId": "auto2",
888
+ "source": {
889
+ "id": null,
890
+ "position": null,
891
+ "type": "panel",
892
+ "register": null
893
+ },
894
+ "viennaDay": "2026-10-06",
895
+ "time": "2026-10-06T06:00:04.000Z",
896
+ "lots": [
897
+ {
898
+ "lotId": "auto1_L0",
899
+ "quantity": 8000,
900
+ "expiresOn": null,
901
+ "batch": null,
902
+ "serialNumber": null,
903
+ "receivedAt": "2026-10-06T06:00:03.000Z",
904
+ "valueCents": 960
905
+ }
906
+ ],
907
+ "valueDeltaCents": -960,
908
+ "consumedValueCents": 960
909
+ }
910
+ ],
911
+ "nextCursor": "eyJ6ZWl0IjoxNzkxMjY2NDA0MDAwLCJpZCI6ImF1dG8yXzAifQ"
912
+ }
913
+ }
914
+ },
915
+ {
916
+ "channel": "api",
917
+ "name": "list_webhooks",
918
+ "endpoint": "listWebhooks",
919
+ "path": "/v3/listWebhooks",
920
+ "params": {},
921
+ "httpStatus": 200,
922
+ "headers": {
923
+ "Kasseneck-Api-Version": "v3",
924
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
925
+ },
926
+ "response": {
927
+ "status": "success",
928
+ "message": "",
929
+ "data": {
930
+ "webhooks": [
931
+ {
932
+ "id": "3pJJwmZZjQTW",
933
+ "url": "https://shop.baeckerei-kornblum.at/kasseneck-webhook",
934
+ "createdAt": "2026-10-06T06:00:02.000Z",
935
+ "events": [
936
+ "stock.changed",
937
+ "stock.below_minimum",
938
+ "article.created",
939
+ "article.updated",
940
+ "article.deactivated"
941
+ ],
942
+ "active": true,
943
+ "description": "Webshop Kornblum",
944
+ "lastDelivery": {
945
+ "at": "2026-10-06T06:00:04.000Z",
946
+ "status": "delivered",
947
+ "statusCode": 200
948
+ },
949
+ "consecutiveFailures": 0
950
+ }
951
+ ],
952
+ "events": [
953
+ "stock.changed",
954
+ "stock.below_minimum",
955
+ "article.created",
956
+ "article.updated",
957
+ "article.deactivated"
958
+ ]
959
+ }
960
+ }
961
+ },
962
+ {
963
+ "channel": "api",
964
+ "name": "update_webhook",
965
+ "endpoint": "updateWebhook",
966
+ "path": "/v3/updateWebhook",
967
+ "params": {
968
+ "webhookId": "3pJJwmZZjQTW",
969
+ "events": [
970
+ "stock.changed",
971
+ "stock.below_minimum"
972
+ ]
973
+ },
974
+ "httpStatus": 200,
975
+ "headers": {
976
+ "Kasseneck-Api-Version": "v3",
977
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
978
+ },
979
+ "response": {
980
+ "status": "success",
981
+ "message": "",
982
+ "data": {
983
+ "webhook": {
984
+ "id": "3pJJwmZZjQTW",
985
+ "url": "https://shop.baeckerei-kornblum.at/kasseneck-webhook",
986
+ "createdAt": "2026-10-06T06:00:02.000Z",
987
+ "events": [
988
+ "stock.changed",
989
+ "stock.below_minimum"
990
+ ],
991
+ "active": true,
992
+ "description": "Webshop Kornblum",
993
+ "lastDelivery": {
994
+ "at": "2026-10-06T06:00:04.000Z",
995
+ "status": "delivered",
996
+ "statusCode": 200
997
+ },
998
+ "consecutiveFailures": 0
999
+ }
1000
+ }
1001
+ }
1002
+ },
1003
+ {
1004
+ "channel": "api",
1005
+ "name": "error_update_webhook_not_found",
1006
+ "endpoint": "updateWebhook",
1007
+ "path": "/v3/updateWebhook",
1008
+ "params": {
1009
+ "webhookId": "gibt_es_nicht",
1010
+ "active": false
1011
+ },
1012
+ "httpStatus": 200,
1013
+ "headers": {
1014
+ "Kasseneck-Api-Version": "v3",
1015
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1016
+ },
1017
+ "response": {
1018
+ "status": "error",
1019
+ "message": "Webhook nicht gefunden.",
1020
+ "data": {
1021
+ "code": "webhook_not_found"
1022
+ },
1023
+ "code": "webhook_not_found"
1024
+ }
1025
+ },
1026
+ {
1027
+ "channel": "api",
1028
+ "name": "send_webhook_test",
1029
+ "endpoint": "sendWebhookTest",
1030
+ "path": "/v3/sendWebhookTest",
1031
+ "params": {
1032
+ "webhookId": "3pJJwmZZjQTW",
1033
+ "event": "stock.below_minimum"
1034
+ },
1035
+ "httpStatus": 200,
1036
+ "headers": {
1037
+ "Kasseneck-Api-Version": "v3",
1038
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1039
+ },
1040
+ "response": {
1041
+ "status": "success",
1042
+ "message": "",
1043
+ "data": {
1044
+ "eventId": "evt_Rq6FfqGQDbALsgsNFC86",
1045
+ "event": "stock.below_minimum",
1046
+ "deliveries": [
1047
+ {
1048
+ "deliveryId": "auto9",
1049
+ "webhookId": "3pJJwmZZjQTW",
1050
+ "status": "delivered",
1051
+ "statusCode": 200
1052
+ }
1053
+ ]
1054
+ }
1055
+ }
1056
+ },
1057
+ {
1058
+ "channel": "api",
1059
+ "name": "error_send_webhook_test_not_subscribed",
1060
+ "endpoint": "sendWebhookTest",
1061
+ "path": "/v3/sendWebhookTest",
1062
+ "params": {
1063
+ "webhookId": "3pJJwmZZjQTW",
1064
+ "event": "article.created"
1065
+ },
1066
+ "httpStatus": 200,
1067
+ "headers": {
1068
+ "Kasseneck-Api-Version": "v3",
1069
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1070
+ },
1071
+ "response": {
1072
+ "status": "error",
1073
+ "message": "Der Webhook abonniert das Ereignis article.created nicht.",
1074
+ "data": {
1075
+ "code": "event_not_subscribed"
1076
+ },
1077
+ "code": "event_not_subscribed"
1078
+ }
1079
+ },
1080
+ {
1081
+ "channel": "api",
1082
+ "name": "list_webhook_deliveries",
1083
+ "endpoint": "listWebhookDeliveries",
1084
+ "path": "/v3/listWebhookDeliveries",
1085
+ "params": {
1086
+ "webhookId": "3pJJwmZZjQTW",
1087
+ "limit": 3
1088
+ },
1089
+ "httpStatus": 200,
1090
+ "headers": {
1091
+ "Kasseneck-Api-Version": "v3",
1092
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1093
+ },
1094
+ "response": {
1095
+ "status": "success",
1096
+ "message": "",
1097
+ "data": {
1098
+ "deliveries": [
1099
+ {
1100
+ "deliveryId": "auto9",
1101
+ "webhookId": "3pJJwmZZjQTW",
1102
+ "eventId": "evt_Rq6FfqGQDbALsgsNFC86",
1103
+ "status": "delivered",
1104
+ "statusCode": 200,
1105
+ "createdAt": "2026-10-06T06:00:29.000Z",
1106
+ "test": true,
1107
+ "event": "stock.below_minimum",
1108
+ "attempts": 1,
1109
+ "response": "ok",
1110
+ "error": null,
1111
+ "lastAttemptAt": "2026-10-06T06:00:29.000Z",
1112
+ "nextAttemptAt": null
1113
+ },
1114
+ {
1115
+ "deliveryId": "auto3",
1116
+ "webhookId": "3pJJwmZZjQTW",
1117
+ "eventId": "evt_wKLtZJFBjowUBsa875du",
1118
+ "status": "delivered",
1119
+ "statusCode": 200,
1120
+ "createdAt": "2026-10-06T06:00:04.000Z",
1121
+ "test": false,
1122
+ "event": "stock.below_minimum",
1123
+ "attempts": 1,
1124
+ "response": "ok",
1125
+ "error": null,
1126
+ "lastAttemptAt": "2026-10-06T06:00:04.000Z",
1127
+ "nextAttemptAt": null
1128
+ },
1129
+ {
1130
+ "deliveryId": "auto4",
1131
+ "webhookId": "3pJJwmZZjQTW",
1132
+ "eventId": "evt_6SjOpc8E0wUJamYx4wDc",
1133
+ "status": "delivered",
1134
+ "statusCode": 200,
1135
+ "createdAt": "2026-10-06T06:00:04.000Z",
1136
+ "test": false,
1137
+ "event": "stock.changed",
1138
+ "attempts": 1,
1139
+ "response": "ok",
1140
+ "error": null,
1141
+ "lastAttemptAt": "2026-10-06T06:00:04.000Z",
1142
+ "nextAttemptAt": null
1143
+ }
1144
+ ]
1145
+ }
1146
+ }
1147
+ },
1148
+ {
1149
+ "channel": "api",
1150
+ "name": "rotate_webhook_secret",
1151
+ "endpoint": "rotateWebhookSecret",
1152
+ "path": "/v3/rotateWebhookSecret",
1153
+ "params": {
1154
+ "webhookId": "3pJJwmZZjQTW"
1155
+ },
1156
+ "httpStatus": 200,
1157
+ "headers": {
1158
+ "Kasseneck-Api-Version": "v3",
1159
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1160
+ },
1161
+ "response": {
1162
+ "status": "success",
1163
+ "message": "",
1164
+ "data": {
1165
+ "secret": "whsec_EXAMPLECD6279ACAAAAAAAAAAAAAAAAA",
1166
+ "webhook": {
1167
+ "id": "3pJJwmZZjQTW",
1168
+ "url": "https://shop.baeckerei-kornblum.at/kasseneck-webhook",
1169
+ "createdAt": "2026-10-06T06:00:02.000Z",
1170
+ "events": [
1171
+ "stock.changed",
1172
+ "stock.below_minimum"
1173
+ ],
1174
+ "active": true,
1175
+ "description": "Webshop Kornblum",
1176
+ "lastDelivery": {
1177
+ "at": "2026-10-06T06:00:29.000Z",
1178
+ "status": "delivered",
1179
+ "statusCode": 200
1180
+ },
1181
+ "consecutiveFailures": 0
1182
+ }
1183
+ }
1184
+ }
1185
+ },
1186
+ {
1187
+ "channel": "api",
1188
+ "name": "error_create_webhook_invalid_url",
1189
+ "endpoint": "createWebhook",
1190
+ "path": "/v3/createWebhook",
1191
+ "params": {
1192
+ "url": "http://shop.baeckerei-kornblum.at/hook",
1193
+ "events": [
1194
+ "stock.changed"
1195
+ ]
1196
+ },
1197
+ "httpStatus": 200,
1198
+ "headers": {
1199
+ "Kasseneck-Api-Version": "v3",
1200
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1201
+ },
1202
+ "response": {
1203
+ "status": "error",
1204
+ "message": "Bitte Eingaben prüfen.",
1205
+ "data": {
1206
+ "code": "invalid_webhook_url",
1207
+ "errors": [
1208
+ {
1209
+ "field": "url",
1210
+ "message": "Bitte die vollständige Adresse mit https:// angeben, z. B. https://api.firma.at/kasseneck-webhook"
1211
+ }
1212
+ ]
1213
+ },
1214
+ "code": "invalid_webhook_url"
1215
+ }
1216
+ },
1217
+ {
1218
+ "channel": "api",
1219
+ "name": "error_create_webhook_limit",
1220
+ "endpoint": "createWebhook",
1221
+ "path": "/v3/createWebhook",
1222
+ "params": {
1223
+ "url": "https://shop.baeckerei-kornblum.at/kasseneck-webhook-6",
1224
+ "events": [
1225
+ "stock.changed"
1226
+ ]
1227
+ },
1228
+ "httpStatus": 200,
1229
+ "headers": {
1230
+ "Kasseneck-Api-Version": "v3",
1231
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1232
+ },
1233
+ "response": {
1234
+ "status": "error",
1235
+ "message": "Höchstens 5 Webhooks je Konto.",
1236
+ "data": {
1237
+ "code": "webhook_limit"
1238
+ },
1239
+ "code": "webhook_limit"
1240
+ }
1241
+ },
1242
+ {
1243
+ "channel": "api",
1244
+ "name": "update_webhook_inactive",
1245
+ "endpoint": "updateWebhook",
1246
+ "path": "/v3/updateWebhook",
1247
+ "params": {
1248
+ "webhookId": "3pJJwmZZjQTW",
1249
+ "active": false
1250
+ },
1251
+ "httpStatus": 200,
1252
+ "headers": {
1253
+ "Kasseneck-Api-Version": "v3",
1254
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1255
+ },
1256
+ "response": {
1257
+ "status": "success",
1258
+ "message": "",
1259
+ "data": {
1260
+ "webhook": {
1261
+ "id": "3pJJwmZZjQTW",
1262
+ "url": "https://shop.baeckerei-kornblum.at/kasseneck-webhook",
1263
+ "createdAt": "2026-10-06T06:00:02.000Z",
1264
+ "events": [
1265
+ "stock.changed",
1266
+ "stock.below_minimum"
1267
+ ],
1268
+ "active": false,
1269
+ "description": "Webshop Kornblum",
1270
+ "lastDelivery": {
1271
+ "at": "2026-10-06T06:00:29.000Z",
1272
+ "status": "delivered",
1273
+ "statusCode": 200
1274
+ },
1275
+ "consecutiveFailures": 0
1276
+ }
1277
+ }
1278
+ }
1279
+ },
1280
+ {
1281
+ "channel": "api",
1282
+ "name": "error_send_webhook_test_inactive",
1283
+ "endpoint": "sendWebhookTest",
1284
+ "path": "/v3/sendWebhookTest",
1285
+ "params": {
1286
+ "webhookId": "3pJJwmZZjQTW",
1287
+ "event": "stock.changed"
1288
+ },
1289
+ "httpStatus": 200,
1290
+ "headers": {
1291
+ "Kasseneck-Api-Version": "v3",
1292
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1293
+ },
1294
+ "response": {
1295
+ "status": "error",
1296
+ "message": "Dieser Webhook ist inaktiv – zum Testen zuerst aktivieren.",
1297
+ "data": {
1298
+ "code": "webhook_inactive"
1299
+ },
1300
+ "code": "webhook_inactive"
1301
+ }
1302
+ },
1303
+ {
1304
+ "channel": "api",
1305
+ "name": "error_send_webhook_test_daily_limit",
1306
+ "endpoint": "sendWebhookTest",
1307
+ "path": "/v3/sendWebhookTest",
1308
+ "params": {
1309
+ "webhookId": "3pJJwmZZjQTW",
1310
+ "event": "stock.changed"
1311
+ },
1312
+ "httpStatus": 200,
1313
+ "headers": {
1314
+ "Kasseneck-Api-Version": "v3",
1315
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version",
1316
+ "Retry-After": "57511"
1317
+ },
1318
+ "response": {
1319
+ "status": "error",
1320
+ "message": "Höchstens 20 Probesendungen je Tag – morgen wieder.",
1321
+ "data": {
1322
+ "code": "rate_limited",
1323
+ "retryAfterSec": 57511
1324
+ },
1325
+ "code": "rate_limited"
1326
+ }
1327
+ },
1328
+ {
1329
+ "channel": "api",
1330
+ "name": "delete_webhook",
1331
+ "endpoint": "deleteWebhook",
1332
+ "path": "/v3/deleteWebhook",
1333
+ "params": {
1334
+ "webhookId": "3pJJwmZZjQTW"
1335
+ },
1336
+ "httpStatus": 200,
1337
+ "headers": {
1338
+ "Kasseneck-Api-Version": "v3",
1339
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1340
+ },
1341
+ "response": {
1342
+ "status": "success",
1343
+ "message": "",
1344
+ "data": {
1345
+ "webhookId": "3pJJwmZZjQTW",
1346
+ "deleted": true
1347
+ }
1348
+ }
1349
+ },
1350
+ {
1351
+ "channel": "api",
1352
+ "name": "error_delete_webhook_not_found",
1353
+ "endpoint": "deleteWebhook",
1354
+ "path": "/v3/deleteWebhook",
1355
+ "params": {
1356
+ "webhookId": "3pJJwmZZjQTW"
1357
+ },
1358
+ "httpStatus": 200,
1359
+ "headers": {
1360
+ "Kasseneck-Api-Version": "v3",
1361
+ "Access-Control-Expose-Headers": "Kasseneck-Api-Version"
1362
+ },
1363
+ "response": {
1364
+ "status": "error",
1365
+ "message": "Webhook nicht gefunden.",
1366
+ "data": {
1367
+ "code": "webhook_not_found"
1368
+ },
1369
+ "code": "webhook_not_found"
1370
+ }
1371
+ }
1372
+ ],
1373
+ "webhookEvents": [
1374
+ {
1375
+ "event": "stock.below_minimum",
1376
+ "body": {
1377
+ "id": "evt_wKLtZJFBjowUBsa875du",
1378
+ "type": "stock.below_minimum",
1379
+ "createdAt": 1791266404000,
1380
+ "accountId": "kornblum",
1381
+ "data": {
1382
+ "articleId": "roggenbrot",
1383
+ "locationId": "haupt",
1384
+ "available": 4000,
1385
+ "minStock": 5000
1386
+ }
1387
+ }
1388
+ },
1389
+ {
1390
+ "event": "stock.changed",
1391
+ "body": {
1392
+ "id": "evt_6SjOpc8E0wUJamYx4wDc",
1393
+ "type": "stock.changed",
1394
+ "createdAt": 1791266404000,
1395
+ "accountId": "kornblum",
1396
+ "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"
1407
+ }
1408
+ }
1409
+ },
1410
+ {
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"
1428
+ }
1429
+ }
1430
+ },
1431
+ {
1432
+ "event": "article.updated",
1433
+ "body": {
1434
+ "id": "evt_y3OmCZX2aGSmO51tvMVg",
1435
+ "type": "article.updated",
1436
+ "createdAt": 1791266404000,
1437
+ "accountId": "kornblum",
1438
+ "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
+ ]
1458
+ }
1459
+ }
1460
+ },
1461
+ {
1462
+ "event": "article.created",
1463
+ "body": {
1464
+ "id": "evt_OBMDnXTaeE7t8CbeZjMY",
1465
+ "type": "article.created",
1466
+ "createdAt": 1791266404000,
1467
+ "accountId": "kornblum",
1468
+ "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
+ ]
1487
+ }
1488
+ }
1489
+ },
1490
+ {
1491
+ "event": "article.deactivated",
1492
+ "body": {
1493
+ "id": "evt_VKmC9XoEcVNwBCwlbdw7",
1494
+ "type": "article.deactivated",
1495
+ "createdAt": 1791266404000,
1496
+ "accountId": "kornblum",
1497
+ "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,
1510
+ "active": false,
1511
+ "createdAt": "2026-10-06T06:00:04.000Z",
1512
+ "updatedAt": "2026-10-06T06:00:04.001Z",
1513
+ "stockLocationIds": [
1514
+ "haupt"
1515
+ ]
1516
+ }
1517
+ }
1518
+ }
1519
+ ]
1520
+ }