v1 · REST + Webhooks

डेवलपर दस्तावेज़

एक ही API पर customer, driver और merchant ऐप्स बनाएँ। रेस्तराँ, मेन्यू, ऑर्डर और ड्राइवर पढ़ें और लिखें; साइन किए गए webhooks के जरिए रियल-टाइम इवेंट प्राप्त करें। सब कुछ टोकन मालिक तक सीमित है।

🛍️ ग्राहक ऐप 🛵 ड्राइवर ऐप 🧑‍🍳 मर्चेंट ऐप

मार्केटप्लेस के लिए बना रहे हैं? ऐप डेवलपर दस्तावेज़ →  ·  थीम डेवलपर दस्तावेज़ →

नया हमारा Dev MCP सर्वर किसी भी MCP-सक्षम AI टूल को प्लेटफ़ॉर्म विशेषज्ञ में बदल देता है। learn_platform इसे तैयार करता है, get_liquid_reference इसे आधिकारिक व्हाइटलिस्ट देता है, और validate_theme इसके आउटपुट पर मार्केटप्लेस की अपनी जाँचें चलाता है — अपने एडिटर को छोड़े बिना पूरा learn → build → validate लूप। एक कमांड में कनेक्ट करें →

शुरू करें

अपने डैशबोर्ड से इसके अंतर्गत एक API टोकन बनाएँ API टोकन और Webhook. चुनें read और/या write क्षमताएँ और टोकन कॉपी करें — यह केवल एक बार दिखाया जाता है।

बेस URL: https://www.menubarcode.com/api/v1

एक त्वरित जाँच कि आपका टोकन काम करता है:

curl https://www.menubarcode.com/api/v1/restaurants \
  -H "Authorization: Bearer YOUR_TOKEN"
रूट GET https://www.menubarcode.com/api/v1 उपलब्ध एंडपॉइंट का मशीन-रीडेबल इंडेक्स लौटाता है (कोई auth आवश्यक नहीं)। मशीन-रीडेबल OpenAPI 3.1 spec (JSON) — लाइव राउटर से जनरेट किया गया, इसलिए यह हमेशा डिप्लॉय किए गए API से मेल खाता है।

प्रमाणीकरण

हर अनुरोध पर अपना टोकन Bearer हेडर के रूप में भेजें:

Authorization: Bearer YOUR_TOKEN

त्वरित परीक्षणों के लिए आप इसके बजाय पास कर सकते हैं ?api_token=YOUR_TOKEN एक क्वेरी पैरामीटर के रूप में, लेकिन हेडर को दृढ़ता से प्राथमिकता दी जाती है ताकि टोकन कभी लॉग में लीक न हों।

क्षमताअनुदान
readसभी GET एंडपॉइंट (हर संसाधन)।
writeसभी म्यूटेटिंग एंडपॉइंट (और, सुपरसेट होने के नाते, सभी रीड)।

स्कोप्ड टोकन

मोटे से आगे read/write, एक टोकन को विशिष्ट संसाधनों तक इनके साथ सीमित किया जा सकता है resource:action क्षमताएँ। संसाधन: restaurants, menu, orders, customers, analytics, drivers, webhooks; क्रियाएँ read, write. डैशबोर्ड में टोकन बनाते समय उन्हें चुनें।

उदाहरण टोकनकर सकता है
["orders:write"]केवल ऑर्डर पढ़ें + लिखें (एक POS एकीकरण)।
["menu:read"]मेन्यू पढ़ें; और कुछ नहीं।
["orders:read","analytics:read"]एक रिपोर्टिंग डैशबोर्ड।

कवरेज नियम: * सब कुछ अनुदान देता है; एक :write स्कोप इसका यह भी अनुदान देता है :read; मोटा read/write जैसा व्यवहार करता है *:read / *:write. आवश्यक स्कोप के बिना अनुरोध यह लौटाता है 403. लीगेसी read/write टोकन अप्रभावित रहते हैं।

टोकन विश्राम अवस्था में हैश किए जाते हैं (SHA-256) और एक वैकल्पिक समाप्ति ले जा सकते हैं। किसी भी टोकन को डैशबोर्ड से तुरंत रद्द करें।

रेट लिमिट

API अनुमति देता है प्रति मिनट 120 अनुरोध प्रति टोकन। इसे पार करने पर यह लौटाता है 429 Too Many Requests इसके साथ Retry-After हेडर। मानक रेट-लिमिट हेडर हर प्रतिक्रिया पर शामिल होते हैं:

X-RateLimit-Limit: 120
X-RateLimit-Remaining: 118

त्रुटियाँ

इस पर हर त्रुटि /api/v1 रूट पारंपरिक HTTP स्थिति कोड और एक एकल JSON envelope लौटाता है — एक मानव message, एक स्थिर मशीन code, और (सत्यापन पर) एक प्रति-फ़ील्ड errors मानचित्र

{ "message": "Invalid or expired token.", "code": "unauthenticated" }

{ "message": "The given data was invalid.",
  "code": "validation_failed",
  "errors": { "title": ["The title field is required."] } }
स्थितिcodeअर्थ
401unauthenticatedअनुपलब्ध, अमान्य या समाप्त टोकन।
403forbiddenटोकन में आवश्यक क्षमता/स्कोप नहीं है।
404not_foundसंसाधन नहीं मिला या टोकन के स्वामित्व में नहीं।
422validation_failedसत्यापन विफल (देखें errors).
429rate_limitedरेट सीमा पार हो गई।
मशीन को पार्स करें code, मानव को नहीं message — संदेश दोबारा शब्दबद्ध या स्थानीयकृत किए जा सकते हैं; कोड स्थिर हैं।
किसी ऐसे संसाधन का अनुरोध करना जिसके आप स्वामी नहीं हैं, यह लौटाता है 404, नहीं 403 — API कभी भी किसी अन्य मालिक के डेटा के अस्तित्व की पुष्टि नहीं करता।

पेजिनेशन

लिस्ट एंडपॉइंट Laravel-शैली के paginated envelope लौटाते हैं। इसका उपयोग करें ?page= पेजों के बीच जाने के लिए क्वेरी पैरामीटर।

{
  "data": [ ... ],
  "current_page": 1,
  "last_page": 3,
  "per_page": 20,
  "total": 47
}

रेस्तराँ और मेन्यू पढ़ें

GET /restaurants

टोकन के स्वामित्व वाले रेस्तराँ सूचीबद्ध करें, paginated (20 प्रति पेज)।

{
  "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
}
GET /restaurants/{id}

एक एकल रेस्तराँ अपनी मेन्यू श्रेणियों और आइटम गणना के साथ।

GET /restaurants/{id}/menu

श्रेणी के अनुसार समूहबद्ध पूर्ण सक्रिय मेन्यू।

[
  { "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 }
    ]
  }
]

ऑर्डर

GET /restaurants/{id}/orders

ऑर्डर नवीनतम पहले, paginated (30/पेज)। इसके साथ फ़िल्टर करें ?status=.

GET /restaurants/{id}/orders/{orderId}

लाइन आइटम, अतिरिक्त, ड्राइवर और डिलीवरी टाइमलाइन के साथ पूर्ण ऑर्डर विवरण।

POST /restaurants/{id}/orders लिखें

एक ऑर्डर बनाएँ — इस तरह एक ग्राहक ऐप एक कार्ट सबमिट करता है (merchant का बैकएंड टोकन रखता है)। हर आइटम रेस्तराँ के लाइव मेन्यू के विरुद्ध सत्यापित किया जाता है; बिक चुके या बाहरी आइटम पूरे ऑर्डर को अस्वीकार कर देते हैं (422)। यह फ़ायर करता है order.created और पूर्ण ऑर्डर लौटाता है, इसके सहित 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 }
    ]
  }'

ऑर्डर type इनमें से एक है on-table, takeaway, delivery. के लिए on-table पास करें table_number; के लिए delivery पास करें address.

Idempotency। भेजें एक Idempotency-Key हेडर (या एक बॉडी client_uuid) किसी भी order-create कॉल पर। समान कुंजी के साथ पुनः प्रयास मूल ऑर्डर लौटाता है और कभी डुप्लिकेट नहीं बनाता — छूटी हुई प्रतिक्रियाओं और ऑफ़लाइन रीप्ले के लिए सुरक्षित। कुंजियाँ प्रति रेस्तराँ सीमित हैं।

PUT /restaurants/{id}/orders/{orderId}/status लिखें

किचन स्थिति अपडेट करें (new|preparing|ready|delivered|completed|cancelled). फ़ायर करता है order.status_changed.

Storefront API (प्रति-रेस्तराँ टोकन)

एक अलग, सार्वजनिक-सामना करने वाला API, इसके द्वारा प्रमाणित प्रति-रेस्तराँ storefront टोकन इस रूप में भेजा गया X-Storefront-Token (मालिक Bearer टोकन नहीं)। इन्हें अपने डैशबोर्ड से जारी करें; प्रत्येक टोकन केवल अपने ही रेस्तराँ तक पहुँच सकता है। रीड स्कोप है menu:read; ऑर्डर देने के लिए आवश्यक है order:write दायरा

GET /storefront/menu

टोकन के रेस्तराँ के लिए पूर्ण मेन्यू (variants, extras, groups, gallery)।

GET /storefront/restaurant

टोकन के रेस्तराँ के लिए बुनियादी रेस्तराँ जानकारी।

POST /storefront/orders order:write

किसी डाइनर की ओर से एक कार्ट सबमिट करें। सर्वर-प्राइस्ड और पेमेंट नहीं हुआ (डाइनर पहुँचने पर भुगतान करता है); takeaway या on-table केवल। हर आइटम लाइव मेन्यू के विरुद्ध सत्यापित किया जाता है — बिक चुके या बाहरी आइटम पूरे ऑर्डर को अस्वीकार कर देते हैं (422)। सीमाएँ: 40 आइटम/ऑर्डर, 30 मात्रा/लाइन। वैकल्पिक coupon_code सर्वर-साइड पर एक मालिक छूट लागू करता है। फ़ायर करता है order.created और लौटाता है 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 }
    ]
  }'

एनालिटिक्स और ग्राहक

GET /restaurants/{id}/analytics

एक तिथि सीमा पर बिक्री सारांश (?from=YYYY-MM-DD&to=YYYY-MM-DD, डिफ़ॉल्ट अंतिम 30 दिन): स्थिति/प्रकार के अनुसार ऑर्डर गणना, सकल और भुगतान किया गया राजस्व, औसत ऑर्डर मूल्य, और शीर्ष आइटम।

{
  "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 } ]
}
GET /restaurants/{id}/customers

रेस्तराँ की ग्राहक सूची (CRM), paginated। इसके साथ फ़िल्टर करें ?search=.

ड्राइवर प्रबंधित करें लिखें

ड्राइवर आपके होते हैं और (वैकल्पिक रूप से) एक रेस्तराँ के। किसी ड्राइवर को बनाने या रोटेट करने पर एक कच्चा लौटता है ड्राइवर टोकन ठीक एक बार — इसे ड्राइवर के ऐप को सौंपें; वे इससे प्रमाणित करते हैं (नीचे देखें)।

GET /drivers
POST /drivers
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" }
PUT /drivers/{id}
DELETE /drivers/{id}
POST /drivers/{id}/rotate-token

पुराने टोकन को अमान्य करता है और एक नया लौटाता है।

एक डिलीवरी असाइन करें और ट्रैक करें

GET /restaurants/{id}/deliveries

डिलीवरी ऑर्डर, इनके द्वारा फ़िल्टर करने योग्य ?delivery_status= और ?driver_id=.

POST /restaurants/{id}/orders/{orderId}/assign लिखें

ड्राइवर असाइन करें {"driver_id": 7}. सेट करता है delivery_status=assigned और फ़ायर करता है order.driver_assigned.

PUT /restaurants/{id}/orders/{orderId}/delivery-status लिखें

डिलीवरी चरण को ओवरराइड करें: pending | assigned | picked_up | out_for_delivery | delivered | failed.

ड्राइवर ऐप API

ड्राइवर ऐप इसके साथ प्रमाणित करता है ड्राइवर टोकन (मालिक टोकन नहीं) जो ऊपर जारी किया गया। बेस पथ https://www.menubarcode.com/api/v1/driver. हर प्रतिक्रिया उस एक ड्राइवर तक सीमित है।

Authorization: Bearer RAW_DRIVER_TOKEN
GET /driver/me

प्रमाणित ड्राइवर की प्रोफ़ाइल।

GET /driver/deliveries

इस ड्राइवर को असाइन किए गए ऑर्डर। जोड़ें ?active=1 डिलीवर/विफल छिपाने के लिए।

PUT /driver/deliveries/{orderId}/status

डिलीवरी आगे बढ़ाएँ: {"delivery_status":"out_for_delivery"} फिर "delivered" या "picked_up" / "failed", वैकल्पिक note). मालिक एंडपॉइंट के समान webhooks फ़ायर करता है।

PUT /driver/location

लाइव स्थिति पुश करें: {"lat":25.2048,"lng":55.2708}. डिलीवरी के लिए बाहर होने के दौरान ग्राहक के ट्रैकिंग व्यू में दिखाया जाता है।

ग्राहक खाते

A स्टैंडअलोन customer app प्रति-ग्राहक टोकन के साथ अपने उपयोगकर्ताओं को प्रमाणित करता है (Sanctum-शैली: कई डिवाइस, व्यक्तिगत रूप से रद्द करने योग्य)। कोई मालिक टोकन शामिल नहीं है। ग्राहक प्रति रेस्तराँ सीमित हैं, इसलिए auth इसके अंतर्गत है /restaurants/{id}/customer/…. पहले सार्वजनिक एंडपॉइंट के साथ मेन्यू ब्राउज़ करें:

GET /menu/{restaurantId} सार्वजनिक

श्रेणी के अनुसार समूहबद्ध सक्रिय मेन्यू (बिक चुके आइटम हटा दिए गए)। कोई auth नहीं।

पंजीकरण / लॉगिन

POST /restaurants/{id}/customer/register
POST /restaurants/{id}/customer/login
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", ... } }

पासवर्डलेस (SMS OTP)

POST /restaurants/{id}/customer/otp/request
POST /restaurants/{id}/customer/otp/verify

किसी फ़ोन नंबर के लिए एक कोड का अनुरोध करें, फिर उसे सत्यापित करें। Verify ग्राहक को ढूँढता-या-बनाता है और एक टोकन लौटाता है। Auth एंडपॉइंट रेट-लिमिटेड हैं (login/register 10/मिनट, OTP अनुरोध 6/मिनट)।

ग्राहक ऐप API

ग्राहक टोकन के साथ प्रमाणित करें। बेस पथ https://www.menubarcode.com/api/v1/customer. सब कुछ प्रमाणित ग्राहक तक सीमित है — ऑर्डर बॉडी कभी किसी अन्य ग्राहक की id का फ़र्ज़ी उपयोग नहीं कर सकती।

Authorization: Bearer RAW_CUSTOMER_TOKEN
GET /customer/me
PUT /customer/me

प्रोफ़ाइल पढ़ें / अपडेट करें (नाम, ईमेल, फ़ोन, जन्मदिन, सहमतियाँ)।

POST /customer/orders

इस ग्राहक के रूप में एक ऑर्डर दें (merchant create एंडपॉइंट के समान आइटम आकार; पहचान टोकन से ली जाती है)। ऑर्डर को इसके सहित लौटाता है track_token.

GET /customer/orders

ग्राहक का अपना ऑर्डर इतिहास, paginated।

GET /customer/addresses
POST /customer/addresses
DELETE /customer/addresses/{id}

सहेजे गए डिलीवरी पते (पहला डिफ़ॉल्ट बन जाता है; समर्थन करता है lat/lng).

POST /customer/logout

अनुरोध के लिए उपयोग किए गए टोकन को रद्द करता है (केवल वह डिवाइस)।

ऑर्डर ट्रैकिंग सार्वजनिक

कोई auth नहीं — पहुँच ऑर्डर के अनुमान न लगाने योग्य द्वारा नियंत्रित है track_token (जब ऑर्डर बनाया जाता है तब लौटाया जाता है)। यह एक को शक्ति देता है ग्राहक ऐप लाइव-ट्रैकिंग स्क्रीन।

GET /track/{token}
{
  "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": "..." }
}

ड्राइवर ब्लॉक (लाइव निर्देशांक के साथ) केवल तभी दिखता है जब ऑर्डर उठा लिया जाता है / डिलीवरी के लिए बाहर होता है।

स्टाफ़ लॉगिन

A स्टाफ ऐप (POS / KDS / वेटर) प्रत्येक स्टाफ़ सदस्य को एक प्रति-स्टाफ़ टोकन के साथ प्रमाणित करता है। दो रास्ते डैशबोर्ड को प्रतिबिंबित करते हैं: ईमेल + पासवर्ड, या एक त्वरित संख्यात्मक PIN साझा किचन टैबलेट के लिए। स्टाफ़ प्रति रेस्तराँ सीमित हैं।

POST /restaurants/{id}/staff/login
POST /restaurants/{id}/staff/pin
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"] } }

प्रतिक्रिया स्टाफ़ सदस्य के प्रभावी को सूचीबद्ध करती है अनुमतियाँ — इसका एक उपसमुच्चय orders, menu_edit, coupons, analytics, kds, customers उनकी भूमिका (मैनेजर / कैशियर / किचन / वेटर) से व्युत्पन्न, साथ ही कोई भी प्रति-स्टाफ़ ओवरराइड। एंडपॉइंट अनुमति-नियंत्रित हैं (403 अन्यथा)।

स्टाफ़ ऐप API

स्टाफ़ टोकन के साथ प्रमाणित करें। बेस पथ https://www.menubarcode.com/api/v1/staff. सभी क्रियाएँ स्टाफ़ सदस्य के रेस्तराँ तक सीमित हैं।

Authorization: Bearer RAW_STAFF_TOKEN
GET /staff/me

भूमिका और अनुमति सूची के साथ प्रोफ़ाइल।

GET /staff/orders orders
PUT /staff/orders/{orderId}/status orders

ऑर्डर सूचीबद्ध करें और किचन स्थिति अपडेट करें। इसकी आवश्यकता है orders अनुमति।

GET /staff/kds kds

ऑर्डर के अनुसार समूहबद्ध लाइव किचन टिकट, स्टाफ़ सदस्य के स्टेशन तक फ़िल्टर किए गए (या ?station_id=). केवल अभी भी वे आइटम दिखाता है queued|preparing|ready.

PUT /staff/kds/items/{itemId}/bump kds
PUT /staff/kds/items/{itemId}/recall kds

आगे बढ़ाएँ (queued → preparing → ready → served) या एक KDS स्थिति पीछे जाएँ। मूल ऑर्डर की स्थिति स्वचालित रूप से री-सिंक होती है।

POST /staff/menu/items menu_edit
PUT /staff/menu/items/{itemId} menu_edit
DELETE /staff/menu/items/{itemId} menu_edit
PATCH /staff/menu/items/{itemId}/sold-out menu_edit
POST /staff/menu/categories menu_edit

फ़्लोर से मेन्यू संपादित करें (मैनेजर)। merchant मेन्यू एंडपॉइंट के समान payloads, स्टाफ़ सदस्य के रेस्तराँ तक सीमित।

GET /staff/analytics analytics

स्टाफ़ सदस्य के रेस्तराँ के लिए बिक्री सारांश (merchant एनालिटिक्स एंडपॉइंट के समान आकार; ?from=&to=).

POST /staff/logout

इस डिवाइस के टोकन को रद्द करता है।

Webhooks — सेटअप

इसके अंतर्गत डैशबोर्ड से एंडपॉइंट पंजीकृत करें API टोकन और Webhook. चुनें कि प्रत्येक एंडपॉइंट कौन-से इवेंट प्राप्त करता है। सहेजने पर आपको एक प्रति-एंडपॉइंट मिलता है साइनिंग सीक्रेट; इसका उपयोग करें परीक्षण एक भेजने के लिए बटन ping. इसका secret खोए बिना डिलीवरी रोकने के लिए किसी एंडपॉइंट को रोकें।

आपके एंडपॉइंट को इसके साथ प्रतिक्रिया देनी चाहिए 2xx स्थिति जल्दी (10 सेकंड के भीतर)। कोई भी अन्य स्थिति — या एक टाइमआउट — को विफलता माना जाता है और पुनः प्रयास किया जाता है।

एंडपॉइंट को इस तरह भी प्रबंधित किया जा सकता है प्रोग्रामेटिक रूप से (Zapier/Make REST-Hooks के लिए) इसके साथ webhooks:write टोकन:

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

यह secret लौटाया जाता है केवल बनाते समय — हस्ताक्षर सत्यापित करने के लिए इसे संग्रहीत करें। url एक सार्वजनिक HTTPS एंडपॉइंट होना चाहिए (SSRF-संरक्षित); events नीचे दी गई सूची से होना चाहिए (या *).

Webhook इवेंट

इवेंटतब फ़ायर होता है जब
order.createdएक नया ऑर्डर दिया जाता है (डैशबोर्ड या API)।
order.status_changedकिसी ऑर्डर की किचन स्थिति बदलती है (डैशबोर्ड, POS या API)।
order.paidकिसी ऑर्डर को पूरी तरह भुगतान किया गया चिह्नित किया जाता है (गेटवे या स्प्लिट बिल)।
order.driver_assignedकिसी डिलीवरी को एक ड्राइवर असाइन किया जाता है।
order.out_for_deliveryड्राइवर ग्राहक के रास्ते में है।
order.deliveredडिलीवरी पूरी हो गई।
order.delivery_failedडिलीवरी पूरी नहीं हो सकी।
refund.completedकिसी ऑर्डर के लिए रिफंड पूरा हो गया है।
reservation.createdएक टेबल आरक्षण बनाया गया है।
reservation.cancelledएक टेबल आरक्षण रद्द कर दिया गया है।
customer.createdएक नया ग्राहक रिकॉर्ड बनाया गया है।
shift.openedएक कैश-ड्रॉअर / POS शिफ़्ट खोली गई है।
shift.closedएक कैश-ड्रॉअर / POS शिफ़्ट बंद कर दी गई है।
menu.updatedएक मेन्यू आइटम या श्रेणी बनाई, अपडेट या हटाई जाती है (किसी भी सतह पर)। Payload: {restaurant_id, change, entity, id}.
entitlement.changedवर्कस्पेस के लिए एक फ़ीचर अधिकार अनुदान या रद्द किया जाता है (प्लान बदलाव, ऐड-ऑन, ऐप इंस्टॉल/अनइंस्टॉल, एडमिन ओवरराइड)। Payload: {action, feature_key, source_type, source_id, user_id, occurred_at} जहाँ action है granted या revoked.
subscription.*सब्सक्रिप्शन जीवनचक्र: subscription.paused, .resumed, .renewed, .expired, .plan_changed, .past_due, .expiring, .trial_ending.
app.uninstalledएक मार्केटप्लेस ऐप अनइंस्टॉल किया जाता है (ऐप के एंडपॉइंट पर पहुँचाया गया)।
*ऊपर के हर इवेंट की सदस्यता लें।
pingइसके द्वारा भेजा गया परीक्षण वायरिंग सत्यापित करने के लिए बटन।

आपके एंडपॉइंट के डाउन रहते हुए कोई डिलीवरी विफल हुई? इसका उपयोग करें पुनः डिलीवर करें डैशबोर्ड के हाल की डिलीवरी लॉग में किसी भी पंक्ति पर, इसे एक नए के साथ फिर से कतार में डालने के लिए webhook-id.

Webhook पेलोड

हर डिलीवरी एक है POST इस JSON envelope और इन हेडर के साथ:

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" }
}

यह id प्रति डिलीवरी अद्वितीय है। क्योंकि पुनः प्रयास उसी का पुनः उपयोग करते हैं id, अपने हैंडलर को idempotent बनाने के लिए इसका उपयोग करें।

हस्ताक्षर सत्यापित करना

यह webhook-signature हेडर एक HMAC-SHA256 है, base64-एन्कोडेड, इस पर गणना किया गया {id}.{timestamp}.{body} आपके एंडपॉइंट के signing secret का उपयोग करते हुए। id और timestamp को हस्ताक्षर में बाँधना ही किसी कैप्चर किए गए अनुरोध को रीप्ले के विरुद्ध सुरक्षित बनाता है। किसी भी ऐसे अनुरोध को अस्वीकार करें जिसका webhook-timestamp ~5 मिनट से अधिक पुराना है।

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 हेडर (बॉडी का सादा HMAC-SHA256, hex) पश्च-संगतता के लिए भी भेजा जाता है। नए एकीकरणों को इसका उपयोग करना चाहिए webhook-signature.

पुनः प्रयास और डिलीवरी लॉग

डिलीवरी अतुल्यकालिक है और विफलता पर एक्सपोनेंशियल बैकऑफ़ प्लस जिटर के साथ पुनः प्रयास की जाती है: लगभग 1m → 5m → 15m → 1h (कुल 5 प्रयास तक)। हर प्रयास — सफल या विफल — आपके डैशबोर्ड पर डिलीवरी लॉग में उसकी HTTP स्थिति, प्रयास संख्या और प्रतिक्रिया स्निपेट के साथ दर्ज किया जाता है।

डिलीवरी है कम-से-कम-एक-बार. इस पर डुप्लिकेट हटाएँ webhook-id कभी-कभार की पुनरावृत्तियों को संभालने के लिए।

MCP सर्वर

नया हर क्लाइंट के लिए एक-पेज, कॉपी-पेस्ट सेटअप गाइड यहाँ है /mcp — प्रति-क्लाइंट इंस्टॉल कमांड, एक-क्लिक डीपलिंक, टूल कैटलॉग और नमूना प्रॉम्प्ट। यह पेज गहन संदर्भ बना रहता है।

पाँच Model Context Protocol सर्वर AI एजेंट (ChatGPT, Claude, Cursor) को प्लेटफ़ॉर्म से जोड़ते हैं — वह चुनें जो आपकी ऑडियंस से मेल खाता है। सभी HTTP पर JSON-RPC 2.0 बोलते हैं और प्रोटोकॉल संस्करणों पर सहमत होते हैं 2024-11-05 / 2025-03-26 / 2025-06-18.

सर्वरएंडपॉइंटदर्शकप्रमाणीकरणउपकरण
Adminhttps://www.menubarcode.com/mcpस्टोर मालिक — स्टोर प्रबंधित करेंAPI टोकन (Bearer)23
Storefronthttps://www.menubarcode.com/mcp/storefrontएक डाइनर का एजेंट — एक स्टोर में खरीदारी और ऑर्डर करेंस्टोरफ्रंट टोकन (एजेंट स्कोप)12
Customerhttps://www.menubarcode.com/mcp/customerएक साइन-इन किया हुआ डाइनर — उसके अपने ऑर्डरग्राहक टोकन (OTP लॉगिन)5
Cataloghttps://www.menubarcode.com/mcp/catalogकोई भी — पूरे प्लेटफ़ॉर्म पर स्टोर खोजेंसार्वजनिक3
Devhttps://www.menubarcode.com/mcp/devAI कोडिंग टूल — थीम/एकीकरण बनाएँसार्वजनिक7

क्विकस्टार्ट: यहाँ जाएँ Admin, Catalog, Customer, या Dev. Storefront सर्वर Admin कनेक्ट पैटर्न को इसके साथ साझा करता है X-Storefront-Token Bearer टोकन के बजाय एक हेडर।

MCP सर्वर (Admin)

एक MCP-संगत AI क्लाइंट (Claude, ChatGPT, Cursor) समान API टोकन का उपयोग करके आपके रेस्तराँ को स्वाभाविक भाषा में संचालित कर सकता है। इसे यहाँ इंगित करें:

POST https://www.menubarcode.com/mcp JSON-RPC 2.0

इसके साथ प्रमाणित करें Authorization: Bearer YOUR_TOKEN. प्रत्येक टूल उस सूक्ष्म क्षमता को घोषित करता है जिसकी उसे आवश्यकता है (resource:action); एक लीगेसी read टोकन हर को कवर करता है :read टूल और write सब कुछ कवर करता है। सभी कॉल आपके रेस्तराँ तक सीमित और रेट-लिमिटेड हैं। जिन टूल के लिए आपके पास क्षमता नहीं है, वे इनसे छिपे रहते हैं tools/list.

कनेक्ट करें (Claude Code)

claude mcp add --transport http platform-admin https://www.menubarcode.com/mcp \
  --header "Authorization: Bearer YOUR_TOKEN"

टूल सूचीबद्ध करें

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"}'

एक टूल कॉल करें (उदा. एक मेन्यू आइटम जोड़ें)

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}}}'

उपकरण

टूलक्षमतायह क्या करता है
list_restaurantsreadआपके स्वामित्व वाले रेस्तराँ।
get_menureadएक रेस्तराँ की श्रेणियाँ और आइटम।
list_categoriesmenu:readआइटम गणना के साथ श्रेणियाँ।
add_categorymenu:writeएक श्रेणी बनाएँ।
update_categorymenu:writeएक श्रेणी का नाम बदलें / पुनः क्रमबद्ध करें।
delete_categorymenu:writeएक श्रेणी हटाएँ (यदि इसमें आइटम हैं तो अस्वीकार करता है)।
add_menu_itemwriteएक मेन्यू आइटम बनाएँ (प्लान-सीमा जाँची गई)।
update_menu_itemwriteकिसी आइटम का नाम/कीमत/विवरण संपादित करें।
delete_menu_itemmenu:writeकिसी आइटम को स्थायी रूप से हटाएँ।
set_item_availabilitymenu:writeकिसी आइटम को स्टॉक में/बाहर चिह्नित करें (86 टॉगल)।
list_ordersorders:readऑर्डर नवीनतम पहले; स्थिति/तिथि/खोज फ़िल्टर।
get_orderorders:readलाइन आइटम सहित पूर्ण ऑर्डर विवरण।
update_order_statuswriteकिसी ऑर्डर की किचन स्थिति आगे बढ़ाएँ।
list_customerscustomers:read + crm_suiteCRM सूची; नाम/फ़ोन/ईमेल खोजें। अधिकार के बिना tools/list से छिपा हुआ।
get_customercustomers:read + crm_suiteएक ग्राहक का पूर्ण रिकॉर्ड। अधिकार के बिना tools/list से छिपा हुआ।
sales_reportanalytics:readएक सीमा के लिए राजस्व + ऑर्डर गणना + शीर्ष आइटम।
get_restaurant_settingsrestaurants:readप्रोफ़ाइल + ऑर्डरिंग सेटिंग्स का स्नैपशॉट।
update_business_hoursrestaurants:writeव्यावसायिक-घंटे का टेक्स्ट सेट करें।
list_couponsorders:readआपके डिस्काउंट कूपन।
create_couponorders:writeएक प्रतिशत/निश्चित कूपन बनाएँ।
update_couponorders:writeकूपन संपादित करें।
delete_couponorders:writeकूपन हटाएँ।

Catalog MCP (रेस्तराँ खोजें)

एक सार्वजनिक, केवल-पढ़ने वाला MCP सर्वर जो AI एजेंट को पूरे प्लेटफ़ॉर्म पर रेस्तराँ और डिश खोजने देता है, फिर ऑर्डर करने के लिए किसी विशिष्ट स्टोर में डीप-लिंक करता है। कोई auth नहीं, रेट-लिमिटेड।

POST https://www.menubarcode.com/mcp/catalog JSON-RPC 2.0 · public

कनेक्ट करें (Claude Code)

claude mcp add --transport http platform-catalog https://www.menubarcode.com/mcp/catalog
टूलयह क्या करता है
search_storesकीवर्ड/शहर के अनुसार रेस्तराँ खोजें (name, address, menu_url, storefront_mcp संकेत)।
search_itemsसभी स्टोर में डिश खोजें (query/dietary/max_price/city), स्टोर के अनुसार समूहबद्ध।
get_storeslug या id के अनुसार एक स्टोर का पूर्ण सार्वजनिक विवरण।
list_starter_menusबंडल किए गए स्टार्टर-मेनू प्रीसेट जिनसे एक नया स्टोर सीड कर सकता है (कैफ़े, पिज़्ज़ेरिया, बर्गर, बेकरी, लाउंज)।

केवल सक्रिय, सार्वजनिक रूप से सूचीबद्ध स्टोर दिखते हैं; मालिक अपनी स्टोर सेटिंग्स में ऑप्ट-आउट कर सकते हैं। मालिक के संपर्क विवरण कभी नहीं लौटाए जाते। ऑर्डर देने के लिए, स्टोर के इसका उपयोग करें स्टोरफ़्रंट MCP एक प्रति-स्टोर एजेंट टोकन के साथ।

Customer Account MCP

एक डाइनर के AI असिस्टेंट को पढ़ने, ट्रैक करने और फिर से ऑर्डर करने देता है उनके अपने ऑर्डर। मौजूदा OTP लॉगिन से एक प्रति-ग्राहक टोकन द्वारा प्रमाणित; ग्राहक की पहचान केवल टोकन से आती है — किसी फ़ोन या ग्राहक id को कभी तर्क के रूप में स्वीकार नहीं किया जाता।

POST https://www.menubarcode.com/mcp/customer JSON-RPC 2.0 · customer token

एक टोकन प्राप्त करें (OTP फ़्लो)

# 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"}'

कनेक्ट करें (Claude Code)

claude mcp add --transport http my-orders https://www.menubarcode.com/mcp/customer \
  --header "Authorization: Bearer CUSTOMER_TOKEN"
टूलयह क्या करता है
my_ordersआपके हाल के ऑर्डर (सबसे हाल के पहले)।
order_detailआपके किसी एक ऑर्डर के लिए पूर्ण विवरण + लाइन आइटम।
track_orderऑर्डर id या track टोकन के अनुसार लाइव स्थिति।
reorderकिसी पिछले ऑर्डर को कार्ट ड्राफ़्ट के रूप में फिर से बनाएँ (बिक चुके आइटम छोड़ता है)।
my_profileआपका नाम, फ़ोन और ऑर्डर गणना।
my_bookingsइस स्थल पर आपकी अपनी होटल रूम बुकिंग (कोड, स्थिति, तिथियाँ, रूम प्रकार, कुल)।
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}}}'

अपना AI एडिटर कनेक्ट करें

Claude Code, Cursor या VS Code के साथ एक थीम या एकीकरण बना रहे हैं? इसे सार्वजनिक की ओर इंगित करें Dev MCP सर्वर — आपके AI टूल को लाइव प्लेटफ़ॉर्म docs, जनरेट की गई Liquid व्हाइटलिस्ट, और सर्वर-साइड थीम सत्यापन मिलता है। किसी टोकन की आवश्यकता नहीं।

POST https://www.menubarcode.com/mcp/dev JSON-RPC 2.0 · public

Claude 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" } } }

उपकरण learn_platform (यहाँ शुरू करें), search_docs / fetch_full_doc, get_liquid_reference, get_section_schema, validate_theme, list_webhook_events. अनुशंसित एजेंट वर्कफ़्लो: learn → build → validate → deliver।

ऊपर का प्रमाणित MCP सर्वर (https://www.menubarcode.com/mcp) आपके रेस्तराँ डेटा को संचालित करता है; यह वाला दस्तावेज़ और सत्यापन परोसता है और सार्वजनिक रूप से साझा करने के लिए सुरक्षित है।

बदलाव सूची

तारीख़बदलें
2026-08-20होटल PMS + विकास रिलीज़: refund.completed, reservation.created, reservation.cancelled, customer.created, shift.opened, shift.closed webhook इवेंट; स्टाफ पुश-डिवाइस पंजीकरण + 2fa एंडपॉइंट; नए MCP टूल hotel_availability, my_bookings, list_starter_menus, list_webhook_events.
2026-07-28राउटर-जनरेटेड डिस्कवरी इंडेक्स + OpenAPI 3.1 spec (हमेशा डिप्लॉय किए गए API के समरूप); Idempotency-Key order-create पर; प्रति-टोकन API रेट सीमाएँ; subscription.* + app.uninstalled webhook इवेंट + डिलीवरी पुनः डिलीवर करें.
2026-07-07सार्वजनिक Dev MCP सर्वर AI कोडिंग टूल के लिए: लाइव docs खोज, जनरेट किया गया Liquid संदर्भ, सर्वर-साइड थीम सत्यापन।
2026-07-02सूक्ष्म टोकन स्कोप (resource:action); स्टाफ़ मेन्यू संपादन + एनालिटिक्स एंडपॉइंट।
2026-07-02Staff app: प्रति-स्टाफ़ टोकन auth (पासवर्ड + PIN), भूमिका-अनुमति नियंत्रण, ऑर्डर स्थिति, KDS bump/recall।
2026-07-02स्टैंडअलोन customer app: प्रति-ग्राहक टोकन auth (register/login/OTP), प्रोफ़ाइल, ऑर्डर देना + इतिहास, सहेजे गए पते, सार्वजनिक मेन्यू ब्राउज़।
2026-07-02पूर्ण प्रबंधन API: मेन्यू CRUD, ऑर्डर निर्माण, ड्राइवर + डिलीवरी जीवनचक्र, driver-app टोकन API, सार्वजनिक ऑर्डर ट्रैकिंग, बिक्री एनालिटिक्स, ग्राहक। नए डिलीवरी webhook इवेंट।
2026-07-02पुनः प्रयास के साथ कतारबद्ध webhook डिलीवरी; Standard-Webhooks signing (webhook-id/timestamp/signature); order.paid इवेंट; सार्वजनिक docs।
2026-06-26प्रारंभिक v1 REST API, टोकन, और webhook एंडपॉइंट।

वापस जाएँ Menubarcode

Menubarcode API v1 · बेस URL https://www.menubarcode.com/api/v1

संपर्क करें

हमें फ़ॉलो करें