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
| Method | Path | Description |
|---|---|---|
GET | /api/products | List products (paginated) |
POST | /api/products | Create a product |
GET | /api/products/:id | Get a product |
PATCH | /api/products/:id | Update a product |
DELETE | /api/products/:id | Delete a product |
GET | /api/products/:id/variants | List product variants |
POST | /api/products/:id/variants | Add a variant |
PATCH | /api/products/:id/variants/:variantId | Update a variant |
DELETE | /api/products/:id/variants/:variantId | Delete a variant |
POST | /api/admin/product-files/upload | Upload product ZIP file (admin only) |
GET | /api/products/:id/files | List downloadable files |
List Products
GET /api/products?page=1&limit=20&category=software&inStock=true&sortBy=price&sortOrder=asc
Query Parameters
| Parameter | Type | Description |
|---|---|---|
page | number | Page number |
limit | number | Items per page (max: 100) |
search | string | Search name and SKU |
category | string | Filter by category slug |
inStock | boolean | Filter to in-stock only |
type | physical | digital | service | Product type |
sortBy | string | name, price, sku, createdAt |
sortOrder | asc | desc | Sort 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
| Code | Scenario |
|---|---|
200 | List or get succeeded |
201 | Product or variant created |
204 | Product deleted |
400 | File exceeds 50 MB or wrong format |
403 | Non-admin attempting admin upload endpoint |
404 | Product not found |
409 | SKU already in use |
422 | Validation failure |