Skip to main content

Products API

The Products module manages your catalog — digital downloads, physical goods, Odoo marketplace modules, and subscription products. Products support variants, tiered pricing, and multiple images.


Endpoints

MethodPathDescription
GET/api/productsList products (paginated)
POST/api/productsCreate a product
GET/api/products/:idGet a product
PATCH/api/products/:idUpdate a product
DELETE/api/products/:idDelete a product
GET/api/products/:id/variantsList product variants
POST/api/products/:id/variantsAdd a variant
PATCH/api/products/:id/variants/:variantIdUpdate a variant
DELETE/api/products/:id/variants/:variantIdDelete a variant
POST/api/admin/product-files/uploadUpload product ZIP file (admin only)
GET/api/products/:id/filesList downloadable files

List Products

GET /api/products?page=1&limit=20&category=software&inStock=true&sortBy=price&sortOrder=asc

Query Parameters

ParameterTypeDescription
pagenumberPage number
limitnumberItems per page (max: 100)
searchstringSearch name and SKU
categorystringFilter by category slug
inStockbooleanFilter to in-stock only
typephysical | digital | serviceProduct type
sortBystringname, price, sku, createdAt
sortOrderasc | descSort direction

Response

{
"data": [
{
"id": "018e5678-abcd-7000-8000-000000000001",
"name": "ECOSIRE Shopify Connector",
"sku": "ECO-SHOP-001",
"description": "Sync Shopify orders, products and inventory with Odoo 19.",
"type": "digital",
"category": "odoo-modules",
"price": 49900,
"currency": "usd",
"inStock": true,
"images": ["https://cdn.ecosire.com/products/shopify-connector.png"],
"createdAt": "2026-01-10T08:00:00Z"
}
],
"meta": { "total": 36, "page": 1, "limit": 20, "totalPages": 2 }
}

Note: price is in the smallest currency unit (cents for USD).


Create a Product

POST /api/products
Content-Type: application/json
Authorization: Bearer eco_live_...

Request Body

{
"name": "ECOSIRE Amazon Connector",
"sku": "ECO-AMZ-001",
"description": "Sync Amazon Seller Central with Odoo 19.",
"type": "digital",
"category": "odoo-modules",
"price": 49900,
"currency": "usd",
"inStock": true
}

Required fields: name, type, price, currency

Response: 201 Created with the full product object.


Product Variants

Variants represent different configurations of the same product (e.g., license tiers: Starter / Professional / Enterprise).

List Variants

GET /api/products/018e5678-abcd-7000-8000-000000000001/variants
[
{
"id": "018e5678-abcd-7001-8000-000000000001",
"name": "Starter — 1 domain",
"sku": "ECO-SHOP-001-START",
"price": 24900,
"activationsLimit": 1,
"attributes": { "tier": "starter", "domains": 1 }
},
{
"id": "018e5678-abcd-7001-8000-000000000002",
"name": "Professional — 3 domains",
"sku": "ECO-SHOP-001-PRO",
"price": 49900,
"activationsLimit": 3,
"attributes": { "tier": "professional", "domains": 3 }
}
]

Add a Variant

POST /api/products/018e5678-abcd-7000-8000-000000000001/variants
Content-Type: application/json

{
"name": "Enterprise — 10 domains",
"sku": "ECO-SHOP-001-ENT",
"price": 99900,
"activationsLimit": 10,
"attributes": { "tier": "enterprise", "domains": 10 }
}

Upload a Product File (Admin)

Upload a ZIP file for a digital product. Stored in S3; generates a download link for licensed customers.

POST /api/admin/product-files/upload
Authorization: Bearer eco_live_ADMIN_KEY
Content-Type: multipart/form-data

productId=018e5678-abcd-7000-8000-000000000001
version=1.4.2
odooVersion=19.0
file=@./ecosire_shopify_v1.4.2.zip

Limits: 50 MB maximum, ZIP format only.

Response:

{
"id": "018e9999-abcd-7000-8000-000000000001",
"productId": "018e5678-abcd-7000-8000-000000000001",
"filename": "ecosire_shopify_v1.4.2.zip",
"version": "1.4.2",
"odooVersion": "19.0",
"sizeBytes": 2048576,
"uploadedAt": "2026-03-20T12:00:00Z"
}

Status Codes

CodeScenario
200List or get succeeded
201Product or variant created
204Product deleted
400File exceeds 50 MB or wrong format
403Non-admin attempting admin upload endpoint
404Product not found
409SKU already in use
422Validation failure