Datenformate & IntegrationData Formats & Integration
Verstehe, welche Daten BEEP! erwartet (Input) und welche Daten BEEP! zurückgibt (Output). Vom POS-System über die API bis zum Transaktions-Export.
Understand what data BEEP! expects (input) and what data BEEP! returns (output). From POS system via API through to transaction export.
Datenfluss-ÜbersichtData Flow Overview
🏪
POS / ERP
Korona, RPOS,
Excel, SAP
Produkte, Preise
→ API / Sync
⚡
BEEP! API
europe-west1
Firebase
Transaktionen
Webhooks / API →
📊
Ihr System
Buchhaltung,
Analytics, BI
INPUT (Händler → BEEP!)
📦 Produktdaten (EAN, Name, Preis, MwSt.)
🏷️ Angebotsdaten (Rabatt, Gültigkeit)
🏪 Store-Stammdaten (Adresse, Logo)
📸 Produktbilder (JPEG/PNG)
OUTPUT (BEEP! → Händler)
💳 Transaktionsdaten (Checkout, Items)
🧾 Digitale Belege (PDF, JSON)
📈 Analytics (Scans, Umsatz, Klicks)
🔔 Webhook-Events (Echtzeit)
Unterstützte POS-SystemeSupported POS Systems
✓ Nativ unterstützt
Korona POS
Vollständiger bidirektionaler Sync. Produkte, Preise und Kassenumsätze werden automatisch synchronisiert.
↑ Via CSV/API
Excel / CSV
Manuelle und automatisierte Imports via Excel-Upload in der Fermat-App oder via API.
⚙ Custom Webhook
Beliebige POS/ERP
Jedes System, das HTTP-Calls macht. BEEP! empfängt Produktupdates via POST /insertProduct.
Import-MethodenImport Methods
| Methode | Use Case | Format | Limit |
| API: POST /insertProduct | Automatisierter POS-Sync, Echtzeit-Updates | JSON + multipart | 1 Produkt / Call |
| Bulk API (planned) | Batch-Import großer Kataloge | JSON Array | 500 / Batch |
| Excel-Upload (Fermat) | Manuelle Imports durch Store Manager | .xlsx | 10.000 Zeilen |
| Korona POS Sync | Automatischer Nacht-Sync aus Korona | Korona API | Unbegrenzt |
Produktdaten sind EAN-basiert. Jedes Produkt wird über seinen EAN-13 oder EAN-8 Barcode eindeutig identifiziert. Gleiches EAN in verschiedenen Stores = gleiches Produkt, unterschiedliche Preise.
Product data is EAN-based. Each product is uniquely identified by its EAN-13 or EAN-8 barcode. Same EAN in different stores = same product, different prices.
{
"ean": "4104420044052",
"name": "Bionade Holunder 0,5L",
"price": 1.29,
"vat": 7,
"storeId": "store_abc123",
"category": "Getränke",
"unit": "Flasche",
"brand": "Bionade",
"description": "Bio-Limo...",
"imageUrl": "https://...",
"weight": "0.5kg",
"isOrganic": true,
"isVegan": true,
"allergens": [],
"createdAt": "2026-02-27T10:00:00.000Z",
"updatedAt": "2026-02-27T10:00:00.000Z",
"syncedFromKorona": false,
"koronaProductId": null
}
MwSt.-Sätze
| Wert | Gilt für | Beispiele |
| 7 | Ermäßigter Steuersatz | Lebensmittel, Getränke (außer Alkohol), Bücher |
| 19 | Normaler Steuersatz | Alkohol, Tabak, Non-Food, Elektronik |
Excel / CSV ImportExcel / CSV Import
Für manuelle Bulk-Imports akzeptiert BEEP! eine Excel-Datei (.xlsx) mit folgendem Schema. Lade die Vorlage herunter und befülle sie mit deinen Produktdaten:
For manual bulk imports BEEP! accepts an Excel file (.xlsx) with the following schema. Download the template and fill it with your product data:
ean,name,price,vat,category,unit,brand,description,is_organic,is_vegan
4104420044052,Bionade Holunder 0-5L,1.29,7,Getränke,Flasche,Bionade,Bio-Limonade,true,true
4000521009985,Lay's Classic 175g,1.79,19,Snacks,Packung,Lay's,,false,false
4031700399215,Zott Monte Riegel,0.99,7,Süßwaren,Stück,Zott,,false,false
⚠️
Wichtige Regeln für den CSV-Import:
- EAN muss exakt 8 oder 13 Stellen haben (ohne führende Nullen)
- Preis als Dezimalzahl mit Punkt (nicht Komma):
1.29 nicht 1,29
- vat muss genau
7 oder 19 sein
- Keine Sonderzeichen in der EAN-Spalte
- Enkoding: UTF-8
GO (ab 17,99 €/Mo
Angebote referenzieren immer ein Produkt über seine EAN. Das Produkt muss bereits im Store-Katalog vorhanden sein.
Offers always reference a product by its EAN. The product must already exist in the store catalog.
{
"storeId": "store_abc123",
"productEan": "4104420044052",
"title": "Bionade zum Sparpreis",
"discountPrice": 0.99,
"originalPrice": 1.29,
"validFrom": "2026-03-01T00:00:00.000Z",
"validUntil": "2026-03-07T23:59:59.000Z",
"scope": "LOCAL",
"description": "Nur solange Vorrat reicht",
"imageUrl": "https://...",
"storeIds": ["store_abc", "store_def"],
"quantity": 500,
"offerId": "off_xyz789",
"discountPercent": 23,
"status": "ACTIVE",
"clickCount": 0,
"favoritedCount": 0,
"createdAt": "2026-02-27T10:00:00.000Z"
}
{
"id": "store_abc123",
"name": {
"legal": "Mustermann GmbH",
"trading": "Frische Ecke Mitte"
},
"address": {
"street": "Hauptstraße 12",
"city": "Berlin",
"postalCode": "10115",
"countryCode": "DE"
},
"coordinates": {
"latitude": 52.5200,
"longitude": 13.4050
},
"phone": "+49 30 12345678",
"email": "info@frische-ecke.de",
"website": "https://frische-ecke.de",
"media": {
"logo": "https://storage.googleapis.com/...",
"cover": "https://storage.googleapis.com/..."
},
"social": {
"instagram": "@frischeecke",
"facebook": "frischeecke.berlin",
"tiktok": "@frischeecke"
},
"mode": "live",
"package": "grow",
"hasScanAndGo": true,
"hasOffers": true,
"rating": 4,
"openingHours": {
"monday": "08:00–20:00",
"tuesday": "08:00–20:00",
},
"pspAccountId": "acct_1ABC...",
"receiptCount": 1247
}
GROW
Jede abgeschlossene Scan & Go Transaktion wird in der Firestore Collection purchase gespeichert und über Webhooks an dein System gesendet.
Every completed Scan & Go transaction is stored in the Firestore collection purchase and sent to your system via webhooks.
{
"id": "txn_mP4kR9nX",
"sessionId": "sess_k7aB3xQm9wPz",
"userId": "usr_42",
"stripeSessionId": "cs_live_...",
"storeData": {
"id": "store_abc123",
"name": "Frische Ecke Mitte",
"mode": "live",
"address": { "street": "Hauptstraße 12", },
"logo": "https://storage.googleapis.com/..."
},
"items": [
{
"name": "Bionade Holunder 0,5L",
"ean": "4104420044052",
"priceUnit": 129,
"quantity": 2,
"vat": 7,
"totalCent": 258
},
{
"name": "Lay's Classic 175g",
"ean": "4000521009985",
"priceUnit": 179,
"quantity": 1,
"vat": 19,
"totalCent": 179
}
],
"currency": "EUR",
"subtotalCent": 437,
"vatBreakdown": {
"7": { "net": 241, "tax": 17 },
"19": { "net": 150, "tax": 29 }
},
"totalVatCent": 46,
"totalCent": 437,
"status": "SUCCESS",
"createdAt": 1740645682000,
"completedAt": 1740645720000,
"receiptUrl": "https://beep-c6786.web.app/receipt/...",
"receiptQrCode": "data:image/png;base64,..."
}
Belege werden von BEEP! generiert und sind in zwei Formaten verfügbar:
Receipts are generated by BEEP! and available in two formats:
JSON (via API)
Strukturierte Daten über GET /fetchPurchase?id=...
✓ Für Buchhaltungs-Integration
PDF (Landing Page)
Rendern via receiptUrl aus der Transaktion
✓ TSE-konform, druckfähig
GO / GROW
Analytics-Daten können über die Firestore-Collections direkt abgerufen werden (für eigene BI-Tools) oder als aggregierte Report-JSONs via API:
Analytics data can be fetched directly from Firestore collections (for custom BI tools) or as aggregated report JSONs via API:
{
"storeId": "store_abc123",
"date": "2026-02-27",
"period": "daily",
"scanAndGo": {
"sessions": 47,
"completedCheckouts": 41,
"abandonedRate": 12.7,
"revenueCent": 189453,
"avgBasketCent": 4621,
"itemsScanned": 284
},
"offers": {
"activeOffers": 8,
"totalClicks": 342,
"totalFavorites": 89,
"conversionRate": 26.0
},
"store": {
"profileViews": 156,
"newFollowers": 12,
"totalFollowers": 847,
"dmReceived": 7
}
}
POS/ERP/PSP-Sync (generisch)
GROW
Der bidirektionale Sync läuft über die generischen API-Endpoints syncPOS, pushToPOS, syncERP, pushToERP, configurePSP, processPayment und refundPayment. BEEP! ist nicht an ein bestimmtes Kassensystem, ERP oder Zahlungsanbieter gebunden, der Händler nutzt sein eigenes System.
Bidirectional sync runs via the generic API endpoints syncPOS, pushToPOS, syncERP, pushToERP, configurePSP, processPayment and refundPayment. BEEP! is not tied to a specific POS system, ERP or payment provider; the merchant uses their own system.
Korona, Vectron, Casio, Lightspeed, SumUp POS, Zettle
SAP Business One, lexoffice, sevDesk, Xentral, weclapp
Stripe, Adyen, Mollie, Payone, Unzer, SumUp Payments
pos.article_number → ean
pos.article_name → name
pos.sell_price → price (EUR)
pos.tax_rate → vat (7 oder 19)
pos.category → category
pos.unit → unit
pos.image_url → imageUrl
pos.external_id → externalProductId
pos.receipt_number → receiptCount
pos.revenue → scanAndGo.revenueCent
Korona POS: Integration
GROW
Korona ist das am häufigsten angebundene Kassensystem bei BEEP!. Die Synchronisation läuft über die syncPOS API mit system: "korona".
Korona is the most commonly connected POS system at BEEP!. Synchronization runs via the syncPOS API with system: "korona".
korona.product.number → ean
korona.product.name → name
korona.product.price → price
korona.product.taxRate → vat
korona.commodity_group → category
korona.product.sector → tags[]
korona.product.image → imageUrl
korona.receipt.number → receiptNumber
korona.receipt.total → totalCent
korona.receipt.items[] → items[]
korona.receipt.timestamp → createdAt
📋
Der bestehende Korona-Sync (Curie/ + syncKoronaStore.js) importiert Produkte automatisch. Über die Developer API kann derselbe Sync manuell für eigene Integrationen ausgelöst werden.
Custom POS: Eigene Integration
GROW
Für Kassensysteme, die nicht direkt unterstützt werden, nutze die generische POS-API. Du definierst das Feld-Mapping selbst und synchronisierst Produkte über bulkImportProducts oder syncPOS.
For POS systems not directly supported, use the generic POS API. You define the field mapping yourself and sync products via bulkImportProducts or syncPOS.
POST /api/v1/syncPOS
system: "custom"
credentials: { apiUrl, apiKey, ... }
POST /api/v1/bulkImportProducts
products: [
{ barcode: "4000000000001", name: "Produkt A", price: 1.99, vat: 7 },
{ barcode: "4000000000002", name: "Produkt B", price: 2.49, vat: 19 },
...
]
POST /api/v1/exportSalesData
from: "2026-02-01", to: "2026-02-27"
POST /api/v1/pushToPOS
system: "custom"
dataType: "transactions"
records: [ ... ]
✅
Tipp: Nutze
checkout.completed Webhooks, um Transaktionen in Echtzeit an dein POS zu pushen, ohne Polling.