The open TerpTrack
catalog API
Every strain, brand, terpene, dispensary, and lab-tested batch in the catalog is available as a free, public, read-only REST API. No sign-up, no key request. Same data that runs this site, straight from Postgres.
No account, no billing, no quota application. Reasonable use is welcome.
Anyone can read the full catalog with the public key shipped on this page.
The catalog is browse-only. There are no public write endpoints.
Privacy, provable. Only catalog tables are readable with this key. Personal logs (sessions, stash, tolerance, ratings, wishlist) are protected by per-user row-level security and return an empty array to this public key. The same key that reads the whole catalog can't read anyone's personal log. Try it in the explorer below.
Two headers and a URL
Point any HTTP client at the base URL below. Every request needs the public API key in two headers: apikey and Authorization: Bearer. That's the whole authentication story for the catalog.
https://dmskqjivlcrmoxsshbkx.supabase.co/rest/v1sb_publishable_9gVDJCPlrGnfZIj2__MdeA_28Rz8GYqcurl "https://dmskqjivlcrmoxsshbkx.supabase.co/rest/v1/strains?select=slug,name&limit=5" \
-H "apikey: sb_publishable_9gVDJCPlrGnfZIj2__MdeA_28Rz8GYq" \
-H "Authorization: Bearer sb_publishable_9gVDJCPlrGnfZIj2__MdeA_28Rz8GYq"Run a real request
These hit the live API from your browser, no proxy, no mock. Click Run it on any card to see the real JSON response, truncated for readability.
List strains
The canonical strain list. Slug, name, and description, paged to keep payloads small.
/rest/v1/strains?select=slug,name,description&order=name.asc&limit=5Search strains by name
Case-insensitive wildcard match. ilike.*dream* finds Blue Dream, Dream Queen, and friends.
/rest/v1/strains?select=slug,name&name=ilike.*dream*&limit=5High-THC batches with their strain & brand
Lab-tested batches over 20% THC, with the related strain and brand embedded in one round-trip.
/rest/v1/product_batches?select=batch_label,thc_percent_total,total_terpenes_percent,package_date,strains(name),brands(name)&thc_percent_total=gte.20&order=thc_percent_total.desc&limit=5Terpene reference
The terpene encyclopedia: aroma, where else it shows up, common effects, and boiling point for vaping.
/rest/v1/terpenes?select=slug,name,scientific_name,aroma_description,also_found_in,common_effects,boiling_point_c&order=name.asc&limit=5Per-batch terpene readings
Lab results joined across batch_terpenes. Each row links a batch to a terpene with its measured percentage.
/rest/v1/batch_terpenes?select=percentage,terpenes(name),product_batches(batch_label)&order=percentage.desc&limit=5Brands & dispensaries
Producers and storefronts. Small, flat reference tables. Good for building filters or autocompletes.
/rest/v1/brands?select=slug,name&order=name.asc&limit=5Reference tables
Strain types, effects, and consumption methods. The controlled vocabularies behind the catalog.
/rest/v1/strain_types?select=slug,name&order=display_order.ascPrivacy, proven
The same public key against a personal table. RLS returns an empty array. The catalog key can't read anyone's sessions.
/rest/v1/sessions?select=id,notes&limit=5Shape the response
The API is PostgREST, so the whole query language lives in the URL. A few of the moves you'll reach for most:
Pick columns. Smaller payloads, faster reads.
?select=slug,nameOperators: eq, gte, lte, ilike, in, is…
?thc_percent_total=gte.20Case-insensitive wildcard text search.
?name=ilike.*dream*Follow a foreign key in the same request.
?select=name,brands(name)Sort ascending or descending.
?order=created_at.desclimit + offset for classic pagination.
?limit=10&offset=20Add the request header below to get the total row count without fetching every row. PostgREST returns it in the Content-Range response header (e.g. 0-4/2317 → 2,317 total).
Prefer: count=exactBe a good neighbor
There's no hard rate limit, but the API is backed by Supabase and shared by everyone. Be reasonable: cache responses when you can, page through large tables instead of pulling everything at once, and avoid tight polling loops. If you're building something that needs heavy traffic, email hello@terptrack.cloudand we'll figure it out together.
The catalog is free because lab numbers and strain names shouldn't be locked up. Personal data never touches it. That's baked into the database, not just a policy.