APIStrain

Create or update a strain

POST
/public/v1/strains

Create or update a strain through a single endpoint: omit id to create a new strain, or pass the id of an existing one to update it in place. A strain is a catalog/reference record used to classify products by genetics — it holds no inventory and is not pushed to Metrc or BioTrack, so calling this never moves stock or touches state-compliance traceability. What it does affect is your product catalog and menus: products are grouped under a strain, so renaming a strain or changing its type reflects everywhere that strain is shown, without altering the products themselves. To remove a strain from your catalog entirely, use the delete endpoint instead.

Updates are sparse. Only the fields you send are changed; any field you omit keeps its current value (sending id with just name renames the strain and leaves strain_type untouched). The whole write is a single all-or-nothing operation — if validation fails, nothing is persisted and a 400 is returned with the field errors.

name must be unique within your company; reusing an existing strain's name is rejected with a 400. On success the response is the full created or updated strain, the same shape as show.

Required permission: settings_permissions_strains.

Authorization

Bearer
headerAuthorizationBearer <token>

API token generated in Distru (Settings → Distru API). Send it on every request as Authorization: Bearer YOUR_API_TOKEN.

Request Body

application/json
  1. body
id?string

The Distru id of the strain to update, as returned by list/show/upsert. Omit to create a new strain instead. When present, the strain must belong to your company or the request returns 404. Not a Metrc or other external identifier.

name?string

Display name of the strain (e.g. "Blue Dream"). Required when creating (no id); optional when updating, where omitting it leaves the current name unchanged. Leading/trailing whitespace is trimmed before it is stored and checked. Must be unique within your company — uniqueness is compared exactly and case-sensitively on the trimmed value, so "Blue Dream" and "blue dream" are treated as different names. May not contain special characters. A duplicate or invalid name returns 400.

strain_type?string

The strain's genetic classification, SCREAMING_CASE: INDICA or SATIVA for a pure variety, INDICA_DOMINANT or SATIVA_DOMINANT for a leaning hybrid, HYBRID for a balanced hybrid, or HIGH_CBD. Optional — a strain may have no classification, and omitting this on update leaves the current value unchanged.

Value in"INDICA""INDICA_DOMINANT""SATIVA""SATIVA_DOMINANT""HYBRID""HIGH_CBD"

Response Body

The created or updated strain

*/*
  1. response

A single Strain

data?

A cannabis strain (its genetics), such as "Blue Dream". Products can be linked to a strain to carry its name and type.

Example Request
curl -X POST 'https://app.distru.com/public/v1/strains' \  -H 'Content-Type: application/json' \  -d '{  "name": "Blue Dream",  "strain_type": "HYBRID"}'
Example Response
{  "data": {    "id": "00000000-0000-0000-0000-000000000028",    "inserted_datetime": "2026-08-24T16:01:06.029006Z",    "name": "Blue Dream",    "strain_type": "HYBRID",    "updated_datetime": "2026-08-24T16:01:06.029006Z"  }}