API referenceContaminations
Get a contamination
One contamination log, with the plants and explants it is linked to.
GET
https://app.xplantpro.com/ api/ v1/ contaminations/ {id}Scope
read:contaminationsPath parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | Yes | The record's id. |
Example
curl https://app.xplantpro.com/api/v1/contaminations/6a8c0e2b-4d6f-4a8c-9e0b-2d4f6a8c0e2b \
-H "Authorization: Bearer $XPLANT_API_KEY"Response
200 with { "ok": true, "data": … }. data holds the result.
| Field | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | Yes | — |
workspace_id | string | null | Yes | The workspace the log belongs to. |
type | string | null | Yes | What was seen: mold, bacteria, hyperhydricity, phenolic, algae, yeast, endophytic, viral, fungal, physiological, contaminated_media, damage, insect, other. |
type_other | string | null | Yes | The contamination in the logger's own words, when type is other. |
issue | string | Yes | A short summary of what was seen. |
description | string | null | Yes | — |
notes | string | null | Yes | — |
severity | string | Yes | How serious it is: very low, low, medium, high, critical. |
status | string | Yes | Where it stands: active, resolved, quarantined, archived, under investigation. |
observed_at | string | null | Yes | When it was seen. ISO 8601. |
resolved_at | string | null | Yes | When it was marked resolved. ISO 8601. |
vessels_affected | integer | null | Yes | How many vessels it reached. Null when nobody counted, which is not the same as none. |
plants_affected | integer | null | Yes | How many plants it reached. Null when nobody counted, which is not the same as none. |
affected_vessel_markings | string | null | Yes | Which vessels, as written on them. |
custom_fields | object | Yes | Your lab's own fields on this contamination, keyed by field key. Always an object: {} when none were filled in. |
plant_ids | string (uuid)[] | Yes | The plants the log is linked to. |
explant_ids | string (uuid)[] | Yes | The explants the log is linked to. |
logged_by | string (uuid) | Yes | User id of the workspace member who logged it. |
created_at | string | null | Yes | When it was logged. ISO 8601. |
updated_at | string | null | Yes | When it last changed. ISO 8601. |
{
"ok": true,
"data": {
"id": "8a3c1e57-4b2d-4f60-9c81-2d7e5b9a0f14",
"workspace_id": "3f9d2b61-7c4e-4a85-b0d3-6e1f8a2c5b97",
"type": "bacteria",
"type_other": null,
"issue": "Cloudy halo around the base of the Phalaenopsis explant",
"description": null,
"notes": "Noticed at the weekly check on shelf 3.",
"severity": "medium",
"status": "active",
"observed_at": "2026-09-24T08:30:00.000Z",
"resolved_at": null,
"vessels_affected": 2,
"plants_affected": null,
"affected_vessel_markings": "P-07 / P-09",
"custom_fields": {
"hood": "Hood 2"
},
"plant_ids": [],
"explant_ids": [
"6d2f9a14-8b3e-4c71-a5d0-1f7e3b8c2a96"
],
"logged_by": "0d7e4b9a-6f21-4c3e-8a5b-2e9f1c7d4a60",
"created_at": "2026-09-24T08:41:12.000Z",
"updated_at": "2026-09-24T08:41:12.000Z"
}
}| Response header | Meaning |
|---|---|
X-Request-Id | Identifies this request. Include it when you contact support. |
Errors
| Status | Code | When |
|---|---|---|
401 | UNAUTHORIZED | The key is missing, malformed or revoked, or its owner is no longer a member of the workspace. |
402 | PAID_PLAN_REQUIRED | The workspace's plan does not include the API. The full API is included with xPlant+ Teams and Enterprise; on Hobby and Pro Lab, keys can connect devices only. |
403 | FORBIDDEN | The key lacks a scope this operation requires, or its owner's current role in the workspace cannot use it — a key never does more than its owner can in xPlant. error names the scope, and for a role, the role it needs. |
403 | DEVICE_TOKEN_NOT_ACCEPTED | A device token was sent; this operation needs a workspace API key. |
404 | NOT_FOUND | No record with this id exists in the key's workspace. |
429 | RATE_LIMIT_EXCEEDED | Too many requests for this key, device token or workspace. Wait Retry-After seconds. |
500 | CONTAMINATION_QUERY_FAILED | The log could not be read. Retry later. |
Branch on code, never on the error text. See Errors.
Record a contamination
Records a contamination seen on one plant or explant, as the key's owner. It is the same record the app makes: it appears in the plant's or explant's history, and for an explant the stage and room the culture was in when it was seen are recorded with it, which is what lets the app show that room's conditions over the week before.
List tasks
The workspace's tasks, earliest due first. Filter by board column or assignee; with neither, you get the whole queue a page at a time.