Listings & Offers

Listings & Offers

In eBay, an Offer is what makes a product publicly visible on the marketplace. It connects an inventory item (SKU) to a marketplace, category, price, and policies. A product can exist in the Inventory API without being listed — it only becomes a public listing when an offer is created and published.


API endpoints

MethodPathDescriptionAPI Reference
POST/api/v1/products/listingsCreate and publish a single offerref
POST/api/v1/products/listings/batchCreate multiple offers in batchref
POST/api/v2/products/listings/publishPublish an existing unpublished offerref
POST/api/v2/products/listings/migrateMigrate legacy listings to Inventory APIref
GET/api/v1/products/listingsGet all listings (Trading API)ref
GET/api/v1/products/listings/{id}Get a single listing with offersref
PUT/api/v1/listings/{offerId}Update an existing offerref

Creating and publishing a single offer (v1)

POST /api/v1/products/listings

This endpoint creates the offer and immediately attempts to publish it in a single call. The product (SKU) must already exist in the Inventory API before you can create an offer for it — see Products & Variants.

Before using this endpoint, ensure your account meets all Getting Started prerequisites (Payoneer, seller program enrollment, policies, and at least one location).

Full request payload:

POST /api/v1/products/listings
{
  "listing": {
    "sku": "MY-PRODUCT-001",
    "marketplaceId": "EBAY_US",
    "format": "FIXED_PRICE",
    "availableQuantity": 10,
    "categoryId": "9355",
    "listingDescription": "Full HTML or plain-text description of the product.",
    "listingDuration": "GTC",
    "listingPolicies": {
      "fulfillmentPolicyId": "6196932000",
      "paymentPolicyId": "6196934000",
      "returnPolicyId": "6196936000"
    },
    "merchantLocationKey": "WAREHOUSE-US-01",
    "pricingSummary": {
      "price": {
        "currency": "USD",
        "value": "29.99"
      }
    }
  }
}
FieldRequiredNotes
skuYesMust match a product in the Inventory API
marketplaceIdYese.g. EBAY_US — use underscore format
formatYesUse "FIXED_PRICE"
categoryIdYeseBay category ID for your marketplace. Use GET /api/v2/categories to find the right one → ref
listingDescriptionYesAccepts HTML. Shown on the eBay listing page
listingDurationYesUse "GTC" (Good Till Cancelled) for fixed-price listings
listingPolicies.fulfillmentPolicyIdYesMust belong to the same marketplaceId
listingPolicies.paymentPolicyIdYesMust belong to the same marketplaceId
listingPolicies.returnPolicyIdYesMust belong to the same marketplaceId
merchantLocationKeyYesLocation created via POST /api/v2/locations
pricingSummary.priceYescurrency and value as string
availableQuantityNoDefaults to inventory quantity on the product if omitted

A successful response returns an offerId. Save this ID — you will need it to update the offer later.

→ API Reference


Publishing an existing offer (v2)

POST /api/v2/products/listings/publish

Publishes an offer that was already created but not yet published — for example, after using POST /api/v1/products/listings/batch to bulk-create offers. Requires the offerId and marketplaceId.

POST /api/v2/products/listings/publish
{
  "listing": {
    "offerId": "OFFER_ID_HERE",
    "marketplaceId": "EBAY_US"
  }
}

→ API Reference


Updating an offer (v1)

PUT /api/v1/listings/{offerId}

The offerId is returned when you create an offer. You can also retrieve it by calling GET /api/v1/products/listings/{listingId} — the offerId appears inside the Offers array in the response.

Use caseHow
Update priceSend pricingSummary.price in the offer payload
Update quantityInclude inventory: true in the payload
Update description, policies, durationSend the full offer object with the updated fields

Price lives on the Offer, not on the product. Sending a price update to PUT /api/v2/products/{sku} will return 200 OK but will not change the price on eBay. Always update price via PUT /api/v1/listings/{offerId}.

Example — update price:

PUT /api/v1/listings/{offerId}
{
  "listing": {
    "marketplaceId": "EBAY_US",
    "pricingSummary": {
      "price": {
        "currency": "USD",
        "value": "24.99"
      }
    }
  }
}

→ API Reference


Getting listings (v1)

GET /api/v1/products/listings

Uses eBay's Trading API (GetSellerList) internally. Returns listings from the last 30 days by default.

Limits:

  • Max time range: 120 days
  • Max 300 requests per 15-second window

→ API Reference


Getting a single listing (v1)

GET /api/v1/products/listings/{listingId}

Returns full item details via Trading API (GetItem) plus the associated offers fetched from the Inventory API. For variant products, returns one offer per variant SKU in the Offers array.

→ API Reference


Creating offers in batch (v1)

POST /api/v1/products/listings/batch

Creates multiple offers in a single request using eBay's bulk_create_offer. This is the required third step when publishing a variant product group — see Products & Variants → Complete flow: create and publish a variant group.

→ API Reference


Did this page help you?