eBay API の使い方

Ashley Innocent

Ashley Innocent

24 3月 2026

eBay API の使い方

Apidog エンタープライズ

オンプレミスデプロイ

SSO & RBAC

SOC 2 準拠

Apidog Enterpriseを見る

TL;DR

eBay APIを使用すると、世界最大のマーケットプレイスで在庫、出品、注文、支払いを管理できます。OAuth 2.0で認証し、api.ebay.com/sellエンドポイントを呼び出し、レート制限に注意深く対処します。テストには、Apidogを使用して出品ペイロードを検証し、注文処理をテストし、統合がAPI制限に適切に対応していることを確認します。

はじめに

eBayは世界中の買い手と売り手をつなぎます。APIを使用すると、出品者は在庫管理を自動化し、商品をまとめて出品し、注文を処理し、配送を扱い、返品を管理できます。小規模な出品者でも企業でも、APIは規模に合わせて利用できます。

主なAPI領域:

💡
eBay統合を構築している場合、Apidogは出品作成のテスト、注文応答の検証、および統合がレート制限とエラーに正しく対処することを確認するのに役立ちます。
button

ApidogでeBay APIをテスト - 無料

このガイドを読み終える頃には、以下のことができるようになります。

OAuth 2.0による認証

eBayはAPI認証にOAuth 2.0を使用します。eBay開発者プログラムでアプリケーションを作成する必要があります。

eBay Developers Program Console showing the Application keys page

アプリケーションの作成

  1. developers.ebay.comにアクセス
  2. 開発者アカウントにサインアップ
  3. 開発者コンソールでアプリケーションを作成
  4. アプリ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()

必要なスコープ

在庫管理

在庫は販売する製品を表します。

在庫ロケーションの作成

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"
    }
  }'

主要なフィールド:

オファーの公開

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"
  }'

配送業者:

返品管理

返品詳細の取得

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呼び出しを制限しています。

ヘッダーを確認:

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は本番環境で非常に重要です。ライブ変更を行う前に徹底的にテストしてください。

Apidog interface with an eBay API test

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アップロードを受け入れ、数千の出品を自動的に作成します。

結論

ここで学んだこと:

次のステップ:

  1. eBay開発者プログラムに申し込む
  2. アプリケーションを作成し、認証情報を取得する
  3. OAuthフローを実装する
  4. 最初の在庫アイテムを作成する
  5. テスト出品を公開する

ApidogでeBay APIをテスト - 無料

button

よくある質問

APIを使用するにはビジネスアカウントが必要ですか?はい。eBay APIは認証済み出品者向けです。出品者アカウントにサインアップし、認証を完了してください。

在庫とオファーの違いは何ですか?在庫は商品情報(タイトル、説明、画像)を保存します。オファーは、価格設定とフルフィルメント情報を含む在庫をマーケットプレイスにリンクします。複数のオファーが同じ在庫を参照できます。

出品はどのくらいの間アクティブなままですか?GTC(キャンセルされるまで有効)の出品は、取り消すか商品が売り切れるまでアクティブなままです。

APIを介して国際的に販売できますか?はい。marketplaceIdを異なる値(EBAY_US、EBAY_UK、EBAY_DEなど)に設定します。各マーケットプレイスの要件に準拠する必要があります。

APIのレート制限は何ですか?制限はエンドポイントとアカウントレベルによって異なります。現在の制限については応答ヘッダーを確認してください。

配送ラベルはどのように入手できますか?eBayはフルフィルメントAPIを通じて割引された配送ラベルを提供しています。あなたが発送を作成すると、eBayがラベルを生成します。

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる