En bref
Les API eBay permettent une gestion automatisée de l'inventaire, des annonces, des commandes et des paiements sur la marketplace mondiale. Authentifiez-vous via OAuth 2.0, interagissez avec les endpoints api.ebay.com/sell et surveillez les limites de débit. Pour des tests rapides, utilisez Apidog pour valider les payloads d’annonces, tester le traitement des commandes et vérifier la gestion des limites d’API.
Essayez Apidog dès aujourd'hui
Introduction
eBay connecte acheteurs et vendeurs dans le monde entier. L’API offre tout ce qu’il faut pour automatiser la gestion des stocks, créer massivement des annonces, traiter les commandes, gérer expéditions et retours. L’API est scalable pour tous les vendeurs.
Principaux domaines de l’API :
- API d'inventaire : gestion des produits
- API d'annonces : création/gestion d’annonces
- API de commande : traitement commandes/expéditions
- API d'exécution (Fulfillment) : expédition et suivi
- API d’analyse : extraction de rapports
💡 Si vous développez des intégrations eBay, Apidog facilite le test des annonces, la validation des réponses de commandes et la gestion des quotas ou erreurs API.
Testez les API eBay avec Apidog — gratuit.
À la fin de ce guide, vous saurez :
- Authentifier via OAuth 2.0
- Créer/gérer l’inventaire
- Publier des annonces
- Traiter commandes et expéditions
- Gérer retours/remboursements
- Tester votre intégration avec Apidog
Authentification avec OAuth 2.0
eBay utilise OAuth 2.0 pour sécuriser ses API. Commencez par créer une application via le programme eBay Developers.
Créer une application
- Rendez-vous sur developers.ebay.com
- Inscrivez-vous comme développeur
- Créez une application dans la console
- Récupérez
client IDetclient secret
Flux OAuth
Étape 1 : Autorisation utilisateur
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
Étape 2 : Obtenir le code d’autorisation
L’utilisateur autorise et vous recevez un code dans votre URI de redirection.
Étape 3 : Échanger le code contre un access_token
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()
Portées requises
-
https://api.ebay.com/oauth/api_scope/sell.inventory— Gestion des stocks -
https://api.ebay.com/oauth/api_scope/sell.listings— Annonces -
https://api.ebay.com/oauth/api_scope/sell.orders— Commandes -
https://api.ebay.com/oauth/api_scope/sell.fulfillment— Fulfillment -
https://api.ebay.com/oauth/api_scope/sell.account— Compte
Gestion des stocks
L’inventaire correspond à vos produits en vente.
Créer un lieu d’inventaire
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"
}
}'
Créer un article d’inventaire
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
}
}
}'
Mettre à jour l’inventaire
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
}
}
}'
Obtenir un article d’inventaire
curl -X GET "https://api.ebay.com/sell/inventory/v1/inventory_item/SKU123" \
-H "Authorization: Bearer ACCESS_TOKEN"
Mettre des articles en vente
Créer une offre
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"
}
}'
Champs clés :
-
sku: UGS d’inventaire -
marketplaceId: ex. EBAY_US, EBAY_UK, EBAY_DE -
format: FIXED_PRICE ou AUCTION -
listingDuration: GTC (Good ‘Til Cancelled), etc. -
price: prix demandé
Publier l’offre
curl -X POST "https://api.ebay.com/sell/inventory/v1/offer/OFFER_ID/publish" \
-H "Authorization: Bearer ACCESS_TOKEN"
Retirer une annonce
curl -X POST "https://api.ebay.com/sell/inventory/v1/offer/OFFER_ID/withdraw" \
-H "Authorization: Bearer ACCESS_TOKEN"
Gestion des commandes
Obtenir les commandes
curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order?orderIds=ORDER_ID_1,ORDER_ID_2" \
-H "Authorization: Bearer ACCESS_TOKEN"
Filtrer par date :
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"
Obtenir les détails de la commande
curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order/ORDER_ID" \
-H "Authorization: Bearer ACCESS_TOKEN"
Exemple de réponse :
{
"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"
}
}
]
}
Expédition et exécution (Fulfillment)
Créer une étiquette d'expédition
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"
}'
Transporteurs supportés :
- USPS
- UPS
- FedEx
- DHL
Gestion des retours
Obtenir les détails du retour
curl -X GET "https://api.ebay.com/sell/fulfillment/v1/return/RETURN_ID" \
-H "Authorization: Bearer ACCESS_TOKEN"
Traiter un retour
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"
}
}'
Limites de débit et gestion
eBay impose des limites d’appels API. Vérifiez toujours les en-têtes suivants :
-
X-RateLimit-Limit: nombre maximal de requêtes autorisées -
X-RateLimit-Remaining: nombre de requêtes restantes -
X-RateLimit-Reset: timestamp Unix pour la réinitialisation
Implémentez un backoff automatique :
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')
}
Tester avec Apidog
Les API eBay sont critiques en production. Testez systématiquement avant chaque mise en production.
1. Configuration de l’environnement
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. Valider les payloads d’annonces
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. Tester le traitement des commandes
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')
})
Testez les API eBay avec Apidog — gratuit.
Erreurs courantes et correctifs
401 Non autorisé
Cause : Jeton expiré ou invalide.
Correction : Rafraîchissez le jeton via le refresh_token :
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 : Jeton d'accès invalide
Cause : Jeton expiré.
Correction : Rafraîchissez immédiatement le token.
21916684 : L’article n’existe pas
Cause : UGS non présente dans l’inventaire.
Correction : Créez l’article avant de créer l’offre.
10003 : UGS invalide
Cause : Format incorrect.
Correction : UGS unique, caractères alphanumériques, tirets, underscores uniquement.
Limite de débit (429)
Cause : Trop de requêtes.
Correction : Implémentez un backoff exponentiel.
Alternatives et comparaisons
| Fonctionnalité | eBay | Amazon SP-API | Etsy |
|---|---|---|---|
| API d'inventaire | ✓ | ✓ | Limité |
| API d'annonces | ✓ | ✓ | ✓ |
| API de commande | ✓ | ✓ | ✓ |
| API d'exécution (Fulfillment) | ✓ | ✓ | Limité |
| Niveau gratuit | Programme développeur | Limité | Limité |
| Complexité API | Moyenne | Élevée | Faible |
L’API eBay est plus accessible que celle d’Amazon mais reste moins complète. Etsy est la plus simple, mais limitée pour les gros vendeurs.
Cas d’utilisation réels
Vente multicanal : Synchronisez automatiquement l’inventaire sur eBay, Amazon et votre site. Toute vente sur un canal décrémente la quantité partout.
Repricing automatisé : Surveillez les prix concurrents, ajustez vos prix via l’API pour rester compétitif.
Annonces en masse : Automatisez la publication de milliers d’annonces via CSV et l’API.
Conclusion
Ce que vous savez faire maintenant :
- Authentification OAuth 2.0 avec vos identifiants
- Gestion d’inventaire avec UGS
- Création/publication d’annonces
- Traitement commandes/expéditions
- Gestion des retours
- Tests robustes avec Apidog avant production
Prochaines étapes :
- Inscrivez-vous au programme eBay Developers
- Créez une application et récupérez vos identifiants
- Implémentez OAuth
- Créez votre premier article d’inventaire
- Publiez une annonce de test
Testez les API eBay avec Apidog — gratuit.
FAQ
Ai-je besoin d’un compte professionnel pour utiliser les API ?
Oui. Les API eBay nécessitent un compte vendeur vérifié.
Quelle est la différence entre inventaire et offres ?
L’inventaire stocke les infos produit (titre, description, images). Les offres relient l’inventaire à la marketplace, avec prix et exécution. Plusieurs offres peuvent référencer le même inventaire.
Combien de temps les annonces restent-elles actives ?
Les annonces GTC (“Good ‘Til Cancelled”) restent jusqu’à retrait manuel ou rupture de stock.
Puis-je vendre à l’international via l’API ?
Oui. Utilisez différents marketplaceId (EBAY_US, EBAY_UK…) et respectez les règles de chaque pays.
Quelle est la limite de débit de l’API ?
Variable selon endpoint et niveau de compte. Vérifiez les headers de réponse pour vos limites.
Comment obtenir des étiquettes d’expédition ?
eBay génère des étiquettes à prix réduit via l’API Fulfillment après création de l’expédition.


Top comments (0)