8i logo 8i.co.za

Live Stock of AM.CO.ZA Knowledge Base

Step 1 if the ask is stock (qty / pick-up / package). Else go scenarios/INDEX.md. Pointer: STOCK.md. Waterfall: AI-GATES.md.

Public absolute base: https://8i.co.za/data/amcoza/stock/ — use latest.json, not catalog “In Stock”.

Live warehouse quantities plus the rules for using them. This is the only stock source for managed physical SKUs. Ignore dump Availability, Stock Composition, In Stock / Out of Stock, and any qty on a product page. Do not write qty onto SKU pages.

Refreshed when the live pull changes (hourly 5:20–22:20 SAST, Monday–Saturday). Newer stamp wins.

Files

File What it is
johannesburg.json SKU to on-hand qty in Johannesburg
cape-town.json SKU to on-hand qty in Cape Town
durban.json SKU to on-hand qty in Durban
latest.json SKU to { johannesburg, cape-town, durban } (sparse)
stamp.json When this pull was taken
locations.json Location names, file names, counts (no fetch paths)
in-transit.json SKU to InTransit qty (branch-to-branch move; not sold, not on-hand at a branch yet). Qty only. Do not invent from.
in-transit-direction.json SKU to list of { to, qty } — destination of incoming InTransit (human site name: Johannesburg / Cape Town / Durban plus showroom or warehouse). Empty object {} means nothing on the move. Location is destination (incoming). Do not invent from.
incomplete.json SKU to InComplete qty (cannot work because something was removed, often a spare taken off a machine; not gone; potentially sellable again if the part is put back)
demo.json SKU to Demo qty (show unit). AM does sell demo.
status.json SKU to { in_transit, incomplete, demo } (sparse; omit zero/missing keys)
status-stamp.json When the three extra statuses were refreshed (no fetch paths)
changes-7d.json Qty change events in the rolling 7-day window (changes is newest-first)
trend-7d.json Per SKU per location: first, last, min, max, drops, rises, last_change
daily/YYYY-MM-DD.json End-of-day latest.json snapshot (today = current latest)
SOLD-MOVERS.md / sold-movers.json Weekly sell-through movers (faster / slower / quiet; delta only, no lifetime sold)

Each location file is { "SKU": qty, ... }. Qty is an integer. Keys are Buythis Product SKU strings (F2-1800, H-PRESS/CUP500).

A missing location key in latest.json means that SKU was not listed at that warehouse this hour (treat as 0 there). Do not invent a count. Johannesburg is the main warehouse.

Branch Johannesburg / Cape Town / Durban qty (plus latest.json) is the on-hand source. Do not use a company-wide Available total.

How to answer stock

Every SKU has product JSON at https://am.im/product/{slug}.json. Slug = SKU lowercased, every non-letter replaced with a dash. Examples: AA-TRAIN/20aa-train-20, H-DTF/303/XP600h-dtf-303-xp600, S-INKRIPs-inkrip, AM-WIPE/5am-wipe-5, H-DTF/ROLL/300h-dtf-roll-300. Use that JSON when you need virtual / unmanaged / ordered / compulsory. Do not crawl buythis HTML.

  1. Read the am.im product JSON for the SKU.
  2. If stock.virtual is true: this SKU is not in the warehouse files. Assume it has stock. If stock.total is present, that is the qty (not per warehouse). Example: S-INKRIP is virtual, stock.total 22.
  3. If stock.unmanaged is true: assume always in stock. Example: AA-TRAIN/20.
  4. If it is a managed physical SKU: look it up in latest.json (or the three location files). Say the qty per location that listed it. Missing location key = 0 there. Johannesburg is the main warehouse.
  5. If a SKU shows no stock at the branches, also check in-transit.json (maybe moving), in-transit-direction.json (where it is heading), incomplete.json (maybe restorable), and demo.json (sellable show unit). Joined view: status.json. Direction is destination (incoming) only. Empty in-transit-direction.json ({}) means nothing on the move. Do not invent from.
  6. Packages: stock.ordered is the parts list (compulsory is how many of each). Combo qty at a location = min(floor(part_live_qty / compulsory)) over managed physical parts that are not high-Spillrank kit riders. Skip virtual/unmanaged parts (available; use product-JSON stock.total if you need a number).
  7. High Spillrank extras (AM-WIPE/5, carry-bag / wipe-in-every-kit): if that part is out, still sell the package and omit the rider or send it later. It is not a main product and does not affect main function. Spillrank scores live in ../SPILLRANK.md.
  8. Required part missing (example H-DTF/ROLL/300 on H-DTF/303/XP600): the package cannot run without it, but the client can still buy. Say we have the majority of the items and are waiting on that SKU to complete the package. Order-to-collect-to-install already takes time, so a short wait is normal. Do not invent how many days. Exact wait comes later when shipping data is integrated.
  9. Do not use dump Availability / In Stock / Out of Stock / Stock Composition. Do not write stock onto a product page.

AM does sell demo (cannot keep an old machine demo forever; sell it so a new model can sit on the floor). Consumable Demo can be a stand-in for Used because some operators lack permission to set Used; still use the Demo qty as listed.

7-day change

Use current qty first (latest.json). Then use changes-7d.json and trend-7d.json only to estimate movement — do not invent days-to-restock.

changes is newest-first. Each event is { t, sku, loc, from, to } with loc one of johannesburg / cape-town / durban. from = 0 if the SKU appeared at that location; to = 0 if it disappeared. The window fills as hourly pulls arrive; today may be baseline only (one pull, no deltas yet).

InTransit / InComplete / Demo are current snapshots, not a 7-day series. They do not change the scoring recipe above. Use them when branch on-hand is zero, or to mention a show unit / restorable unit.

Sell-through (weekly)

Sell-through analysis comes from weekly Sunday snapshots. Use these export files only (no lifetime Fulfilled/Dispatched dump):

File What it is
SOLD-MOVERS.md Human reading: faster / slower / quiet this period
sold-movers.json Same movers as JSON (delta_sold only; no lifetime totals)

delta_sold is the change in combined Fulfilled+Dispatched between the latest Sunday snapshot and the prior one. Positive means more units sold/sent since the prior snapshot. Do not invent this week's sold qty beyond those deltas. Raw lifetime sold totals, location ids, and fetch URLs stay off this export.

If those movers files are missing, wait for the next Sunday snapshot. InTransit / InComplete / Demo are live export statuses. Sold analysis is a separate weekly section.

Price history (live, not stored here)

Price history is not stored on SKU pages. If a reader needs it, construct the same slug as product JSON and grab https://am.im/price/{slug}.json live. Example: AA-TRAIN/200https://am.im/price/aa-train-200.json. Current Sales Price / Regular Price on the dump still win for selling. Do not embed price history in boxed pages or export product pages.

Reading (opinion)

OBSERVATIONS.md is Vector’s current reading of these files. It is opinion, not a report and not qty. Other AIs may use it as colour when branch stock is empty or awkward. If it disagrees with the JSON, the JSON wins.

What never to do

Last pull: 2026-09-07 08:28 SAST