🔥 Warehouse HeatmapGet an API key

The API, on one page

Two calls to be live. One bearer key (create it in your workspace under API keys). Batches are safe to retry — duplicate event_ids are ignored. Machine-readable spec: openapi.json.

1 · Describe the warehouse (once)

Three numbers. Aisles accept a range ('A-J') or a list ('A,B,C').

curl -X PUT http://localhost:3000/api/v1/layout \
  -H "Authorization: Bearer hm_live_..." \
  -H "Content-Type: application/json" \
  -d '{"aisles":"A-J","baysPerAisle":20,"levelsPerBay":4}'

2 · Send pick events (whenever)

Each event needs a bin OR a sku. qty defaults to 1, at defaults to now. Up to 5,000 per batch.

curl -X POST http://localhost:3000/api/v1/picks \
  -H "Authorization: Bearer hm_live_..." \
  -H "Content-Type: application/json" \
  -d '{"events":[
    {"event_id":"o-1001-1","bin":"B-12-3","qty":5,"at":"2026-07-19T09:30:00Z"},
    {"event_id":"o-1001-2","sku":"SKU-778","qty":2}
  ]}'
# → {"ok":true,"accepted":2,"deduplicated":0,"rejected":0}

Optional · SKU→bin map

Lets events arrive with only a SKU. Upload once (or via CSV in the dashboard).

curl -X POST http://localhost:3000/api/v1/itembins \
  -H "Authorization: Bearer hm_live_..." \
  -H "Content-Type: application/json" \
  -d '{"map":[{"sku":"SKU-778","bin":"B-12-3"}]}'

Optional · Read the heat back

For your own dashboards. window is 1d–365d.

curl "http://localhost:3000/api/v1/heatmap?window=30d" \
  -H "Authorization: Bearer hm_live_..."
# → { layout, totals, bins:[{code,aisle,bay,level,weight,units,topSku}], insights }

Embed the live map

One script tag (find your embed token under Share & embed). Read-only.

<script src="http://localhost:3000/widget.js" data-token="YOUR_EMBED_TOKEN" data-height="480"></script>

Good to know