OpenAPI Specification
openapi: 3.1.0
info:
title: Clients Client Info Labs API
version: 0.16.0
description: API endpoints for clients to view their orders, samples, and associated labs. All endpoints are read-only (GET) and accessible only with client API credentials.
contact:
name: Confident Cannabis API Support
url: https://www.confidentcannabis.com
servers:
- url: https://api.confidentcannabis.com
description: Production server
security:
- ApiKeyAuth: []
tags:
- name: Labs
description: View associated labs
paths:
/v0/clients/labs:
get:
summary: List labs
description: Returns a paginated list of labs associated with the authenticated client.
operationId: getLabs
tags:
- Labs
security:
- ApiKeyAuth: []
parameters:
- name: start
in: query
description: Pagination offset (number of records to skip)
required: false
schema:
type: integer
default: 0
minimum: 0
example: 0
- name: limit
in: query
description: Maximum number of records to return (max 100)
required: false
schema:
type: integer
default: 100
minimum: 1
maximum: 100
example: 100
- name: state
in: query
description: Filter by state (2-letter state code)
required: false
schema:
type: string
pattern: ^[A-Z]{2}$
example: CO
responses:
'200':
description: Successful response with list of labs
content:
application/json:
schema:
type: object
required:
- success
- labs
- more_results
properties:
success:
type: boolean
example: true
labs:
type: array
items:
type: object
description: Summary information about a lab
required:
- id
- name
- state
- city
- last_modified
properties:
id:
type: integer
example: 456
name:
type: string
example: Rocky Mountain Testing Lab
state:
type: string
example: CO
city:
type: string
example: Denver
last_modified:
type: string
format: date-time
example: '2025-01-10T08:00:00Z'
more_results:
type: boolean
example: false
examples:
success:
summary: Successful labs response
value:
success: true
labs:
- id: 456
name: Rocky Mountain Testing Lab
state: CO
city: Denver
last_modified: '2025-01-10T08:00:00Z'
more_results: false
'400':
description: Invalid request
content:
application/json:
schema:
type: object
description: Error response
required:
- success
- error_code
- error_message
properties:
success:
type: boolean
example: false
error_code:
type: string
example: invalid_request
error_message:
type: string
example: Invalid request parameters
error_details:
type: object
additionalProperties:
type: array
items:
type: string
'401':
description: Authentication failed
content:
application/json:
schema:
type: object
description: Error response
required:
- success
- error_code
- error_message
properties:
success:
type: boolean
example: false
error_code:
type: string
example: missing_api_key
error_message:
type: string
example: Missing API key header
error_details:
type: object
additionalProperties:
type: array
items:
type: string
'403':
description: Access denied
content:
application/json:
schema:
type: object
description: Error response
required:
- success
- error_code
- error_message
properties:
success:
type: boolean
example: false
error_code:
type: string
example: permission_denied
error_message:
type: string
example: Access denied
error_details:
type: object
additionalProperties:
type: array
items:
type: string
/v0/clients/lab/{lab_id}:
get:
summary: Get lab details
description: Returns detailed information about a specific lab.
operationId: getLabDetails
tags:
- Labs
security:
- ApiKeyAuth: []
parameters:
- name: lab_id
in: path
description: The ID of the lab
required: true
schema:
type: integer
example: 456
responses:
'200':
description: Successful response with lab details
content:
application/json:
schema:
type: object
required:
- success
- lab
properties:
success:
type: boolean
example: true
lab:
type: object
description: Detailed information about a lab
required:
- id
- name
- state
- city
properties:
id:
type: integer
example: 456
name:
type: string
example: Rocky Mountain Testing Lab
email:
type: string
format: email
example: info@rmtlab.com
phone:
type: string
example: (555) 987-6543
url:
type: string
format: uri
example: https://rmtlab.com
state:
type: string
example: CO
city:
type: string
example: Denver
primary_address:
type: object
description: Physical address
properties:
street:
type: string
example: 123 Main St
city:
type: string
example: Denver
state:
type: string
example: CO
zip:
type: string
example: '80202'
country:
type: string
example: USA
last_modified:
type: string
format: date-time
example: '2025-01-10T08:00:00Z'
'401':
description: Authentication failed
content:
application/json:
schema:
type: object
description: Error response
required:
- success
- error_code
- error_message
properties:
success:
type: boolean
example: false
error_code:
type: string
example: missing_api_key
error_message:
type: string
example: Missing API key header
error_details:
type: object
additionalProperties:
type: array
items:
type: string
'403':
description: Access denied
content:
application/json:
schema:
type: object
description: Error response
required:
- success
- error_code
- error_message
properties:
success:
type: boolean
example: false
error_code:
type: string
example: permission_denied
error_message:
type: string
example: Access denied
error_details:
type: object
additionalProperties:
type: array
items:
type: string
'404':
description: Resource not found
content:
application/json:
schema:
type: object
description: Error response
required:
- success
- error_code
- error_message
properties:
success:
type: boolean
example: false
error_code:
type: string
example: not_found
error_message:
type: string
example: Resource not found
error_details:
type: object
additionalProperties:
type: array
items:
type: string
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-ConfidentCannabis-APIKey
description: API key for authentication. Required for all requests.
SignatureAuth:
type: apiKey
in: header
name: X-ConfidentCannabis-Signature
description: HMAC SHA256 signature of the request. Required if signing is enabled for your API credentials.
TimestampAuth:
type: apiKey
in: header
name: X-ConfidentCannabis-Timestamp
description: Unix timestamp of the request. Required if signing is enabled. Must be within 30 seconds of server time.