Skip to content

SKUs

Returns a paginated list of SKUs (products) from your inventory.

POST/api/v1/skus
ParameterTypeDefaultDescription
limitinteger1000Number of results per page (1-5000)
offsetinteger0Number of results to skip
aggregation_levelstringSKUSKU (aggregated, default), SKU_LOCATION (broken down by warehouse), or PRODUCT (aggregated by product)
FieldTypeDefaultDescription
name_likestring-Search by product or SKU name
with_digitalbooleanfalseInclude digital products
with_bundlebooleanfalseInclude bundle products
with_materialbooleanfalseInclude raw materials
with_archivedbooleanfalseInclude archived SKUs
with_draftbooleantrueInclude draft SKUs
Terminal window
curl -X POST "https://api.prediko.io/api/v1/skus?limit=100" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name_like": "widget"}'

The response format differs based on the aggregation_level parameter.

Response with aggregation_level=SKU (default)

Section titled “Response with aggregation_level=SKU (default)”
{
"data": [
{
"sku_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"sku_name": "VN-03-white-7",
"product_name": "VANS | AUTHENTIC (BUTTERFLY) TRUE | WHITE / BLACK",
"sum_stock_level": 23.0,
"sum_incoming_units": 0.0,
"buying_date": "2026-01-20",
"stock_health_projected": {
"EXCESS": 1,
"AT_RISK": 1,
"STOCK_OUT": 1
},
"days_on_hand": {
"min": 0.0,
"max": 511.0
},
"estimated_stock_out_days_incoming": {
"min": 0.0,
"max": 0.0
},
"unit_cost": 45.00,
"unit_cost_supplier": 38.50,
"unit_costs_supplier": [
{"supplier_name": "VANS", "unit_cost": 38.50, "currency": "EUR"},
{"supplier_name": "Alternate Supplier", "unit_cost": 42.00, "currency": "USD"}
],
"bom_cost": 12.50,
"retail_price": 89.90,
"re_order_status": true,
"supplier_name": "VANS",
"recommended_units_to_order": 150,
"lead_time_to": "2026-04-15",
"abc_category": "A",
"weekly_quantity": 18,
"monthly_quantity": 74,
"quarterly_quantity": 210,
"yearly_quantity": 880,
"weekly_plan_quantity": 21,
"monthly_plan_quantity": 80,
"quarterly_plan_quantity": 240,
"yearly_plan_quantity": 960,
"weekly_sales": 810.0,
"monthly_sales": 3330.0,
"quarterly_sales": 9450.0,
"yearly_sales": 39600.0,
"weekly_plan_sales": 945.0,
"monthly_plan_sales": 3600.0,
"quarterly_plan_sales": 10800.0,
"yearly_plan_sales": 43200.0
}
],
"pagination": {
"total": 150,
"limit": 100,
"offset": 0,
"has_more": true
}
}

Response with aggregation_level=SKU_LOCATION

Section titled “Response with aggregation_level=SKU_LOCATION”
{
"data": [
{
"sku_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"warehouse_id": "f1e2d3c4-b5a6-7890-fedc-ba0987654321",
"sku_name": "SKU-001",
"product_name": "Widget Pro",
"warehouse_name": "Main Warehouse",
"sum_stock_level": 300.0,
"sum_incoming_units": 100.0,
"buying_date": "2025-02-01",
"stock_health_projected": "HEALTHY",
"days_on_hand": 45,
"estimated_stock_out_days_incoming": 90.0,
"unit_cost": 45.00,
"unit_cost_supplier": 38.50,
"unit_costs_supplier": [
{"supplier_name": "Acme Corp", "unit_cost": 38.50, "currency": "EUR"}
],
"bom_cost": null,
"retail_price": 89.90,
"re_order_status": true,
"supplier_name": "Acme Corp",
"recommended_units_to_order": 50,
"lead_time_to": "2026-03-20",
"abc_category": "A"
}
],
"pagination": {
"total": 2,
"limit": 100,
"offset": 0,
"has_more": false
}
}
{
"data": [
{
"product_name": "VANS | AUTHENTIC (BUTTERFLY) TRUE | WHITE / BLACK",
"sum_stock_level": 230.0,
"sum_incoming_units": 50.0,
"buying_date": "2026-01-20",
"stock_health_projected": {
"EXCESS": 2,
"HEALTHY": 5,
"AT_RISK": 1
},
"days_on_hand": {
"min": 10.0,
"max": 511.0
},
"estimated_stock_out_days_incoming": {
"min": 0.0,
"max": 120.0
},
"unit_cost": 45.00,
"unit_cost_supplier": 38.50,
"unit_costs_supplier": [
{"supplier_name": "VANS", "unit_cost": 38.50, "currency": "EUR"}
],
"bom_cost": 12.50,
"retail_price": {
"min": 79.90,
"max": 99.90
},
"re_order_status": {"True": 8, "False": 3},
"supplier_name": "VANS",
"recommended_units_to_order": 350,
"lead_time_to": "2026-04-15",
"abc_category": ["A", "B"]
}
],
"pagination": {
"total": 50,
"limit": 100,
"offset": 0,
"has_more": false
}
}
FieldTypeDescription
totalintegerTotal number of SKUs
limitintegerNumber of results per page
offsetintegerNumber of results skipped
has_morebooleanWhether more results exist
FieldTypeDescription
sku_idstringUnique SKU identifier (UUID)
sku_namestringSKU identifier
product_namestringProduct name
sum_stock_levelnumberTotal stock across all warehouses
sum_incoming_unitsnumberTotal units on order
buying_datedateRecommended next buying date
stock_health_projectedobjectStock health counts per status: {EXCESS, AT_RISK, STOCK_OUT}
days_on_handobjectDays of stock remaining: {min, max}
estimated_stock_out_days_incomingobjectDays until stockout including incoming: {min, max}
unit_costnumberBase unit cost from Shopify in tenant’s main currency
unit_cost_suppliernumberUnit cost specific to the SKU-supplier relationship (in supplier currency). Optional
unit_costs_supplierarrayList of all supplier unit costs linked to this SKU. Each item contains supplier_name, unit_cost, and currency. Optional
bom_costnumberBill of materials cost. Optional
retail_pricenumberCurrent Shopify selling price, in your store’s default currency. Same value as retail_price on purchase-order lines — it is the live catalogue price, not the price at any past date. Omitted when Prediko holds no price for the SKU in that currency (raw materials, for example)
re_order_statusbooleanWhether the SKU is set to re-order (buyable)
supplier_namestringName of the primary supplier
recommended_units_to_orderintegerRecommended number of units to order
lead_time_tostringExpected delivery date for the next order (ISO date)
abc_categorystringName of the ABC category the SKU falls into (typically A, B or C). null if ABC is not configured for your account, or the SKU is not yet classified
weekly_quantitynumberUnits sold in the last 7 days
monthly_quantitynumberUnits sold in the last month
quarterly_quantitynumberUnits sold in the last 3 months
yearly_quantitynumberUnits sold in the last 12 months
weekly_plan_quantitynumberForecast unit sales plan for the next 7 days
monthly_plan_quantitynumberForecast unit sales plan for the next month
quarterly_plan_quantitynumberForecast unit sales plan for the next 3 months
yearly_plan_quantitynumberForecast unit sales plan for the next 12 months
weekly_salesnumberSales revenue in the last 7 days
monthly_salesnumberSales revenue in the last month
quarterly_salesnumberSales revenue in the last 3 months
yearly_salesnumberSales revenue in the last 12 months
weekly_plan_salesnumberForecast sales revenue plan for the next 7 days
monthly_plan_salesnumberForecast sales revenue plan for the next month
quarterly_plan_salesnumberForecast sales revenue plan for the next 3 months
yearly_plan_salesnumberForecast sales revenue plan for the next 12 months

SKU Object (aggregation_level=SKU_LOCATION)

Section titled “SKU Object (aggregation_level=SKU_LOCATION)”
FieldTypeDescription
sku_idstringUnique SKU identifier (UUID)
warehouse_idstringUnique warehouse identifier (UUID)
sku_namestringSKU identifier
product_namestringProduct name
warehouse_namestringWarehouse name
sum_stock_levelnumberStock level at this warehouse
sum_incoming_unitsnumberUnits on order for this warehouse
buying_datedateRecommended next buying date
stock_health_projectedstringStock health status: EXCESS, HEALTHY, AT_RISK, STOCK_OUT
days_on_handintegerDays of stock remaining
estimated_stock_out_days_incomingnumberDays until stockout including incoming
unit_costnumberBase unit cost from Shopify in tenant’s main currency
unit_cost_suppliernumberUnit cost specific to the SKU-supplier relationship (in supplier currency). Optional
unit_costs_supplierarrayList of all supplier unit costs linked to this SKU. Each item contains supplier_name, unit_cost, and currency. Optional
bom_costnumberBill of materials cost. Optional
retail_pricenumberCurrent Shopify selling price, in your store’s default currency. Same value as retail_price on purchase-order lines — it is the live catalogue price, not the price at any past date. Omitted when Prediko holds no price for the SKU in that currency (raw materials, for example)
re_order_statusbooleanWhether the SKU is set to re-order (buyable)
supplier_namestringName of the primary supplier
recommended_units_to_orderintegerRecommended number of units to order
lead_time_tostringExpected delivery date for the next order (ISO date)
abc_categorystringName of the ABC category the SKU falls into. ABC is classified per SKU, so this is the same value at every warehouse
weekly_quantitynumberUnits sold in the last 7 days
monthly_quantitynumberUnits sold in the last month
quarterly_quantitynumberUnits sold in the last 3 months
yearly_quantitynumberUnits sold in the last 12 months
weekly_plan_quantitynumberForecast unit sales plan for the next 7 days
monthly_plan_quantitynumberForecast unit sales plan for the next month
quarterly_plan_quantitynumberForecast unit sales plan for the next 3 months
yearly_plan_quantitynumberForecast unit sales plan for the next 12 months
weekly_salesnumberSales revenue in the last 7 days
monthly_salesnumberSales revenue in the last month
quarterly_salesnumberSales revenue in the last 3 months
yearly_salesnumberSales revenue in the last 12 months
weekly_plan_salesnumberForecast sales revenue plan for the next 7 days
monthly_plan_salesnumberForecast sales revenue plan for the next month
quarterly_plan_salesnumberForecast sales revenue plan for the next 3 months
yearly_plan_salesnumberForecast sales revenue plan for the next 12 months
FieldTypeDescription
product_namestringProduct name
sum_stock_levelnumberTotal stock across all warehouses
sum_incoming_unitsnumberTotal units on order
buying_datedateRecommended next buying date
stock_health_projectedobjectStock health counts per status: {EXCESS, HEALTHY, AT_RISK, STOCK_OUT}
days_on_handobjectDays of stock remaining: {min, max}
estimated_stock_out_days_incomingobjectDays until stockout including incoming: {min, max}
unit_costnumberBase unit cost from Shopify in tenant’s main currency
unit_cost_suppliernumberUnit cost specific to the supplier relationship. Optional
unit_costs_supplierarrayList of all supplier unit costs. Each item contains supplier_name, unit_cost, and currency. Optional
bom_costnumberBill of materials cost. Optional
retail_priceobjectCurrent Shopify selling price across the product’s SKUs: {min, max}, in your store’s default currency. See the SKU-level field for the price’s meaning
re_order_statusobjectDistribution of re-order status across SKUs: {True: count, False: count}
supplier_namestringName of the primary supplier
recommended_units_to_orderintegerRecommended number of units to order (aggregated across SKUs)
lead_time_tostringExpected delivery date for the next order (ISO date)
abc_categoryarrayDistinct ABC categories across the product’s SKUs, e.g. ["A", "B"]. Empty when none of the SKUs are classified
  • SKU: Returns inventory aggregated by SKU across all warehouses (default). Fields like stock_health_projected and days_on_hand return min/max ranges across warehouses.
  • SKU_LOCATION: Returns inventory broken down by each warehouse location. Each SKU appears once per warehouse with specific values.
  • PRODUCT: Returns inventory aggregated by product. SKU-level fields (sku_id, sku_name) are not included. Fields like re_order_status return distributions across SKUs.
Terminal window
curl -X POST "https://api.prediko.io/api/v1/skus" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"with_material": true}'
Terminal window
curl -X POST "https://api.prediko.io/api/v1/skus" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"with_archived": true, "with_draft": false}'
StatusDescription
400Invalid limit parameter (exceeds 5000)
401Invalid or missing API key
500Internal server error

Updates attributes on one or more SKUs. The same patch is applied to every SKU in sku_ids.

PATCH/api/v1/skus
FieldTypeRequiredDescription
sku_idsstring[]yesSKU ids to update (1–200 per call). Take these from the sku_id field of List SKUs.
patchobjectyesAttributes to apply. At least one field must be supplied.

All patch fields are optional — omitted fields are left untouched — but the patch must not be empty.

FieldTypeDescription
re_order_statusbooleantrue = Yes (replenishable, included in reorder recommendations), false = No (excluded from replenishment). Same field returned by List SKUs.
Terminal window
curl -X PATCH "https://api.prediko.io/api/v1/skus" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sku_ids": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"7c9e6679-7425-40de-944b-e07fc1f90ae7"
],
"patch": { "re_order_status": false }
}'
{
"updated_count": 2,
"sku_ids": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"7c9e6679-7425-40de-944b-e07fc1f90ae7"
],
"applied": {
"re_order_status": false
}
}
FieldTypeDescription
updated_countintegerNumber of SKUs updated
sku_idsstring[]The SKU ids that were updated
appliedobjectThe attributes applied to every listed SKU. Patch fields you omitted are not echoed.

The update is all-or-nothing: if any id in sku_ids cannot be resolved, the whole request is rejected with a 404 and no SKU is modified.

StatusDescription
401Invalid or missing API key
404One or more sku_ids do not exist in your tenant. Deleted SKUs are also reported here.
422Validation error — empty list, more than 200 ids, duplicate ids, a malformed id, an empty patch, or a bundle SKU set to true
500Internal server error
502Could not resolve the SKUs from the internal service