डेवलपर दस्तावेज़
एक ही API पर customer, driver और merchant ऐप्स बनाएँ। रेस्तराँ, मेन्यू, ऑर्डर और ड्राइवर पढ़ें और लिखें; साइन किए गए webhooks के जरिए रियल-टाइम इवेंट प्राप्त करें। सब कुछ टोकन मालिक तक सीमित है।
🛍️ ग्राहक ऐप 🛵 ड्राइवर ऐप 🧑🍳 मर्चेंट ऐप
मार्केटप्लेस के लिए बना रहे हैं? ऐप डेवलपर दस्तावेज़ → · थीम डेवलपर दस्तावेज़ →
learn_platform इसे तैयार करता है, get_liquid_reference इसे आधिकारिक व्हाइटलिस्ट देता है, और
validate_theme इसके आउटपुट पर मार्केटप्लेस की अपनी जाँचें चलाता है — अपने एडिटर को छोड़े बिना पूरा learn → build → validate लूप। एक कमांड में कनेक्ट करें →
शुरू करें
अपने डैशबोर्ड से इसके अंतर्गत एक API टोकन बनाएँ API टोकन और Webhook. चुनें read और/या write क्षमताएँ और टोकन कॉपी करें — यह केवल एक बार दिखाया जाता है।
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 | अर्थ |
|---|---|---|
401 | unauthenticated | अनुपलब्ध, अमान्य या समाप्त टोकन। |
403 | forbidden | टोकन में आवश्यक क्षमता/स्कोप नहीं है। |
404 | not_found | संसाधन नहीं मिला या टोकन के स्वामित्व में नहीं। |
422 | validation_failed | सत्यापन विफल (देखें errors). |
429 | rate_limited | रेट सीमा पार हो गई। |
code, मानव को नहीं message — संदेश दोबारा शब्दबद्ध या स्थानीयकृत किए जा सकते हैं; कोड स्थिर हैं।404, नहीं 403 — API कभी भी किसी अन्य मालिक के डेटा के अस्तित्व की पुष्टि नहीं करता।पेजिनेशन
लिस्ट एंडपॉइंट Laravel-शैली के paginated envelope लौटाते हैं। इसका उपयोग करें ?page= पेजों के बीच जाने के लिए क्वेरी पैरामीटर।
{
"data": [ ... ],
"current_page": 1,
"last_page": 3,
"per_page": 20,
"total": 47
}
रेस्तराँ और मेन्यू पढ़ें
टोकन के स्वामित्व वाले रेस्तराँ सूचीबद्ध करें, 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
}
एक एकल रेस्तराँ अपनी मेन्यू श्रेणियों और आइटम गणना के साथ।
श्रेणी के अनुसार समूहबद्ध पूर्ण सक्रिय मेन्यू।
[
{ "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 }
]
}
]
ऑर्डर
ऑर्डर नवीनतम पहले, paginated (30/पेज)। इसके साथ फ़िल्टर करें ?status=.
लाइन आइटम, अतिरिक्त, ड्राइवर और डिलीवरी टाइमलाइन के साथ पूर्ण ऑर्डर विवरण।
एक ऑर्डर बनाएँ — इस तरह एक ग्राहक ऐप एक कार्ट सबमिट करता है (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 कॉल पर। समान कुंजी के साथ पुनः प्रयास मूल ऑर्डर लौटाता है और कभी डुप्लिकेट नहीं बनाता — छूटी हुई प्रतिक्रियाओं और ऑफ़लाइन रीप्ले के लिए सुरक्षित। कुंजियाँ प्रति रेस्तराँ सीमित हैं।
किचन स्थिति अपडेट करें (new|preparing|ready|delivered|completed|cancelled). फ़ायर करता है order.status_changed.
Storefront API (प्रति-रेस्तराँ टोकन)
एक अलग, सार्वजनिक-सामना करने वाला API, इसके द्वारा प्रमाणित प्रति-रेस्तराँ storefront टोकन इस रूप में भेजा गया X-Storefront-Token (मालिक Bearer टोकन नहीं)। इन्हें अपने डैशबोर्ड से जारी करें; प्रत्येक टोकन केवल अपने ही रेस्तराँ तक पहुँच सकता है। रीड स्कोप है menu:read; ऑर्डर देने के लिए आवश्यक है order:write दायरा
टोकन के रेस्तराँ के लिए पूर्ण मेन्यू (variants, extras, groups, gallery)।
टोकन के रेस्तराँ के लिए बुनियादी रेस्तराँ जानकारी।
किसी डाइनर की ओर से एक कार्ट सबमिट करें। सर्वर-प्राइस्ड और पेमेंट नहीं हुआ (डाइनर पहुँचने पर भुगतान करता है); 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 }
]
}'
एनालिटिक्स और ग्राहक
एक तिथि सीमा पर बिक्री सारांश (?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 } ]
}
रेस्तराँ की ग्राहक सूची (CRM), paginated। इसके साथ फ़िल्टर करें ?search=.
ड्राइवर प्रबंधित करें लिखें
ड्राइवर आपके होते हैं और (वैकल्पिक रूप से) एक रेस्तराँ के। किसी ड्राइवर को बनाने या रोटेट करने पर एक कच्चा लौटता है ड्राइवर टोकन ठीक एक बार — इसे ड्राइवर के ऐप को सौंपें; वे इससे प्रमाणित करते हैं (नीचे देखें)।
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" }
पुराने टोकन को अमान्य करता है और एक नया लौटाता है।
एक डिलीवरी असाइन करें और ट्रैक करें
डिलीवरी ऑर्डर, इनके द्वारा फ़िल्टर करने योग्य ?delivery_status= और ?driver_id=.
ड्राइवर असाइन करें {"driver_id": 7}. सेट करता है delivery_status=assigned और फ़ायर करता है order.driver_assigned.
डिलीवरी चरण को ओवरराइड करें: pending | assigned | picked_up | out_for_delivery | delivered | failed.
ड्राइवर ऐप API
ड्राइवर ऐप इसके साथ प्रमाणित करता है ड्राइवर टोकन (मालिक टोकन नहीं) जो ऊपर जारी किया गया। बेस पथ https://www.menubarcode.com/api/v1/driver. हर प्रतिक्रिया उस एक ड्राइवर तक सीमित है।
Authorization: Bearer RAW_DRIVER_TOKEN
प्रमाणित ड्राइवर की प्रोफ़ाइल।
इस ड्राइवर को असाइन किए गए ऑर्डर। जोड़ें ?active=1 डिलीवर/विफल छिपाने के लिए।
डिलीवरी आगे बढ़ाएँ: {"delivery_status":"out_for_delivery"} फिर "delivered" या "picked_up" / "failed", वैकल्पिक note). मालिक एंडपॉइंट के समान webhooks फ़ायर करता है।
लाइव स्थिति पुश करें: {"lat":25.2048,"lng":55.2708}. डिलीवरी के लिए बाहर होने के दौरान ग्राहक के ट्रैकिंग व्यू में दिखाया जाता है।
ग्राहक खाते
A स्टैंडअलोन customer app प्रति-ग्राहक टोकन के साथ अपने उपयोगकर्ताओं को प्रमाणित करता है (Sanctum-शैली: कई डिवाइस, व्यक्तिगत रूप से रद्द करने योग्य)। कोई मालिक टोकन शामिल नहीं है। ग्राहक प्रति रेस्तराँ सीमित हैं, इसलिए auth इसके अंतर्गत है /restaurants/{id}/customer/…. पहले सार्वजनिक एंडपॉइंट के साथ मेन्यू ब्राउज़ करें:
श्रेणी के अनुसार समूहबद्ध सक्रिय मेन्यू (बिक चुके आइटम हटा दिए गए)। कोई auth नहीं।
पंजीकरण / लॉगिन
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)
किसी फ़ोन नंबर के लिए एक कोड का अनुरोध करें, फिर उसे सत्यापित करें। Verify ग्राहक को ढूँढता-या-बनाता है और एक टोकन लौटाता है। Auth एंडपॉइंट रेट-लिमिटेड हैं (login/register 10/मिनट, OTP अनुरोध 6/मिनट)।
ग्राहक ऐप API
ग्राहक टोकन के साथ प्रमाणित करें। बेस पथ https://www.menubarcode.com/api/v1/customer. सब कुछ प्रमाणित ग्राहक तक सीमित है — ऑर्डर बॉडी कभी किसी अन्य ग्राहक की id का फ़र्ज़ी उपयोग नहीं कर सकती।
Authorization: Bearer RAW_CUSTOMER_TOKEN
प्रोफ़ाइल पढ़ें / अपडेट करें (नाम, ईमेल, फ़ोन, जन्मदिन, सहमतियाँ)।
इस ग्राहक के रूप में एक ऑर्डर दें (merchant create एंडपॉइंट के समान आइटम आकार; पहचान टोकन से ली जाती है)। ऑर्डर को इसके सहित लौटाता है track_token.
ग्राहक का अपना ऑर्डर इतिहास, paginated।
सहेजे गए डिलीवरी पते (पहला डिफ़ॉल्ट बन जाता है; समर्थन करता है lat/lng).
अनुरोध के लिए उपयोग किए गए टोकन को रद्द करता है (केवल वह डिवाइस)।
ऑर्डर ट्रैकिंग सार्वजनिक
कोई auth नहीं — पहुँच ऑर्डर के अनुमान न लगाने योग्य द्वारा नियंत्रित है 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 साझा किचन टैबलेट के लिए। स्टाफ़ प्रति रेस्तराँ सीमित हैं।
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
भूमिका और अनुमति सूची के साथ प्रोफ़ाइल।
ऑर्डर सूचीबद्ध करें और किचन स्थिति अपडेट करें। इसकी आवश्यकता है orders अनुमति।
ऑर्डर के अनुसार समूहबद्ध लाइव किचन टिकट, स्टाफ़ सदस्य के स्टेशन तक फ़िल्टर किए गए (या ?station_id=). केवल अभी भी वे आइटम दिखाता है queued|preparing|ready.
आगे बढ़ाएँ (queued → preparing → ready → served) या एक KDS स्थिति पीछे जाएँ। मूल ऑर्डर की स्थिति स्वचालित रूप से री-सिंक होती है।
फ़्लोर से मेन्यू संपादित करें (मैनेजर)। merchant मेन्यू एंडपॉइंट के समान payloads, स्टाफ़ सदस्य के रेस्तराँ तक सीमित।
स्टाफ़ सदस्य के रेस्तराँ के लिए बिक्री सारांश (merchant एनालिटिक्स एंडपॉइंट के समान आकार; ?from=&to=).
इस डिवाइस के टोकन को रद्द करता है।
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 सर्वर
पाँच Model Context Protocol सर्वर AI एजेंट (ChatGPT, Claude, Cursor) को प्लेटफ़ॉर्म से जोड़ते हैं — वह चुनें जो आपकी ऑडियंस से मेल खाता है। सभी HTTP पर JSON-RPC 2.0 बोलते हैं और प्रोटोकॉल संस्करणों पर सहमत होते हैं 2024-11-05 / 2025-03-26 / 2025-06-18.
| सर्वर | एंडपॉइंट | दर्शक | प्रमाणीकरण | उपकरण |
|---|---|---|---|---|
| Admin | https://www.menubarcode.com/mcp | स्टोर मालिक — स्टोर प्रबंधित करें | API टोकन (Bearer) | 23 |
| Storefront | https://www.menubarcode.com/mcp/storefront | एक डाइनर का एजेंट — एक स्टोर में खरीदारी और ऑर्डर करें | स्टोरफ्रंट टोकन (एजेंट स्कोप) | 12 |
| Customer | https://www.menubarcode.com/mcp/customer | एक साइन-इन किया हुआ डाइनर — उसके अपने ऑर्डर | ग्राहक टोकन (OTP लॉगिन) | 5 |
| Catalog | https://www.menubarcode.com/mcp/catalog | कोई भी — पूरे प्लेटफ़ॉर्म पर स्टोर खोजें | सार्वजनिक | 3 |
| Dev | https://www.menubarcode.com/mcp/dev | AI कोडिंग टूल — थीम/एकीकरण बनाएँ | सार्वजनिक | 7 |
क्विकस्टार्ट: यहाँ जाएँ Admin, Catalog, Customer, या Dev. Storefront सर्वर Admin कनेक्ट पैटर्न को इसके साथ साझा करता है X-Storefront-Token Bearer टोकन के बजाय एक हेडर।
MCP सर्वर (Admin)
एक MCP-संगत AI क्लाइंट (Claude, ChatGPT, Cursor) समान API टोकन का उपयोग करके आपके रेस्तराँ को स्वाभाविक भाषा में संचालित कर सकता है। इसे यहाँ इंगित करें:
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_restaurants | read | आपके स्वामित्व वाले रेस्तराँ। |
get_menu | read | एक रेस्तराँ की श्रेणियाँ और आइटम। |
list_categories | menu:read | आइटम गणना के साथ श्रेणियाँ। |
add_category | menu:write | एक श्रेणी बनाएँ। |
update_category | menu:write | एक श्रेणी का नाम बदलें / पुनः क्रमबद्ध करें। |
delete_category | menu:write | एक श्रेणी हटाएँ (यदि इसमें आइटम हैं तो अस्वीकार करता है)। |
add_menu_item | write | एक मेन्यू आइटम बनाएँ (प्लान-सीमा जाँची गई)। |
update_menu_item | write | किसी आइटम का नाम/कीमत/विवरण संपादित करें। |
delete_menu_item | menu:write | किसी आइटम को स्थायी रूप से हटाएँ। |
set_item_availability | menu:write | किसी आइटम को स्टॉक में/बाहर चिह्नित करें (86 टॉगल)। |
list_orders | orders:read | ऑर्डर नवीनतम पहले; स्थिति/तिथि/खोज फ़िल्टर। |
get_order | orders:read | लाइन आइटम सहित पूर्ण ऑर्डर विवरण। |
update_order_status | write | किसी ऑर्डर की किचन स्थिति आगे बढ़ाएँ। |
list_customers | customers:read + crm_suite | CRM सूची; नाम/फ़ोन/ईमेल खोजें। अधिकार के बिना tools/list से छिपा हुआ। |
get_customer | customers:read + crm_suite | एक ग्राहक का पूर्ण रिकॉर्ड। अधिकार के बिना tools/list से छिपा हुआ। |
sales_report | analytics:read | एक सीमा के लिए राजस्व + ऑर्डर गणना + शीर्ष आइटम। |
get_restaurant_settings | restaurants:read | प्रोफ़ाइल + ऑर्डरिंग सेटिंग्स का स्नैपशॉट। |
update_business_hours | restaurants:write | व्यावसायिक-घंटे का टेक्स्ट सेट करें। |
list_coupons | orders:read | आपके डिस्काउंट कूपन। |
create_coupon | orders:write | एक प्रतिशत/निश्चित कूपन बनाएँ। |
update_coupon | orders:write | कूपन संपादित करें। |
delete_coupon | orders:write | कूपन हटाएँ। |
Catalog MCP (रेस्तराँ खोजें)
एक सार्वजनिक, केवल-पढ़ने वाला MCP सर्वर जो AI एजेंट को पूरे प्लेटफ़ॉर्म पर रेस्तराँ और डिश खोजने देता है, फिर ऑर्डर करने के लिए किसी विशिष्ट स्टोर में डीप-लिंक करता है। कोई auth नहीं, रेट-लिमिटेड।
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_store | slug या id के अनुसार एक स्टोर का पूर्ण सार्वजनिक विवरण। |
list_starter_menus | बंडल किए गए स्टार्टर-मेनू प्रीसेट जिनसे एक नया स्टोर सीड कर सकता है (कैफ़े, पिज़्ज़ेरिया, बर्गर, बेकरी, लाउंज)। |
केवल सक्रिय, सार्वजनिक रूप से सूचीबद्ध स्टोर दिखते हैं; मालिक अपनी स्टोर सेटिंग्स में ऑप्ट-आउट कर सकते हैं। मालिक के संपर्क विवरण कभी नहीं लौटाए जाते। ऑर्डर देने के लिए, स्टोर के इसका उपयोग करें स्टोरफ़्रंट MCP एक प्रति-स्टोर एजेंट टोकन के साथ।
Customer Account MCP
एक डाइनर के AI असिस्टेंट को पढ़ने, ट्रैक करने और फिर से ऑर्डर करने देता है उनके अपने ऑर्डर। मौजूदा OTP लॉगिन से एक प्रति-ग्राहक टोकन द्वारा प्रमाणित; ग्राहक की पहचान केवल टोकन से आती है — किसी फ़ोन या ग्राहक id को कभी तर्क के रूप में स्वीकार नहीं किया जाता।
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 व्हाइटलिस्ट, और सर्वर-साइड थीम सत्यापन मिलता है। किसी टोकन की आवश्यकता नहीं।
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" } } }
उपकरण learn_platform (यहाँ शुरू करें), search_docs / fetch_full_doc, get_liquid_reference, get_section_schema, validate_theme, list_webhook_events. अनुशंसित एजेंट वर्कफ़्लो: learn → build → validate → deliver।
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-02 | Staff 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 एंडपॉइंट। |
https://www.menubarcode.com/api/v1