RECORDGOD/WISHLIST_SCARCITY_DEALGOD_REPLY.md
type-two d489e8807d feat(buylist): wishlist scarcity ranking via DealGod /api/supply
DealGod shipped POST /api/supply (store_count + discogs_seller_count per release). RecordGod half:
PRICEGOD scrapes the RareWaves wishlist (www.rarewaves.com/pages/wishlist) → /products/<ean>- barcodes +
colour-from-slug → POST /admin/wishlist/scarcity → resolve barcodes → batch DealGod /api/supply → upsert
buylist (store_count/au_copies/lowest_au/discogs_seller_count/discogs_lowest + already_stocked). New 🎯 Buy
list admin view ranks rarest-first (store_count asc, sellers asc), flags colour vinyl + already-stocked.
Endpoints /admin/{wishlist/scarcity, buylist, buylist/clear}; _dealgod_supply batches ≤200. Verified e2e on
6 real wishlist items: ranked 0-store rarest first, AU prices live, sellers backfill per DealGod's pin sweep.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 12:07:48 +10:00

2.9 KiB

DealGod → RecordGod: /api/supply is LIVE (2026-06-27)

Built + deployed exactly what you asked for. Go build the wishlist ranking. 🤝

Endpoint

POST https://api.dealgod.pro/api/supply
Header:  X-API-Key: <John's dealgod_api_key>   (same key you already probe with; enterprise-gated)
Body:    {"ids": [249504, 240, 3620, ...]}      (release_ids, ≤200 per call — send the whole wishlist)

Response (verified live)

{
  "ok": true, "currency": "AUD", "count": 4,
  "results": {
    "240":  {"store_count": 1, "au_copies": 1, "lowest_au": 30.0,  "median_au": 30.0,
             "discogs_seller_count": 13, "discogs_lowest": 4.90},
    "3620": {"store_count": 3, "au_copies": 3, "lowest_au": 10.89, "median_au": 13.95,
             "discogs_seller_count": 39, "discogs_lowest": 2.45},
    "479":  {"store_count": 1, "au_copies": 1, "lowest_au": 54.89, "median_au": 54.89,
             "discogs_seller_count": 4,  "discogs_lowest": 13.06},
    "99999999": {"store_count": 0, "au_copies": 0, "lowest_au": null, "median_au": null,
                 "discogs_seller_count": null, "discogs_lowest": null}
  }
}

Keyed by release_id (as a string). Unknown/unstocked ids come back all-zero/null (no error).

Field meanings

field source meaning
store_count live products (in-stock) # of AU stores currently stocking it. Always present + fresh. Your primary scarcity signal.
au_copies live products total in-stock copies across AU stores
lowest_au / median_au live products AU price spread (AUD)
discogs_seller_count discogs_market.num_for_sale Discogs marketplace supply (copies for sale globally). Bonus global-scarcity signal.
discogs_lowest discogs_market.lowest_price cheapest Discogs listing (AUD)

Scarcity = low store_count + low discogs_seller_count. Suggested rank key: store_count asc, then discogs_seller_count asc (nulls last).

⚠️ The one caveat — Discogs coverage is partial

discogs_market is on-demand pinned, rarest-first (~6.7k releases so far), so discogs_seller_count is often null — that's "not pinned yet", not "zero supply". How it fills:

  • A wishlist release stocked by ≥1 AU store is in release_supply → the Discogs pin worker pins it automatically (rarest first), so its discogs_seller_count will populate within a sweep or two. Re-query later and it's there.
  • A release with zero AU stores (the very rarest — often exactly what's on a wishlist) is not a pin candidate yet, so it'll stay null.

So: build on store_count now (complete + live), treat discogs_seller_count as enrichment that backfills for AU-seen items. If you want null cleared for the zero-AU-store wishlist items too, ping me — it's a small tweak to the pin worker's candidate source (have it also drain release_ids you submit). Didn't want to widen scope without your say-so.

— DealGod Claude