List all products
List products in your catalog with cursor-based pagination.
In: header
Query Parameters
Number of objects to return. Integer between 1 and 100. Defaults to 25.
251 <= value <= 100Cursor for forward pagination. Use the uuid of the last object on the previous page.
uuidCursor for backward pagination. Use the uuid of the first object on the current page.
uuidProduct SKU. Exact match on sku.
Product SKU. Comma-separated list. Any of the values matches.
Product name. Exact match on name.
Filter by active / inactive products. Exact match on is_active.
Creation date (ISO 8601). Greater than or equal to the given value.
date-timeCreation date (ISO 8601). Less than or equal to the given value.
date-timeCreation date (ISO 8601). Strictly greater than the given value.
date-timeCreation date (ISO 8601). Strictly less than the given value.
date-timeUnit price. Greater than or equal to the given value.
Unit price. Less than or equal to the given value.
Unit price. Strictly greater than the given value.
Unit price. Strictly less than the given value.
Filter by products with available stock (true → stock > 0) or out of stock (false → stock = 0). Exact match on in_stock.
Filter by products with low stock (true → 0 < stock ≤ configured threshold) or with ample stock (false → stock > threshold). Exact match on low_stock.
Filter by classification tag. Supports multiple values with tag[in]. Exact match on tag.
Filter by classification tag. Supports multiple values with tag[in]. Comma-separated list. Any of the values matches.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
import { Factuarea } from "@factuarea/sdk";const factuarea = new Factuarea({ apiKey: process.env.FACTUAREA_API_KEY! });// List endpoints return an async-iterable Page (cursors handled for you).for await (const item of await factuarea.products.list({ limit: 25 })) { console.log(item.id);}{
"data": [
{
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a09",
"object": "product",
"name": "Teclado mecánico RGB",
"sku": "KEY-RGB-01",
"price": "1234.56",
"currency": "EUR",
"tax_rate": {
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a0f",
"rate": 21
},
"stock": 120,
"gallery": [
{
"index": 0,
"url": "https://files.factuarea.com/products/key-rgb-01-front.jpg",
"content_type": "image/jpeg"
}
],
"video": {
"url": "https://files.factuarea.com/products/key-rgb-01-demo.mp4",
"content_type": "video/mp4"
},
"is_active": true,
"description": "Teclado mecánico retroiluminado RGB con switches Cherry MX Red y carcasa de aluminio.",
"tags": [
"periféricos",
"gaming"
],
"low_stock_threshold": 10,
"is_low_stock": false,
"is_in_stock": true,
"specifications": {
"switch": "Cherry MX Red",
"layout": "ES",
"conexion": "USB-C"
},
"metadata": {
"erp_code": "IVA-GEN",
"ledger_account": "477000"
},
"external_id": "SHOP-42",
"created_at": "2026-01-02T08:30:00Z",
"updated_at": "2026-01-02T08:30:00Z"
}
],
"has_more": true,
"next_cursor": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a0c"
}{
"error": {
"type": "authentication_error",
"code": "missing_api_key",
"message": "No se ha proporcionado una API key válida en el header Authorization.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#missing_api_key",
"request_id": "req_01HKQS5N8VR7QXJ9K3T6BWPMZA"
}
}{
"error": {
"type": "authorization_error",
"code": "insufficient_scope",
"message": "Esta API key no tiene el scope requerido para esta operación.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#insufficient_scope",
"request_id": "req_01HKQS5NBC3P8M1KX4V7SLNHQD"
}
}{
"error": {
"type": "invalid_request_error",
"code": "parameter_invalid",
"message": "El campo `name` es obligatorio y no puede estar vacío.",
"param": "name",
"doc_url": "https://docs.factuarea.com/guides/errors#parameter_invalid",
"request_id": "req_01HKQS5NGS8Z3T6Q1D2E7FYVSI"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Has excedido el rate limit de 60 peticiones por minuto. Reintenta tras 30 segundos.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#rate_limit_exceeded",
"request_id": "req_01HKQS5NKW1C6W9T4G5H0JBZVL"
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "Ha ocurrido un error inesperado. Si persiste, contacta con soporte adjuntando el request_id.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#internal_error",
"request_id": "req_01HKQS5NLX2D7X0U5H6J1KCAWM"
}
}Upload a gallery image to a product
Attach an image (jpeg, png, jpg, gif or webp; up to 3 MB) to the product gallery. Returns the updated product. Fails with 422 if the gallery limit is exceeded.
List products below the stock threshold
Return products whose current stock is below their configured low-stock threshold. Useful for inventory alerts.