GET /offers — fields for lightweight responses + Cdiscount salesChannelFeedback
- Home
- GET /offers — fields for lightweight responses + Cdiscount salesChannelFeedback
Introduction
We’ve improved GET /offers to help you control payload size and retrieve Cdiscount marketplace insights when needed.
This release introduces:
fields— select only the properties you need for faster, lighter responsesexpand=salesChannelFeedback(Cdiscount only) — retrieve detailed sales-channel feedback such as online status, best-offer info, offer quality (Qualiscore), and competing offers
Endpoint concerned
Retrieves offers that match the query from the offer repository.
Please note:
-
The limit of offers per request has increased. You can now paginate your results up to 1 000 offers.
-
If parameters
fieldsandexpandare both sent, theexpandparameter will be ignored.
Functional rules:
There are some differences in the attributes you can retrieve from Cdiscount (CDISFR) compared with other channels
-
Attributes only available on Cdiscount:
-
comments -
offerCompetition -
Best offer information into
salesChannelFeedback.bestOfferDetails -
expandparameter withsalesChannelFeedbackvalue -
Qualiscore: more details on offerQuality.scoreReasons into the FAQ
-
-
Attributes only available on other sales channels:
-
salesChannelAcceptanceStatus -
deliveryOffers.storageCountry -
Best offer information into
isBestOffer&BestOffer
-
New features:
-
Fields parameter:
The
fieldsparameter lets you fetch only the data you need.The payload will always contain basis information as:
-
offerId -
sellerExternalReference -
offerState -
createdAt -
updatedAt
To retrieve only the useful information, specify the field (e.g.,
condition) or the node name (e.g.,salesChannelFeedback) or the node name with the field name separated by a dot (e.g.,facialPrice.price). -
-
Expand parameter (Cdiscount Only):
To include sales-channel feedback information, set the
expandparameter to:salesChannelFeedback
This node contains information returned by the sales channels' APIs. Because this data may take time to update, several
updatedAtfields are provided.If the sales channel does not return the information, the fields will be
null.Please note: Sales channel feedbacks are currently only available for Cdiscount, but other channels will be added soon.
Examples:
-
Retrieve the first 1 000 offers on Cdiscount:
/offers?salesChannelId=CDISFR&limit=1000 -
Retrieve an offer based on it external reference on saleschannel Seller Sandbox:
/offers?salesChannelId=SELLZZ&sellerExternalReferences=ABC1234 -
Retrieve the first 1 000 offers with only specific attributes (offerId & integrationPrice):
/offers?salesChannelId=SELLZZ&fields=integrationPrice.price -
[Cdiscount Only] Retrieve the first 1 000 offers with saleschannel feedbacks:
/offers?salesChannelId=CDISFR&expand=salesChannelFeedback
Parameters - Headers
| Name | In | Type | Description |
|---|---|---|---|
| SellerId* | header |
string
|
Octopia Seller Identifier. Example : 98979 |
Parameters - Query
| Name | In | Type | Description |
|---|---|---|---|
| salesChannelId* | query |
string
|
Sales channel identifier you want to retrieve,. Example : SCIDFR |
| limit | query |
number
|
Limits the number of offers per page, maximum 1000, default 100 Default : 100 Example : 500 |
| fields | query |
string
|
The fields parameter lets you fetch only the data you need. By default, the payload will always contains basis information as offerId, sellerExternalReference and offerState Example : condition, product, salesChannelFeedback.competingOffers |
| expand | query |
string|enum
|
In order to display the sales channel feedback information in addition of the standard payload you must fill the expand parameter with salesChannelFeedback Example : salesChannelFeedback Available values : ["salesChannelFeedback"] |
| offerIds | query |
string
|
Offers identifiers you want to retrieve, separated by a comma. Example : 1234_HAM0028178207328_6_SCIDFR,1234_AUC4894626011153_6_SCIDFR |
| offerStates | query |
string
|
Offers state you want to retrieve, separated by a comma. Example : inactive,active |
| gtins | query |
string
|
Products gtin you want to retrieve, separated by a comma. Example : 1234567890123, 2345678901234 |
| sellerExternalReferences | query |
string
|
Seller external references you want to retrieve, separated by a comma. Example : REF001,REF002 |
| updatedAtMin | query |
string
|
Format - date-time (as date-time in RFC3339). Return offers only if "updatedAt" property is bigger or equal to parameter value. Example : 2023-04-20T10:10:00.0000000+00:00 |
Response codes
200 - Successapplication/json
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 - Bad Requestapplication/problem+json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
401 - Unauthorizedapplication/problem+json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
403 - Forbiddenapplication/problem+json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
500 - Internal Server Errorapplication/problem+json |
Use fields to fetch only what you need
Why it matters
The fields parameter lets you reduce response size and improve performance by returning only the data your workflow actually uses (e.g., GTIN + price + condition).
Important behavior
Even when you use fields, the API will always include these base fields:
offerId
sellerExternalReference
offerState
createdAt
updatedAt
This ensures each item remains identifiable and trackable in sync processes.
Example A — “light” offers payload (GTIN + price + condition)
Request
curl -X GET \
"https://<API_HOST>/offers?salesChannelId=SELLZZ&limit=1000&fields=product.gtin,integrationPrice.price,condition" \
-H "SellerId: <YOUR_SELLER_ID>"
Response (example)
{
"items": [
{
"sellerExternalReference": "REF001",
"salesChannelId": "CDISFR",
"offerId": "1234_TES3499550358636_6_CDISFR",
"offerState": "Active",
"createdAt": "2025-04-26T01:28:53.0000000+00:00",
"updatedAt": "2025-05-31T02:37:26.0000000+00:00",
"condition": "New",
"product": { "gtin": "3499550358636" },
"integrationPrice": { "price": 19.9 }
}
],
"itemsPerPage": 1
}
Recommendations
Tip — Pair fields with incremental sync
If you run periodic synchronizations, combine fields with updatedAtMin to fetch only offers updated after a given RFC3339 timestamp.
Tip — Use dotted paths to target nested properties
You can request nested properties such as:
integrationPrice.pricefacialPrice.priceproduct.gtin
2) Cdiscount: retrieve salesChannelFeedback (online status, best offer, quality, competition)
For Cdiscount (salesChannelId=CDISFR), you can retrieve sales-channel feedback data coming from the channel’s APIs. This typically includes:
- whether the offer is online (
isOnline) - displayed price & delivery cost
- best-offer status and best-offer details
- offer quality / qualiscore-like feedback and reasons
- competing offers (other sellers and their displayed conditions)
Option 1 — The simple way: expand=salesChannelFeedback (Cdiscount only)
Request
curl -X GET \
"https://<API_HOST>/offers?salesChannelId=CDISFR&limit=1000&expand=salesChannelFeedback" \
-H "SellerId: <YOUR_SELLER_ID>"
Response (example)
{
"items": [
{
"offerId": "1234_TES3499550358636_6_CDISFR",
"offerState": "Active",
"salesChannelFeedback": {
"isOnline": true,
"displayedOfferPrice": 19.9,
"deliveryCost": 0,
"updatedAt": "2025-03-07T16:11:30Z",
"bestOfferDetails": {
"isBestOffer": true,
"isBestOfferUpdatedAt": "2025-03-07T16:11:30Z",
"bestOffer": {
"price": 19.9,
"deliveryCost": null,
"updatedAt": "2025-03-07T16:11:30Z"
}
},
"offerQuality": {
"offerScore": "E",
"scoreReasons": [
{ "code": "longDeliverytime", "reason": "Long delivery times" }
],
"updatedAt": "2025-03-07T16:11:30Z"
}
}
}
],
"itemsPerPage": 1
}
Option 2 — The “targeted” way: request only parts of feedback via fields
If you only need a specific subset (e.g., competition), request it directly with fields.
Request — competing offers only
curl -X GET \
"https://<API_HOST>/offers?salesChannelId=CDISFR&limit=1000&fields=salesChannelFeedback.competingOffers" \
-H "SellerId: <YOUR_SELLER_ID>"
Response (example)
{
"items": [
{
"offerId": "1234_TES3499550358636_6_CDISFR",
"offerState": "Active",
"salesChannelFeedback": {
"competingOffers": [
{
"sellerName": "ExampleSeller",
"sellerRating": 4.5,
"isOnline": true,
"isBestOffer": false,
"displayedOfferPrice": 33.99,
"deliveryCost": 0,
"updatedAt": "2025-03-07T16:11:30Z"
}
]
}
}
],
"itemsPerPage": 1
}
Warning
If you send both fields and expand in the same request, expand will be ignored. Choose one approach:
- Use
expand=salesChannelFeedbackto get the full feedback block (Cdiscount) - OR use
fields=...to retrieve exactly what you need (includingsalesChannelFeedback.*paths)