Documentation

eBay

Item conditions, listing duration, eBay Stores, and category-specific fields.

eBay's API is friendlier than Amazon's but the listing model has its own model — items live in fixed-price or auction listings, conditions matter, and category-specific required fields (item specifics) vary by what you sell.

OAuth and environments

eBay has two environments: Production and Sandbox. The connect flow defaults to Production; pass environment: "sandbox" in the enable config to point at the sandbox API.

{
  "environment": "production",
  "marketplaceId": "EBAY_US",
  "fulfillmentPolicyId": "...",
  "paymentPolicyId": "...",
  "returnPolicyId": "..."
}

marketplaceId selects the eBay site (EBAY_US, EBAY_GB, EBAY_DE, etc.). The three policy IDs come from the seller's eBay account — eBay requires a fulfillment policy, payment policy, and return policy attached to every listing.

Item conditions

Every listing requires a condition. eBay's condition IDs are integers — the channel mapping translates your internal condition strings to eBay IDs:

eBay IDDescription
1000New
1500New other (open box)
2000Manufacturer refurbished
2500Seller refurbished
3000Used
4000Very Good
5000Good
6000Acceptable
7000For parts or not working

Some categories restrict allowed conditions (e.g. categories under Books only allow 1000, 2750, 3000, 4000, 5000, 6000). Pushing an unsupported condition returns 1083: Item condition is invalid.

Listing duration

Fixed-price listings on eBay have a duration: 1, 3, 5, 7, 10, 30 days, or GTC (Good 'Til Cancelled). The provider defaults new listings to GTC, which auto-renews monthly. Auction listings (rare on eBay these days) cap at 10 days.

{
  "format": "FixedPriceItem",
  "duration": "GTC"
}

Item specifics

Each eBay category has required and recommended item specifics — structured attributes like Brand, Model, Color, Size. The API enforces required ones; missing them returns 21916233: Required item specifics are missing.

Discover required specifics per category:

curl -X POST https://appengine.appmint.io/sales-channel/channels/ebay/execute \
  -H "Authorization: Bearer $JWT" -H "orgid: $ORG" \
  -d '{"operation": "get_required_aspects", "data": {"categoryId": "11450"}}'

Map your internal attributes to eBay specifics via POST /sales-channel/mappings/attributes.

eBay Stores

Sellers with an eBay Store subscription get extra capabilities — store categories, custom URL, lower per-listing fees. The channel surfaces the store's custom categories as a separate taxonomy. Map your category tree to store categories via POST /sales-channel/mappings/categories with targetType: "ebay_store".

Rate limits

eBay's REST APIs allow up to 5,000 calls/min and ~1M/day per app. The Trading API (legacy XML) has separate limits. The provider hits both — most operations use REST; bulk listing revisions still call Trading because the REST equivalent doesn't cover all fields. Hitting limits returns 21919189: Rate limit exceeded.

Order pull

Orders flow in via REST getOrders (poll) and via webhook notifications (eBay Notifications API). Configure the notification subscriptions during channel enable; the provider auto-subscribes to AuctionCheckoutComplete, FixedPriceTransaction, ItemSold, OrderCancelled.

Quirks worth a callout

  • Variations — eBay supports variations (size/color combos) only in select categories. The provider rejects variation pushes outside those categories.
  • Best Offer — set per-listing via bestOfferEnabled: true. Auto-accept and auto-decline thresholds go on the listing, not the channel config.
  • GTIN gate — many categories require a GTIN (UPC/EAN/ISBN). For brand-new products without a GTIN, request a GTIN exemption from eBay first.
  • Tax tables — eBay applies sales tax based on a per-state table maintained on the seller's account. Don't push line-level tax; let eBay compute it.

The eBay sandbox is a separate account — sandbox listings, sandbox buyers, sandbox orders. For end-to-end testing, use sandbox until policies are dialed in, then re-OAuth against production.