目次
はじめに
eBay の注文管理は長らく Trading API の GetOrders / CompleteSale で行われてきたが、現在は REST ベースの Order Management API(Fulfillment API)への移行が推奨されている。
旧 Trading API はまだ動作するが、新しい機能は Order Management API にしか追加されない。ここでは新 API を使った受注から出荷完了までの実装を解説する。
API の全体像
eBay の注文関連 API は以下の 2 つが中心。
| API | エンドポイント | 用途 |
|---|---|---|
| Fulfillment API | api.ebay.com/sell/fulfillment/v1 | 注文取得・出荷登録 |
| Post-Order API | api.ebay.com/post-order/v2 | 返品・キャンセル処理 |
認証は OAuth 2.0。https://api.ebay.com/identity/v1/oauth2/token でアクセストークンを取得する。
Step 1: 注文一覧の取得
// 直近 2 時間の注文を取得
async function getRecentOrders(accessToken: string) {
const creationDateFrom = new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString()
const response = await fetch(
`https://api.ebay.com/sell/fulfillment/v1/order?filter=creationdate:[${creationDateFrom}..],orderfulfillmentstatus:{NOT_STARTED|IN_PROGRESS}`,
{
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
}
)
const data = await response.json()
return data.orders ?? []
}orderfulfillmentstatus フィルタで NOT_STARTED(未処理)と IN_PROGRESS(処理中)を取得する。FULFILLED は処理済みなのでスキップ。
Step 2: 注文詳細の確認
注文オブジェクトには lineItems(注文明細)、buyer(購入者情報)、pricingSummary(金額)などが含まれる。
interface EbayOrder {
orderId: string
creationDate: string
orderFulfillmentStatus: "NOT_STARTED" | "IN_PROGRESS" | "FULFILLED"
lineItems: Array<{
lineItemId: string
sku: string
quantity: number
title: string
lineItemFulfillmentStatus: string
}>
buyer: {
username: string
taxIdentifier?: { taxpayerId: string }
}
fulfillmentStartInstructions: Array<{
fulfillmentInstructionsType: string
shipToLocation: {
contactAddress: {
addressLine1: string
city: string
stateOrProvince: string
postalCode: string
countryCode: string
}
contact: {
fullName: string
primaryPhone: { phoneNumber: string }
}
}
maxEstimatedDeliveryDate: string
}>
}Step 3: 出荷情報の登録(Shipping Fulfillment)
WMS から追跡番号を受け取ったら createShippingFulfillment で登録する。
async function registerShipment(
accessToken: string,
orderId: string,
trackingNumber: string,
lineItems: Array<{ lineItemId: string; quantity: number }>
) {
const response = await fetch(
`https://api.ebay.com/sell/fulfillment/v1/order/${orderId}/shipping_fulfillment`,
{
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
lineItems,
shippedDate: new Date().toISOString(),
shippingCarrierCode: "JAPAN_POST",
trackingNumber,
}),
}
)
if (!response.ok) {
const error = await response.json()
throw new Error(`Shipment registration failed: ${JSON.stringify(error.errors)}`)
}
return response.json()
}shippingCarrierCode は eBay の定義する配送業者コードを使う。日本からの国際発送で使うもの:
| コード | 業者 |
|---|---|
JAPAN_POST | 日本郵便(EMS など) |
YAMATO_TRANSPORT | ヤマト運輸 |
SAGAWA_EXPRESS | 佐川急便 |
DHL | DHL |
FEDEX | FedEx |
Step 4: 全フローを繋げる
async function processEbayOrders() {
const token = await getAccessToken()
const orders = await getRecentOrders(token)
for (const order of orders) {
// WMS への連携(詳細は省略)
const wmsResult = await sendOrderToWms(order)
if (wmsResult.status !== "queued") continue
console.log(`Order ${order.orderId} queued in WMS`)
}
}
// WMS から tracking 番号が確定したら呼ばれる
async function handleWmsShipmentComplete(
orderId: string,
trackingNumber: string,
lineItems: Array<{ lineItemId: string; quantity: number }>
) {
const token = await getAccessToken()
await registerShipment(token, orderId, trackingNumber, lineItems)
console.log(`Order ${orderId} marked as shipped: ${trackingNumber}`)
}エラーと retry 設計
eBay API は 429 Too Many Requests の他に 503 Service Unavailable も返す。指数バックオフでリトライしつつ、最終的に失敗したらアラートを上げる設計にしておく。
async function fetchWithRetry(url: string, options: RequestInit, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options)
if (response.status === 429 || response.status === 503) {
const retryAfter = response.headers.get("Retry-After") ?? "5"
await new Promise((r) => setTimeout(r, parseInt(retryAfter) * 1000))
continue
}
return response
}
throw new Error(`Max retries exceeded for ${url}`)
}まとめ
eBay Order Management API(Fulfillment API)は REST + OAuth 2.0 で、Trading API より扱いやすい設計になっている。出荷登録は createShippingFulfillment にトラッキング番号を POST するだけで、eBay が自動的に購入者に通知する。




