TL;DR
eBay APIを使用すると、世界最大のマーケットプレイスで在庫、出品、注文、支払いを管理できます。OAuth 2.0で認証し、api.ebay.com/sellエンドポイントを呼び出し、レート制限に注意深く対処します。テストには、Apidogを使用して出品ペイロードを検証し、注文処理をテストし、統合がAPI制限に適切に対応していることを確認します。
はじめに
eBayは世界中の買い手と売り手をつなぎます。APIを使用すると、出品者は在庫管理を自動化し、商品をまとめて出品し、注文を処理し、配送を扱い、返品を管理できます。小規模な出品者でも企業でも、APIは規模に合わせて利用できます。
主なAPI領域:
- 在庫API - 商品在庫の管理
- 出品API - 商品出品の作成と管理
- 注文API - 注文と発送の処理
- フルフィルメントAPI - 配送と追跡の処理
- 分析API - 販売レポートの取得
ApidogでeBay APIをテスト - 無料
このガイドを読み終える頃には、以下のことができるようになります。
- eBay OAuth 2.0で認証する
- 在庫を作成および管理する
- 出品を公開する
- 注文と発送を処理する
- 返品と返金を処理する
- Apidogでテストする
OAuth 2.0による認証
eBayはAPI認証にOAuth 2.0を使用します。eBay開発者プログラムでアプリケーションを作成する必要があります。

アプリケーションの作成
- developers.ebay.comにアクセス
- 開発者アカウントにサインアップ
- 開発者コンソールでアプリケーションを作成
- アプリID(クライアントID)と証明書ID(クライアントシークレット)を取得
OAuthフロー
ステップ1:ユーザー認証
https://auth.ebay.com/oauth2/authorize?
client_id=YOUR_APP_ID&
response_type=code&
redirect_uri=YOUR_SIGNIN_REDIRECT_URI&
scope=https://api.ebay.com/oauth/api_scope/sell.inventory
ステップ2:認証コードの取得
ユーザーが承認すると、リダイレクトURIでコードが取得されます。
ステップ3:トークンと交換
const response = await fetch('https://api.ebay.com/identity/v1/oauth2/token', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic ' + Buffer.from(APP_ID + ':' + CERT_ID).toString('base64')
},
body: new URLSearchParams({
grant_type: 'authorization_code',
code: AUTHORIZATION_CODE,
redirect_uri: 'YOUR_SIGNIN_REDIRECT_URI'
})
})
const { access_token, refresh_token, expires_in } = await response.json()
必要なスコープ
https://api.ebay.com/oauth/api_scope/sell.inventory- 在庫管理https://api.ebay.com/oauth/api_scope/sell.listings- 出品https://api.ebay.com/oauth/api_scope/sell.orders- 注文https://api.ebay.com/oauth/api_scope/sell.fulfillment- フルフィルメントhttps://api.ebay.com/oauth/api_scope/sell.account- アカウント管理
在庫管理
在庫は販売する製品を表します。
在庫ロケーションの作成
curl -X POST "https://api.ebay.com/sell/inventory/v1/location_inventory_location" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"locationId": "WAREHOUSE_1",
"name": "Main Warehouse",
"address": {
"addressLine1": "123 Main St",
"city": "San Jose",
"stateOrProvince": "CA",
"postalCode": "95101",
"countryCode": "US"
}
}'
在庫アイテムの作成
curl -X POST "https://api.ebay.com/sell/inventory/v1/inventory_item" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"product": {
"title": "Vintage Leather Messenger Bag",
"description": "Genuine leather messenger bag, perfect for work or school.",
"aspects": {
"Brand": ["Vintage"],
"Material": ["Leather"],
"Color": ["Brown"]
},
"imageUrls": [
"https://example.com/images/bag1.jpg",
"https://example.com/images/bag2.jpg"
]
},
"condition": "USED_GOOD",
"conditionNotes": "Minor wear on corners",
"availability": {
"shipToLocationAvailability": {
"quantity": 25
}
}
}'
在庫の更新
curl -X PUT "https://api.ebay.com/sell/inventory/v1/inventory_item/SKU123" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"availability": {
"shipToLocationAvailability": {
"quantity": 30
}
}
}'
在庫アイテムの取得
curl -X GET "https://api.ebay.com/sell/inventory/v1/inventory_item/SKU123" \
-H "Authorization: Bearer ACCESS_TOKEN"
商品の出品
オファーの作成
curl -X POST "https://api.ebay.com/sell/inventory/v1/offer" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sku": "SKU123",
"marketplaceId": "EBAY_US",
"format": "FIXED_PRICE",
"product": {
"title": "Vintage Leather Messenger Bag"
},
"pricingSummary": {
"price": {
"currency": "USD",
"value": "89.99"
}
},
"listing": {
"listingDuration": "GTC",
"listingType": "CLASSIC"
},
" fulfillment": {
"shippingProfileId": "SHIPPING_PROFILE_ID",
" fulfillmentPolicyId": "FULFILLMENT_POLICY_ID",
"paymentPolicyId": "PAYMENT_POLICY_ID"
}
}'
主要なフィールド:
sku- あなたの在庫SKUmarketplaceId- EBAY_US、EBAY_UK、EBAY_DEなどformat- FIXED_PRICEまたはAUCTIONlistingDuration- 期間(GTC = キャンセルされるまで有効)price- 希望価格
オファーの公開
curl -X POST "https://api.ebay.com/sell/inventory/v1/offer/OFFER_ID/publish" \
-H "Authorization: Bearer ACCESS_TOKEN"
出品の取り下げ
curl -X POST "https://api.ebay.com/sell/inventory/v1/offer/OFFER_ID/withdraw" \
-H "Authorization: Bearer ACCESS_TOKEN"
注文管理
注文の取得
curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order?orderIds=ORDER_ID_1,ORDER_ID_2" \
-H "Authorization: Bearer ACCESS_TOKEN"
日付でフィルタリング:
curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order?filter=creation_date_range:from:2026-01-01T00:00:00Z,to:2026-03-24T00:00:00Z" \
-H "Authorization: Bearer ACCESS_TOKEN"
注文詳細の取得
curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order/ORDER_ID" \
-H "Authorization: Bearer ACCESS_TOKEN"
注文応答:
{
"orderId": "12-34567-89012",
"orderPaymentStatus": "PAID",
"pricingSummary": {
"total": {
"currency": "USD",
"value": "94.99"
}
},
"fulfillmentStartInstructions": [
{
"shippingStep": {
"shipTo": {
"fullName": "John Doe",
"contactAddress": {
"addressLine1": "123 Main St",
"city": "Anytown",
"stateOrProvince": "CA",
"postalCode": "12345",
"countryCode": "US"
}
}
}
}
],
"lineItems": [
{
"lineItemId": "LINE_ITEM_ID",
"sku": "SKU123",
"quantity": 1,
"title": "Vintage Leather Messenger Bag",
"lineItemCost": {
"currency": "USD",
"value": "89.99"
}
}
]
}
配送とフルフィルメント
配送ラベルの作成
curl -X POST "https://api.ebay.com/sell/fulfillment/v1/order/ORDER_ID/shipping_fulfillment" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"lineItems": [
{
"lineItemId": "LINE_ITEM_ID",
"quantity": 1
}
],
"shippingStep": {
"shipFrom": {
"fullName": "Your Name",
"companyName": "Your Company",
"contactAddress": {
"addressLine1": "456 Warehouse Rd",
"city": "San Jose",
"stateOrProvince": "CA",
"postalCode": "95101",
"countryCode": "US"
}
}
},
"shippingCarrierCode": "USPS",
"shippingMethodCode": "PRIORITY_MAIL",
"trackingNumber": "9400111899223056789012"
}'
配送業者:
- USPS
- UPS
- FedEx
- DHL
返品管理
返品詳細の取得
curl -X GET "https://api.ebay.com/sell/fulfillment/v1/return/RETURN_ID" \
-H "Authorization: Bearer ACCESS_TOKEN"
返品の処理
curl -X POST "https://api.ebay.com/sell/fulfillment/v1/return/RETURN_ID/decide" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"decision": "ACCEPT",
"shipment": {
"carrierId": "CARRIER_ID",
"trackingNumber": "TRACKING_NUMBER"
}
}'
レート制限と処理
eBayは乱用を防ぐためにAPI呼び出しを制限しています。
ヘッダーを確認:
X-RateLimit-Limit- 許可されるリクエストの最大数X-RateLimit-Remaining- ウィンドウ内に残っているリクエスト数X-RateLimit-Reset- 制限がリセットされるUnixタイムスタンプ
async function makeEbayRequest(url, options, retries = 3) {
for (let i = 0; i < retries; i++) {
const response = await fetch(url, options)
const remaining = response.headers.get('X-RateLimit-Remaining')
if (remaining && parseInt(remaining) < 10) {
console.warn('Rate limit low:', remaining)
}
if (response.status === 429) {
const resetTime = response.headers.get('X-RateLimit-Reset')
const waitTime = (parseInt(resetTime) - Date.now() / 1000) * 1000
await sleep(waitTime)
continue
}
return response
}
throw new Error('Rate limited')
}
Apidogでのテスト
eBay APIは本番環境で非常に重要です。ライブ変更を行う前に徹底的にテストしてください。

1. 環境設定
EBAY_APP_ID: your_app_id
EBAY_CERT_ID: your_cert_id
EBAY_ACCESS_TOKEN: stored_token
EBAY_REFRESH_TOKEN: stored_refresh
EBAY_MARKETPLACE_ID: EBAY_US
BASE_URL: https://api.ebay.com
2. 出品ペイロードの検証
pm.test('Listing has required fields', () => {
const requestBody = JSON.parse(pm.request.body.raw)
pm.expect(requestBody).to.have.property('sku')
pm.expect(requestBody).to.have.property('marketplaceId')
pm.expect(requestBody.pricingSummary).to.have.property('price')
})
pm.test('Price is valid', () => {
const requestBody = JSON.parse(pm.request.body.raw)
const price = parseFloat(requestBody.pricingSummary.price.value)
pm.expect(price).to.be.above(0)
})
3. 注文処理のテスト
pm.test('Order response is valid', () => {
const response = pm.response.json()
pm.expect(response).to.have.property('orderId')
pm.expect(response.orderPaymentStatus).to.eql('PAID')
pm.expect(response.lineItems).to.be.an('array')
})
ApidogでeBay APIをテスト - 無料
よくあるエラーと修正
401 不正な認証
原因: トークンの期限切れまたは無効。
修正: リフレッシュトークンを使用して新しいアクセストークンを取得します。
const response = await fetch('https://api.ebay.com/identity/v1/oauth2/token', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic ' + Buffer.from(APP_ID + ':' + CERT_ID).toString('base64')
},
body: new URLSearchParams({
grant_type: 'refresh_token',
refresh_token: storedRefreshToken
})
})
10002: APIエラー - 無効なアクセストークン
原因: アクセストークンの期限切れ。
修正: トークンをすぐにリフレッシュします。
21916684: アイテムが存在しません
原因: 作成されていないSKUを更新しようとしている。
修正: まず在庫アイテムを作成し、次にオファーを作成します。
10003: 無効なSKU
原因: SKUの形式が無効。
修正: SKUは在庫内で一意であり、英数字、ハイフン、アンダースコアのみを含めることができます。
レート制限 (429)
原因: リクエストが多すぎる。
修正: バックオフを実装します。eBayの制限はAPIとエンドポイントによって異なります。
代替サービスと比較
| 機能 | eBay | Amazon SP-API | Etsy |
|---|---|---|---|
| 在庫API | ✓ | ✓ | 制限あり |
| 出品API | ✓ | ✓ | ✓ |
| 注文API | ✓ | ✓ | ✓ |
| フルフィルメントAPI | ✓ | ✓ | 制限あり |
| 無料枠 | 開発者プログラム | 制限あり | 制限あり |
| APIの複雑さ | 中 | 高 | 低 |
eBayのAPIはAmazonのものより扱いやすいですが、機能は劣ります。Etsyは最もシンプルですが、大規模な出品者には制限があります。
実際の使用例
マルチチャネル販売。出品者がeBay、Amazon、および自身のサイトで出品します。在庫はプラットフォーム間で同期されます。あるチャネルで販売されると、すべての場所で数量が減少します。
自動価格設定。出品者が競合を監視し、APIを介して価格を調整します。競合が価格を下げると、出品者の価格は競争力を維持するために自動的に調整されます。
一括出品。10,000点のアイテムを持つ出品者が商品を一括で出品します。APIはCSVアップロードを受け入れ、数千の出品を自動的に作成します。
結論
ここで学んだこと:
- アプリケーションの認証情報を使用してOAuth 2.0で認証する
- SKUで在庫を管理する
- 出品を作成および公開する
- 注文と発送を処理する
- 返品を処理する
- ライブ公開前にApidogでテストする
次のステップ:
- eBay開発者プログラムに申し込む
- アプリケーションを作成し、認証情報を取得する
- OAuthフローを実装する
- 最初の在庫アイテムを作成する
- テスト出品を公開する
ApidogでeBay APIをテスト - 無料
よくある質問
APIを使用するにはビジネスアカウントが必要ですか?はい。eBay APIは認証済み出品者向けです。出品者アカウントにサインアップし、認証を完了してください。
在庫とオファーの違いは何ですか?在庫は商品情報(タイトル、説明、画像)を保存します。オファーは、価格設定とフルフィルメント情報を含む在庫をマーケットプレイスにリンクします。複数のオファーが同じ在庫を参照できます。
出品はどのくらいの間アクティブなままですか?GTC(キャンセルされるまで有効)の出品は、取り消すか商品が売り切れるまでアクティブなままです。
APIを介して国際的に販売できますか?はい。marketplaceIdを異なる値(EBAY_US、EBAY_UK、EBAY_DEなど)に設定します。各マーケットプレイスの要件に準拠する必要があります。
APIのレート制限は何ですか?制限はエンドポイントとアカウントレベルによって異なります。現在の制限については応答ヘッダーを確認してください。
配送ラベルはどのように入手できますか?eBayはフルフィルメントAPIを通じて割引された配送ラベルを提供しています。あなたが発送を作成すると、eBayがラベルを生成します。
