Newsletter
Offer Sales Integration (XML)
  • Home
  • Offer Sales Integration (XML)

Last update:

Technical information in this page stays valid at all times

Sales rulings based on dates, timeline or calculation can be changed until stated otherwise.

Calendar

Last Sales

Winter 2026

  • Sales start : Wednesday, January 7th, 8:00AM GMT+1

  • Sales end : Wednesday, February 3rd, 12:00AM GMT+1 (Tuesday 2nd up to midnight)

Official upcoming Sales Dates

Summer 2026

  • Sales start : Wednesday, June 24th, 8:00AM GMT+2

    • Sales pricing submission start date: 3 days before.

  • Sales end : Wednesday, July 22nd, 12:00AM GMT+2 (Tuesday 21st up to midnight)

Please take note of Daylight Savings Time application for summer sales (CEST or CET+DST)

Scope

  • Seasonnal commercial operations do not follow these publication methods (e.g.: BackToSchool / Halloween / BlackFriday)

  • This only applies to offers targetted at Cdiscount.com offer publication

  • Sales are based on the french official sales periods

  • Current sales submission are only available through the Offers publication through XML/ZIP packages

Price history

French law requires mentionning and taking into account the lowest public price of an offer (by a given seller) on a product within the last 30 days on a given platform during the official sales period. See also “Omnibus” French Regulation

Lowest price point is considered at the offer level, on the active best offer, and includes lowest price registered (displayed) in the last 30 days before the event start date (should the offer exist then) automated price alignement features (lowest reached) or promotional prices applied through strikedprice mechanics.

All sales percentages displayed to the customers will then be based on this lowest price point within the Cdiscount.com marketplace, and not specifically on your active declared reference pricing.

Displayed price and visual sales representation

This guide aims at explaning how to plan and manage your pricing during official sales periods in France over the Cdiscount.com marketplace

Keep in mind that even if the final calculations are fully taken into account during price planning, some other causes can have some impact on how the sales is truely displayed.
(among others : price point versus competition, seller rating, available delivery modes, shipping charges amounts, …)

Offer Packages

Package submission

There are only one way to submit sales:

  • The XML/ZIP submission method (which enables publishing to Cdiscount and other channels)
    This is the method to be used to submit offers with sales

The Json method does not support sales currently

For other Octopia Channels, sales submission is not available through API

Package format

Any given package can have two forms : (and will be refered to like that in this page)

  • A Full package, containing :

    • basic offer information (identification/pricing/inventory)

    • offer shipping methods along with preparation times

    • eventual sale declaration

  • A Light package, also known as Stock/Price, aimed only at updating your offers, containing :

    • basic offer identification

    • standard pricing
      and/or

    • available inventory

Offer declaration in packages

It is assumed here that you know how to build and created an offer package.
Including the fact that an xml Offer object is included with the OfferPackage/OfferPackage.Offers/OfferCollection node.

Static values not shown in brackets have to be specifically stated as sampled below.

Within a Light Package

An offer definition typically looks like :

< Offer SellerProductId="[your_reference]" ProductEan="[product_gtin]"
	Price="[decimal]" StrikedPrice="[decimal]"
	Stock="[integer]"
/ >
  • StrikedPrice being optional but used in conjuction with Price

  • Stock being optional

  • Either one or both the declarations can be set

  • An offer must be existing and fully configured (with delivery modes and tax information) on the given gtin

This format does not enable managing sales but can have some impact as mentionned below.

Within a Full Package

An offer definition contains 3 parts :

  • The general offer identification and information as attributes of the < Offer > node

  • The shipping information as a child < Offer.ShippingInformationList > node

  • The optional sale pricing information as an < Offer.PriceAndDiscountList > node

And typically looks like this :

< Offer SellerProductId="[your_reference]" ProductEan="[product_gtin]"
	ProductCondition="[integer]"
	Price="[decimal]" StrikedPrice="[decimal]"
	EcoPart="[decimal]" DeaTax="[decimal]" Vat="[integer]"
	Comment="[text]"
	PreparationTime="[integer]"
	Stock="[integer]" >
	< Offer.ShippingInformationList>
		< ShippingInformationList Capacity="[integer_count]" >
			< ShippingInformation
				DeliveryMode="[delivery_mode]"
				ShippingCharges="[decimal]"
				AdditionalShippingCharges="[decimal]"
			/ >
		< /ShippingInformationList >
	< /Offer.ShippingInformationList >
	< Offer.PriceAndDiscountList >
		< DiscountComponentList Capacity="1" >
			< DiscountComponent Type="3"
				DiscountValue="[decimal]"
				SalesReferencePrice="[decimal]"
				DiscountUnit="1"
			/ >
		< /DiscountComponentList >
	< /Offer.PriceAndDiscountList >
< /Offer >

We’ll look below how the < Offer.PriceAndDiscountList > behaves when managing your sale prices.

Combining multiple commercial animations

Defining a sale planning is considered to be a commercial animation.

Using the PriceMustBeAligned="Align" along with MinimumPriceForPriceAlignment="[decimal]" is also considered a commercial animation.

Currently, submitting offers through an XML/ZIP package with two simultaneous commercial animations will prevent correct offer integration.
When provided, the price alignment feature will take over the sales declaration.

Package values definitions

Note : Final price is considered before shipping calculation and eventual additional shipping charges you have declared.

Prices are specified as a dotted decimal with up to 2 decimals.
eg: Price="56.89"

Price
  • Refers to the public price of your product

  • Is considered outside of all active promotions or sales

StrikedPrice
  • Refers to the displayed striked price

  • Has no impact on pricing calculations and is only intended for display purposes

SalesReferencePrice
  • Is used to calculate the final price of your offer during sales

DiscountValue
  • The percentage applied to the SalesReferencePrice to calculate the final price

  • Minimum discount is 5% (or 20€)

  • Specified as a dotted decimal between "1.000" and "100", it will be rounded at up to 2 decimals for calculations

Before the start date

Preparing your pricing

You can upload any number of Full Packages before the official sales start point.

Only the last update will be taken into account.

  • Light Packages

    • updates only the current price/striked price and/or inventory

    • will not change your sale configuration for the specified offers (if existing)

  • Full Packages

    • will enable sale declaration with the < Offer.PriceAndDiscountList > node

    • will enable sale removal when the < Offer.PriceAndDiscountList > is not specified

Sales Opening

Note pricing calculations are still considered outside of shipping charges.

Calculations will only be considered IF there as been at least one Full Package sent before the starting time not overwritten with a disabling Full Package.
or refer to “During Sales” below.

  1. Lowest price point within the last 30 days is considered as a reference price. This lowest price is calculated by CDiscount

    • the lowest final price of any active offer you placed on the given product id/gtin is considered.

  2. Expected final price is calculated from your sales declaration

  3. Effective promotional rate for your current active offer is calculated

  4. Best offer selection is performed by the marketplace

See below “Sales calculations”

During sales

Updating the sales definition

This is as simple as submitting a Full Package.

Submitting with the < Offer.PriceAndDiscountList > node will update the sale calculation to the new values you set.

Submitting without this node, will disable the sale state for your offer and revert to using only your Price and StrikedPrice information.

Light Package updates impacts
  • Submitting only inventory information
    < Offer SellerProductId="[your_reference]" ProductEan="[product_gtin]" Stock="[integer]" / >

    • will only update the inventory

  • Submitting with price information (with or without inventory)

    • If the submitting a Price point equal or below the current Final price will overtake the lowest price and disable the active sale state

Sales Calculations

Defining the “Lowest Price Point

The lowest price point is considered over all offers of a given seller on a given product (same gtin/internal product reference) that have been active at some point in the previous 30 days (before the start date of the event or taken from offer creation date if it wasn’t existing before) and is measured by cdiscount, it is also verified by government operations and consumer protection agencies through parsing and sampling.

It is considered outside of shipping charges and active sales operations.

A low point as an active sale will not be taken into account.

Using only Price and StrikedPrice is not considered a sale between the official dates. The Price value will be considered a low point.

Automated price alignment is considered as a price value. Lowest reached within the reference time frame will be considered a low point.

Any update to the Price value can have an impact on the Lowest Price Point, setting it to a value too low compared to your sale might change the outcome.
It has to be taken into account when trying to publish offers on other sales channel through replication or simply when publishing your prices.

Striked Price versus Lowest Price

Before the sales start date :
When it exists, the StrikedPrice display is limited to the available strikedPrice of the BestOffer (the offer having the buybox)

After the sales start date :
The displayed Striked Price is enforced to the Lowest Price Point for the given product, considering a sale is ongoing on the current BestOffer

Note : Sale percentages when active are not displayed on offer lists.

Defining the displayed “Sale percentage

Note : Octopia does not enforce display rules through the API, wether a “Soldes“* (french for “Sales“) visual is available for a given product/offer are based on Cdiscount.com internal rules and management.

The final sale percentage is based on the Lowest Price compared to your actual Final Price and not purely on your SalesReferencePrice.

Please note that other considerations might hinder how we display your final price.

Examples

Case : Final price higher than 30days history

Context :

  • 30d Lowest Price Point : 80€

  • SalesReferencePrice : 100€

  • DiscountValue : 10%

Result :

  • Offer Final Price : 100×10% = 90€

  • Published Final Price : 90€

  • Sale state : ❌ Disabled (current price higher)

Though you provide a sale, it is still too high to be considered a price reduction as an end customer.

Case : Final price equal to 30days history

Context :

  • 30d Lowest Price Point : 80€

  • SalesReferencePrice : 100€

  • DiscountValue : 20%

Result :

  • Offer Final Price : 100×10% = 80€

  • Published Final Price : 80€

  • Sale state : ❌ Disabled (current price equal)

There is no change in final price.

Case : Final price lower than 30days history

Context :

  • 30d Lowest Price Point : 80€

  • SalesReferencePrice : 100€

  • DiscountValue : 30%

Result :

  • Offer Final Price : 100×10% = 70€

  • Published Final Price : 70€

  • Sale state : ✅ Enabled (current price lower)

  • Discount Sale : 12.25% (70 compared to 80)

Sales percentage has been recalculated.

Case : Full package high Price AND Sales update

Context :

  • 30d Lowest Price Point : 80€

  • SalesReferencePrice : 100€

  • DiscountValue : 30%

  • Additional Price update :

    • Price 90€

    • StrikedPrice 100€

Result :

  • Offer Final Price : 100×10% = 70€

  • Published Final Price : 70€

  • Sale state : ✅ Enabled (current price lower)

  • Discount Sale : 12.25% (70 compared to 80)

The Price and StrikedPrice provided here will not change the outcome.

Case : Full package low Price AND Sales update

Context :

  • 30d Lowest Price Point : 80€

  • SalesReferencePrice : 100€

  • DiscountValue : 20%

  • Additional Price update :

    • Price 75€

    • StrikedPrice 100€

Result :

  • Offer Final Price : 100×10% = 70€

  • Published Final Price : 70€

  • Lowest Price Point Update : 75€

  • Sale state : ❌ Disabled

  • Discount Sale : 6.67% (70 compared to 75)

The Price given implies a 30 days price history update.

Usecases Table

Here are considered updates on your offer, on a product with pricing competition or an existing low price point below current offer pricing.

UseCase

30 days Lowest Price Point

Price

Sales
Reference
Price

Discount
Value

Sale
Price

Offer
Final
Price

Sale state

Sale percentage

Lowest Price Point reviewed

Price only, higher than LPP

80

90

90

N/A

N/A

Price only, lower than LPP

80

70

70

N/A

N/A

70

Sales, equal to LPP

80

100

100

20

80

80

None

None

Sales, higher than LPP

80

90

90

10

81

81

None

None

Sales, lower than LPP

80

90

100

25

75

75

✅ Enabled

6,25

Sales, price lower than sale

80

60

100

30

70

60

Disabled

60