xPlantAPI
API referenceEquipment

List equipment

The workspace's equipment library, newest first, with each item's calibration and maintenance due dates. Filter by category and status; with neither you get every item, archived ones included.

GET/api/v1/equipment
Scope read:equipment

Query parameters

NameTypeRequiredDescription
category"balance_scale" | "autoclave_pressure_cooker" | "laminar_flow_hood" | "still_air_box" | "incubator" | "light_rack" | "fridge_freezer" | "ph_ec_meter" | "microscope" | "label_printer" | "other"NoOnly equipment of this type: balance_scale, autoclave_pressure_cooker, laminar_flow_hood, still_air_box, incubator, light_rack, fridge_freezer, ph_ec_meter, microscope, label_printer, other.
status"active" | "archived"Noactive, or archived for equipment the lab has retired. Leave it out to get both.
limitintegerNoPage size. Values above 200 are capped at 200. Default 50. From 1 to 200.
offsetintegerNoNumber of records to skip. Prefer cursor where a list offers it: an offset shifts when records are added ahead of it. Default 0. At least 0.
cursorstringNoContinue from the previous page: pass its meta.next_cursor unchanged, with the same filters. Treat it as opaque. Not combinable with offset. Up to 2048 characters.

Example

curl "https://app.xplantpro.com/api/v1/equipment?category=autoclave_pressure_cooker&status=active" \
  -H "Authorization: Bearer $XPLANT_API_KEY"

Response

200 with { "ok": true, "data": … }. data is an array. To get the next page, pass meta.next_cursor back as cursor; it is null on the last page. See Pagination.

FieldTypeRequiredDescription
idstring (uuid)Yes—
namestringYes—
categorystringYesThe kind of equipment: balance_scale, autoclave_pressure_cooker, laminar_flow_hood, still_air_box, incubator, light_rack, fridge_freezer, ph_ec_meter, microscope, label_printer, other.
statusstringYesactive, or archived once the lab has retired it.
manufacturerstring | nullYes—
modelstring | nullYes—
serial_numberstring | nullYes—
locationstring | nullYesWhere it is kept, as the lab wrote it.
purchase_datestring | nullYesISO 8601 date.
vendor_urlstring | nullYesA link to the product or supplier page.
notesstring | nullYes—
last_calibrated_atstring | nullYesWhen a calibration schedule was last completed, as an ISO 8601 timestamp.
next_calibration_due_atstring | nullYesThe date the next calibration is due (ISO 8601 date), or null when no calibration schedule is active.
last_maintenance_atstring | nullYesWhen a maintenance schedule was last completed, as an ISO 8601 timestamp.
next_maintenance_due_atstring | nullYesThe date the next preventive maintenance is due (ISO 8601 date), or null when no maintenance schedule is active.
created_atstring | nullYes—
updated_atstring | nullYes—
Response
{
  "ok": true,
  "data": [
    {
      "id": "8c2f4e61-5a3b-4d7e-9b10-3e6a2c9d4f18",
      "name": "Autoclave 2",
      "category": "autoclave_pressure_cooker",
      "status": "active",
      "manufacturer": "Example Instruments",
      "model": "AC-40",
      "serial_number": "AC40-00172",
      "location": "Media room",
      "purchase_date": "2025-03-14",
      "vendor_url": null,
      "notes": null,
      "last_calibrated_at": "2026-06-02T08:30:00.000Z",
      "next_calibration_due_at": "2026-12-02",
      "last_maintenance_at": null,
      "next_maintenance_due_at": null,
      "created_at": "2025-03-20T10:04:11.000Z",
      "updated_at": "2026-06-02T08:31:40.000Z"
    }
  ]
}

The envelope can also carry meta:

FieldTypeRequiredDescription
next_cursorstring | nullYesPass as cursor to fetch the next page. null means this is the last page.
Response headerMeaning
X-Request-IdIdentifies this request. Include it when you contact support.

Errors

StatusCodeWhen
401UNAUTHORIZEDThe key is missing, malformed or revoked, or its owner is no longer a member of the workspace.
402PAID_PLAN_REQUIREDThe 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.
403FORBIDDENThe 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.
403DEVICE_TOKEN_NOT_ACCEPTEDA device token was sent; this operation needs a workspace API key.
422VALIDATION_ERRORBoth cursor and offset were sent; use one.
422INVALID_CURSORThe cursor is malformed, or came from a different list or different filters. Start again without it.
429RATE_LIMIT_EXCEEDEDToo many requests for this key, device token or workspace. Wait Retry-After seconds.
500LAB_EQUIPMENT_QUERY_FAILEDThe equipment could not be read. Retry later.

Branch on code, never on the error text. See Errors.

On this page