SKUs
List SKUs
Section titled “List SKUs”Returns a paginated list of SKUs (products) from your inventory.
POST
/api/v1/skusQuery Parameters
Section titled “Query Parameters”| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 1000 | Number of results per page (1-5000) |
offset | integer | 0 | Number of results to skip |
aggregation_level | string | SKU | SKU (aggregated, default) or SKU_LOCATION (broken down by warehouse) |
Request Body (optional)
Section titled “Request Body (optional)”| Field | Type | Default | Description |
|---|---|---|---|
name_like | string | - | Search by product or SKU name |
with_digital | boolean | false | Include digital products |
with_bundle | boolean | false | Include bundle products |
with_material | boolean | false | Include raw materials |
with_archived | boolean | false | Include archived SKUs |
with_draft | boolean | true | Include draft SKUs |
Example Request
Section titled “Example Request”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"}'import requests
response = requests.post( "https://api.prediko.io/api/v1/skus", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, params={"limit": 100}, json={"name_like": "widget"})skus = response.json()const response = await fetch( "https://api.prediko.io/api/v1/skus?limit=100", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, body: JSON.stringify({ name_like: "widget" }) });const skus = await response.json();Response
Section titled “Response”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 } ], "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 } ], "pagination": { "total": 2, "limit": 100, "offset": 0, "has_more": false }}Response Fields
Section titled “Response Fields”Pagination Object
Section titled “Pagination Object”| Field | Type | Description |
|---|---|---|
total | integer | Total number of SKUs |
limit | integer | Number of results per page |
offset | integer | Number of results skipped |
has_more | boolean | Whether more results exist |
SKU Object (aggregation_level=SKU)
Section titled “SKU Object (aggregation_level=SKU)”| Field | Type | Description |
|---|---|---|
sku_id | string | Unique SKU identifier (UUID) |
sku_name | string | SKU identifier |
product_name | string | Product name |
sum_stock_level | number | Total stock across all warehouses |
sum_incoming_units | number | Total units on order |
buying_date | date | Recommended next buying date |
stock_health_projected | object | Stock health counts per status: {EXCESS, AT_RISK, STOCK_OUT} |
days_on_hand | object | Days of stock remaining: {min, max} |
estimated_stock_out_days_incoming | object | Days until stockout including incoming: {min, max} |
unit_cost | number | Base unit cost from Shopify in tenant’s main currency |
unit_cost_supplier | number | Unit cost specific to the SKU-supplier relationship (in supplier currency). Optional |
unit_costs_supplier | array | List of all supplier unit costs linked to this SKU. Each item contains supplier_name, unit_cost, and currency. Optional |
bom_cost | number | Bill of materials cost. Optional |
SKU Object (aggregation_level=SKU_LOCATION)
Section titled “SKU Object (aggregation_level=SKU_LOCATION)”| Field | Type | Description |
|---|---|---|
sku_id | string | Unique SKU identifier (UUID) |
warehouse_id | string | Unique warehouse identifier (UUID) |
sku_name | string | SKU identifier |
product_name | string | Product name |
warehouse_name | string | Warehouse name |
sum_stock_level | number | Stock level at this warehouse |
sum_incoming_units | number | Units on order for this warehouse |
buying_date | date | Recommended next buying date |
stock_health_projected | string | Stock health status: EXCESS, HEALTHY, AT_RISK, STOCK_OUT |
days_on_hand | integer | Days of stock remaining |
estimated_stock_out_days_incoming | number | Days until stockout including incoming |
unit_cost | number | Base unit cost from Shopify in tenant’s main currency |
unit_cost_supplier | number | Unit cost specific to the SKU-supplier relationship (in supplier currency). Optional |
unit_costs_supplier | array | List of all supplier unit costs linked to this SKU. Each item contains supplier_name, unit_cost, and currency. Optional |
bom_cost | number | Bill of materials cost. Optional |
Aggregation Levels
Section titled “Aggregation Levels”- SKU: Returns inventory aggregated by SKU across all warehouses (default). Fields like
stock_health_projectedanddays_on_handreturn min/max ranges across warehouses. - SKU_LOCATION: Returns inventory broken down by each warehouse location. Each SKU appears once per warehouse with specific values.
Filtering Examples
Section titled “Filtering Examples”Include raw materials
Section titled “Include raw materials”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}'Include archived and exclude drafts
Section titled “Include archived and exclude drafts”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}'Error Responses
Section titled “Error Responses”| Status | Description |
|---|---|
| 400 | Invalid limit parameter (exceeds 5000) |
| 401 | Invalid or missing API key |
| 500 | Internal server error |