🔌 API docs
Read-only static JSON · GET only · Access-Control-Allow-Origin: * · cache max-age=300, stale-while-revalidate=86400.
Endpoints
openapi.json →| Path | What |
|---|---|
/api/v1/shops.json | Shop directory (slug, name, city, menu dates). |
/api/v1/leaderboard.json | Ranked best price per strain + median deltas. |
/api/v1/geo.json | Geolocated shops (lat/lon). |
/api/v1/history.json | Price points over time per shop × strain. |
/api/v1/meta.json | Build meta (since, counts). |
/api/v1/shop-profiles.json | Deals won / exclusives per shop. |
/search-index-manifest.json | Search shards (shard, file, count, bytes) + total. |
/search-index-[shard].json | Shard by category+initial, same shape as search-index.json. |
/search-index.json | Full search index (compat). |
Example: curl https://amsterdamcoffeeshopmenus.eu/api/v1/shops.json
❓ Frequently asked questions
What is /api/v1?
A read-only static JSON API over the same checked menu data the site renders. GET only, CORS open, cached 5 minutes with stale-while-revalidate.
Which endpoints exist?
Shops, leaderboard, geo, history, meta and the sharded search index plus manifest. See openapi.json for the exact list.
May I hotlink in production?
Yes for GET with attribution and caching. Prices are info-only and can be old; always show menu dates.