List products
Returns your products, sorted by name unless you choose another sort_by. Deleted products are left out unless you send deleted=true. Prices come back in one currency: the cart's or invoice's currency when you send cart_id or invoice_id, else the currency you send, else a currency guessed from country or the shopper's IP address, else the account's default. Secret, trusted and limited tokens may call it. This is the one list a limited token may read, so a shop can show its catalog before anyone signs in. For a limited token the list always holds only active, visible, not deleted products, whatever filters you send.
AuthorizationBearer <token>A secret, trusted or limited token. See Authentication.
offset?integerFor offset-based lists, how many items to skip before the page starts. Use next_page_offset or previous_page_offset from the page you have. A value that is not a whole number is a 400.
0 <= value0limit?integerHow many items to return on one page, from 1 to 100. The default is 100. A value outside 1 to 100, or one that is not a whole number, is a 400.
1 <= value <= 100100sort_by?stringThe field to sort by. The default is name.
"name""date_created""date_modified""active""deleted""hidden"desc?booleanSort in descending order (newest, largest or last first) when true. The default is false. A value other than true or false is a 400.
falseexpand?stringComma-separated child objects to return in full instead of as a URL, for example customer,payments. Use dot notation for nested objects (items.product), up to four levels deep. A single object takes up to 12 paths; a list takes up to 2, applied to every item. Extra paths are dropped without an error. See Expanding objects.
show?stringComma-separated fields to return; all others are left out. Use dot notation for child fields (customer.email). You cannot send show and hide together (400). See Customizing output.
hide?stringComma-separated fields to leave out of the response. Use dot notation for child fields (customer.email). You cannot send show and hide together (400). See Customizing output.
formatted?booleanWhen true, the object also has a formatted child with amounts and dates as display text in the shopper's language and currency (for example $19.99 or November 7, 2026). The default is false. See Localized formatting.
falseq?stringSearch text. An exact product id returns that product; otherwise products whose name contains the text (any case) are returned.
active?booleanOnly products with this active value. Always true for a limited token.
deleted?booleanSend true to include deleted products as well. Any other value, or none, leaves them out. Always false for a limited token.
currency?stringThe ISO 4217 currency to price the products in. It must be a currency the account can take payment in, or the request fails with 400.
country?stringA two-letter ISO country code. Prices come back in that country's currency when the account supports it, else in the account's default currency.
cart_id?stringPrice the products in this cart's currency and exchange rate, so the list matches what the shopper will pay. Ignored if the token may not read the cart.
invoice_id?stringPrice the products in this invoice's currency and exchange rate. Ignored if the token may not read the invoice.
user_locale?stringThe shopper's language, such as de or ja-JP, used to pick a translation. When left out, the Accept-Language header is used for limited and trusted tokens.
A page of products.
application/json- response
A page of products. An offset-based list.
total_items*integerThe number of items that match, across all pages.
total_pages*integerThe number of pages.
current_page*integerThe number of this page.
next_page_url*|The URL of the next page, or null on the last page.
urinext_page_offset*|The offset of the next page, or null on the last page.
previous_page_url*|The URL of the previous page, or null on the first page.
uriprevious_page_offset*|The offset of the previous page, or null on the first page.
current_page_url*stringThe URL of this page.
uridata*array<>The items on this page.
curl -X GET 'https://api.comecero.com/api/v1/products'{ "total_items": 1, "total_pages": 1, "current_page": 1, "next_page_url": null, "next_page_offset": null, "previous_page_url": null, "previous_page_offset": null, "current_page_url": "https://api.comecero.com/api/v1/products?offset=0", "data": [ { "object": "product", "url": "https://api.comecero.com/api/v1/products/widget.test", "product_id": "widget.test", "date_created": "2026-11-02T14:36:52Z", "date_modified": "2026-11-02T14:36:52Z", "test": true, "account_id": "AB1234", "name": "Widget", "price": 49.95, "currency": "USD", "compare_at_price": null, "type": "physical", "description": "A simple widget for everyday use.", "headline": null, "tax_code": null, "prices": [ { "price": 49.95, "currency": "USD" } ], "compare_at_prices": [], "volume_prices": [], "effective_volume_prices": [], "inventory": null, "bundle_items": [], "weight": { "amount": 3, "unit": "lb" }, "active": true, "deleted": false, "hidden": false, "date_deleted": null, "file": null, "has_file": false, "license_service": null, "has_license_service": false, "subscription_plan": null, "subscription_terms": null, "images": [], "video_url": null, "related_products": "https://api.comecero.com/api/v1/products/widget.test/related_products", "subscription_change_products": "https://api.comecero.com/api/v1/products/widget.test/subscription_change_products", "subscription_term_change_products": "https://api.comecero.com/api/v1/products/widget.test/subscription_term_change_products", "meta": null, "translations": null } ]}