This API exposes the Zederkof Stock system as read-only JSON. Every endpoint
is a GET request — there are no write operations. Data covers products,
stock levels, alert rules, stockout history, demand forecasts, sales aggregates and more.
All data endpoints require a read-only access token. Admins can create and
revoke named tokens (zk_ro_…) in the admin panel under
Settings → Konto → API-tokens; the full token is shown only once.
Send it as a Bearer token:
Authorization: Bearer YOUR_READONLY_TOKEN
or, alternatively, as a header:
X-API-Key: YOUR_READONLY_TOKEN
/api/v1), /health,
/docs and /openapi.json do not require a token. Everything else returns
401 without a valid key. Requests other than GET return 405.https://stock.zederkof.dk/api/v1
curl -H "Authorization: Bearer YOUR_READONLY_TOKEN" \
"https://stock.zederkof.dk/api/v1/products?stockStatus=no-stock&limit=20"
List endpoints return a consistent envelope:
{
"data": [ /* array of items */ ],
"pagination": { "page": 1, "limit": 100, "total": 1234, "totalPages": 13, "hasMore": true },
"meta": { "resource": "products", "version": "1.0.0", "generatedAt": "2026-06-24T10:00:00.000Z" }
}
Single-resource endpoints return { "data": { ... }, "meta": { ... } }.
Errors return { "error": { "code": "...", "message": "..." } }.
| Code | Meaning |
|---|---|
200 | OK |
401 | Missing / invalid token |
404 | Unknown resource or item not found |
405 | Non-GET method (read-only API) |
500 | Server error |
/api/v1
API discovery index (no auth). Lists all resources and links.
/api/v1/health
Health check (no auth).
/api/v1/docs
This HTML documentation page (no auth).
/api/v1/openapi.json
OpenAPI 3.0 specification (no auth).
/api/v1/summary
Aggregate dashboard counts for the whole system.
/api/v1/products
List products with stock levels.
page — Page number (default 1).limit — Items per page (default 100, max 500).search — Free-text match on id, description, sku, variantCode.stockStatus — in-stock | no-stock | all (default all).productStatuses — Comma-separated lifecycle statuses: BESTILLING, LAGERVARER, SÆSON, UDGÅR, UKENDT.category — Filter by exact category.sku — Filter by exact SKU.favorites — true = only favorited products.hasForecast — true = only products with demand forecasts.sort — sku | description | availableForSale | lastUpdated | lastStockActivity | category | productStatus | id.order — asc | desc (default asc)./api/v1/products/{idOrSku}
A single product by BC systemId or SKU, including alerts, BOM and assembly components.
/api/v1/categories
Distinct product categories with product counts.
/api/v1/alerts
Stock-level alert rules (thresholds + seasonal windows).
productId — Filter by product id.sku — Filter by SKU.page — Page number.limit — Items per page./api/v1/stockouts/daily
Day-by-day lost sales / lost quantity during stockouts.
sku — Filter by SKU.startDate — YYYY-MM-DD inclusive lower bound.endDate — YYYY-MM-DD inclusive upper bound.page — Page number.limit — Items per page./api/v1/stockouts/events
Zero / restock events with their causes.
sku — Filter by SKU.eventType — zero | restock.startDate — YYYY-MM-DD inclusive lower bound.endDate — YYYY-MM-DD inclusive upper bound.page — Page number.limit — Items per page./api/v1/stockouts/periods
Ledger-derived stockout periods (start, end, days out).
sku — Filter by SKU.ongoing — true = only currently-open periods (no end date).page — Page number.limit — Items per page./api/v1/forecasts
Seasonal demand forecasts & reorder points (per SKU / variant / month).
sku — Filter by SKU.variantCode — Filter by variant code.month — Month 1–12.page — Page number.limit — Items per page./api/v1/sales-cache
Cached sales aggregates used for stockout analysis.
sku — Filter by SKU.includeRaw — true = include the cached_data JSON blob.page — Page number.limit — Items per page./api/v1/calendar-events
Calendar events used for chart highlights.
/api/v1/sku-merge-groups
SKU merge groups with their members.
/api/v1/favorites
Favorited products.
/api/v1/assembly-components
BOM relations (parent SKU -> component SKU with quantity per unit).
parentSku — Filter by parent SKU.componentSku — Filter by component SKU.page — Page number.limit — Items per page.A machine-readable spec is available at https://stock.zederkof.dk/api/v1/openapi.json.