Products
Product catalog (read-only over REST).
List products#
List products, newest first. Lists products of the shop including archived ones (no archived filter).
Query parameters
Page size. Clamped to 1..200. Non-numeric values fall back to the default. Default: 50.
Value of next_cursor from the previous page. Returns items with created_at strictly before this timestamp.
Filter by active flag. Other values are ignored.
Exact handle.
Case-insensitive substring match on title.
Only for OAuth tokens that cover several shops: the shop to query. Must be one of the token's shops (else 403 forbidden). Required when the token covers more than one shop (else 400 shop_required). Optional for API keys (a key belongs to exactly one shop; any other value returns 403).
Response fields
Items of this page.
created_at of the last item when more items exist, otherwise null.
Product id.
URL handle (also accepted as :id on the detail endpoint).
Product title.
Product description (HTML/text as stored).
Price in minor units of the shop currency.
Compare-at (strike-through) price.
Cost of goods per unit as entered by the merchant.
Product images as stored.
Stock level (product level).
Whether the product is active/visible.
Product type (e.g. physical/digital) as stored.
Option definitions as stored.
Variants as stored.
SKU.
Barcode (EAN/GTIN).
Category.
Vendor/manufacturer.
Tags.
Set when the product is archived.
Creation time; pagination key.
Last update.
Errors
Any endpoint. Response carries header WWW-Authenticate: Bearer resource_metadata="<origin>/.well-known/oauth-protected-resource".
Scope check per endpoint (and per body field on PATCH /orders/:id).
shop_id query parameter names a shop outside the credential's reach.
Multi-shop OAuth token without shop_id.
Any endpoint when the resolved shop has active=false.
Any endpoint. Header Retry-After (seconds until the next minute bucket).
Any endpoint.
curl "https://api.ecomone.shop/api/public/v1/products?limit=10" \
-H "X-Api-Key: $ECOMONE_API_KEY" \
-H "X-Api-Secret: $ECOMONE_API_SECRET"const res = await fetch("https://api.ecomone.shop/api/public/v1/products?limit=10", {
method: "GET",
headers: {
"X-Api-Key": process.env.ECOMONE_API_KEY,
"X-Api-Secret": process.env.ECOMONE_API_SECRET,
},
});
if (!res.ok) throw new Error((await res.json()).message);
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.ecomone.shop/api/public/v1/products?limit=10",
headers={
"X-Api-Key": os.environ["ECOMONE_API_KEY"],
"X-Api-Secret": os.environ["ECOMONE_API_SECRET"],
},
timeout=30,
)
res.raise_for_status()
data = res.json()["data"]{
"data": [
{
"id": "3b8b1f0a-1d2c-4f34-8a7c-6e2f9b4d5c11",
"handle": "linen-shirt-white",
"title": "Linen Shirt White",
"description": "<p>Light linen shirt.</p>",
"price_cents": 3950,
"compare_price_cents": 4900,
"cogs_cents": 1400,
"images": [
"https://cdn.example.com/p/linen-shirt-1.jpg"
],
"stock": 42,
"active": true,
"product_type": "physical",
"options": [
{
"name": "Size",
"values": [
"S",
"M",
"L"
]
}
],
"variants": [
{
"id": "v1",
"title": "M",
"sku": "LS-W-M",
"stock": 18,
"price_cents": 3950
}
],
"sku": "LS-W",
"barcode": null,
"category": "Tops",
"vendor": "Example Label",
"tags": [
"summer"
],
"archived_at": null,
"created_at": "2026-06-02T11:20:00.000Z",
"updated_at": "2026-08-27T10:02:00.000Z"
}
],
"next_cursor": null
}Retrieve a product#
Retrieve one product by UUID or handle. If :id is a UUID it is matched against id, otherwise against handle.
Path parameters
Product UUID or handle.
Query parameters
Only for OAuth tokens that cover several shops: the shop to query. Must be one of the token's shops (else 403 forbidden). Required when the token covers more than one shop (else 400 shop_required). Optional for API keys (a key belongs to exactly one shop; any other value returns 403).
Response fields
Product id.
URL handle (also accepted as :id on the detail endpoint).
Product title.
Product description (HTML/text as stored).
Price in minor units of the shop currency.
Compare-at (strike-through) price.
Cost of goods per unit as entered by the merchant.
Product images as stored.
Stock level (product level).
Whether the product is active/visible.
Product type (e.g. physical/digital) as stored.
Option definitions as stored.
Variants as stored.
SKU.
Barcode (EAN/GTIN).
Category.
Vendor/manufacturer.
Tags.
Set when the product is archived.
Creation time; pagination key.
Last update.
Errors
Detail endpoints and PATCH.
Detail endpoints.
Any endpoint. Response carries header WWW-Authenticate: Bearer resource_metadata="<origin>/.well-known/oauth-protected-resource".
Scope check per endpoint (and per body field on PATCH /orders/:id).
shop_id query parameter names a shop outside the credential's reach.
Multi-shop OAuth token without shop_id.
Any endpoint when the resolved shop has active=false.
Any endpoint. Header Retry-After (seconds until the next minute bucket).
Any endpoint.
curl "https://api.ecomone.shop/api/public/v1/products/thermo-socks" \
-H "X-Api-Key: $ECOMONE_API_KEY" \
-H "X-Api-Secret: $ECOMONE_API_SECRET"const res = await fetch("https://api.ecomone.shop/api/public/v1/products/thermo-socks", {
method: "GET",
headers: {
"X-Api-Key": process.env.ECOMONE_API_KEY,
"X-Api-Secret": process.env.ECOMONE_API_SECRET,
},
});
if (!res.ok) throw new Error((await res.json()).message);
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.ecomone.shop/api/public/v1/products/thermo-socks",
headers={
"X-Api-Key": os.environ["ECOMONE_API_KEY"],
"X-Api-Secret": os.environ["ECOMONE_API_SECRET"],
},
timeout=30,
)
res.raise_for_status()
data = res.json()["data"]{
"data": {
"id": "3b8b1f0a-1d2c-4f34-8a7c-6e2f9b4d5c11",
"handle": "linen-shirt-white",
"title": "Linen Shirt White",
"description": "<p>Light linen shirt.</p>",
"price_cents": 3950,
"compare_price_cents": 4900,
"cogs_cents": 1400,
"images": [
"https://cdn.example.com/p/linen-shirt-1.jpg"
],
"stock": 42,
"active": true,
"product_type": "physical",
"options": [
{
"name": "Size",
"values": [
"S",
"M",
"L"
]
}
],
"variants": [
{
"id": "v1",
"title": "M",
"sku": "LS-W-M",
"stock": 18,
"price_cents": 3950
}
],
"sku": "LS-W",
"barcode": null,
"category": "Tops",
"vendor": "Example Label",
"tags": [
"summer"
],
"archived_at": null,
"created_at": "2026-06-02T11:20:00.000Z",
"updated_at": "2026-08-27T10:02:00.000Z"
}
}