Amsterdam Coffeeshop Menus 18+

🔌 API docs

Read-only static JSON · GET only · Access-Control-Allow-Origin: * · cache max-age=300, stale-while-revalidate=86400.

PathWhat
/api/v1/shops.jsonShop directory (slug, name, city, menu dates).
/api/v1/leaderboard.jsonRanked best price per strain + median deltas.
/api/v1/geo.jsonGeolocated shops (lat/lon).
/api/v1/history.jsonPrice points over time per shop × strain.
/api/v1/meta.jsonBuild meta (since, counts).
/api/v1/shop-profiles.jsonDeals won / exclusives per shop.
/search-index-manifest.jsonSearch shards (shard, file, count, bytes) + total.
/search-index-[shard].jsonShard by category+initial, same shape as search-index.json.
/search-index.jsonFull 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.