Create or update a strain
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.
BearerAuthorizationBearer <token>API token generated in Distru (Settings → Distru API). Send it on every request as Authorization: Bearer YOUR_API_TOKEN.
application/json- body
id?stringThe 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?stringDisplay 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?stringThe 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.
"INDICA""INDICA_DOMINANT""SATIVA""SATIVA_DOMINANT""HYBRID""HIGH_CBD"The created or updated strain
*/*- 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.
curl -X POST 'https://app.distru.com/public/v1/strains' \ -H 'Content-Type: application/json' \ -d '{ "name": "Blue Dream", "strain_type": "HYBRID"}'{ "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" }}