सेवा बाज़ार मर्चेंट API
चरण 1: उत्पाद और इनबाउंड

मर्चेंट API: SKU, ख़रीद की अग्रिम सूचना और शेन्ज़ेन वेयरहाउस का स्टॉक अपने सिस्टम से जोड़ें

Shopee, Coupang और momo पर दुकान चलाने वाली पंजीकृत कंपनियों के लिए। लिस्टिंग के समय बने उत्पाद बारकोड API से भेजें, ख़रीदारी के समय ट्रैकिंग नंबर और सामग्री की अग्रिम सूचना दें, और माल शेन्ज़ेन वेयरहाउस पहुँचते ही वर्क ऑर्डर अपने-आप बनता है, बारकोड लगाया जाता है और हर पीस स्कैन करके शेल्फ़ पर रखा जाता है; स्टॉक और अंतर तुरंत वापस भेजे जाते हैं।

पंजीकृत कंपनियाँ

कौन आवेदन कर सकता है (8 अंकों की कर पहचान संख्या आवश्यक)

200 आइटम

एक थोक अनुरोध में अधिकतम SKU

WO-SK

वेयरहाउस पहुँचने पर अपने-आप लेबलिंग वर्क ऑर्डर

60 / मिनट

प्रति कुंजी डिफ़ॉल्ट रेट लिमिट

1 सेवा का परिचय

चरण 1 में “उत्पाद और इनबाउंड” शामिल है: SKU बनाने से लेकर माल के शेन्ज़ेन वेयरहाउस में शेल्फ़ पर स्टॉक के रूप में रखे जाने तक।

अभी आप क्या कर सकते हैं

  • SKU थोक में बनाएँ या अपडेट करें (आपके seller_sku के आधार पर), हर रंग और साइज़ के लिए अलग उत्पाद बारकोड के साथ, और उन्हें Shopee / Coupang / momo के उत्पाद वेरिएंट नंबर से जोड़ें।
  • 11 अंकों के ताइवान टैरिफ कोड के आधार पर आयात आवश्यकताओं की अपने-आप जाँच करें, और उन उत्पादों को चिह्नित करें जिन्हें निरीक्षण या परमिट चाहिए या जिनका आयात नहीं हो सकता।
  • ख़रीदारी के समय ट्रैकिंग नंबर और हर बॉक्स की सामग्री की अग्रिम सूचना दें; माल शेन्ज़ेन वेयरहाउस पहुँचने पर WO-SK लेबलिंग वर्क ऑर्डर अपने-आप बनता है, और वेयरहाउस हर पीस पर बारकोड लगाकर उसे स्कैन करके शेल्फ़ पर रखता है।
  • वेयरहाउस-वार स्टॉक और स्टॉक लेजर देखें, और वेयरहाउस पहुँचने, इनबाउंड पूरा होने, मात्रा में अंतर और स्टॉक में बदलाव की सूचना webhook से तुरंत पाएँ।

इनबाउंड प्रक्रिया

  1. SKU बनाएँ: उत्पाद बारकोड, वेरिएंट, घोषित उत्पाद नाम और टैरिफ कोड भेजें।
  2. इनबाउंड की अग्रिम सूचना: ट्रैकिंग नंबर और हर SKU की अपेक्षित मात्रा भेजें।
  3. शेन्ज़ेन वेयरहाउस में प्राप्ति: ट्रैकिंग नंबर स्कैन होते ही WO-SK वर्क ऑर्डर अपने-आप बनकर प्रिंट होता है।
  4. बारकोड लगाना और शेल्फ़ पर रखना: वेयरहाउस उत्पाद बारकोड प्रिंट करता है, हर पीस पर लगाता है और स्कैन करके गिनता है।
  5. इनबाउंड पूरा: वास्तव में प्राप्त मात्रा शेन्ज़ेन वेयरहाउस के स्टॉक में जुड़ती है, क्षतिग्रस्त माल अलग गिना जाता है, और अंतर की सूचना आपके सिस्टम को भेजी जाती है।
आयात आवश्यकताओं के बारे में: सिस्टम ताइवान सीमा शुल्क प्रशासन के टैरिफ डेटा में दिए आयात आवश्यकता कोड के आधार पर अपने-आप निर्धारण करता है, जो केवल परिचालन संदर्भ के लिए है। किसी उत्पाद को वास्तव में निरीक्षण, परमिट या औपचारिक सीमा शुल्क घोषणा की ज़रूरत है या नहीं, यह सीमा शुल्क विभाग और हमारे साझेदार कस्टम्स ब्रोकर की समीक्षा से तय होता है। मर्चेंट का स्टॉक बिक्री के लिए होता है, इसलिए उस पर व्यक्तिगत उपयोग के लिए मिलने वाली परमिट छूट लागू नहीं होती।

नियोजित सुविधाएँ

थोक आउटबाउंड ऑर्डर, घोषणा नियमों के अनुसार अपने-आप समूहित शिपमेंट बैच, और ताओयुआन वेयरहाउस में अग्रिम स्टॉक, छँटाई और प्लेटफ़ॉर्म शिपिंग लेबल। ये सुविधाएँ शुरू होने पर इसी पेज पर घोषित की जाएँगी।

2 आवेदन और API कुंजी

मर्चेंट API केवल पंजीकृत कंपनियों के लिए है, और हर कुंजी एक स्वीकृत मर्चेंट खाते से जुड़ी होती है।

सक्रिय करने के चरण

  1. सदस्य केंद्र में “कंपनी” प्रकार का घोषणाकर्ता जोड़ें और 8 अंकों की कर पहचान संख्या भरें।
  2. मर्चेंट API सक्रिय करवाने के लिए HowBridge ग्राहक सहायता से संपर्क करें; स्वीकृति मिलने पर कुंजी जारी की जाएगी।
  3. कुंजी केवल एक बार दिखाई जाती है। इसे सर्वर-साइड एनवायरनमेंट वेरिएबल में रखें, ब्राउज़र या ऐप में न डालें।
  4. अगर webhook चाहिए, तो पहले सदस्य केंद्र के API पेज पर URL सेट और सत्यापित करें, फिर मर्चेंट इवेंट सब्सक्राइब करें।
सभी अनुरोधों में Authorization: Bearer <कुंजी> का उपयोग होता है। सामान्य सदस्य के ऐप या वेबसाइट में लॉग इन करने से बने टोकन मर्चेंट API को कॉल नहीं कर सकते।
Authorization: Bearer 12|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept: application/json

3 सामान्य नियम

सभी एंडपॉइंट पर ये नियम लागू होते हैं।

Base URL

https://0523.tw/api/v1/merchant

फ़ॉर्मैट और भाषा

अनुरोध और रिस्पॉन्स दोनों JSON में होते हैं। त्रुटि संदेश डिफ़ॉल्ट रूप से पारंपरिक चीनी में होते हैं; अंग्रेज़ी के लिए Accept-Language: en भेजें। प्रोग्राम में जाँच के लिए हमेशा स्थिर अंग्रेज़ी error.code का उपयोग करें।

रिस्पॉन्स संरचना

सफल होने पर {"success": true, "data": …, "meta": …} लौटता है; विफल होने पर {"success": false, "error": {"code", "message", "errors", "context"}} लौटता है, जिसमें errors फ़ील्ड-वार विवरण है। एकमात्र अपवाद कुंजी न भेजना या अमान्य कुंजी है: HTTP 401, और body {"message": "Unauthenticated."} होती है।

{
  "success": false,
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "…",
    "errors": [
      { "code": "TRACKING_IN_USE", "field": "packages.0.tracking_no", "message": "…" }
    ]
  }
}

रेट लिमिट

हर कुंजी के लिए प्रति मिनट 60 और प्रति दिन 5,000 अनुरोध (हाई-वॉल्यूम प्लान में प्रति मिनट 300 और प्रति दिन 50,000); एक थोक अनुरोध एक ही गिना जाता है। रियल-टाइम डेटा के लिए polling न करें, webhook सब्सक्राइब करें।

रिस्पॉन्स हेडरविवरण
X-RateLimit-Limitप्रति मिनट सीमा
X-RateLimit-Remainingइस मिनट में बचे अनुरोध
X-RateLimit-Limit-Day
X-RateLimit-Remaining-Day
दैनिक सीमा और बचे अनुरोध
Retry-Afterसीमा पार होने पर कितने सेकंड बाद दोबारा कोशिश की जा सकती है

आइडेम्पोटेंसी (Idempotency-Key)

राइट अनुरोधों में Idempotency-Key हेडर भेजा जा सकता है (8–128 अक्षर: अंग्रेज़ी अक्षर, अंक और _-:.)। नेटवर्क टाइमआउट के बाद उसी key और उसी सामग्री के साथ दोबारा भेजने पर पहला रिस्पॉन्स मिलता है, हेडर Idempotent-Replayed: true के साथ; उसी key को अलग सामग्री के साथ भेजने पर 422 लौटता है। रिकॉर्ड 24 घंटे तक रखे जाते हैं।

थोक रिस्पॉन्स

थोक एंडपॉइंट हर आइटम का परिणाम अलग से बताते हैं: सब सफल होने पर 200, कुछ विफल होने पर 207, और सब विफल होने पर 422। हर आइटम में index, status (created / updated / failed) और विफलता का कारण होता है।

पहचानकर्ता के अक्षर

seller_sku में केवल अंग्रेज़ी अक्षर, अंक और ._- (1–64 अक्षर) हो सकते हैं; उत्पाद बारकोड में इनके अलावा / और + (3–64 अक्षर) भी हो सकते हैं। बड़े और छोटे अक्षर एक समान माने जाते हैं।

4 उत्पाद SKU

SKU की अद्वितीय पहचान आपका seller_sku है: वही seller_sku दोबारा भेजने पर SKU अपडेट होता है, और केवल भेजे गए फ़ील्ड बदलते हैं।

SKU थोक में बनाएँ या अपडेट करें

POST/api/v1/merchant/skus/batch

एक बार में अधिकतम 200 आइटम। हर आइटम अलग से प्रोसेस होता है, इसलिए एक आइटम विफल होने से बाक़ी पर असर नहीं पड़ता।

फ़ील्डटाइपअनिवार्यविवरण
seller_skustringअनिवार्यआपका SKU कोड, जैसे Shopee में उत्पाद वेरिएंट का SKU।
product_namestringनया बनाते समय अनिवार्यउत्पाद का नाम। एक ही नाम वाले SKU एक ही उत्पाद के अंतर्गत रखे जाते हैं।
barcodestringवैकल्पिकउत्पाद बारकोड; वेयरहाउस इसी कोड से लेबल प्रिंट करता है और स्कैन करके शेल्फ़ पर रखता है। अलग-अलग रंग और साइज़ का बारकोड अलग होना चाहिए। बारकोड न हो तो ख़ाली छोड़ें, सिस्टम एक सिस्टम बारकोड बना देगा। 16 अक्षरों से लंबा होने पर लेबल पर सिस्टम बारकोड प्रिंट होगा।
gtinstringवैकल्पिकGTIN (8 / 12 / 13 / 14 अंक, चेक डिजिट सत्यापित किया जाता है)। Shopee पर “GTIN नहीं है” वाले उत्पादों के लिए 00 भेजें।
specobjectवैकल्पिकवेरिएंट, जैसे {"color": "काला", "size": "M"}, अधिकतम 5।
declared_name_zh
declared_name_en
stringवैकल्पिकघोषित उत्पाद नाम (चीनी / अंग्रेज़ी)। सामग्री और उपयोग लिखें; “सैंपल” या “उपहार” न लिखें।
declared_unit_valuenumberवैकल्पिकघोषित इकाई मूल्य: सप्लायर से आपकी ख़रीद की प्रति इकाई क़ीमत, प्लेटफ़ॉर्म पर बिक्री की क़ीमत नहीं।
declared_currencystringवैकल्पिकCNY, TWD या USD; इकाई मूल्य भरने पर अनिवार्य।
hs_codestringवैकल्पिक11 अंकों का वस्तु वर्गीकरण कोड; सिस्टम इसी से आयात आवश्यकताओं की जाँच करता है।
origin_countrystringवैकल्पिकमूल देश का ISO कोड, डिफ़ॉल्ट CN।
weight_gintegerवैकल्पिकप्रति पीस वज़न (ग्राम)।
dimensions_cmarrayवैकल्पिकलंबाई, चौड़ाई, ऊँचाई (सेमी), जैसे [20, 15, 3]।
battery_typestringवैकल्पिकnone, contained (अंदर लगी), packed (साथ में पैक), standalone (केवल बैटरी)।
channelsarrayवैकल्पिकप्लेटफ़ॉर्म उत्पाद मैपिंग, अधिकतम 20 सेट: platform (shopee / coupang / momo / other), shop_id, item_id, model_id, platform_sku।

उदाहरण का अनुरोध करें (पोस्ट JSON)

curl -X POST https://0523.tw/api/v1/merchant/skus/batch \
  -H "Authorization: Bearer $LUCKY_MERCHANT_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: sku-sync-20260917-001" \
  -d '{
  "items": [
    {
      "seller_sku": "TEE-RED-S",
      "barcode": "4710000000011",
      "product_name": "Cotton T-shirt",
      "spec": { "color": "red", "size": "S" },
      "declared_name_en": "Cotton knitted T-shirt",
      "declared_unit_value": 18.5,
      "declared_currency": "CNY",
      "hs_code": "61091000006",
      "weight_g": 160,
      "channels": [ { "platform": "shopee", "shop_id": "123456", "item_id": "2233", "model_id": "445566" } ]
    }
  ]
}'

प्रतिक्रिया 200

{
  "success": true,
  "data": [
    {
      "index": 0,
      "seller_sku": "TEE-RED-S",
      "status": "created",
      "sku": {
        "seller_sku": "TEE-RED-S",
        "barcode": "4710000000011",
        "system_barcode": null,
        "pick_code": "131999",
        "hs_code": "61091000006",
        "regulation": { "status": "ok", "import_codes": [], "reasons": [] },
        "channels": [ { "platform": "shopee", "shop_id": "123456", "item_id": "2233", "model_id": "445566", "platform_sku": null } ]
      }
    }
  ],
  "meta": { "summary": { "created": 1, "updated": 0, "failed": 0 } }
}

आयात आवश्यकता निर्धारण (regulation.status)

okकोई आयात आवश्यकता कोड नहीं है।
review_requiredआवश्यकता केवल कुछ उत्पादों पर लागू होती है (जैसे C02 “इस मद के अंतर्गत कुछ उत्पादों का निरीक्षण अनिवार्य है”); उत्पाद के वास्तविक उपयोग के आधार पर पुष्टि करें।
formal_requiredआयात आवश्यकताएँ लागू हैं (निरीक्षण, क्वारंटीन, परमिट आदि); सरलीकृत घोषणा का उपयोग नहीं किया जा सकता।
blockedमुख्यभूमि चीन मूल का वह सामान जिसका आयात प्रतिबंधित है (MW0, मूल देश मुख्यभूमि चीन); इसकी इनबाउंड अग्रिम सूचना नहीं दी जा सकती।
unclassifiedटैरिफ कोड अभी नहीं दिया गया है, इसलिए निर्धारण नहीं हो सकता।

SKU खोजें

GET/api/v1/merchant/skus

seller_sku, barcode, regulation_status, updated_since (ISO 8601) से फ़िल्टर करें, और page / per_page (अधिकतम 100) से पेज बाँटें।

एक SKU

GET/api/v1/merchant/skus/{seller_sku}

प्लेटफ़ॉर्म उत्पाद मैपिंग अपडेट करें

PUT/api/v1/merchant/skus/{seller_sku}/channels

भेजी गई सूची पुरानी सभी मैपिंग की जगह ले लेती है; प्लेटफ़ॉर्म का एक ही वेरिएंट एक साथ दो SKU से नहीं जोड़ा जा सकता।

उत्पाद बारकोड लेबल डाउनलोड करें

GET/api/v1/merchant/skus/{seller_sku}/label.pdf?qty=10

40×30mm लेबल की PDF लौटाता है; qty लेबल की संख्या है (1–1000)। शेन्ज़ेन वेयरहाउस बारकोड लगाते समय यही लेबल प्रिंट करता है; यह एंडपॉइंट तब काम आता है जब आप शिपिंग से पहले ख़ुद बारकोड लगाना चाहें।

5 इनबाउंड अग्रिम सूचना

सप्लायर के माल भेजने के बाद ट्रैकिंग नंबर और सामग्री की अग्रिम सूचना दें। एक इनबाउंड ऑर्डर में कई ट्रैकिंग नंबर हो सकते हैं, और हर नंबर के अंतर्गत SKU और मात्रा दी जाती है।

इनबाउंड ऑर्डर बनाएँ

POST/api/v1/merchant/inbound-orders

पूरे ऑर्डर का एक साथ सत्यापन: कोई भी त्रुटि होने पर कुछ नहीं बनेगा। एक ट्रैकिंग नंबर एक समय में केवल एक चालू इनबाउंड ऑर्डर में हो सकता है; एक ही पार्सल में दोहराए गए SKU की मात्रा जोड़ दी जाती है।

फ़ील्डटाइपअनिवार्यविवरण
reference_nostringअनिवार्यआपका ख़रीद ऑर्डर या इनबाउंड ऑर्डर नंबर, एक मर्चेंट के भीतर अद्वितीय (अंग्रेज़ी अक्षर, अंक और ._-/)।
supplier_order_nostringवैकल्पिकसप्लायर का ऑर्डर नंबर, जैसे 1688 का ऑर्डर नंबर।
warehouse_codestringवैकल्पिकप्राप्त करने वाला वेयरहाउस; अभी केवल SZ (शेन्ज़ेन वेयरहाउस)।
notesstringवैकल्पिकटिप्पणी (अधिकतम 1,000 अक्षर)।
packagesarrayअनिवार्यकूरियर पार्सल की सूची, अधिकतम 50।
packages[].tracking_nostringअनिवार्यचीनी कूरियर ट्रैकिंग नंबर।
packages[].carrierstringवैकल्पिककूरियर कंपनी कोड, जैसे yto, sf।
packages[].itemsarrayअनिवार्यपार्सल की सामग्री: seller_sku और qty; पूरे इनबाउंड ऑर्डर में अधिकतम 500 पंक्तियाँ।

उदाहरण का अनुरोध करें (पोस्ट JSON)

curl -X POST https://0523.tw/api/v1/merchant/inbound-orders \
  -H "Authorization: Bearer $LUCKY_MERCHANT_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: po-20260917-0001" \
  -d '{
  "reference_no": "PO-20260917-0001",
  "supplier_order_no": "1688-3312456789",
  "packages": [
    {
      "tracking_no": "YT1234567890123",
      "carrier": "yto",
      "items": [
        { "seller_sku": "TEE-RED-S", "qty": 40 },
        { "seller_sku": "TEE-RED-M", "qty": 60 }
      ]
    }
  ]
}'
दोबारा भेजने से सुरक्षा: वही reference_no दोबारा बनाने पर 409 INBOUND_REFERENCE_EXISTS लौटता है, और error.context.inbound_order_id में मूल इनबाउंड ऑर्डर का id होता है। सुरक्षित रूप से दोबारा कोशिश करने के लिए Idempotency-Key भेजें।

इनबाउंड ऑर्डर की स्थिति

createdअग्रिम सूचना दी गई; अभी कोई पार्सल वेयरहाउस नहीं पहुँचा।
partially_arrivedकुछ पार्सल शेन्ज़ेन वेयरहाउस पहुँच गए हैं।
arrivedसभी पार्सल वेयरहाउस पहुँच गए हैं; बारकोड लगाने और शेल्फ़ पर रखने का काम जारी है।
completedसब कुछ शेल्फ़ पर रखा जा चुका है, मात्रा अग्रिम सूचना के अनुसार है।
completed_with_discrepancyसब पूरा हुआ, लेकिन कम प्राप्ति, अधिक प्राप्ति या क्षति है।
cancelledरद्द किया गया।

पार्सल की स्थिति

awaiting_arrivalवेयरहाउस पहुँचने की प्रतीक्षा।
labelingवेयरहाउस पहुँच गया, वर्क ऑर्डर बन गया; बारकोड लगाने और शेल्फ़ पर रखने का काम जारी है।
receivedशेल्फ़ पर रखना पूरा।
mismatchवेयरहाउस में दर्ज करते समय पार्सल का स्वामित्व आपकी अग्रिम सूचना से मेल नहीं खाता; ग्राहक सहायता जाँच कर रही है।
cancelledरद्द या अमान्य किया गया; ट्रैकिंग नंबर मुक्त कर दिया गया है।

इनबाउंड ऑर्डर खोजें

GET/api/v1/merchant/inbound-orders

GET/api/v1/merchant/inbound-orders/{id}

status, reference_no, updated_since से फ़िल्टर करें। हर पार्सल के लिए अग्रिम सूचना वाली, वास्तव में प्राप्त और क्षतिग्रस्त मात्रा तथा अंतर लौटाया जाता है।

इनबाउंड ऑर्डर रद्द करें

POST/api/v1/merchant/inbound-orders/{id}/cancel

केवल तभी रद्द किया जा सकता है जब कोई पार्सल वेयरहाउस न पहुँचा हो; रद्द करने के बाद उन ट्रैकिंग नंबर की दोबारा अग्रिम सूचना दी जा सकती है।

6 स्टॉक क्वेरी

स्टॉक वेयरहाउस के अनुसार अलग रखा जाता है: SZ शेन्ज़ेन वेयरहाउस, TY ताओयुआन वेयरहाउस (ताओयुआन वेयरहाउस का स्टॉक आउटबाउंड सुविधाओं के साथ शुरू होगा)।

स्टॉक देखें

GET/api/v1/merchant/inventory?warehouse_code=SZ

warehouse_code और seller_sku[] (अधिकतम 200) से फ़िल्टर करें।

on_handस्टॉक में मौजूद मात्रा।
reservedऑर्डर के लिए आरक्षित मात्रा।
availableउपलब्ध मात्रा = स्टॉक में मौजूद − आरक्षित।
damagedक्षतिग्रस्त मात्रा; भेजी नहीं जा सकती।

प्रतिक्रिया 200

{
  "success": true,
  "data": [
    { "seller_sku": "TEE-RED-S", "barcode": "4710000000011", "warehouse_code": "SZ",
      "on_hand": 38, "reserved": 0, "available": 38, "damaged": 2, "updated_at": "2026-09-17T15:20:11+08:00" }
  ],
  "meta": { "total": 1, "page": 1, "per_page": 100, "last_page": 1 }
}

स्टॉक लेजर

GET/api/v1/merchant/inventory/movements?after_id=0&limit=200

केवल जोड़े जाने वाले, कभी न बदले जाने वाले मूवमेंट रिकॉर्ड। after_id कर्सर से आगे के पेज लें (हर बार अधिकतम 500), और रिस्पॉन्स का meta.next_after_id सहेज लें, ताकि मिलान के लिए आगे का डेटा लेते रहें।

7 Webhook इवेंट

इवेंट होते ही उसकी सूचना आपके URL पर भेज दी जाती है, polling की ज़रूरत नहीं।

सेटअप कैसे करें

  1. सदस्य केंद्र के API पेज पर webhook URL सेट करें (केवल https) और स्वामित्व सत्यापन पूरा करें: आपके एंडपॉइंट को HTTP 200 लौटाना होगा, जिसकी body {"challenge": "प्राप्त मान"} हो।
  2. मर्चेंट इवेंट सब्सक्राइब करने के लिए PUT /api/v1/merchant/webhook/events कॉल करें। बाद में सदस्य केंद्र में URL बदलने से मर्चेंट इवेंट की सदस्यता नहीं हटती।
curl -X PUT https://0523.tw/api/v1/merchant/webhook/events \
  -H "Authorization: Bearer $LUCKY_MERCHANT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"events": ["inbound.arrived", "inbound.received", "inbound.discrepancy", "inventory.changed"]}'

इवेंट सूची

sku.regulation_flaggedSKU का आयात आवश्यकता निर्धारण बदलकर पुष्टि आवश्यक, औपचारिक सीमा शुल्क घोषणा आवश्यक, या आयात प्रतिबंधित हो गया।
inbound.arrivedपार्सल शेन्ज़ेन वेयरहाउस पहुँच गया और वर्क ऑर्डर बन गया।
inbound.mismatchवेयरहाउस में दर्ज करते समय पार्सल का स्वामित्व अग्रिम सूचना से मेल नहीं खाता; ग्राहक सहायता जाँच कर रही है।
inbound.receivedपार्सल को शेल्फ़ पर रखना पूरा हुआ, हर SKU की अग्रिम सूचना वाली, वास्तव में प्राप्त और क्षतिग्रस्त मात्रा के साथ।
inbound.discrepancyशेल्फ़ पर रखी गई मात्रा अग्रिम सूचना से अलग है या क्षति है (inbound.received के साथ ही भेजा जाता है)।
inventory.changedस्टॉक में बदलाव हुआ, प्रभावित SKU के नवीनतम स्टॉक के साथ।

inbound.received

{
  "event": "inbound.received",
  "delivery_id": "5b0f1c2e-8f3a-4d7e-9c21-0a6b2d4e8f10",
  "created_at": "2026-09-17T15:20:11+08:00",
  "data": {
    "inbound_order_id": 128,
    "reference_no": "PO-20260917-0001",
    "order_status": "completed_with_discrepancy",
    "tracking_no": "YT1234567890123",
    "work_order": "WO-SK-315",
    "warehouse_code": "SZ",
    "items": [
      { "seller_sku": "TEE-RED-S", "expected_qty": 40, "received_qty": 38, "damaged_qty": 2, "difference": 0 },
      { "seller_sku": "TEE-RED-M", "expected_qty": 60, "received_qty": 59, "damaged_qty": 0, "difference": -1 }
    ],
    "received_at": "2026-09-17T15:20:10+08:00"
  }
}

सिग्नेचर सत्यापित करें

हर डिलीवरी में X-Lucky-Event, X-Lucky-Delivery-Id और X-Lucky-Signature: t=टाइमस्टैम्प,v1=सिग्नेचर होते हैं। अपने webhook secret से “टाइमस्टैम्प + . + मूल body” पर HMAC-SHA256 निकालें, उसे v1 से मिलाएँ, और 5 मिनट से पुराने टाइमस्टैम्प अस्वीकार करें। एक ही इवेंट की दोबारा डिलीवरी में delivery_id नहीं बदलता, इसलिए इससे डुप्लिकेट हटाए जा सकते हैं।

2xx के अलावा कोई भी रिस्पॉन्स मिलने पर 1 मिनट, 5 मिनट, 30 मिनट, 2 घंटे और 6 घंटे बाद दोबारा भेजा जाता है; लगातार 20 बार विफल होने पर webhook अपने-आप निष्क्रिय हो जाता है और सदस्य केंद्र में दोबारा सेट करना पड़ता है।

// PHP
$body   = file_get_contents('php://input');
$header = $_SERVER['HTTP_X_LUCKY_SIGNATURE'] ?? '';
parse_str(str_replace(',', '&', $header), $sig);   // ['t' => '1789…', 'v1' => 'ab12…']

$expected = hash_hmac('sha256', ($sig['t'] ?? '') . '.' . $body, getenv('LUCKY_WEBHOOK_SECRET'));

if (! hash_equals($expected, $sig['v1'] ?? '') || abs(time() - (int) ($sig['t'] ?? 0)) > 300) {
    http_response_code(400);
    exit;
}
$event = json_decode($body, true);   // de-duplicate by $event['delivery_id']
http_response_code(200);

8 त्रुटि कोड

error.code हमेशा अंग्रेज़ी में होता है। नीचे आम त्रुटियाँ दी गई हैं।

HTTPerror.codeविवरण
401—कुंजी नहीं भेजी गई, कुंजी अमान्य है या समाप्त हो चुकी है (body {"message": "Unauthenticated."} होती है)।
403MERCHANT_TOKEN_REQUIREDइस टोकन के पास मर्चेंट API की अनुमति नहीं है (जैसे सामान्य सदस्य के लॉग इन से बना टोकन)।
403MERCHANT_NOT_APPROVED
MERCHANT_SUSPENDED
खाता अभी मर्चेंट के रूप में स्वीकृत नहीं है, या मर्चेंट निलंबित है।
403APP_SUSPENDED
APP_REVOKED
APP_NOT_FOUND
इस कुंजी से जुड़ा API ऐप्लिकेशन निलंबित या रद्द कर दिया गया है।
422VALIDATION_FAILED
PRODUCT_NAME_REQUIRED
डेटा फ़ॉर्मैट गलत है; फ़ील्ड-वार विवरण के लिए error.errors देखें।
422BATCH_TOO_LARGEथोक अनुरोध में आइटम की संख्या सीमा से अधिक है।
207 / 409SKU_BARCODE_DUPLICATE
SKU_BARCODE_CONFLICT
उत्पाद बारकोड पहले से किसी दूसरे SKU में इस्तेमाल हो रहा है, या किसी दूसरे SKU के सिस्टम बारकोड या पिकिंग कोड के समान है।
207 / 422GTIN_INVALID
HS_CODE_NOT_FOUND
GTIN का चेक डिजिट गलत है, या टैरिफ कोड मौजूद नहीं है।
404 / 422SKU_NOT_FOUND
SKU_IMPORT_BLOCKED
SKU नहीं मिला, या SKU आयात-प्रतिबंधित उत्पाद है और उसकी अग्रिम सूचना नहीं दी जा सकती।
409INBOUND_REFERENCE_EXISTSइनबाउंड ऑर्डर का रेफ़रेंस नंबर पहले से मौजूद है।
422TRACKING_IN_USE
TRACKING_FORECASTED_BY_OTHER
TRACKING_ALREADY_WAREHOUSED
TRACKING_NOT_AVAILABLE
ट्रैकिंग नंबर पहले से किसी चालू इनबाउंड ऑर्डर में है, किसी दूसरे सदस्य ने उसकी अग्रिम सूचना दी है, या वह किसी दूसरे सदस्य के नाम पर वेयरहाउस में दर्ज हो चुका है।
409INBOUND_NOT_CANCELLABLEकोई पार्सल वेयरहाउस पहुँच चुका है, इसलिए इनबाउंड ऑर्डर रद्द नहीं किया जा सकता।
400 / 409 / 422IDEMPOTENCY_KEY_INVALID
IDEMPOTENCY_IN_PROGRESS
IDEMPOTENCY_KEY_REUSED
Idempotency-Key का फ़ॉर्मैट गलत है, उसे अलग सामग्री के साथ इस्तेमाल किया गया है, या पिछला अनुरोध अभी प्रोसेस हो रहा है।
409CONFLICT_RETRYवही रिकॉर्ड किसी दूसरे अनुरोध द्वारा बदला जा रहा है; थोड़ी देर बाद दोबारा भेजें।
429RATE_LIMIT_EXCEEDEDरेट लिमिट पार हो गई; Retry-After के अनुसार प्रतीक्षा करके दोबारा कोशिश करें।

9 कोड उदाहरण

नीचे दिए उदाहरण सर्वर-साइड पर चलाएँ; कुंजी को फ़्रंटएंड कोड में न डालें।

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$api = Http::withToken(config('services.lucky.merchant_key'))
    ->acceptJson()
    ->baseUrl('https://0523.tw/api/v1/merchant')
    ->timeout(20);

// 1) Sync SKUs (up to 200 per request)
$res = $api->withHeaders(['Idempotency-Key' => (string) Str::uuid()])
    ->post('/skus/batch', ['items' => $items]);

foreach ($res->json('data') as $row) {
    if ($row['status'] === 'failed') {
        logger()->warning('SKU failed', $row['errors']);
    }
}

// 2) Forecast an inbound order
$order = $api->withHeaders(['Idempotency-Key' => 'po-' . $po->id])
    ->post('/inbound-orders', [
        'reference_no' => $po->number,
        'packages'     => [[
            'tracking_no' => $po->tracking_no,
            'items'       => [['seller_sku' => 'TEE-RED-S', 'qty' => 40]],
        ]],
    ])->throw()->json('data');

// 3) Read Shenzhen stock
$stock = $api->get('/inventory', ['warehouse_code' => 'SZ'])->json('data');

10 तकनीकी सहायता

इंटीग्रेशन के दौरान कोई भी समस्या आए तो अनुरोध का समय, एंडपॉइंट और error.code बताएँ, ताकि हम जाँच में मदद कर सकें।

LINE आधिकारिक खाता @0523tw

तकनीकी ईमेल howyunqisoftware@gmail.com

संस्करण v1 चरण 1 (2026-09-17): उत्पाद SKU, इनबाउंड अग्रिम सूचना, शेन्ज़ेन वेयरहाउस में बारकोड लगाना और शेल्फ़ पर रखना, स्टॉक क्वेरी, webhook।

सक्रिय करवाने के लिए सहायता से संपर्क करें