{
    "info": {
        "name": "aibot API v1",
        "description": "Erzeugt am 2026-08-16 aus derselben Beschreibung, aus der auch die Excel-Vorlagen und die Prüfung der Schnittstelle entstehen.\n\nVOR DEM ERSTEN AUFRUF: unter Variables den Wert `schluessel` auf den eigenen API-Schlüssel setzen (Portal → Einstellungen → API-Schlüssel).\n\nDer Schlüssel bestimmt den Tenant. Er steht in keinem Parameter und lässt sich nicht wählen.",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "token",
                "value": "{{schluessel}}",
                "type": "string"
            }
        ]
    },
    "variable": [
        {
            "key": "basis",
            "value": "https://api.bum2.fun",
            "type": "string"
        },
        {
            "key": "schluessel",
            "value": "",
            "type": "string",
            "description": "Der eigene API-Schlüssel (ak_…). Bewusst LEER ausgeliefert: eine Sammlung mit eingebautem Zugang wandert per Mail weiter, und niemand denkt daran, dass einer darin steckt."
        }
    ],
    "item": [
        {
            "name": "Objektkatalog",
            "request": {
                "method": "GET",
                "header": [],
                "url": {
                    "raw": "{{basis}}/api/v1/",
                    "host": [
                        "{{basis}}"
                    ],
                    "path": [
                        "api",
                        "v1",
                        ""
                    ]
                },
                "description": "Beschreibt alle Objekte samt Feldern. Hinter der Anmeldung — wer ihn braucht, hat ohnehin einen Schlüssel."
            }
        },
        {
            "name": "Standorte",
            "description": "Betriebe, Filialen, Restaurants. Muss VOR Preisen und Beständen hochgeladen werden — die verweisen darauf.",
            "item": [
                {
                    "name": "Liste",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{basis}}/api/v1/store?limit=100&offset=0",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "store"
                            ],
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "100",
                                    "description": "höchstens 1000"
                                },
                                {
                                    "key": "offset",
                                    "value": "0"
                                }
                            ]
                        }
                    }
                },
                {
                    "name": "Einzeln",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{basis}}/api/v1/store/RIVA",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "store",
                                "RIVA"
                            ]
                        }
                    }
                },
                {
                    "name": "Schreiben",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"daten\": [\n        {\n            \"nummer\": \"RIVA\",\n            \"name\": \"Riva\",\n            \"typ\": \"restaurant\",\n            \"strasse\": \"Ketschauerhofstr. 1\",\n            \"plz\": \"67146\",\n            \"ort\": \"Deidesheim\",\n            \"land\": \"DE\",\n            \"waehrung\": \"EUR\"\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{basis}}/api/v1/store",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "store"
                            ]
                        },
                        "description": "Ergänzt und aktualisiert. Legt NICHTS still — ein Vollabgleich bleibt der Upload-Seite im Portal vorbehalten. Alles oder nichts: ist eine Zeile fehlerhaft, wird keine geschrieben."
                    }
                }
            ]
        },
        {
            "name": "Artikel",
            "description": "Der Artikelstamm. Preise und Bestände kommen in eigenen Dateien — ein Artikel kostet je Standort verschieden.",
            "item": [
                {
                    "name": "Liste",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{basis}}/api/v1/artikel?limit=100&offset=0",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "artikel"
                            ],
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "100",
                                    "description": "höchstens 1000"
                                },
                                {
                                    "key": "offset",
                                    "value": "0"
                                }
                            ]
                        }
                    }
                },
                {
                    "name": "Einzeln",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{basis}}/api/v1/artikel/100-001",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "artikel",
                                "100-001"
                            ]
                        }
                    }
                },
                {
                    "name": "Schreiben",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"daten\": [\n        {\n            \"nummer\": \"100-001\",\n            \"bezeichnung\": \"2023 Riesling „Herrgottsacker\\\"\",\n            \"warengruppe\": \"Wein Flasche weiß\",\n            \"hersteller\": \"Reichsrat von Buhl\",\n            \"ean\": \"4006381333931\",\n            \"basiseinheit\": \"FL\",\n            \"gewicht\": 1.25,\n            \"jahrgang\": 2023,\n            \"status\": \"aktiv\"\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{basis}}/api/v1/artikel",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "artikel"
                            ]
                        },
                        "description": "Ergänzt und aktualisiert. Legt NICHTS still — ein Vollabgleich bleibt der Upload-Seite im Portal vorbehalten. Alles oder nichts: ist eine Zeile fehlerhaft, wird keine geschrieben."
                    }
                }
            ]
        },
        {
            "name": "Preise",
            "description": "Welcher Artikel kostet an welchem Standort wie viel. Ein Artikel ohne Zeile hier ist an diesem Standort nicht im Angebot.",
            "item": [
                {
                    "name": "Lesen — geht nicht einzeln",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{basis}}/api/v1/preis",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "preis"
                            ]
                        },
                        "description": "„preis\" hängt an Artikel und Standort und hat keine eigene Nummer. Die Werte kommen über /api/v1/artikel. Dieser Aufruf antwortet mit 400 — er steht hier, damit die Meldung nicht überrascht."
                    }
                },
                {
                    "name": "Schreiben",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"daten\": [\n        {\n            \"artikelnummer\": \"100-001\",\n            \"storenummer\": \"RIVA\",\n            \"preis\": 33,\n            \"gueltig_ab\": \"01.03.2026\"\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{basis}}/api/v1/preis",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "preis"
                            ]
                        },
                        "description": "Ergänzt und aktualisiert. Legt NICHTS still — ein Vollabgleich bleibt der Upload-Seite im Portal vorbehalten. Alles oder nichts: ist eine Zeile fehlerhaft, wird keine geschrieben."
                    }
                }
            ]
        },
        {
            "name": "Bestände",
            "description": "Momentaufnahme je Artikel und Standort. Keine Historie — ein neuer Upload ersetzt den Stand.",
            "item": [
                {
                    "name": "Lesen — geht nicht einzeln",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{basis}}/api/v1/bestand",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "bestand"
                            ]
                        },
                        "description": "„bestand\" hängt an Artikel und Standort und hat keine eigene Nummer. Die Werte kommen über /api/v1/artikel. Dieser Aufruf antwortet mit 400 — er steht hier, damit die Meldung nicht überrascht."
                    }
                },
                {
                    "name": "Schreiben",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"daten\": [\n        {\n            \"artikelnummer\": \"100-001\",\n            \"storenummer\": \"RIVA\",\n            \"menge\": 12,\n            \"einheit\": \"FL\",\n            \"mindestmenge\": 6,\n            \"stand\": \"14.08.2026 18:00\"\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{basis}}/api/v1/bestand",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "bestand"
                            ]
                        },
                        "description": "Ergänzt und aktualisiert. Legt NICHTS still — ein Vollabgleich bleibt der Upload-Seite im Portal vorbehalten. Alles oder nichts: ist eine Zeile fehlerhaft, wird keine geschrieben."
                    }
                }
            ]
        },
        {
            "name": "Kunden",
            "description": "Stammkunden. Für die Gastronomie meist zweitrangig, für den Handel die Grundlage jeder Kundenauswertung.",
            "item": [
                {
                    "name": "Liste",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{basis}}/api/v1/kunde?limit=100&offset=0",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "kunde"
                            ],
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "100",
                                    "description": "höchstens 1000"
                                },
                                {
                                    "key": "offset",
                                    "value": "0"
                                }
                            ]
                        }
                    }
                },
                {
                    "name": "Einzeln",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{basis}}/api/v1/kunde/K-1001",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "kunde",
                                "K-1001"
                            ]
                        }
                    }
                },
                {
                    "name": "Schreiben",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"daten\": [\n        {\n            \"nummer\": \"K-1001\",\n            \"name\": \"Bessie Wilhelm\",\n            \"email\": \"b.wilhelm@example.de\",\n            \"strasse\": \"Hauptstr. 3\",\n            \"plz\": \"67146\",\n            \"ort\": \"Deidesheim\",\n            \"land\": \"DE\",\n            \"angelegt_am\": \"11.09.2023\"\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{basis}}/api/v1/kunde",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "kunde"
                            ]
                        },
                        "description": "Ergänzt und aktualisiert. Legt NICHTS still — ein Vollabgleich bleibt der Upload-Seite im Portal vorbehalten. Alles oder nichts: ist eine Zeile fehlerhaft, wird keine geschrieben."
                    }
                }
            ]
        },
        {
            "name": "Verkäufe",
            "description": "Bons und ihre Positionen. EINE ZEILE JE POSITION — ein Bon mit drei Artikeln steht dreimal darin, jedes Mal mit derselben Bonnummer. Ohne diese Daten gibt es keine Auswertung, keine ABC-Analyse und keine Prognose.",
            "item": [
                {
                    "name": "Liste",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{basis}}/api/v1/verkauf?limit=100&offset=0",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "verkauf"
                            ],
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "100",
                                    "description": "höchstens 1000"
                                },
                                {
                                    "key": "offset",
                                    "value": "0"
                                }
                            ]
                        }
                    }
                },
                {
                    "name": "Einzeln",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{basis}}/api/v1/verkauf/2026-0001",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "verkauf",
                                "2026-0001"
                            ]
                        }
                    }
                },
                {
                    "name": "Schreiben",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"daten\": [\n        {\n            \"bonnummer\": \"2026-0001\",\n            \"zeitpunkt\": \"14.08.2026 19:42\",\n            \"storenummer\": \"RIVA\",\n            \"artikelnummer\": \"100-001\",\n            \"menge\": 2,\n            \"einzelpreis\": 33,\n            \"rabatt\": 0,\n            \"storniert\": \"nein\"\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{basis}}/api/v1/verkauf",
                            "host": [
                                "{{basis}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "verkauf"
                            ]
                        },
                        "description": "Ergänzt und aktualisiert. Legt NICHTS still — ein Vollabgleich bleibt der Upload-Seite im Portal vorbehalten. Alles oder nichts: ist eine Zeile fehlerhaft, wird keine geschrieben."
                    }
                }
            ]
        }
    ]
}