Listings are transmitted by the Seller:Offer.New and Seller:Offer.Update event. Each time the listing data changes, JTL-Wawi will transmit the entire listing again.
It is generally not necessary to provide attributes for essential data, as each listing already implements a set of essential properties by default, including a title, description, GTIN, quantity and price.
Product or listing images are transmitted as a link along with the listing event. These links have a lifetime of 7 days after the listing event was triggered. The filename is generated based on the file content; i.e., each separate image will have a filename similar to its file content.

We highly recommend informing the seller about the processing status of their listings. Most marketplaces use an asynchronous listing process during which the listing data is curated in a semi-automated process — a process which may take some time.
Send this state to inform the seller that the listing process is now in progress for their listing.
// POST /v1/channel/offer/in-progress
{
"offerList": [
{
"offerId": 1,
"sellerId": "1",
"startedAt": "2022-11-28T01:00:13+00"
}
]
}We recommend informing the seller once a listing is successfully listed on the connected marketplace. The optional listingUrl is useful in this case and allows the seller to visit and thereby directly check the listing on the connected marketplace.
// POST /v1/channel/offer/listed
{
"offerList": [
{
"sellerId": "1",
"offerId": 1,
"listedAt": "2022-11-28T01:00:13+00",
"listingUrl": "https://marketplace.de/offer1",
"channelOfferId": "AFGHDHDFH"
}
]
}You need to inform the seller if the listing process for a listing failed.
// POST v1/channel/offer/listing-failed
{
"offerList": [
{
"sellerId": "1",
"offerId": 1,
"errorList": [
{
"code": "123",
"message": "A listing error occur",
"longMessage": "A serious listing error occure."
}
],
"failedAt": "2019-02-09T05:33:12+00:00"
}
]
}The Stock Updates API enables channels to keep their inventory synchronized with seller stock levels. There are ways to syncronize stock
- Fetch stock updates using
GET /v1/channel/offer/stock-updatesfor individual Seller.- Use this endpoint when your channel processes are running in paralell for each Seller
- Has a higher rate limit
- Fetch stock updates using
GET /v1/channel/offer/stock-updates/allfor all Sellers.- Use this endpoint to get stock changes for all your active Sellers at once
- Consuming
Seller:Offer.StockUpdateSeller Event.- Not recommended to use.
- Will be dreprecated.
// GET /v1/channel/offer/stock-updates/all?updatedAfter=2025-12-29T00:00:00+00:00
{
"stockUpdateList": [
{
"channel": "MYCHANNEL",
"sellerId": "SELLER001",
"offerId": 4711,
"channelOfferId": "SKU-WIDGET-001",
"quantity": 25,
"updatedAt": "2025-12-29T10:15:30+00:00"
},
{
"channel": "MYCHANNEL",
"sellerId": "SELLER002",
"offerId": 8822,
"channelOfferId": "SKU-GADGET-042",
"quantity": 0,
"updatedAt": "2025-12-29T11:22:45+00:00"
}
],
"lastUpdatedAt": "2025-12-29T11:22:45+00:00"
}For efficient synchronization, use the lastUpdatedAt value from the response as the updatedAfter parameter in your next request:
1. First call: GET /v1/channel/offer/stock-updates/all?updatedAfter=2025-12-01T00:00:00Z
Response: lastUpdatedAt = "2025-12-29T11:22:45+00:00"
2. Next call: GET /v1/channel/offer/stock-updates/all?updatedAfter=2025-12-29T11:22:45+00:00
Response: lastUpdatedAt = "2025-12-29T14:30:00+00:00"
3. Continue...