pasar jasa API Merchant
Tahap 1: Produk dan barang masuk

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_sku Anda), 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

  1. Buat SKU: kirim barcode produk, varian, nama barang yang dideklarasikan, dan kode tarif.
  2. Daftarkan barang masuk: kirim nomor resi dan jumlah yang diharapkan untuk setiap SKU.
  3. Tiba di gudang Shenzhen: setelah nomor resi dipindai, perintah kerja WO-SK dibuat dan dicetak otomatis.
  4. Pelabelan dan penempatan ke rak: gudang mencetak barcode produk, menempelkannya pada setiap barang, dan memindai untuk menghitung jumlah.
  5. Penerimaan selesai: jumlah yang benar-benar diterima masuk ke stok gudang Shenzhen, barang rusak dihitung terpisah, dan selisihnya dikirim ke sistem Anda.
Tentang persyaratan impor: sistem menentukan secara otomatis berdasarkan kode persyaratan impor dalam data tarif Administrasi Bea Cukai Taiwan, dan hasilnya hanya sebagai acuan operasional. Apakah suatu produk benar-benar memerlukan pemeriksaan, izin, atau deklarasi pabean formal ditentukan oleh hasil pemeriksaan Bea Cukai dan perusahaan jasa kepabeanan mitra. Stok yang disiapkan untuk dijual bersifat komersial sehingga tidak berlaku batas pembebasan izin untuk penggunaan pribadi.

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

  1. Di pusat anggota, tambahkan pendeklarasi bertipe “perusahaan” dan isi nomor identitas pajak Taiwan 8 digit.
  2. Hubungi layanan pelanggan HowBridge untuk mengajukan aktivasi API Merchant; kunci akan diterbitkan setelah disetujui.
  3. Kunci hanya ditampilkan satu kali. Simpan di variabel lingkungan sisi server, jangan disertakan di browser atau aplikasi.
  4. Jika memerlukan webhook, atur dan verifikasi URL terlebih dahulu di halaman API pusat anggota, lalu berlangganan event merchant.
Setiap permintaan menggunakan 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

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

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 responsKeterangan
X-RateLimit-LimitBatas per menit
X-RateLimit-RemainingSisa permintaan pada menit ini
X-RateLimit-Limit-Day
X-RateLimit-Remaining-Day
Batas harian dan sisa permintaan
Retry-AfterJumlah 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.

KolomTipeWajibKeterangan
seller_skustringWajibKode SKU Anda, misalnya SKU varian di Shopee.
product_namestringWajib saat membuatNama produk. SKU dengan nama yang sama dikelompokkan ke dalam satu produk.
barcodestringOpsionalBarcode 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.
gtinstringOpsionalGTIN (barcode internasional, 8 / 12 / 13 / 14 digit, digit pemeriksa diverifikasi). Untuk produk Shopee “tanpa GTIN”, kirim 00.
specobjectOpsionalVarian, misalnya {"color": "hitam", "size": "M"}, maksimal 5 atribut.
declared_name_zh
declared_name_en
stringOpsionalNama barang yang dideklarasikan (Mandarin / Inggris). Tuliskan bahan dan kegunaan, jangan tulis “sampel” atau “hadiah”.
declared_unit_valuenumberOpsionalNilai satuan yang dideklarasikan, yaitu harga beli per unit dari pemasok, bukan harga jual di marketplace.
declared_currencystringOpsionalCNY, TWD, atau USD; wajib jika nilai satuan diisi.
hs_codestringOpsionalKode klasifikasi barang 11 digit, digunakan sistem untuk mencocokkan persyaratan impor.
origin_countrystringOpsionalKode ISO negara asal, bawaan CN.
weight_gintegerOpsionalBerat per unit (gram).
dimensions_cmarrayOpsionalPanjang, lebar, tinggi (cm), misalnya [20, 15, 3].
battery_typestringOpsionalnone, contained (terpasang di dalam), packed (disertakan dalam kemasan), standalone (baterai saja).
channelsarrayOpsionalTautan 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)

okTidak ada kode persyaratan impor.
review_requiredPersyaratan hanya berlaku untuk sebagian produk (misalnya C02 “sebagian produk dalam pos ini wajib diperiksa”); perlu dikonfirmasi berdasarkan kegunaan sebenarnya dari produk.
formal_requiredTerkena persyaratan impor (pemeriksaan, karantina, izin, dan sebagainya), sehingga tidak dapat menggunakan deklarasi sederhana.
blockedBarang asal Tiongkok daratan yang tidak diizinkan diimpor (MW0, negara asal Tiongkok daratan); tidak dapat didaftarkan sebagai barang masuk.
unclassifiedKode 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.

KolomTipeWajibKeterangan
reference_nostringWajibNomor pesanan pembelian atau nomor order barang masuk Anda, unik dalam satu merchant (huruf, angka, dan ._-/).
supplier_order_nostringOpsionalNomor pesanan pemasok, misalnya nomor pesanan 1688.
warehouse_codestringOpsionalGudang penerima; saat ini hanya menerima SZ (gudang Shenzhen).
notesstringOpsionalCatatan (maksimal 1,000 karakter).
packagesarrayWajibDaftar paket kurir, maksimal 50 paket.
packages[].tracking_nostringWajibNomor resi kurir di Tiongkok.
packages[].carrierstringOpsionalKode perusahaan kurir, misalnya yto, sf.
packages[].itemsarrayWajibIsi 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 }
      ]
    }
  ]
}'
Perlindungan pengiriman ganda: membuat ulang dengan 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

createdSudah didaftarkan, belum ada paket yang tiba di gudang.
partially_arrivedSebagian paket sudah tiba di gudang Shenzhen.
arrivedSemua paket sudah tiba di gudang, sedang dalam pelabelan dan penempatan ke rak.
completedSemua sudah ditempatkan ke rak, jumlah sesuai dengan yang didaftarkan.
completed_with_discrepancySemua selesai, tetapi ada kekurangan, kelebihan, atau kerusakan.
cancelledDibatalkan.

Status paket

awaiting_arrivalMenunggu tiba di gudang.
labelingSudah tiba di gudang, perintah kerja sudah dibuat, sedang dalam pelabelan dan penempatan ke rak.
receivedPenempatan ke rak selesai.
mismatchKepemilikan paket saat masuk gudang tidak sesuai dengan pendaftaran Anda; layanan pelanggan sedang memeriksa.
cancelledDibatalkan 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_handJumlah di gudang.
reservedJumlah yang sudah dialokasikan untuk pesanan.
availableJumlah tersedia = di gudang − dialokasikan.
damagedJumlah 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

  1. 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"}.
  2. Panggil PUT /api/v1/merchant/webhook/events untuk 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_flaggedHasil penentuan persyaratan impor SKU berubah menjadi perlu dikonfirmasi, wajib deklarasi pabean formal, atau tidak diizinkan diimpor.
inbound.arrivedPaket tiba di gudang Shenzhen dan perintah kerja sudah dibuat.
inbound.mismatchKepemilikan paket saat masuk gudang tidak sesuai dengan pendaftaran; layanan pelanggan sedang memeriksa.
inbound.receivedPaket selesai ditempatkan ke rak, disertai jumlah yang diharapkan, diterima, dan rusak per SKU.
inbound.discrepancyJumlah yang ditempatkan ke rak berbeda dengan yang didaftarkan atau ada kerusakan (dikirim bersamaan dengan inbound.received).
inventory.changedStok 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.

HTTPerror.codeKeterangan
401—Kunci tidak dikirim, tidak valid, atau sudah kedaluwarsa (body berisi {"message": "Unauthenticated."}).
403MERCHANT_TOKEN_REQUIREDToken ini tidak memiliki akses API Merchant (misalnya token dari login anggota biasa).
403MERCHANT_NOT_APPROVED
MERCHANT_SUSPENDED
Akun belum disetujui sebagai merchant, atau merchant sedang ditangguhkan.
403APP_SUSPENDED
APP_REVOKED
APP_NOT_FOUND
Aplikasi API untuk kunci ini telah ditangguhkan atau dicabut.
422VALIDATION_FAILED
PRODUCT_NAME_REQUIRED
Format data salah; lihat rincian per kolom di error.errors.
422BATCH_TOO_LARGEJumlah item dalam permintaan massal melebihi batas.
207 / 409SKU_BARCODE_DUPLICATE
SKU_BARCODE_CONFLICT
Barcode produk sudah digunakan oleh SKU lain, atau sama dengan barcode sistem atau kode picking milik SKU lain.
207 / 422GTIN_INVALID
HS_CODE_NOT_FOUND
Digit pemeriksa GTIN salah, atau kode tarif tidak ada.
404 / 422SKU_NOT_FOUND
SKU_IMPORT_BLOCKED
SKU tidak ditemukan, atau SKU termasuk barang yang tidak diizinkan diimpor sehingga tidak dapat didaftarkan.
409INBOUND_REFERENCE_EXISTSNomor referensi order barang masuk sudah ada.
422TRACKING_IN_USE
TRACKING_FORECASTED_BY_OTHER
TRACKING_ALREADY_WAREHOUSED
TRACKING_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.
409INBOUND_NOT_CANCELLABLESudah ada paket yang tiba di gudang, sehingga order barang masuk tidak dapat dibatalkan.
400 / 409 / 422IDEMPOTENCY_KEY_INVALID
IDEMPOTENCY_IN_PROGRESS
IDEMPOTENCY_KEY_REUSED
Format Idempotency-Key salah, key digunakan untuk isi yang berbeda, atau permintaan sebelumnya masih diproses.
409CONFLICT_RETRYData yang sama sedang diubah oleh permintaan lain; kirim ulang beberapa saat lagi.
429RATE_LIMIT_EXCEEDEDBatas 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');

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.

Hubungi layanan pelanggan untuk aktivasi