서비스 시장 머천트 API
1단계: 상품 및 입고

머천트 API: SKU, 구매 사전 등록, 선전 창고 재고를 귀사 시스템에 연동

Shopee, Coupang, momo에 입점한 사업자를 위한 API입니다. 상품 등록 시 생성한 상품 바코드를 API로 전송하고, 구매 시 운송장 번호와 내용물을 사전 등록하세요. 물건이 선전 창고에 도착하면 작업 지시서가 자동 발행되어 라벨 부착과 개별 스캔 적치가 진행되며, 재고와 차이가 실시간으로 회신됩니다.

사업자

이용 대상(8자리 대만 사업자등록번호 필요)

200건

SKU 1회 일괄 처리 한도

WO-SK

입고 시 라벨 부착 작업 지시서 자동 발행

60회/분

API 키당 기본 요청 한도

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는 등록된 사업자만 이용할 수 있으며, 각 API 키는 승인된 머천트 계정 하나에 연결됩니다.

이용 신청 절차

  1. 회원 센터에서 “회사” 신고인을 추가하고 8자리 사업자등록번호를 입력합니다.
  2. HowBridge 고객센터에 머천트 API 개통을 신청하세요. 심사가 승인되면 API 키가 발급됩니다.
  3. API 키는 한 번만 표시됩니다. 서버 측 환경 변수에 보관하고, 브라우저나 앱에는 넣지 마세요.
  4. webhook이 필요하면 먼저 회원 센터의 API 페이지에서 URL을 설정하고 검증한 뒤, 머천트 이벤트를 구독하세요.
모든 요청에 Authorization: Bearer <API 키>를 사용합니다. 일반 회원이 앱이나 웹사이트에 로그인해 생성된 토큰으로는 머천트 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는 필드별 상세 내역입니다. 유일한 예외는 API 키가 없거나 유효하지 않은 경우로, HTTP 401과 함께 body는 {"message": "Unauthenticated."}입니다.

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

요청 한도

API 키당 분당 60회, 일일 5,000회입니다(대용량 요금제는 분당 300회, 일일 50,000회). 일괄 엔드포인트는 한 번 호출을 1회로 계산합니다. 실시간 데이터가 필요하면 폴링하지 말고 webhook을 구독하세요.

응답 헤더설명
X-RateLimit-Limit분당 한도
X-RateLimit-Remaining이번 1분 동안 남은 횟수
X-RateLimit-Limit-Day
X-RateLimit-Remaining-Day
일일 한도 및 남은 횟수
Retry-After한도 초과 시 재시도까지 기다려야 하는 초

멱등성(Idempotency-Key)

쓰기 요청에는 Idempotency-Key 헤더를 포함할 수 있습니다(8–128자, 영문·숫자와 _-:.). 네트워크 타임아웃 후 같은 키와 같은 내용으로 다시 보내면 첫 번째 응답이 반환되며 헤더에 Idempotent-Replayed: true가 포함됩니다. 같은 키로 내용을 바꾸면 422가 반환됩니다. 기록은 24시간 보관됩니다.

일괄 응답

일괄 엔드포인트는 건별로 결과를 반환합니다. 모두 성공하면 200, 일부 실패하면 207, 모두 실패하면 422입니다. 각 건에는 index, status(created/updated/failed)와 실패 사유가 포함됩니다.

식별자 허용 문자

seller_sku에는 영문·숫자와 ._-만 사용할 수 있습니다(1–64자). 상품 바코드에는 추가로 /와 +를 사용할 수 있습니다(3–64자). 대소문자는 구분하지 않습니다.

4 상품 SKU

SKU는 귀사의 seller_sku를 고유 키로 사용합니다. 같은 seller_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에서 “국제 바코드 없음” 상품은 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.

요청 예시(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" } ]
    }
  ]
}'

응답 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행.

요청 예시(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로 다시 생성하면 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로 바로 전송되므로 폴링할 필요가 없습니다.

설정 방법

  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회 연속 실패하면 자동으로 비활성화되며, 회원 센터에서 다시 설정해야 합니다.

// 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—API 키가 없거나, 유효하지 않거나, 만료되었습니다(body는 {"message": "Unauthenticated."}).
403MERCHANT_TOKEN_REQUIRED이 토큰에는 머천트 API 권한이 없습니다(예: 일반 회원 로그인으로 생성된 토큰).
403MERCHANT_NOT_APPROVED
MERCHANT_SUSPENDED
계정이 아직 머천트로 승인되지 않았거나, 머천트가 정지되었습니다.
403APP_SUSPENDED
APP_REVOKED
APP_NOT_FOUND
API 키에 연결된 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 코드 예제

아래 예제는 서버 측에서 실행하고, API 키를 프런트엔드 코드에 넣지 마세요.

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.

고객센터에 개통 문의