Add a video to your product sheets
- Home
- Add a video to your product sheets
Introduction
Sellers can now enrich their product sheets with a YouTube video via the Product Management API. The video is submitted alongside the other product data and is immediately visible on the product page once accepted.
What changed?
A new sellerVideoUrls field has been added to the product submission payload. It accepts a single YouTube video per product.
The video is then exposed on GET /products within a videos[] array, with the following fields:
index— the video slot (always1for now)platform— the hosting platform (youtube)videoId— the video identifier on YouTubeurl— the full watch URL, rebuilt fromplatformandvideoIdupdatedAt— the date the video was last set on the product
Key rules to keep in mind:
- Only YouTube videos are accepted — the video must exist and be publicly accessible
- Only one video per product is supported (
indexmust be1) - The recommended maximum duration is 5 minutes (not enforced by the API)
- Only the video identifier is kept from the submitted URL — extra query parameters (
list,t, etc.) are dropped - A video can only be replaced by the product creator or the seller who originally set it; otherwise the submission is ignored and an
Unauthorizedwarning is returned onSellerVideo_1 - No removal endpoint exists: submitting an empty value does not delete an existing video
- Video rejections are never blocking: a rejected video never prevents the product from being created or updated on its other fields
Example
Submitting a product with a video via POST /products-integration:
Use this API to integrate your products on Octopia
Functional Rules:
-
Octopia accepts products in English, French and Spanish. The values accepted for the language field are en-US, fr-FR, and es-ES.
-
Only products with fr-FR language will be available for Cdiscount
-
This process is asynchronous, check the integration results using the packageId provided in the API response and the API:
- GET
/products-integration-reports
- GET
-
If you are creating a standard product:
- Use gtin attribute only
-
If you are creating a variant product:
-
Use GTIN field to determine the public identifier of the product
-
Use variantGroupReference field to determine the parent product linking a variant family
-
-
If you want to add an associated file on an authorized property, make sure that:
-
The file doesn't exceed 1Mo
-
The file respect the expected format (pdf/jpg/...etc). You can get this information by consulting the route properties/{reference}
-
The file is provided via URL format
-
-
If you want to add a video on the product:
- sellerVideoUrls is optional: a payload without it stays valid, and an existing video is never removed
- a single video is accepted per product:
indexis required and must be1; a video with a missing or different index is ignored, like a picture outside of its accepted indexes - only YouTube is accepted
- the accepted url forms are
watch?v=,youtu.be/,/shorts/and/embed/ - the video should not exceed 5 minutes: this is a seller guideline, not checked by the integration
- only the video identifier is kept from the url: any other query parameter (
list,t, ...) is dropped - the url is transmitted as submitted by this API, and restituted as submitted in the integration report
- no removal is exposed: an empty value does not delete a video already set on the product
- the video can be replaced only by the product creator or by the seller who set it; otherwise the submitted video is ignored and an
Unauthorizedwarning is returned on the fieldSellerVideo_{index}(same rule assellerPictureUrls)
The number of items cannot be more than the following limit (min: 1 / max: 10 000)
Video rejections are never blocking :
- a rejected video never prevents the product from being created or updated on its other fields
- the reason is returned as a warning in the integration report (
GET /products-integration-reports,warningsfield), not in the400response of this route - a duplicated video index is reported with the code
IncorrectValueon the fieldsellerVideoUrls_{index}, and the first occurrence is kept - an invalid url is reported with the code
InvalidVideoUrlon the fieldSellerVideo_{index}(see the example ofGET /products-integration-reports)
Endpoint full URL: https://api.octopia-io.net/seller/v2/products-integration
Parameters - Headers
| Name | In | Type | Description |
|---|---|---|---|
| SellerId* | header |
string
|
Octopia Seller Identifier. Example : 98979 |
| Accept-Language* | header |
string
|
The Example : fr-FR |
Request body
|
The products to submit application/json |
Response codes
202 - Acceptedapplication/json |
||||||||||||||||
400 - Bad Requestapplication/problem+json |
||||||||||||||||
401 - Unauthorizedapplication/problem+json |
||||||||||||||||
403 - Forbiddenapplication/problem+json |
||||||||||||||||
406 - Not Acceptableapplication/problem+json |
||||||||||||||||
415 - Unsupported Media Typeapplication/problem+json |
||||||||||||||||
500 - Internal Server Errorapplication/problem+json |
{
"products": [
{
"gtin": 3499550358636,
"sellerProductReference": "REF001",
"title": "My product",
"sellerVideoUrls": [
{
"index": 1,
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}
]
}
]
}
Once accepted, the video is returned on GET /products:
This route allows you to get a list of products for a given seller.
The products displayed are the marketable products you created and the non-marketable products you modified.
If a product is marketable and you didn't created it, some fields will not be displayed.
For each product, it is indicated whether it is editable or enrichable (you can only modify data that you created or enrich new data).
You can filter with gtin, EN/ES or FR language (if none FR language by default) and categoryReference.
If you filter by gtin and the seller is not the creator, the following fields will be displayed:
- reference
- label
- gtin
- language
- category
- brand
When using the cursor/limit pagination, products are sorted by update date, with the most recently updated products first. It is not possible to sort otherwise.
IMPORTANT NOTES:
- The filter isMarketable has been deprecated due to performance reasons.
- The pagination by pageIndex/pageSize has been deprecated due to performance reasons. Use the pagination by cursor/limit.
Examples:
-
Get a list of products by GTIN (10 GTIN max. separated by comma):
/products?gtin=88381883016,8452136259876 -
Get a list of products based on their categories:
/products?categoryReference=010101,010102 -
Get a list of products using pagination by cursor:
/products?cursor=NjdjNmE1MzcxNzE5Y2ViOGI4MDc0Y2IxfG5leHQ=&limit=25 -
Get a list of products with some fields displayed:
/products?fields=label,description
Endpoint full URL: https://api.octopia-io.net/seller/v2/products
Parameters - Headers
| Name | In | Type | Description |
|---|---|---|---|
| SellerId* | header |
string
|
Octopia Seller Identifier. Example : 98979 |
| Accept-Language | header |
string
|
The Accept-Language header defines the language of the submission and must be a valid IETF BCP47 tag (default: fr-FR) Example : fr-FR |
Parameters - Query
| Name | In | Type | Description |
|---|---|---|---|
| limit | query |
integer
|
The Limit parameter allows you to precised the number of elements should be displayed when using cursor (default: 25 / min: 0 / max: 100) Default : 50 Example : 25 |
| cursor | query |
string
|
The Cursor parameter allows you to navigate through paginated results by specifying a position in the dataset for the next retrieval Example : NjdjNmE1MzcxNzE5Y2ViOGI4MDc0Y2IxfG5leHQ= |
| gtin | query |
integer
|
The Gtin parameter allows you to filter the products based on their gtin Example : 88381883016 |
| categoryReference | query |
string
|
The CategoryReference parameter allows you to filter the products based on their categories Example : 010201 |
| fields | query |
string
|
The Field parameter allows you to precise which fields should be displayed (default: *) Example : label,description |
Response codes
200 - Successapplication/json
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 - Bad Requestapplication/problem+json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
401 - Unauthorizedapplication/problem+json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
403 - Forbiddenapplication/problem+json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
404 - Not Foundapplication/problem+json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
500 - Internal Server Errorapplication/problem+json |
"videos": [
{
"index": 1,
"platform": "youtube",
"videoId": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"updatedAt": "2026-11-09T10:00:00Z"
}
]
Why it matters
Product pages with videos typically generate higher engagement and conversion rates. Sellers who already produce video content for their products can now surface it directly on the marketplace product page, without any manual action in the Seller Portal.