Basis-URL
https://{tenant}.logzi.com/api/stock_serial/
Jede Anfrage liefert eine JSON-Antwort zurück. Bei Erfolg ist result.code == 1 (HTTP 200), im Fehlerfall oder wenn kein Datensatz gefunden wird result.code == 0 (HTTP 203).
Funktionsweise
Die Einstellung serialnumber_required des Produkts bestimmt, wie das System die Seriennummern behandelt:
quantity ist immer 1.quantity ist die Menge im LOT.date_expire (Ablaufdatum).Die Aufteilungs-Endpunkte (save_separate, save_separate_all) teilen LOT-Zeilen auf. Beim Aufteilen erhalten die neuen Zeilen alle Daten der Quellzeile (Produkt, Lager, Lagerplatz, Palette, Seriennummer/LOT-Kennung, Ablaufdatum, Erstellungsdatum) sowie die zugehörigen Belegverknüpfungen; die Gesamtbestandsmenge ändert sich nicht.
Die Aufteilung ist nur bei einer nicht verbrauchten (used = 0) und nicht gelöschten (remove = 0) Zeile möglich.
/api/stock_serial/get
Abruf eines einzelnen Seriennummer-Datensatzes anhand der ID. Ein gelöschter Datensatz (remove = 1) wird nicht zurückgegeben.
Query-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
id |
int | Eindeutige Kennung des Seriennummer-Datensatzes (db_stock_serial.id) |
Antwortfelder (data-Objekt)
| Feld | Typ | Beschreibung |
|---|---|---|
id | int | Kennung des Seriennummer-Datensatzes |
product_id | int | Kennung des Produkts |
store_id | int | Kennung des Lagers (Standorts), in dem sich die Position befindet |
company_id | int | Kennung der Firma, zu der die Position gehört |
serial_number | string | Die Seriennummer oder LOT-(Chargen-)Kennung, maximal 30 Zeichen |
quantity | float | Menge: bei seriennummernpflichtigen Produkten 1, bei LOT-Produkten die Stückzahl im LOT |
used | int | 0 = verfügbar (nicht verbraucht), 1 = verbraucht |
remove | int | Löschkennzeichen, die Abfrage liefert nur Datensätze mit dem Wert 0 |
store_locality_id | int | null | Kennung des Lagerplatzes, wenn die Position einem Lagerplatz zugeordnet ist |
pallet_id | int | null | Kennung der Palette, wenn die Position einer Palette zugeordnet ist |
date_create | datetime | Erstellungszeitpunkt der Seriennummer (JJJJ-MM-TT HH:MM:SS) |
date_expire | datetime | null | Haltbarkeits-(Ablauf-)Datum, nur bei LOT-Produkten mit Haltbarkeitspflicht befüllt |
chk | string | Interne Prüfkennung (32 Zeichen), in Integrationen nicht zu verwenden |
Beispielanfrage
GET /api/stock_serial/get?id=42
X-API-KEY: {ihr_api_schluessel}
Beispielantwort
{
"result": { "code": 1, "message": null },
"data": {
"id": 42,
"product_id": 5,
"store_id": 1,
"date_create": "2024-03-15 10:22:00",
"company_id": 1,
"serial_number": "LOT-2024-00042",
"remove": 0,
"used": 0,
"chk": "5f4dcc3b5aa765d61d8327deb882cf99",
"store_locality_id": 7,
"pallet_id": null,
"quantity": 50,
"date_expire": "2026-03-15 00:00:00"
}
}
Datensatz nicht gefunden
HTTP 203
{
"result": { "code": 0, "message": "Not found" },
"data": null
}
/api/stock_serial/list
Abruf einer paginierten Liste der Seriennummern mit Filtermöglichkeiten. Es werden nur nicht gelöschte (remove = 0) Datensätze lagerführender Produkte in absteigender ID-Reihenfolge aufgelistet.
Query-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
list_offset |
int | Paginierungs-Offset, wie viele Datensätze am Anfang übersprungen werden (Standard: 0). Eine Anfrage liefert höchstens 10.000 Datensätze. | |
list_condition[product_id] |
int | Filter nach Produktkennung (exakte Übereinstimmung) | |
list_condition[used] |
int | Verbrauchsstatus: 0 = verfügbar, 1 = verbraucht | |
list_condition[serial_number] |
string | Filter nach Seriennummer / LOT-Kennung (exakte Übereinstimmung) | |
list_condition[partnumber] |
string | Filter nach Artikelnummer des Produkts (exakte Übereinstimmung) | |
list_condition[item_id_used_0] |
int | Für eine Belegposition verfügbare Seriennummern: nicht verbrauchte Zeilen (used = 0) und Zeilen, die bereits mit dieser Position (item_id) verknüpft sind |
|
list_condition[receipt_id] |
int | Mit dem angegebenen Beleg verknüpfte Seriennummern. Nur zusammen mit dem Feld receipt_type_id gültig. |
|
list_condition[receipt_type_id] |
int | Kennung des Belegtyps. Nur zusammen mit dem Feld receipt_id gültig. |
|
list_condition[store_locality_id] |
int | Filter nach Lagerplatz-Kennung | |
list_condition[product_name_partnumber] |
string | Filter nach Produktname oder Artikelnummer (LIKE, Platzhalter: %) |
|
list_condition[product_name] |
string | Filter nach einem Teil des Produktnamens | |
list_condition[product_partnumber_barcode] |
string | Filter nach einem Teil der Artikelnummer oder nach dem Barcode des Produkts | |
list_condition[date_create_from] |
date | Erstellungsdatum ab (einschließlich), Format: JJJJ-MM-TT |
|
list_condition[date_create_to] |
date | Erstellungsdatum bis (einschließlich), Format: JJJJ-MM-TT |
|
list_condition[date_expire_from] |
date | Ablaufdatum ab (einschließlich), Format: JJJJ-MM-TT |
|
list_condition[date_expire_to] |
date | Ablaufdatum bis (einschließlich), Format: JJJJ-MM-TT |
Antwortfelder (Elemente des data-Arrays)
Die Elemente enthalten alle Felder des Endpunkts get mit den folgenden Abweichungen und Ergänzungen:
| Feld | Typ | Beschreibung |
|---|---|---|
stock_serial_id | int | Kennung des Seriennummer-Datensatzes (identisch mit dem Feld id) |
date_create | string | Erstellungszeitpunkt, Format: JJJJ.MM.TT HH:MM:SS |
date_expire | string | null | Ablaufdatum, Format: JJJJ.MM.TT |
product_unit_name | string | Bezeichnung des Produkts |
partnumber | string | Artikelnummer des Produkts |
store_locality_barcode | string | null | Barcode des Lagerplatzes |
pallet_barcode | string | null | Barcode der Palette |
store_name | string | Name des Lagers (Standorts) |
Antwortfelder (params-Objekt)
| Feld | Typ | Beschreibung |
|---|---|---|
list_count | int | Maximale Anzahl der in einer Anfrage zurückgegebenen Datensätze (10.000) |
list_offset | int | Der in der Anfrage angegebene Offset |
list_all | int | Gesamtzahl der Datensätze, die dem Filter entsprechen |
Beispielanfrage
GET /api/stock_serial/list?list_offset=0&list_condition[product_id]=5&list_condition[used]=0
X-API-KEY: {ihr_api_schluessel}
Beispielantwort
{
"result": { "code": 1, "message": null },
"data": [
{
"id": 42,
"stock_serial_id": 42,
"product_id": 5,
"store_id": 1,
"company_id": 1,
"serial_number": "LOT-2024-00042",
"quantity": 50,
"used": 0,
"remove": 0,
"chk": "5f4dcc3b5aa765d61d8327deb882cf99",
"store_locality_id": 7,
"pallet_id": null,
"date_create": "2024.03.15 10:22:00",
"date_expire": "2026.03.15",
"product_unit_name": "Laptop XYZ",
"partnumber": "LTP-XYZ-001",
"store_locality_barcode": "A-01-02",
"pallet_barcode": null,
"store_name": "Zentrallager"
}
],
"params": {
"list_count": 10000,
"list_offset": 0,
"list_all": 1
}
}
/api/stock_serial/save_separate
Trennt aus einer LOT-(Chargen-)Seriennummernzeile die angegebene Menge in eine neue Zeile ab. Die Menge der Quellzeile verringert sich, die neue Zeile wird mit denselben Daten (Produkt, Lager, Lagerplatz, Palette, Seriennummer/LOT-Kennung, Ablaufdatum) und der abgetrennten Menge angelegt.
POST-Felder - data-Objekt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
stock_serial_id | int | Kennung der aufzuteilenden Seriennummernzeile. Die Zeile darf weder gelöscht noch verbraucht sein (used = 0). | |
quantity | float | Die abzutrennende Menge. Sie muss größer als null und kleiner als die Gesamtmenge der Zeile sein. |
Antwortfelder (data-Objekt)
| Feld | Typ | Beschreibung |
|---|---|---|
stock_serial_id | int | Kennung der Quellzeile |
new_stock_serial_id | int | Kennung der neu angelegten Zeile |
quantity_separated | float | Die in die neue Zeile abgetrennte Menge |
quantity_left | float | Die in der Quellzeile verbliebene Menge |
Fehlermeldungen (result.message)
| Meldung | Wann |
|---|---|
Not found | Das Feld data fehlt oder ist leer |
ex_stock_serial_separate_item | Die stock_serial_id fehlt, ist ungültig, existiert nicht oder ist gelöscht |
ex_stock_serial_separate_used | Die Zeile ist bereits verbraucht (used = 1) |
ex_stock_serial_separate_qty | Die quantity ist keine Zahl, nicht größer als null oder nicht kleiner als die Gesamtmenge |
ex_unknown_msg | Unbekannter Fehler beim Speichern. Im Fehlerfall wird der gesamte Vorgang zurückgesetzt. |
Beispielanfrage
POST /api/stock_serial/save_separate
X-API-KEY: {ihr_api_schluessel}
Content-Type: application/json
{
"data": {
"stock_serial_id": 42,
"quantity": 20
}
}
Beispielantwort
{
"result": { "code": 1, "message": "success_msg" },
"data": {
"stock_serial_id": 42,
"new_stock_serial_id": 57,
"quantity_separated": 20,
"quantity_left": 30
}
}
/api/stock_serial/save_separate_all
Teilt eine LOT-(Chargen-)Seriennummernzeile vollständig in Einzelstücke auf: Es entstehen so viele Zeilen mit je 1 Stück, wie die Menge der Zeile betrug (z. B. wird aus einer Zeile mit 50 Stück 50 Zeilen mit je 1 Stück). Die ursprüngliche Zeile bleibt erhalten, ihre Menge wird auf 1 reduziert, die übrigen (Menge - 1) Zeilen werden mit denselben Daten neu angelegt.
POST-Felder - data-Objekt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
stock_serial_id | int | Kennung der aufzuteilenden Seriennummernzeile. Die Zeile darf weder gelöscht noch verbraucht sein (used = 0), ihre Menge muss eine positive ganze Zahl sein, mindestens 2 und höchstens 25.000. |
Antwortfelder (data-Objekt)
| Feld | Typ | Beschreibung |
|---|---|---|
stock_serial_id | int | Kennung der ursprünglichen Zeile (auch sie wird zu einer Zeile mit 1 Stück) |
quantity_before | float | Menge der ursprünglichen Zeile vor der Aufteilung |
count | int | Anzahl der Zeilen nach der Aufteilung (einschließlich der ursprünglichen Zeile, entspricht quantity_before) |
stock_serial_ids | int[] | Kennungen aller Zeilen: zuerst die ursprüngliche Zeile, danach die neu angelegten Zeilen in aufsteigender Reihenfolge |
Fehlermeldungen (result.message)
| Meldung | Wann |
|---|---|
Not found | Das Feld data fehlt oder ist leer |
ex_stock_serial_separate_item | Die stock_serial_id fehlt, ist ungültig, existiert nicht oder ist gelöscht |
ex_stock_serial_separate_used | Die Zeile ist bereits verbraucht (used = 1) |
ex_stock_serial_separate_qty_integer | Die Menge der Zeile ist keine positive ganze Zahl |
ex_stock_serial_separate_single | Die Menge der Zeile beträgt 1, es gibt nichts aufzuteilen |
ex_stock_serial_separate_max_rows | Die Menge der Zeile überschreitet die auf einmal aufteilbaren 25.000 Stück (am Ende der Meldung steht das zulässige Maximum) |
ex_unknown_msg | Unbekannter Fehler beim Speichern. Im Fehlerfall wird der gesamte Vorgang zurückgesetzt. |
Beispielanfrage
POST /api/stock_serial/save_separate_all
X-API-KEY: {ihr_api_schluessel}
Content-Type: application/json
{
"data": {
"stock_serial_id": 42
}
}
Beispielantwort (Aufteilung einer Zeile mit 3 Stück)
{
"result": { "code": 1, "message": "success_msg" },
"data": {
"stock_serial_id": 42,
"quantity_before": 3,
"count": 3,
"stock_serial_ids": [42, 58, 59]
}
}
Interessierst du dich für unsere Software? Schreib uns einfach!
Jetzt registrieren,
später bezahlen!