DEV Community

Cover image for eBay API Nutzung: Eine Anleitung
Emre Demir
Emre Demir

Posted on • Originally published at apidog.com

eBay API Nutzung: Eine Anleitung

TL;DR

Mit eBay APIs verwalten Sie Inventar, Angebote, Bestellungen und Zahlungen direkt auf dem Marktplatz. Authentifizieren Sie sich via OAuth 2.0, nutzen Sie die Endpunkte unter api.ebay.com/sell, und beachten Sie Ratenbegrenzungen. Mit Apidog testen Sie Angebots-Payloads, simulieren die Auftragsabwicklung und prüfen, ob Ihre Integration API-Limits robust behandelt.

Teste Apidog noch heute

Einleitung

eBay vernetzt Käufer und Verkäufer weltweit. Die API ermöglicht automatisierte Bestandsverwaltung, Massenangebote, Bestellbearbeitung, Versandabwicklung und Retourenmanagement – skalierbar für Einzelverkäufer und Unternehmen.

Die wichtigsten API-Bereiche:

  • Inventory API – Produktbestand verwalten
  • Listing API – Artikelangebote erstellen und pflegen
  • Order API – Bestellungen und Lieferungen bearbeiten
  • Fulfillment API – Versand und Tracking abwickeln
  • Analytics API – Verkaufsberichte abrufen

💡 Apidog unterstützt Sie beim Testen von Angebotsdaten, Validieren von Auftragsantworten und beim sicheren Umgang mit Ratenbegrenzungen und Fehlern.

Testen Sie eBay APIs mit Apidog – kostenlos.

Am Ende dieses Leitfadens können Sie:

  • per OAuth 2.0 authentifizieren
  • Inventar anlegen und pflegen
  • Angebote erstellen und veröffentlichen
  • Bestellungen und Versand abwickeln
  • Retouren managen
  • mit Apidog testen

Authentifizierung mit OAuth 2.0

eBay nutzt OAuth 2.0 für API-Zugriff. Legen Sie zuerst eine Anwendung im eBay Developers Program an.

eBay Entwicklerkonsole

Anwendung anlegen

  1. Besuchen Sie developers.ebay.com
  2. Registrieren Sie ein Entwicklerkonto
  3. Erstellen Sie eine Anwendung in der Developer Console
  4. Notieren Sie App ID (Client ID) und Cert ID (Client Secret)

OAuth-Fluss

Schritt 1: Benutzer authentifizieren

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
Enter fullscreen mode Exit fullscreen mode

Schritt 2: Autorisierungscode erhalten

Nach Autorisierung erhalten Sie einen code an Ihrer Redirect-URI.

Schritt 3: Token anfordern

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()
Enter fullscreen mode Exit fullscreen mode

Wichtige Scopes

  • https://api.ebay.com/oauth/api_scope/sell.inventory – Inventar
  • https://api.ebay.com/oauth/api_scope/sell.listings – Angebote
  • https://api.ebay.com/oauth/api_scope/sell.orders – Bestellungen
  • https://api.ebay.com/oauth/api_scope/sell.fulfillment – Abwicklung
  • https://api.ebay.com/oauth/api_scope/sell.account – Kontoverwaltung

Bestandsverwaltung

Lagerort anlegen

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"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

Inventargegenstand erstellen

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
      }
    }
  }'
Enter fullscreen mode Exit fullscreen mode

Bestand aktualisieren

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
      }
    }
  }'
Enter fullscreen mode Exit fullscreen mode

Inventargegenstand abrufen

curl -X GET "https://api.ebay.com/sell/inventory/v1/inventory_item/SKU123" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Artikel einstellen

Angebot erstellen

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"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

Wichtige Felder:

  • sku – Ihre Inventar-SKU
  • marketplaceId – z.B. EBAY_US, EBAY_UK, EBAY_DE
  • format – FIXED_PRICE oder AUCTION
  • listingDuration – GTC ("gültig bis auf Widerruf") empfohlen
  • price – Angebotspreis

Angebot veröffentlichen

curl -X POST "https://api.ebay.com/sell/inventory/v1/offer/OFFER_ID/publish" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Angebot zurückziehen

curl -X POST "https://api.ebay.com/sell/inventory/v1/offer/OFFER_ID/withdraw" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Bestellverwaltung

Bestellungen abrufen

curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order?orderIds=ORDER_ID_1,ORDER_ID_2" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Nach Datum filtern:

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"
Enter fullscreen mode Exit fullscreen mode

Bestelldetails abrufen

curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order/ORDER_ID" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Bestellantwort (Beispiel):

{
  "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"
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Versand und Abwicklung

Versandetikett erstellen

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"
  }'
Enter fullscreen mode Exit fullscreen mode

Zulässige Carrier:

  • USPS
  • UPS
  • FedEx
  • DHL

Rücksendeverwaltung

Rücksendungsdetails abrufen

curl -X GET "https://api.ebay.com/sell/fulfillment/v1/return/RETURN_ID" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

Rücksendung bearbeiten

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"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

Ratenbegrenzungen und deren Handhabung

eBay limitiert API-Aufrufe. Prüfen Sie diese Header:

  • X-RateLimit-Limit – Maximale Aufrufe pro Fenster
  • X-RateLimit-Remaining – Verbleibende Aufrufe
  • X-RateLimit-Reset – Unix-Timestamp für das nächste Reset

Beispiel für Backoff-Logik:

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('Ratenbegrenzung niedrig:', 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('Ratenbegrenzung erreicht')
}
Enter fullscreen mode Exit fullscreen mode

Testen mit Apidog

eBay APIs sind produktionskritisch – testen Sie alle Integrationen vor dem Go-Live.

Apidog Test-Umgebung

1. Umgebung einrichten

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
Enter fullscreen mode Exit fullscreen mode

2. Angebots-Payloads validieren

pm.test('Angebot hat erforderliche Felder', () => {
  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('Preis ist gültig', () => {
  const requestBody = JSON.parse(pm.request.body.raw)
  const price = parseFloat(requestBody.pricingSummary.price.value)
  pm.expect(price).to.be.above(0)
})
Enter fullscreen mode Exit fullscreen mode

3. Auftragsabwicklung testen

pm.test('Auftragsantwort ist gültig', () => {
  const response = pm.response.json()
  pm.expect(response).to.have.property('orderId')
  pm.expect(response.orderPaymentStatus).to.eql('BEZAHLT')
  pm.expect(response.lineItems).to.be.an('array')
})
Enter fullscreen mode Exit fullscreen mode

Testen Sie eBay APIs mit Apidog – kostenlos.


Häufige Fehler und Behebungen

401 Nicht autorisiert

Ursache: Token abgelaufen oder ungültig.

Behebung: Verwenden Sie den Refresh-Token, um einen neuen Access-Token zu erhalten:

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
  })
})
Enter fullscreen mode Exit fullscreen mode

10002: API-Fehler – Ungültiger Access Token

Ursache: Access Token abgelaufen.

Behebung: Token sofort erneuern.

21916684: Artikel existiert nicht

Ursache: SKU existiert nicht.

Behebung: Erst Inventargegenstand anlegen, dann Angebot erstellen.

10003: Ungültige SKU

Ursache: SKU-Format ungültig.

Behebung: SKUs müssen eindeutig und alphanumerisch sein (Bindestrich/Unterstrich erlaubt).

Ratenbegrenzung (429)

Ursache: Zu viele Anfragen.

Behebung: Backoff implementieren. Limits variieren je nach Endpunkt.


Alternativen und Vergleiche

Funktion eBay Amazon SP-API Etsy
Inventory API Begrenzt
Listing API
Order API
Fulfillment API Begrenzt
Kostenlose Stufe Entwicklerprogramm Begrenzt Begrenzt
API-Komplexität Mittel Hoch Niedrig

Die eBay-API ist zugänglicher als Amazons SP-API, aber weniger funktionsreich. Etsy ist am einfachsten, aber für große Händler begrenzt.


Anwendungsfälle aus der Praxis

Multichannel-Verkauf:

Inventar wird kanalübergreifend (z.B. eBay, Amazon, eigene Website) synchronisiert. Bei Verkauf auf einem Kanal wird die Menge überall angepasst.

Automatisierte Preisgestaltung:

Preise werden per API angepasst, sobald Wettbewerber ihre Preise ändern.

Massenangebotserstellung:

Mit tausenden Produkten können Sie Angebote automatisiert (z.B. via CSV-Batch) einstellen.


Fazit

Sie haben gelernt, wie Sie:

  • OAuth 2.0-Authentifizierung mit App-Zugangsdaten umsetzen
  • Inventar (SKUs) verwalten
  • Angebote erstellen und veröffentlichen
  • Bestellungen und Lieferungen bearbeiten
  • Rücksendungen abwickeln
  • Ihre Integration mit Apidog testen

Nächste Schritte:

  1. Melden Sie sich beim eBay Developers Program an
  2. Erstellen Sie eine App und speichern Sie die Zugangsdaten
  3. Implementieren Sie den OAuth-Fluss
  4. Legen Sie Ihr erstes Inventar an
  5. Stellen Sie ein Testangebot live

Testen Sie eBay APIs mit Apidog – kostenlos.


FAQ

Benötige ich ein Geschäftskonto, um APIs zu nutzen?

Ja. eBay APIs sind für verifizierte Verkäufer. Registrieren und verifizieren Sie Ihr Verkäuferkonto.

Was ist der Unterschied zwischen Inventar und Angeboten?

Inventar speichert Produktdetails (Titel, Beschreibung, Bilder). Angebote verknüpfen Inventar mit einem Marktplatz und enthalten Preis- und Abwicklungsinfos. Mehrere Angebote können dasselbe Inventar referenzieren.

Wie lange bleiben Angebote aktiv?

Angebote mit GTC (gültig bis auf Widerruf) bleiben aktiv, bis Sie sie zurückziehen oder der Artikel ausverkauft ist.

Kann ich international über die API verkaufen?

Ja. Setzen Sie marketplaceId entsprechend (EBAY_US, EBAY_UK, EBAY_DE etc.). Beachten Sie die Anforderungen des jeweiligen Marktplatzes.

Was ist die API-Ratenbegrenzung?

Limits variieren je nach Endpunkt und Kontostatus. Prüfen Sie die Response-Header für Ihre aktuellen Limits.

Wie erhalte ich Versandetiketten?

Die Fulfillment API bietet vergünstigte Versandetiketten. Erstellen Sie die Sendung – eBay generiert ein Etikett.

Top comments (0)