Entwicklerdokumentation
Erstellen Sie Kunden-, Fahrer- und Händler-Apps über eine einzige API. Lesen und schreiben Sie Restaurants, Menüs, Bestellungen und Fahrer; empfangen Sie Echtzeit-Events über signierte Webhooks. Alles ist auf den Token-Inhaber beschränkt.
🛍️ Kunden-App 🛵 Fahrer-App 🧑🍳 Händler-App
Entwickeln Sie für den Marketplace? App-Entwicklerdokumentation → · Theme-Entwicklerdokumentation →
learn_platform bereitet es vor, get_liquid_reference gibt ihm die maßgebliche Whitelist und
validate_theme führt die eigenen Prüfungen des Marketplace für dessen Ausgabe aus — die komplette Schleife aus Lernen → Erstellen → Validieren, ohne Ihren Editor zu verlassen. Mit einem Befehl verbinden →
Erste Schritte
Erstellen Sie ein API-Token in Ihrem Dashboard unter API-Tokens & Webhooks. Wählen Sie die read und/oder write Berechtigungen und kopieren Sie das Token — es wird nur einmal angezeigt.
https://www.menubarcode.com/api/v1Eine schnelle Prüfung, ob Ihr Token funktioniert:
curl https://www.menubarcode.com/api/v1/restaurants \
-H "Authorization: Bearer YOUR_TOKEN"
GET https://www.menubarcode.com/api/v1 gibt einen maschinenlesbaren Index der verfügbaren Endpunkte zurück (keine Authentifizierung erforderlich). Maschinenlesbar OpenAPI 3.1-Spezifikation (JSON) — generiert aus dem Live-Router, sodass sie immer der bereitgestellten API entspricht.Authentifizierung
Senden Sie Ihr Token bei jeder Anfrage als Bearer-Header:
Authorization: Bearer YOUR_TOKEN
Für schnelle Tests können Sie stattdessen ?api_token=YOUR_TOKEN als Query-Parameter übergeben, der Header wird jedoch dringend empfohlen, damit Tokens nie in Logs gelangen.
| Berechtigung | Zuweisungen |
|---|---|
read | Alle GET Endpunkte (jede Ressource). |
write | Alle schreibenden Endpunkte (und, als Obermenge, alle Lesezugriffe). |
Beschränkte Tokens
Über grob hinaus read/write, kann ein Token mit spezifischen Ressourcen eingeschränkt werden über resource:action Berechtigungen. Ressourcen: restaurants, menu, orders, customers, analytics, drivers, webhooks; Aktionen read, write. Wählen Sie sie beim Erstellen des Tokens im Dashboard aus.
| Beispiel-Token | Kann tun |
|---|---|
["orders:write"] | Nur Bestellungen lesen + schreiben (eine POS-Integration). |
["menu:read"] | Das Menü lesen; sonst nichts. |
["orders:read","analytics:read"] | Ein Reporting-Dashboard. |
Abdeckungsregeln: * gewährt alles; ein :write Scope gewährt auch dessen :read; grob read/write verhalten sich wie *:read / *:write. Eine Anfrage ohne den erforderlichen Scope gibt zurück 403. Legacy read/write Tokens sind nicht betroffen.
Tokens werden gespeichert gehasht (SHA-256) und können ein optionales Ablaufdatum tragen. Widerrufen Sie jedes Token sofort über das Dashboard.
Ratenlimits
Die API erlaubt 120 Anfragen pro Minute pro Token. Wird dies überschritten, gibt sie zurück 429 Too Many Requests mit einem Retry-After -Header. Standard-Rate-Limit-Header sind in jeder Antwort enthalten:
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 118
Fehler
Jeder Fehler auf einer /api/v1 -Route gibt konventionelle HTTP-Statuscodes und einen einzigen JSON-Envelope zurück — eine menschenlesbare message, eine stabile maschinen- code, und (bei der Validierung) eine feldbezogene errors Karte
{ "message": "Invalid or expired token.", "code": "unauthenticated" }
{ "message": "The given data was invalid.",
"code": "validation_failed",
"errors": { "title": ["The title field is required."] } }
| Status | code | Bedeutung |
|---|---|---|
401 | unauthenticated | Fehlendes, ungültiges oder abgelaufenes Token. |
403 | forbidden | Dem Token fehlt die erforderliche Berechtigung/der erforderliche Scope. |
404 | not_found | Ressource nicht gefunden oder gehört nicht zum Token. |
422 | validation_failed | Validierung fehlgeschlagen (siehe errors). |
429 | rate_limited | Rate-Limit überschritten. |
code, nicht die menschen- message — Meldungen können umformuliert oder lokalisiert werden; Codes sind stabil.404, nicht 403 — die API bestätigt niemals die Existenz von Daten eines anderen Inhabers.Seitennummerierung
Listen-Endpunkte geben paginierte Envelopes im Laravel-Stil zurück. Verwenden Sie den ?page= Query-Parameter, um durch die Seiten zu blättern.
{
"data": [ ... ],
"current_page": 1,
"last_page": 3,
"per_page": 20,
"total": 47
}
Restaurants & Menü lesen
Listet die dem Token gehörenden Restaurants auf, paginiert (20 pro Seite).
{
"data": [
{ "id": 12, "title": "Nova Bistro", "slug": "nova-bistro",
"url": "https://.../nova-bistro", "template": "linen",
"created_at": "2026-06-01T10:22:00+00:00" }
],
"current_page": 1, "last_page": 1, "total": 1
}
Ein einzelnes Restaurant mit seinen Menükategorien und der Artikelanzahl.
Das vollständige aktive Menü, nach Kategorie gruppiert.
[
{ "id": 3, "name": "Starters",
"items": [
{ "id": 88, "name": "Bruschetta", "price": 6.50,
"is_sold_out": false, "is_popular": true, "is_vegan": true,
"is_halal": true, "calories": 210 }
]
}
]
Bestellungen
Bestellungen, neueste zuerst, paginiert (30/Seite). Filtern Sie mit ?status=.
Vollständige Bestelldetails mit Positionen, Extras, Fahrer und Lieferverlauf.
Eine Bestellung erstellen — so übermittelt eine Kunden-App einen Warenkorb (das Backend des Händlers hält das Token). Jeder Artikel wird gegen das Live-Menü des Restaurants validiert; ausverkaufte oder fremde Artikel lehnen die gesamte Bestellung ab (422). Löst order.created aus und gibt die vollständige Bestellung inklusive ihres track_token.
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/orders \
-H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{
"type": "delivery",
"customer_name": "A. Idriss",
"phone": "+15551234567",
"address": "9 Cedar Road",
"tip_amount": 3.00,
"note": "Ring the bell",
"source": "customer_app",
"items": [
{ "item_id": 88, "quantity": 2, "variation": 5, "extras": [12], "note": "no onion" },
{ "item_id": 91, "quantity": 1 }
]
}'
Bestellung type ist einer von on-table, takeaway, delivery. für on-table übergeben Sie table_number; für delivery übergeben Sie address.
Idempotenz. Senden Sie einen Idempotency-Key -Header (oder einen Body client_uuid) bei jedem Bestell-Erstellungsaufruf. Ein erneuter Versuch mit demselben Schlüssel gibt die ursprüngliche Bestellung zurück und erstellt nie ein Duplikat — sicher bei verlorenen Antworten und Offline-Replay. Schlüssel sind pro Restaurant beschränkt.
Den Küchenstatus aktualisieren (new|preparing|ready|delivered|completed|cancelled). Löst aus order.status_changed.
Storefront API (Token pro Restaurant)
Eine separate, öffentlich zugängliche API, authentifiziert durch ein Storefront-Token pro Restaurant gesendet als X-Storefront-Token (nicht das Inhaber-Bearer-Token). Erstellen Sie diese über Ihr Dashboard; jedes Token kann immer nur sein eigenes Restaurant erreichen. Der Lesescope ist menu:read; das Aufgeben von Bestellungen erfordert den order:write Umfang
Vollständiges Menü für das Restaurant des Tokens (Varianten, Extras, Gruppen, Galerie).
Grundlegende Restaurant-Informationen für das Restaurant des Tokens.
Einen Warenkorb im Namen eines Gastes übermitteln. Serverseitig bepreist und unbezahlt (der Gast zahlt bei Ankunft); takeaway oder on-table nur. Jeder Artikel wird gegen das Live-Menü validiert — ausverkaufte oder fremde Artikel lehnen die gesamte Bestellung ab (422). Limits: 40 Artikel/Bestellung, 30 Menge/Position. Optional coupon_code wendet serverseitig einen Inhaberrabatt an. Löst aus order.created und gibt zurück track_token + continue_url.
curl -X POST https://www.menubarcode.com/api/v1/storefront/orders \
-H "X-Storefront-Token: YOUR_STOREFRONT_TOKEN" -H "Content-Type: application/json" \
-d '{
"type": "takeaway",
"customer_name": "A. Idriss",
"phone": "+15551234567",
"coupon_code": "WELCOME10",
"items": [
{ "item_id": 88, "quantity": 2, "variation": 5, "extras": [12] },
{ "item_id": 91, "quantity": 1 }
]
}'
Analytics & Kunden
Umsatzübersicht über einen Zeitraum (?from=YYYY-MM-DD&to=YYYY-MM-DD, Standard: letzte 30 Tage): Bestellzahlen nach Status/Typ, Brutto- & bezahlter Umsatz, durchschnittlicher Bestellwert und Top-Artikel.
{
"range": { "from": "2026-06-02", "to": "2026-07-02" },
"orders": { "total": 214, "paid": 198, "by_status": {...}, "by_type": {...} },
"revenue": { "gross": 8420.50, "paid": 7990.00, "avg_order_value": 39.35 },
"top_items": [ { "item_id": 88, "name": "Margherita", "quantity": 143 } ]
}
Die Kundenliste des Restaurants (CRM), paginiert. Filtern Sie mit ?search=.
Fahrer verwalten Schreiben
Fahrer gehören zu Ihnen und (optional) zu einem Restaurant. Das Erstellen oder Rotieren eines Fahrers gibt ein rohes Fahrer-Token genau einmal zurück — Geben Sie es an die App des Fahrers weiter; sie authentifiziert sich damit (siehe unten).
curl -X POST https://www.menubarcode.com/api/v1/drivers \
-H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Alex","phone":"+15550001111","restaurant_id":12}'
# → { "id": 7, "name": "Alex", ..., "token": "RAW_DRIVER_TOKEN_SHOWN_ONCE" }
Macht das alte Token ungültig und gibt ein neues zurück.
Eine Lieferung zuweisen & verfolgen
Lieferbestellungen, filterbar nach ?delivery_status= und ?driver_id=.
Fahrer zuweisen {"driver_id": 7}. Setzt delivery_status=assigned und löst aus order.driver_assigned.
Die Lieferphase überschreiben: pending | assigned | picked_up | out_for_delivery | delivered | failed.
Fahrer-App-API
Die Fahrer-App authentifiziert sich mit einem Fahrer-Token (kein Inhaber-Token), das oben erstellt wurde. Basispfad https://www.menubarcode.com/api/v1/driver. Jede Antwort ist auf diesen einen Fahrer beschränkt.
Authorization: Bearer RAW_DRIVER_TOKEN
Das Profil des authentifizierten Fahrers.
Diesem Fahrer zugewiesene Bestellungen. Fügen Sie ?active=1 hinzu, um zugestellt/fehlgeschlagen auszublenden.
Die Lieferung voranbringen: {"delivery_status":"out_for_delivery"} dann "delivered" oder "picked_up" / "failed", optional note). Löst dieselben Webhooks aus wie der Inhaber-Endpunkt.
Live-Position senden: {"lat":25.2048,"lng":55.2708}. Wird in der Tracking-Ansicht des Kunden angezeigt, während die Lieferung unterwegs ist.
Kundenkonten
A eigenständige Kunden-App authentifiziert ihre eigenen Nutzer mit einem Token pro Kunde (Sanctum-Stil: mehrere Geräte, einzeln widerrufbar). Es ist kein Inhaber-Token beteiligt. Kunden sind pro Restaurant beschränkt, daher liegt die Authentifizierung unter /restaurants/{id}/customer/…. Durchsuchen Sie zuerst das Menü mit dem öffentlichen Endpunkt:
Aktives Menü, nach Kategorie gruppiert (ausverkaufte Artikel ausgelassen). Keine Authentifizierung.
Registrieren / Anmelden
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/login \
-H "Content-Type: application/json" \
-d '{"email":"sam@example.com","password":"secret123","device":"iPhone 15"}'
# → { "token": "RAW_CUSTOMER_TOKEN", "customer": { "id": 42, "name": "Sam", ... } }
Passwortlos (SMS OTP)
Fordern Sie einen Code für eine Telefonnummer an und verifizieren Sie ihn dann. Die Verifizierung findet oder erstellt den Kunden und gibt ein Token zurück. Auth-Endpunkte sind rate-limitiert (Login/Registrierung 10/Min., OTP-Anfrage 6/Min.).
Kunden-App-API
Authentifizieren Sie sich mit dem Kunden-Token. Basispfad https://www.menubarcode.com/api/v1/customer. Alles ist auf den authentifizierten Kunden beschränkt — der Bestell-Body kann niemals die ID eines anderen Kunden vortäuschen.
Authorization: Bearer RAW_CUSTOMER_TOKEN
Profil lesen / aktualisieren (Name, E-Mail, Telefon, Geburtstag, Einwilligungen).
Eine Bestellung als dieser Kunde aufgeben (gleiche Artikelstruktur wie beim Händler-Erstellungsendpunkt; die Identität wird dem Token entnommen). Gibt die Bestellung mit ihrem track_token.
Der eigene Bestellverlauf des Kunden, paginiert.
Gespeicherte Lieferadressen (die erste wird zum Standard; unterstützt lat/lng).
Widerruft das für die Anfrage verwendete Token (nur dieses Gerät).
Bestellverfolgung Öffentlich
Keine Authentifizierung — der Zugriff wird durch das nicht erratbare track_token der Bestellung gesteuert (bei der Bestellerstellung zurückgegeben). Dies treibt einen Kunden-App Live-Tracking-Bildschirm an.
{
"id": 5501, "status": "preparing", "delivery_status": "out_for_delivery",
"is_paid": true, "total": 42.00,
"timeline": { "preparing_at": "...", "out_for_delivery_at": "..." },
"items": [ { "name": "Margherita", "quantity": 2 } ],
"driver": { "name": "Alex", "lat": 25.2, "lng": 55.27, "location_updated_at": "..." }
}
Der Fahrerblock (mit Live-Koordinaten) erscheint erst, sobald die Bestellung abgeholt wurde / unterwegs ist.
Mitarbeiter-Login
A Mitarbeiter-App (POS / KDS / Kellner) authentifiziert jeden Mitarbeiter mit einem Token pro Mitarbeiter. Zwei Wege spiegeln das Dashboard: E-Mail + Passwort oder eine schnelle numerische PIN für gemeinsam genutzte Küchentablets. Mitarbeiter sind pro Restaurant beschränkt.
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/staff/pin \
-H "Content-Type: application/json" -d '{"pin":"4321","device":"Kitchen iPad"}'
# → { "token": "RAW_STAFF_TOKEN",
# "staff": { "id": 3, "role": "kitchen", "permissions": ["kds"] } }
Die Antwort listet die effektiven Berechtigungen — eine Teilmenge von orders, menu_edit, coupons, analytics, kds, customers abgeleitet aus ihrer Rolle (Manager / Kassierer / Küche / Kellner) plus etwaiger mitarbeiterbezogener Überschreibungen. Endpunkte sind berechtigungsgeschützt (403 andernfalls).
Mitarbeiter-App-API
Authentifizieren Sie sich mit dem Mitarbeiter-Token. Basispfad https://www.menubarcode.com/api/v1/staff. Alle Aktionen sind auf das Restaurant des Mitarbeiters beschränkt.
Authorization: Bearer RAW_STAFF_TOKEN
Profil mit Rolle und Berechtigungsliste.
Bestellungen auflisten und Küchenstatus aktualisieren. Erfordert die orders Berechtigung.
Live-Küchentickets, nach Bestellung gruppiert, gefiltert auf die Station des Mitarbeiters (oder ?station_id=). Zeigt nur Artikel an, die noch queued|preparing|ready.
Voranbringen (queued → preparing → ready → served) oder einen KDS-Status zurück. Der Status der übergeordneten Bestellung synchronisiert sich automatisch neu.
Das Menü aus dem Servicebereich bearbeiten (Manager). Gleiche Payloads wie die Händler-Menü-Endpunkte, beschränkt auf das Restaurant des Mitarbeiters.
Umsatzübersicht für das Restaurant des Mitarbeiters (gleiche Struktur wie der Händler-Analytics-Endpunkt; ?from=&to=).
Widerruft das Token dieses Geräts.
Webhooks — Einrichtung
Registrieren Sie Endpunkte über das Dashboard unter API-Tokens & Webhooks. Wählen Sie, welche Events jeder Endpunkt empfängt. Beim Speichern erhalten Sie ein endpunktbezogenes Signaturgeheimnis; Verwenden Sie die Test -Schaltfläche, um ein ping. Pausieren Sie einen Endpunkt, um die Zustellung zu stoppen, ohne sein Secret zu verlieren.
Ihr Endpunkt sollte mit einem 2xx -Status schnell antworten (innerhalb von 10 s). Jeder andere Status — oder ein Timeout — wird als Fehler behandelt und wiederholt.
Endpunkte können auch programmatisch (für Zapier/Make REST-Hooks) mit einem webhooks:write Token verwaltet werden:
GET /api/v1/webhook-endpoints # list your endpoints
POST /api/v1/webhook-endpoints # {"url":"https://…","events":["order.created"]} → 201 {id, secret, …}
DELETE /api/v1/webhook-endpoints/{id} # unsubscribe → 204
Das secret wird zurückgegeben nur beim Erstellen — speichern Sie es, um die Signatur zu verifizieren. url muss ein öffentlicher HTTPS-Endpunkt sein (SSRF-geschützt); events muss aus der Liste unten stammen (oder *).
Webhook-Events
| Ereignis | Wird ausgelöst, wenn |
|---|---|
order.created | Eine neue Bestellung aufgegeben wird (Dashboard oder API). |
order.status_changed | Sich der Küchenstatus einer Bestellung ändert (Dashboard, POS oder API). |
order.paid | Eine Bestellung als vollständig bezahlt markiert wird (Gateway oder geteilte Rechnung). |
order.driver_assigned | Ein Fahrer einer Lieferung zugewiesen wird. |
order.out_for_delivery | Der Fahrer zum Kunden unterwegs ist. |
order.delivered | Die Lieferung abgeschlossen wurde. |
order.delivery_failed | Die Lieferung nicht abgeschlossen werden konnte. |
refund.completed | Eine Rückerstattung für eine Bestellung wird abgeschlossen. |
reservation.created | Eine Tischreservierung wird erstellt. |
reservation.cancelled | Eine Tischreservierung wird storniert. |
customer.created | Ein neuer Kundendatensatz wird erstellt. |
shift.opened | Eine Kassen-/POS-Schicht wird geöffnet. |
shift.closed | Eine Kassen-/POS-Schicht wird abgeschlossen. |
menu.updated | Ein Menüartikel oder eine Kategorie erstellt, aktualisiert oder gelöscht wird (jede Oberfläche). Payload: {restaurant_id, change, entity, id}. |
entitlement.changed | Eine Funktionsberechtigung für den Workspace gewährt oder widerrufen wird (Tarifwechsel, Add-on, App-Installation/-Deinstallation, Admin-Override). Payload: {action, feature_key, source_type, source_id, user_id, occurred_at} wobei action ist granted oder revoked. |
subscription.* | Abonnement-Lebenszyklus: subscription.paused, .resumed, .renewed, .expired, .plan_changed, .past_due, .expiring, .trial_ending. |
app.uninstalled | Eine Marketplace-App deinstalliert wird (an den Endpunkt der App zugestellt). |
* | Alle oben genannten Events abonnieren. |
ping | Gesendet über die Test -Schaltfläche, um die Verkabelung zu prüfen. |
Eine Zustellung ist fehlgeschlagen, während Ihr Endpunkt offline war? Verwenden Sie Erneut zustellen in einer beliebigen Zeile im Protokoll „Letzte Zustellungen“ des Dashboards, um sie mit einem neuen webhook-id.
Webhook-Payload
Jede Zustellung ist ein POST mit diesem JSON-Envelope und diesen Headern:
POST /your-endpoint HTTP/1.1
Content-Type: application/json
webhook-id: msg_a1b2c3d4e5f6g7h8i9j0k1l2
webhook-timestamp: 1751472240
webhook-signature: v1,K5f...base64...==
X-Webhook-Event: order.created (legacy)
X-Webhook-Signature: 9a3f...hex... (legacy, HMAC of body only)
{
"id": "msg_a1b2c3d4e5f6g7h8i9j0k1l2",
"event": "order.created",
"created_at": "2026-07-02T18:04:00+00:00",
"data": { "order_id": 5501, "total": "42.00" }
}
Das id ist pro Zustellung eindeutig. Da Wiederholungen dasselbe id, verwenden, machen Sie damit Ihren Handler idempotent.
Die Signatur verifizieren
Das webhook-signature -Header ist ein HMAC-SHA256, base64-kodiert, berechnet über {id}.{timestamp}.{body} mit dem Signatur-Secret Ihres Endpunkts. Das Einbinden von ID und Zeitstempel in die Signatur macht eine abgefangene Anfrage sicher gegen Replay. Lehnen Sie jede Anfrage ab, deren webhook-timestamp älter als ~5 Minuten ist.
PHP
$secret = 'whsec_from_dashboard';
$id = $_SERVER['HTTP_WEBHOOK_ID'];
$ts = $_SERVER['HTTP_WEBHOOK_TIMESTAMP'];
$body = file_get_contents('php://input');
$sent = explode(',', $_SERVER['HTTP_WEBHOOK_SIGNATURE'])[1] ?? '';
if (abs(time() - (int) $ts) > 300) { http_response_code(400); exit; }
$expected = base64_encode(hash_hmac('sha256', "$id.$ts.$body", $secret, true));
if (!hash_equals($expected, $sent)) { http_response_code(401); exit; }
// verified — process $body
http_response_code(200);
Node.js
const crypto = require('crypto');
function verify(req, secret) {
const id = req.headers['webhook-id'];
const ts = req.headers['webhook-timestamp'];
const sig = (req.headers['webhook-signature'] || '').split(',')[1];
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const expected = crypto
.createHmac('sha256', secret)
.update(`${id}.${ts}.${req.rawBody}`)
.digest('base64');
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig || ''));
}
X-Webhook-Signature -Header (einfacher HMAC-SHA256 des Bodys, hex) wird aus Gründen der Abwärtskompatibilität ebenfalls gesendet. Neue Integrationen sollten webhook-signature.Wiederholungen & Zustellungsprotokoll
Die Zustellung erfolgt asynchron und wird bei Fehlern mit exponentiellem Backoff plus Jitter wiederholt: etwa 1m → 5m → 15m → 1h (insgesamt bis zu 5 Versuche). Jeder Versuch — Erfolg oder Fehler — wird im Zustellungsprotokoll Ihres Dashboards mit HTTP-Status, Versuchsnummer und Antwort-Snippet festgehalten.
webhook-id um gelegentliche Wiederholungen zu behandeln.MCP-Server
Fünf Model-Context-Protocol-Server verbinden KI-Agenten (ChatGPT, Claude, Cursor) mit der Plattform — wählen Sie den, der zu Ihrer Zielgruppe passt. Alle sprechen JSON-RPC 2.0 über HTTP und verhandeln Protokollversionen 2024-11-05 / 2025-03-26 / 2025-06-18.
| Server | Endpunkt | Zielgruppe | Authentifizierung | Werkzeuge |
|---|---|---|---|---|
| Admin | https://www.menubarcode.com/mcp | Store-Inhaber — verwalten den Store | API-Token (Bearer) | 23 |
| Storefront | https://www.menubarcode.com/mcp/storefront | Der Agent eines Gastes — in einem Store stöbern & bestellen | Storefront-Token (Agent-Scope) | 12 |
| Customer | https://www.menubarcode.com/mcp/customer | Ein angemeldeter Gast — seine eigenen Bestellungen | Kunden-Token (OTP-Login) | 5 |
| Catalog | https://www.menubarcode.com/mcp/catalog | Jeder — Stores plattformweit entdecken | Öffentlich | 3 |
| Dev | https://www.menubarcode.com/mcp/dev | KI-Coding-Tools — Themes/Integrationen erstellen | Öffentlich | 7 |
Schnellstart: springen zu Admin, Catalog, Customer, oder Dev. Der Storefront-Server teilt sich das Admin-Verbindungsmuster mit einem X-Storefront-Token -Header anstelle eines Bearer-Tokens.
MCP-Server (Admin)
Ein MCP-kompatibler KI-Client (Claude, ChatGPT, Cursor) kann Ihr Restaurant in natürlicher Sprache mit denselben API-Tokens bedienen. Richten Sie ihn aus auf:
https://www.menubarcode.com/mcp JSON-RPC 2.0Authentifizieren mit Authorization: Bearer YOUR_TOKEN. Jedes Tool deklariert die granulare Berechtigung, die es benötigt (resource:action); ein Legacy- read -Token deckt jedes :read -Tool ab und write deckt alles ab. Alle Aufrufe sind auf Ihre Restaurants beschränkt und rate-limitiert. Tools, für die Ihnen die Berechtigung fehlt, sind ausgeblendet in tools/list.
Verbinden (Claude Code)
claude mcp add --transport http platform-admin https://www.menubarcode.com/mcp \
--header "Authorization: Bearer YOUR_TOKEN"
Tools auflisten
curl -X POST https://www.menubarcode.com/mcp \
-H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Ein Tool aufrufen (z. B. einen Menüartikel hinzufügen)
curl -X POST https://www.menubarcode.com/mcp \
-H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"add_menu_item",
"arguments":{"restaurant_id":12,"name":"Latte","price":4.5}}}'
Werkzeuge
| Werkzeug | Berechtigung | Was es tut |
|---|---|---|
list_restaurants | read | Restaurants, die Ihnen gehören. |
get_menu | read | Kategorien & Artikel eines Restaurants. |
list_categories | menu:read | Kategorien mit Artikelanzahl. |
add_category | menu:write | Eine Kategorie erstellen. |
update_category | menu:write | Eine Kategorie umbenennen / neu anordnen. |
delete_category | menu:write | Eine Kategorie löschen (verweigert, wenn sie Artikel enthält). |
add_menu_item | write | Einen Menüartikel erstellen (Tariflimit wird geprüft). |
update_menu_item | write | Name/Preis/Beschreibung eines Artikels bearbeiten. |
delete_menu_item | menu:write | Einen Artikel dauerhaft löschen. |
set_item_availability | menu:write | Einen Artikel als verfügbar/ausverkauft markieren (86-Umschalter). |
list_orders | orders:read | Bestellungen, neueste zuerst; Filter nach Status/Datum/Suche. |
get_order | orders:read | Vollständige Bestelldetails inkl. Positionen. |
update_order_status | write | Den Küchenstatus einer Bestellung voranbringen. |
list_customers | customers:read + crm_suite | CRM-Liste; Suche nach Name/Telefon/E-Mail. Ohne die Berechtigung aus tools/list ausgeblendet. |
get_customer | customers:read + crm_suite | Der vollständige Datensatz eines Kunden. Ohne die Berechtigung aus tools/list ausgeblendet. |
sales_report | analytics:read | Umsatz + Bestellzahlen + Top-Artikel für einen Zeitraum. |
get_restaurant_settings | restaurants:read | Momentaufnahme von Profil- und Bestelleinstellungen. |
update_business_hours | restaurants:write | Den Text der Öffnungszeiten festlegen. |
list_coupons | orders:read | Ihre Rabattgutscheine. |
create_coupon | orders:write | Einen Prozent-/Festbetrag-Gutschein erstellen. |
update_coupon | orders:write | Einen Gutschein bearbeiten. |
delete_coupon | orders:write | Einen Gutschein löschen. |
Catalog MCP (Restaurants entdecken)
Ein öffentlicher, schreibgeschützter MCP-Server, mit dem KI-Agenten Restaurants und Gerichte auf der gesamten Plattform entdecken und dann per Deeplink zu einem bestimmten Store gelangen, um zu bestellen. Keine Authentifizierung, rate-limitiert.
https://www.menubarcode.com/mcp/catalog JSON-RPC 2.0 · publicVerbinden (Claude Code)
claude mcp add --transport http platform-catalog https://www.menubarcode.com/mcp/catalog
| Werkzeug | Was es tut |
|---|---|
search_stores | Restaurants nach Stichwort/Stadt finden (Name, Adresse, menu_url, storefront_mcp-Hinweis). |
search_items | Gerichte über alle Stores hinweg finden (Suche/Ernährung/max_price/Stadt), nach Store gruppiert. |
get_store | Vollständige öffentliche Details für einen Store nach Slug oder ID. |
list_starter_menus | Die mitgelieferten Starter-Menü-Vorlagen, aus denen ein neues Geschäft starten kann (Café, Pizzeria, Burger, Bäckerei, Lounge). |
Nur aktive, öffentlich gelistete Stores erscheinen; Inhaber können sich in ihren Store-Einstellungen abmelden. Es werden niemals Kontaktdaten des Inhabers zurückgegeben. Um eine Bestellung aufzugeben, verwenden Sie das Storefront MCP mit einem Agent-Token pro Store.
Customer Account MCP
Ermöglicht dem KI-Assistenten eines Gastes, zu lesen, zu verfolgen und erneut zu bestellen ihre eigenen Bestellungen. Authentifiziert durch ein Token pro Kunde aus dem bestehenden OTP-Login; die Kundenidentität stammt ausschließlich aus dem Token — eine Telefonnummer oder Kunden-ID wird niemals als Argument akzeptiert.
https://www.menubarcode.com/mcp/customer JSON-RPC 2.0 · customer tokenEin Token erhalten (OTP-Flow)
# 1) request a one-time code (sent to the customer's phone)
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/otp/request \
-H "Content-Type: application/json" -d '{"phone":"+15551234567"}'
# 2) verify the code → returns a customer bearer token
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/otp/verify \
-H "Content-Type: application/json" -d '{"phone":"+15551234567","code":"123456"}'
Verbinden (Claude Code)
claude mcp add --transport http my-orders https://www.menubarcode.com/mcp/customer \
--header "Authorization: Bearer CUSTOMER_TOKEN"
| Werkzeug | Was es tut |
|---|---|
my_orders | Ihre letzten Bestellungen (neueste zuerst). |
order_detail | Vollständige Details + Positionen für eine Ihrer Bestellungen. |
track_order | Live-Status nach Bestell-ID oder Tracking-Token. |
reorder | Eine frühere Bestellung als Warenkorb-Entwurf wiederherstellen (überspringt ausverkaufte Artikel). |
my_profile | Ihr Name, Ihre Telefonnummer und Bestellanzahl. |
my_bookings | Ihre eigenen Hotelzimmerbuchungen an diesem Ort (Code, Status, Daten, Zimmertyp, Gesamt). |
curl -X POST https://www.menubarcode.com/mcp/customer \
-H "Authorization: Bearer CUSTOMER_TOKEN" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"my_orders","arguments":{"limit":5}}}'
Verbinden Sie Ihren KI-Editor
Erstellen Sie ein Theme oder eine Integration mit Claude Code, Cursor oder VS Code? Richten Sie es auf die öffentliche Dev MCP-Server — Ihr KI-Tool erhält Live-Plattformdokumentation, die generierte Liquid-Whitelist und serverseitige Theme-Validierung. Kein Token erforderlich.
https://www.menubarcode.com/mcp/dev JSON-RPC 2.0 · publicClaude Code
claude mcp add --transport http platform-dev https://www.menubarcode.com/mcp/dev
Cursor — .cursor/mcp.json
{ "mcpServers": { "platform-dev": { "url": "https://www.menubarcode.com/mcp/dev" } } }
VS Code — .vscode/mcp.json
{ "servers": { "platform-dev": { "type": "http", "url": "https://www.menubarcode.com/mcp/dev" } } }
Werkzeuge learn_platform (hier beginnen), search_docs / fetch_full_doc, get_liquid_reference, get_section_schema, validate_theme, list_webhook_events. Empfohlener Agent-Workflow: Lernen → Erstellen → Validieren → Ausliefern.
https://www.menubarcode.com/mcp) arbeitet mit Ihren Restaurantdaten; dieser hier stellt Dokumentation und Validierung bereit und kann bedenkenlos öffentlich geteilt werden.Änderungsprotokoll
| Datum | Ändern |
|---|---|
| 2026-08-20 | Hotel-PMS + Wachstums-Release: refund.completed, reservation.created, reservation.cancelled, customer.created, shift.opened, shift.closed Webhook-Ereignisse; Registrierung von Personal-Push-Geräten + 2fa Endpunkte; neue MCP-Tools hotel_availability, my_bookings, list_starter_menus, list_webhook_events. |
| 2026-07-28 | Vom Router generierter Discovery-Index + OpenAPI 3.1-Spezifikation (immer im Einklang mit der bereitgestellten API); Idempotency-Key bei der Bestellerstellung; API-Rate-Limits pro Token; subscription.* + app.uninstalled Webhook-Events + Zustellung Erneut zustellen. |
| 2026-07-07 | Öffentlich Dev MCP-Server für KI-Coding-Tools: Live-Dokumentationssuche, generierte Liquid-Referenz, serverseitige Theme-Validierung. |
| 2026-07-02 | Granulare Token-Scopes (resource:action); Mitarbeiter-Menübearbeitung + Analytics-Endpunkte. |
| 2026-07-02 | Mitarbeiter-App: Token-Auth pro Mitarbeiter (Passwort + PIN), Rollenberechtigungs-Gating, Bestellstatus, KDS Bump/Recall. |
| 2026-07-02 | Eigenständige Kunden-App: Token-Auth pro Kunde (Registrierung/Login/OTP), Profil, Bestellaufgabe + Verlauf, gespeicherte Adressen, öffentliches Menü-Browsing. |
| 2026-07-02 | Vollständige Management-API: Menü-CRUD, Bestellerstellung, Fahrer + Lieferlebenszyklus, Fahrer-App-Token-API, öffentliche Bestellverfolgung, Umsatz-Analytics, Kunden. Neue Liefer-Webhook-Events. |
| 2026-07-02 | Warteschlangenbasierte Webhook-Zustellung mit Wiederholungen; Standard-Webhooks-Signierung (webhook-id/timestamp/signature); order.paid -Event; öffentliche Dokumentation. |
| 2026-06-26 | Erste v1 REST-API, Tokens und Webhook-Endpunkte. |
https://www.menubarcode.com/api/v1