List samples
Return every sample on your client's orders, ordered by order date descending and then by sample ID so the newest samples come first.
Use start and limit to page through the results (maximum 100 per page). When more results are available beyond the current page, more_results is true. Filters combine, so sending both status_id and harvest_id returns only samples matching both.
Query parameters
Zero-based offset of the first result.
Default: 0
Maximum results per page (max 100).
Default: 100
Only return samples whose order is in this order status. See the order statuses endpoint for available IDs.
Only return samples whose order was modified after this timestamp.
Only return samples on orders for this client ID.
Only return samples with this batch ID from the state's seed-to-sale tracking system.
Only return samples with this harvest lot ID from the state's seed-to-sale tracking system.
Try it
Log in to send test requests to this endpoint straight from the docs.
Responses
200 Success
Show 27 child attributes Hide 27 child attributes
Sample ID
Orders ID
Client ID
Lab
Show 2 child attributes Hide 2 child attributes
Lab ID
Lab Name
Order Status ID
Order Status Name
Name of Sample
Name of Sample Strain
Sample Industry ID
Sample Industry Name
Sample Category ID
Sample Category Name
Sample Type ID
Sample Type Name
Sample Classification ID
Sample Classification Name
Production Method name
Production Method ID
Unique ID from the state's seed-to-sale tracking system of the sample tested by the lab
Unique ID from the state's seed-to-sale tracking system of the client's batch from which the sample tested by the lab came
Unique ID from the client's inventory management system of the client's batch from which the sample tested by the lab came
Unique ID from the state's seed-to-sale tracking system of the client's harvest lot from which the sample tested by the lab came
Show 4 child attributes Hide 4 child attributes
Unique ID for Test Package
Test Package Name
Package Price - if 0, call for price
Minimum sample quantity required for testing
Time this sample was last modified
Published Date [when sample was published]
Orders lims ID
Sample lims ID
True if more results are available beyond this page.
400 Bad request
The request was malformed or failed validation. Validation failures include per-field messages in error_details.
Possible error_code values: invalid_request, request_too_old.
401 Unauthorized
Authentication failed.
Possible error_code values: missing_api_key, invalid_api_key, invalid_credentials_type, api_access_restricted, api_access_denied, missing_signature, missing_timestamp, invalid_timestamp, invalid_signature.
403 Permission denied
The API key is valid but does not have permission for this endpoint (for example, a client key calling a labs endpoint).
Possible error_code values: permission_denied.
# X-ConfidentLims-Signature: see the Request Signing guide - https://api.confidentcannabis.com/v0/docs/request-signing.md curl -X GET 'https://api.confidentcannabis.com/v0/clients/samples' \ -H 'X-ConfidentLims-APIKey: YOUR_API_KEY' \ -H 'X-ConfidentLims-Timestamp: UNIX_TIMESTAMP' \ -H 'X-ConfidentLims-Signature: REQUEST_SIGNATURE'
import time import requests # sign_request() is defined in the Request Signing guide: # https://api.confidentcannabis.com/v0/docs/request-signing.md from sign_request import sign_request API_KEY = 'YOUR_API_KEY' API_SECRET = 'YOUR_API_SECRET' path = '/v0/clients/samples' params = { # optional query params go here - they are signed too } headers = {'X-ConfidentLims-Timestamp': str(int(time.time()))} headers['X-ConfidentLims-Signature'] = sign_request( 'GET', path, headers, params, API_KEY, API_SECRET) headers['X-ConfidentLims-APIKey'] = API_KEY response = requests.get( 'https://api.confidentcannabis.com' + path, headers=headers, params=params, ) print(response.json())
// signRequest() is defined in the Request Signing guide: // https://api.confidentcannabis.com/v0/docs/request-signing.md import { signRequest } from './sign_request.js'; const API_KEY = 'YOUR_API_KEY'; const API_SECRET = 'YOUR_API_SECRET'; const path = "/v0/clients/samples"; const params = { // optional query params go here - they are signed too }; const headers = { 'X-ConfidentLims-Timestamp': String(Math.floor(Date.now() / 1000)) }; headers['X-ConfidentLims-Signature'] = signRequest( "GET", path, headers, params, API_KEY, API_SECRET); headers['X-ConfidentLims-APIKey'] = API_KEY; const response = await fetch(`https://api.confidentcannabis.com${path}?${new URLSearchParams(params)}`, { headers, }); console.log(await response.json());
{
"success": true,
"samples": [
{
"id": "2603CAL0142.0001",
"order_id": "2603CAL0142",
"client_id": 4821,
"lab": {
"id": 118,
"name": "Cascade Analytical Labs"
},
"order_status_id": 3,
"order_status_name": "In Progress",
"sample_name": "Blue Dream - Cured Flower",
"strain_name": "Blue Dream",
"sample_industry_id": 1,
"sample_industry_name": "Cannabis & Hemp",
"sample_category_id": 1,
"sample_category_name": "Plant",
"sample_type_id": 1,
"sample_type_name": "Flower - Cured",
"sample_classification_id": 4,
"sample_classification_name": "Hybrid",
"production_method_id": 1,
"production_method_name": "Indoor",
"regulator_sample_id": "1A4060300003B01000001234",
"regulator_batch_id": "1A4060300003B01000000987",
"batch_id": "BD-2026-03-A",
"harvest_id": "HV-2026-01-BD",
"test_packages": [
{
"id": 12,
"name": "OR Recreational Flower Panel",
"price": 275.0,
"minimum_quantity": 5.0
}
],
"last_modified": "2026-03-12T08:31:19",
"date_published": null,
"order_lims_id": "CAL-2026-0142",
"lims_id": "CAL-2026-0142-01"
}
],
"more_results": false
}