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.
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.
Anwendung anlegen
- Besuchen Sie developers.ebay.com
- Registrieren Sie ein Entwicklerkonto
- Erstellen Sie eine Anwendung in der Developer Console
- 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
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()
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"
}
}'
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
}
}
}'
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
}
}
}'
Inventargegenstand abrufen
curl -X GET "https://api.ebay.com/sell/inventory/v1/inventory_item/SKU123" \
-H "Authorization: Bearer ACCESS_TOKEN"
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"
}
}'
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"
Angebot zurückziehen
curl -X POST "https://api.ebay.com/sell/inventory/v1/offer/OFFER_ID/withdraw" \
-H "Authorization: Bearer ACCESS_TOKEN"
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"
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"
Bestelldetails abrufen
curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order/ORDER_ID" \
-H "Authorization: Bearer ACCESS_TOKEN"
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"
}
}
]
}
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"
}'
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"
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"
}
}'
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')
}
Testen mit Apidog
eBay APIs sind produktionskritisch – testen Sie alle Integrationen vor dem Go-Live.
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
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)
})
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')
})
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
})
})
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:
- Melden Sie sich beim eBay Developers Program an
- Erstellen Sie eine App und speichern Sie die Zugangsdaten
- Implementieren Sie den OAuth-Fluss
- Legen Sie Ihr erstes Inventar an
- 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)