API Merchant: hubungkan SKU, pendaftaran pembelian, dan stok gudang Shenzhen ke sistem Anda
Untuk perusahaan yang berjualan di Shopee, Coupang, dan momo. Kirim melalui API barcode produk yang dibuat saat Anda menayangkan produk, daftarkan nomor resi dan isi paket lebih awal saat membeli; begitu barang tiba di gudang Shenzhen, perintah kerja dibuat otomatis, setiap barang diberi label, dipindai, dan ditempatkan ke rak, lalu stok dan selisihnya dilaporkan secara real-time.
Perusahaan
Yang dapat mendaftar (wajib nomor identitas pajak Taiwan 8 digit)
200
Batas SKU per permintaan massal
WO-SK
Perintah kerja pelabelan otomatis saat barang tiba
60/menit
Batas laju bawaan per kunci
1 Ikhtisar layanan
Tahap 1 menyediakan “Produk dan barang masuk”: mulai dari pembuatan SKU hingga barang ditempatkan ke rak dan menjadi stok di gudang Shenzhen.
Yang dapat dilakukan saat ini
- Buat atau perbarui SKU secara massal (berdasarkan
seller_skuAnda), dengan barcode produk tersendiri untuk setiap warna dan ukuran, lalu tautkan ke nomor varian produk di Shopee / Coupang / momo. - Cocokkan persyaratan impor secara otomatis berdasarkan kode tarif 11 digit, dan tandai produk yang memerlukan pemeriksaan, izin, atau tidak dapat diimpor.
- Daftarkan nomor resi dan isi setiap kardus lebih awal saat membeli; saat barang tiba di gudang Shenzhen, perintah kerja pelabelan WO-SK dibuat otomatis, lalu gudang melabeli, memindai, dan menempatkan setiap barang ke rak.
- Cek stok per gudang dan riwayat pergerakan stok, serta terima webhook secara real-time untuk kedatangan barang, penerimaan selesai, selisih jumlah, dan perubahan stok.
Alur barang masuk
- Buat SKU: kirim barcode produk, varian, nama barang yang dideklarasikan, dan kode tarif.
- Daftarkan barang masuk: kirim nomor resi dan jumlah yang diharapkan untuk setiap SKU.
- Tiba di gudang Shenzhen: setelah nomor resi dipindai, perintah kerja WO-SK dibuat dan dicetak otomatis.
- Pelabelan dan penempatan ke rak: gudang mencetak barcode produk, menempelkannya pada setiap barang, dan memindai untuk menghitung jumlah.
- Penerimaan selesai: jumlah yang benar-benar diterima masuk ke stok gudang Shenzhen, barang rusak dihitung terpisah, dan selisihnya dikirim ke sistem Anda.
Fitur yang direncanakan
Order pengiriman massal, batch pengiriman yang dikelompokkan otomatis sesuai ketentuan deklarasi, serta stok siap kirim, penyortiran, dan label pengiriman marketplace di gudang Taoyuan. Fitur-fitur ini akan diumumkan di halaman ini saat dirilis.
2 Pendaftaran dan kunci API
API Merchant hanya tersedia untuk perusahaan terdaftar, dan setiap kunci terikat pada satu akun merchant yang telah disetujui.
Langkah aktivasi
- Di pusat anggota, tambahkan pendeklarasi bertipe “perusahaan” dan isi nomor identitas pajak Taiwan 8 digit.
- Hubungi layanan pelanggan HowBridge untuk mengajukan aktivasi API Merchant; kunci akan diterbitkan setelah disetujui.
- Kunci hanya ditampilkan satu kali. Simpan di variabel lingkungan sisi server, jangan disertakan di browser atau aplikasi.
- Jika memerlukan webhook, atur dan verifikasi URL terlebih dahulu di halaman API pusat anggota, lalu berlangganan event merchant.
Authorization: Bearer <kunci>. Token yang dibuat saat anggota biasa masuk ke aplikasi atau situs web tidak dapat memanggil API Merchant.Authorization: Bearer 12|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Accept: application/json
3 Ketentuan umum
Semua endpoint menggunakan aturan berikut.
Base URL
Format dan bahasa
Permintaan dan respons menggunakan JSON. Pesan error secara bawaan dalam bahasa Mandarin Tradisional; kirim Accept-Language: en untuk bahasa Inggris. Untuk logika program, selalu gunakan error.code yang tetap dalam bahasa Inggris.
Struktur respons
Jika berhasil mengembalikan {"success": true, "data": …, "meta": …}; jika gagal mengembalikan {"success": false, "error": {"code", "message", "errors", "context"}}, dengan errors berisi rincian per kolom. Satu-satunya pengecualian adalah jika kunci tidak dikirim atau tidak valid: HTTP 401 dengan body {"message": "Unauthenticated."}.
{
"success": false,
"error": {
"code": "VALIDATION_FAILED",
"message": "…",
"errors": [
{ "code": "TRACKING_IN_USE", "field": "packages.0.tracking_no", "message": "…" }
]
}
}
Batas laju
Setiap kunci dibatasi 60 permintaan per menit dan 5,000 per hari (paket volume tinggi: 300 per menit dan 50,000 per hari); satu panggilan endpoint massal dihitung satu kali. Untuk data real-time, berlanggananlah webhook alih-alih melakukan polling.
| Header respons | Keterangan |
|---|---|
X-RateLimit-Limit | Batas per menit |
X-RateLimit-Remaining | Sisa permintaan pada menit ini |
X-RateLimit-Limit-DayX-RateLimit-Remaining-Day | Batas harian dan sisa permintaan |
Retry-After | Jumlah detik sebelum dapat mencoba lagi setelah melewati batas |
Idempotensi (Idempotency-Key)
Permintaan tulis dapat menyertakan header Idempotency-Key (8–128 karakter: huruf, angka, dan _-:.). Jika jaringan timeout, mengirim ulang dengan key dan isi yang sama akan mengembalikan respons pertama dengan header Idempotent-Replayed: true; key yang sama dengan isi berbeda mengembalikan 422. Catatan disimpan selama 24 jam.
Respons massal
Endpoint massal melaporkan hasil per item: 200 jika semua berhasil, 207 jika sebagian gagal, dan 422 jika semua gagal. Setiap item memiliki index, status (created / updated / failed), dan alasan kegagalan.
Karakter pengenal
seller_sku hanya boleh berisi huruf, angka, dan ._- (1–64 karakter); barcode produk juga boleh berisi / dan + (3–64 karakter). Huruf besar dan kecil dianggap sama.
4 SKU produk
SKU menggunakan seller_sku Anda sebagai kunci unik: mengirim ulang seller_sku yang sama berarti memperbarui, dan hanya kolom yang dikirim yang diubah.
Buat atau perbarui SKU secara massal
POST/api/v1/merchant/skus/batch
Maksimal 200 item per permintaan. Setiap item diproses secara terpisah, sehingga satu item yang gagal tidak memengaruhi item lainnya.
| Kolom | Tipe | Wajib | Keterangan |
|---|---|---|---|
seller_sku | string | Wajib | Kode SKU Anda, misalnya SKU varian di Shopee. |
product_name | string | Wajib saat membuat | Nama produk. SKU dengan nama yang sama dikelompokkan ke dalam satu produk. |
barcode | string | Opsional | Barcode produk; gudang mencetak label dan memindai saat penempatan ke rak berdasarkan kode ini. Setiap warna dan ukuran harus memiliki barcode berbeda. Jika tidak punya barcode, kosongkan saja dan sistem akan membuat barcode sistem. Jika lebih dari 16 karakter, label akan dicetak dengan barcode sistem. |
gtin | string | Opsional | GTIN (barcode internasional, 8 / 12 / 13 / 14 digit, digit pemeriksa diverifikasi). Untuk produk Shopee “tanpa GTIN”, kirim 00. |
spec | object | Opsional | Varian, misalnya {"color": "hitam", "size": "M"}, maksimal 5 atribut. |
declared_name_zhdeclared_name_en | string | Opsional | Nama barang yang dideklarasikan (Mandarin / Inggris). Tuliskan bahan dan kegunaan, jangan tulis “sampel” atau “hadiah”. |
declared_unit_value | number | Opsional | Nilai satuan yang dideklarasikan, yaitu harga beli per unit dari pemasok, bukan harga jual di marketplace. |
declared_currency | string | Opsional | CNY, TWD, atau USD; wajib jika nilai satuan diisi. |
hs_code | string | Opsional | Kode klasifikasi barang 11 digit, digunakan sistem untuk mencocokkan persyaratan impor. |
origin_country | string | Opsional | Kode ISO negara asal, bawaan CN. |
weight_g | integer | Opsional | Berat per unit (gram). |
dimensions_cm | array | Opsional | Panjang, lebar, tinggi (cm), misalnya [20, 15, 3]. |
battery_type | string | Opsional | none, contained (terpasang di dalam), packed (disertakan dalam kemasan), standalone (baterai saja). |
channels | array | Opsional | Tautan produk marketplace, maksimal 20 set: platform (shopee / coupang / momo / other), shop_id, item_id, model_id, platform_sku. |
Contoh permintaan (POST 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" } ] } ] }'
Tanggapan 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 } }
}
Penentuan persyaratan impor (regulation.status)
| ok | Tidak ada kode persyaratan impor. |
| review_required | Persyaratan hanya berlaku untuk sebagian produk (misalnya C02 “sebagian produk dalam pos ini wajib diperiksa”); perlu dikonfirmasi berdasarkan kegunaan sebenarnya dari produk. |
| formal_required | Terkena persyaratan impor (pemeriksaan, karantina, izin, dan sebagainya), sehingga tidak dapat menggunakan deklarasi sederhana. |
| blocked | Barang asal Tiongkok daratan yang tidak diizinkan diimpor (MW0, negara asal Tiongkok daratan); tidak dapat didaftarkan sebagai barang masuk. |
| unclassified | Kode tarif belum diberikan, sehingga belum dapat ditentukan. |
Daftar SKU
GET/api/v1/merchant/skus
Dapat difilter dengan seller_sku, barcode, regulation_status, updated_since (ISO 8601), dan dipaginasi dengan page / per_page (maksimal 100).
Ambil satu SKU
GET/api/v1/merchant/skus/{seller_sku}
Perbarui tautan produk marketplace
PUT/api/v1/merchant/skus/{seller_sku}/channels
Mengganti seluruh tautan yang ada dengan daftar yang dikirim. Varian marketplace yang sama tidak dapat ditautkan ke dua SKU sekaligus.
Unduh label barcode produk
GET/api/v1/merchant/skus/{seller_sku}/label.pdf?qty=10
Mengembalikan PDF label 40×30mm; qty adalah jumlah lembar (1–1000). Gudang Shenzhen mencetak label yang sama saat pelabelan; gunakan fitur ini jika Anda ingin melabeli barang sendiri sebelum dikirim.
5 Pendaftaran barang masuk
Setelah pemasok mengirim barang, daftarkan nomor resi dan isi paket. Satu order barang masuk dapat berisi beberapa nomor resi, dan setiap nomor resi mencantumkan SKU beserta jumlahnya.
Buat order barang masuk
POST/api/v1/merchant/inbound-orders
Divalidasi secara keseluruhan: jika ada satu error saja, order tidak akan dibuat. Satu nomor resi hanya dapat menjadi bagian dari satu order barang masuk yang sedang berjalan; SKU duplikat dalam satu paket akan digabungkan jumlahnya.
| Kolom | Tipe | Wajib | Keterangan |
|---|---|---|---|
reference_no | string | Wajib | Nomor pesanan pembelian atau nomor order barang masuk Anda, unik dalam satu merchant (huruf, angka, dan ._-/). |
supplier_order_no | string | Opsional | Nomor pesanan pemasok, misalnya nomor pesanan 1688. |
warehouse_code | string | Opsional | Gudang penerima; saat ini hanya menerima SZ (gudang Shenzhen). |
notes | string | Opsional | Catatan (maksimal 1,000 karakter). |
packages | array | Wajib | Daftar paket kurir, maksimal 50 paket. |
packages[].tracking_no | string | Wajib | Nomor resi kurir di Tiongkok. |
packages[].carrier | string | Opsional | Kode perusahaan kurir, misalnya yto, sf. |
packages[].items | array | Wajib | Isi paket: seller_sku dan qty, total maksimal 500 baris per order barang masuk. |
Contoh permintaan (POST 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 yang sama akan mengembalikan 409 INBOUND_REFERENCE_EXISTS, dengan id order barang masuk asli di error.context.inbound_order_id. Untuk mencoba ulang dengan aman, sertakan Idempotency-Key.Status order barang masuk
| created | Sudah didaftarkan, belum ada paket yang tiba di gudang. |
| partially_arrived | Sebagian paket sudah tiba di gudang Shenzhen. |
| arrived | Semua paket sudah tiba di gudang, sedang dalam pelabelan dan penempatan ke rak. |
| completed | Semua sudah ditempatkan ke rak, jumlah sesuai dengan yang didaftarkan. |
| completed_with_discrepancy | Semua selesai, tetapi ada kekurangan, kelebihan, atau kerusakan. |
| cancelled | Dibatalkan. |
Status paket
| awaiting_arrival | Menunggu tiba di gudang. |
| labeling | Sudah tiba di gudang, perintah kerja sudah dibuat, sedang dalam pelabelan dan penempatan ke rak. |
| received | Penempatan ke rak selesai. |
| mismatch | Kepemilikan paket saat masuk gudang tidak sesuai dengan pendaftaran Anda; layanan pelanggan sedang memeriksa. |
| cancelled | Dibatalkan atau dinyatakan tidak berlaku; nomor resi sudah dilepaskan. |
Daftar order barang masuk
GET/api/v1/merchant/inbound-orders
GET/api/v1/merchant/inbound-orders/{id}
Dapat difilter dengan status, reference_no, updated_since. Setiap paket mengembalikan jumlah yang diharapkan, diterima, rusak, dan selisihnya.
Batalkan order barang masuk
POST/api/v1/merchant/inbound-orders/{id}/cancel
Hanya dapat dibatalkan jika belum ada paket yang tiba di gudang; setelah dibatalkan, nomor resi dapat didaftarkan kembali.
6 Cek stok
Stok dipisahkan per gudang: SZ gudang Shenzhen, TY gudang Taoyuan (stok gudang Taoyuan dibuka bersamaan dengan fitur pengiriman keluar).
Cek stok
GET/api/v1/merchant/inventory?warehouse_code=SZ
Dapat difilter dengan warehouse_code dan seller_sku[] (maksimal 200).
on_hand | Jumlah di gudang. |
reserved | Jumlah yang sudah dialokasikan untuk pesanan. |
available | Jumlah tersedia = di gudang − dialokasikan. |
damaged | Jumlah rusak, tidak dapat dikirim. |
Tanggapan 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 }
}
Riwayat pergerakan stok
GET/api/v1/merchant/inventory/movements?after_id=0&limit=200
Catatan pergerakan yang hanya ditambah dan tidak pernah diubah. Gunakan kursor after_id untuk berpindah ke halaman berikutnya (maksimal 500 catatan per permintaan), lalu simpan meta.next_after_id dari respons untuk melanjutkan pengambilan data rekonsiliasi.
7 Event Webhook
Saat event terjadi, notifikasi langsung dikirim ke URL Anda, tanpa perlu polling.
Cara pengaturan
- Atur URL webhook di halaman API pusat anggota (hanya https) dan selesaikan verifikasi kepemilikan: endpoint Anda harus mengembalikan HTTP 200 dengan body
{"challenge": "nilai yang diterima"}. - Panggil
PUT /api/v1/merchant/webhook/eventsuntuk berlangganan event merchant. Mengubah URL di pusat anggota setelahnya tidak akan menghapus langganan event merchant.
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"]}'
Daftar event
sku.regulation_flagged | Hasil penentuan persyaratan impor SKU berubah menjadi perlu dikonfirmasi, wajib deklarasi pabean formal, atau tidak diizinkan diimpor. |
inbound.arrived | Paket tiba di gudang Shenzhen dan perintah kerja sudah dibuat. |
inbound.mismatch | Kepemilikan paket saat masuk gudang tidak sesuai dengan pendaftaran; layanan pelanggan sedang memeriksa. |
inbound.received | Paket selesai ditempatkan ke rak, disertai jumlah yang diharapkan, diterima, dan rusak per SKU. |
inbound.discrepancy | Jumlah yang ditempatkan ke rak berbeda dengan yang didaftarkan atau ada kerusakan (dikirim bersamaan dengan inbound.received). |
inventory.changed | Stok berubah, disertai stok terbaru dari SKU yang berubah. |
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"
}
}
Verifikasi tanda tangan
Setiap pengiriman menyertakan X-Lucky-Event, X-Lucky-Delivery-Id, dan X-Lucky-Signature: t=stempel_waktu,v1=tanda_tangan. Hitung HMAC-SHA256 dengan webhook secret Anda atas “stempel waktu + . + body mentah”, bandingkan dengan v1, dan tolak stempel waktu yang lebih lama dari 5 menit. Saat event yang sama dikirim ulang, delivery_id tidak berubah sehingga dapat digunakan untuk menghapus duplikat.
Respons selain 2xx akan dicoba ulang setelah 1 menit, 5 menit, 30 menit, 2 jam, dan 6 jam; jika gagal 20 kali berturut-turut, webhook akan dinonaktifkan otomatis dan harus diatur ulang di pusat anggota.
// 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 Kode error
error.code selalu dalam bahasa Inggris. Berikut error yang umum terjadi.
| HTTP | error.code | Keterangan |
|---|---|---|
| 401 | — | Kunci tidak dikirim, tidak valid, atau sudah kedaluwarsa (body berisi {"message": "Unauthenticated."}). |
| 403 | MERCHANT_TOKEN_REQUIRED | Token ini tidak memiliki akses API Merchant (misalnya token dari login anggota biasa). |
| 403 | MERCHANT_NOT_APPROVEDMERCHANT_SUSPENDED | Akun belum disetujui sebagai merchant, atau merchant sedang ditangguhkan. |
| 403 | APP_SUSPENDEDAPP_REVOKEDAPP_NOT_FOUND | Aplikasi API untuk kunci ini telah ditangguhkan atau dicabut. |
| 422 | VALIDATION_FAILEDPRODUCT_NAME_REQUIRED | Format data salah; lihat rincian per kolom di error.errors. |
| 422 | BATCH_TOO_LARGE | Jumlah item dalam permintaan massal melebihi batas. |
| 207 / 409 | SKU_BARCODE_DUPLICATESKU_BARCODE_CONFLICT | Barcode produk sudah digunakan oleh SKU lain, atau sama dengan barcode sistem atau kode picking milik SKU lain. |
| 207 / 422 | GTIN_INVALIDHS_CODE_NOT_FOUND | Digit pemeriksa GTIN salah, atau kode tarif tidak ada. |
| 404 / 422 | SKU_NOT_FOUNDSKU_IMPORT_BLOCKED | SKU tidak ditemukan, atau SKU termasuk barang yang tidak diizinkan diimpor sehingga tidak dapat didaftarkan. |
| 409 | INBOUND_REFERENCE_EXISTS | Nomor referensi order barang masuk sudah ada. |
| 422 | TRACKING_IN_USETRACKING_FORECASTED_BY_OTHERTRACKING_ALREADY_WAREHOUSEDTRACKING_NOT_AVAILABLE | Nomor resi sudah ada di order barang masuk yang sedang berjalan, sudah didaftarkan oleh anggota lain, atau sudah masuk gudang atas nama anggota lain. |
| 409 | INBOUND_NOT_CANCELLABLE | Sudah ada paket yang tiba di gudang, sehingga order barang masuk tidak dapat dibatalkan. |
| 400 / 409 / 422 | IDEMPOTENCY_KEY_INVALIDIDEMPOTENCY_IN_PROGRESSIDEMPOTENCY_KEY_REUSED | Format Idempotency-Key salah, key digunakan untuk isi yang berbeda, atau permintaan sebelumnya masih diproses. |
| 409 | CONFLICT_RETRY | Data yang sama sedang diubah oleh permintaan lain; kirim ulang beberapa saat lagi. |
| 429 | RATE_LIMIT_EXCEEDED | Batas laju terlampaui; tunggu sesuai Retry-After lalu coba lagi. |
9 Contoh kode
Jalankan contoh berikut di sisi server, dan jangan menaruh kunci di kode front-end.
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');
// Node.js 18+ (server side only) import { randomUUID } from 'node:crypto'; const base = 'https://0523.tw/api/v1/merchant'; const headers = { Authorization: `Bearer ${process.env.LUCKY_MERCHANT_KEY}`, 'Content-Type': 'application/json', Accept: 'application/json', }; const res = await fetch(`${base}/skus/batch`, { method: 'POST', headers: { ...headers, 'Idempotency-Key': randomUUID() }, body: JSON.stringify({ items }), }); const { data, meta } = await res.json(); console.log(meta.summary); // { created, updated, failed } const stock = await fetch(`${base}/inventory?warehouse_code=SZ`, { headers }).then(r => r.json());
import os, uuid, requests base = "https://0523.tw/api/v1/merchant" session = requests.Session() session.headers.update({ "Authorization": f"Bearer {os.environ['LUCKY_MERCHANT_KEY']}", "Accept": "application/json", }) r = session.post(f"{base}/inbound-orders", headers={"Idempotency-Key": "po-20260917-0001"}, json={ "reference_no": "PO-20260917-0001", "packages": [{"tracking_no": "YT1234567890123", "items": [{"seller_sku": "TEE-RED-S", "qty": 40}]}], }, timeout=20) if r.status_code == 409: existing_id = r.json()["error"]["context"]["inbound_order_id"] else: r.raise_for_status()
10 Dukungan teknis
Jika mengalami kendala selama integrasi, sertakan waktu permintaan, endpoint, dan error.code agar kami dapat membantu menelusuri masalahnya.
Akun resmi LINE @0523tw
Email teknis howyunqisoftware@gmail.com
Versi v1 Tahap 1 (2026-09-17): SKU produk, pendaftaran barang masuk, pelabelan dan penempatan ke rak di gudang Shenzhen, cek stok, webhook.