Skip to main content

Strains (Catalogue)

Endpoint reference: ✅ Verified live against production on 10 May 2026. Strains are the products in your store. The Dr Green platform handles inventory and fulfilment; your job is to surface the catalogue, filtered to what’s available in the customer’s country, and link strain selections into orders.

Endpoints

Both routes accept DualAuthGuard — JWT (DAPP UI) or API-key+signature (your store).

GET /dapp/strains

List strains available in the given country. Returns a paginated wrapper.

Query parameters

Canonical payload (for signing)

urlencode(query) — e.g. countryCode=GBR&page=1&limit=10

Response shape (verified)

Strain summary object

The strains[] items contain the fields needed to render a catalogue card. The full schema isn’t formally declared in the OpenAPI spec; the verified shape from production includes:
⚠️ Field set varies by deployment. Always defensively read fields (strain.imageUrl ?? null) — fields can be added without notice.

Worked examples

cURL:
Node.js / TypeScript:
Python:
PHP:

Errors specific to this endpoint


GET /dapp/strains/{strainId}

Get one strain with full detail. Use this when rendering a strain detail page or refreshing data on an item already in the cart.

Path parameters

Canonical payload (for signing)

{} — no query params, the empty-params fallback. Not "". See 02-authentication.md § Canonical payload.

Response shape

Worked example (cURL)

Errors


Image URLs

Strain imageUrl values come in two forms:
  1. A bare filename / S3 key — e.g. 33eac80b-58c4-46d3-a82b-b70c875d333f-cakes-and-cream.png
  2. A full URL — e.g. https://cdn.drgreennft.com/strains/...
Defensively prefix bare keys with the Dr Green CDN base when rendering:
🔒 The CDN base URL for bare-key images is not formally documented and may differ between staging and production. Confirm with Dr Green; I’ve inferred this pattern from production but haven’t verified the exact base.

Caching guidance

The catalogue changes infrequently — new strains land, occasionally one is removed. Cache aggressively:
  • List response: TTL 5 minutes per (countryCode, page, limit, search) cache key.
  • Detail response: TTL 10 minutes per strainId.
  • 404 on detail: drop the strain from your local index immediately and refresh the list.

See also

  • Carts — adding strains to a customer’s cart
  • Orders — placing orders, including the strain price snapshot at order time
  • Revenue — sales aggregated by strain