Referenca
API Reference
Every endpoint reachable with an API token, grouped by area. This is a reference, not a console — copy the request shape into your own client. See the API & Access Guide for how to generate a token and which scope you need.
Laboratory Integration API
Everything a Laboratory API token can call — scoped to one laboratory
and the requests assigned to it. Base path /api/lab-integration.
/api/lab-integration/whoami
Identify this laboratory
Confirms which laboratory a token belongs to — useful as a first call when wiring up an integration.
Response
{
"id": "...",
"name": "Acme Labs"
}
/api/lab-integration/requests
List assigned requests
Paginated list of requests assigned to this laboratory. Always scoped to the token's own laboratory — there is no way to see another laboratory's requests.
| Parameter | In | Required | Description |
|---|---|---|---|
filter[...] |
query | No | Optional filters, same shape as the app's own request list. |
order[field] |
query | No | asc or desc on a sortable column. |
page |
query | No | Defaults to 1. |
pageLimit |
query | No | Defaults to 20. |
Response
{
"items": [
{
"id": "7d2e6b2a-...",
"status": "submitted",
"trackingNumber": "220926-0003",
"createdAt": "2026-09-20T09:14:00+00:00",
"labStatus": "in_testing",
"templateId": "...",
"templateName": "Dairy — Standard Panel",
"companyId": "...",
"companyName": "Acme Foods",
"createdById": "...",
"createdByFirstName": "Ana",
"createdByLastName": "Petrović",
"laboratoryId": "...",
"laboratoryName": "Acme Labs",
"fields": {}
}
],
"meta": {
"total": 1,
"page": 1,
"perPage": 20,
"lastPage": 1
}
}
/api/lab-integration/requests/{id}
Get one request
Full detail for one request assigned to this laboratory — field values, samples (each with its own field values, self-describing with name/label/type), examinations, comments and documents. 404 if the request doesn't exist or isn't assigned to this laboratory.
| Parameter | In | Required | Description |
|---|---|---|---|
id |
path | Yes | The request's UUID. |
Response
{
"id": "7d2e6b2a-...",
"status": "submitted",
"trackingNumber": "220926-0003",
"createdAt": "2026-09-20T09:14:00+00:00",
"template": {
"id": "...",
"name": "Dairy — Standard Panel"
},
"company": {
"id": "...",
"name": "Acme Foods"
},
"createdBy": {
"firstName": "Ana",
"lastName": "Petrović"
},
"laboratory": {
"id": "...",
"name": "Acme Labs"
},
"labStatus": "in_testing",
"fieldValues": [
{
"fieldId": "...",
"name": "batch_number",
"label": "Batch number",
"type": "text",
"isMultiple": false,
"displayTemplate": null,
"value": "B-2201"
}
],
"examinations": [
{
"examinationId": "...",
"name": "Microbiological panel",
"appliesToAll": true,
"sampleIds": []
}
],
"samples": [
{
"id": "...",
"name": "Gouda cheese, 3 kg block",
"quantity": 3,
"unit": "kg",
"batchNumber": "B-2201",
"productionDate": "2026-09-18T00:00:00+00:00",
"expiryDate": "2026-12-18T00:00:00+00:00",
"packagingType": "vacuum",
"sampleType": "product",
"resultStatus": "pending",
"resultNote": null,
"createdAt": "2026-09-20T09:14:00+00:00",
"parentId": null,
"subjectId": "...",
"subjectName": "Gouda 48%",
"subjectTypeId": "...",
"subjectVersionId": "...",
"lotId": null,
"procurementId": null,
"examinations": [],
"values": []
}
],
"comments": [
{
"id": "...",
"body": "Sample arrived slightly warm — noted, testing proceeding.",
"createdAt": "2026-09-21T11:02:00+00:00",
"authorId": null,
"authorFirstName": null,
"authorLastName": null,
"laboratoryId": "...",
"laboratoryName": "Acme Labs"
}
],
"documents": [
{
"id": "...",
"originalFilename": "result-report.pdf",
"mimeType": "application/pdf",
"size": 184320,
"createdAt": "2026-09-22T08:30:00+00:00",
"authorId": null,
"authorFirstName": null,
"authorLastName": null,
"laboratoryId": "...",
"laboratoryName": "Acme Labs"
}
]
}
/api/lab-integration/requests/{id}/documents/download/{documentId}
Download a document
Streams the raw file for one document attached to the request. Response is the binary file itself (Content-Type and Content-Disposition set from the stored document), not JSON.
| Parameter | In | Required | Description |
|---|---|---|---|
id |
path | Yes | The request's UUID. |
documentId |
path | Yes | The document's UUID, from the request detail's documents[]. |
Response
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="result-report.pdf"
<binary file content>
/api/lab-integration/cmd/requests/{id}/status
Update lab status
Moves the request through the laboratory's own progress. Any of the four values can be set at any time — there's no enforced order. Setting done requires every sample to already have a result (not Pending) and locks the request: no further status changes, comments, or documents afterwards.
| Parameter | In | Required | Description |
|---|---|---|---|
id |
path | Yes | The request's UUID. |
labStatus |
body | Yes | One of: accepted, in_testing, requires_documentation, done. |
Request
{
"labStatus": "in_testing"
}
Response
[]
/api/lab-integration/cmd/requests/{id}/comments
Post a comment
Adds a comment to the request's conversation, attributed to this laboratory. This is the same thread visible on the request's dossier and the human Laboratory Portal.
| Parameter | In | Required | Description |
|---|---|---|---|
id |
path | Yes | The request's UUID. |
body |
body | Yes | The comment text. |
Request
{
"body": "Sample arrived slightly warm — noted, testing proceeding."
}
Response
{
"id": "..."
}
/api/lab-integration/cmd/requests/{id}/documents
Upload a result document
Attaches a result document to the request. multipart/form-data only, field name file. Only application/pdf is accepted — anything else is rejected before it touches storage.
| Parameter | In | Required | Description |
|---|---|---|---|
id |
path | Yes | The request's UUID. |
file |
formData | Yes | A PDF file. |
Request
Content-Type: multipart/form-data; boundary=...
--...
Content-Disposition: form-data; name="file"; filename="result-report.pdf"
Content-Type: application/pdf
<binary file content>
--...--
Response
{
"id": "..."
}
Internal QC API
Everything a QC API token can call — the same surface the app itself uses, scoped by your account's own role and permissions.
/api/admin/....
Catalog
Subjects
/api/subject/
List
/api/subject/cmd/delete/{id}
Delete
/api/subject/cmd/documents/delete/{id}/{documentId}
Documents delete
/api/subject/cmd/documents/upload/{id}
Documents upload
/api/subject/cmd/history/attachments/delete/{id}/{attachmentId}
History attachments delete
/api/subject/cmd/history/attachments/upload/{id}
History attachments upload
/api/subject/cmd/history/delete/{id}/{entryId}
History delete
/api/subject/cmd/history/{id}
History add
/api/subject/cmd/register
Register
/api/subject/cmd/remove-value/{subjectId}/{valueId}
Remove value
/api/subject/cmd/set-value/{id}
Set value
/api/subject/cmd/set-values/{id}
Set values
/api/subject/cmd/update/{id}
Update
/api/subject/documents/download/{id}/{documentId}
Documents download
/api/subject/documents/{id}
Documents
/api/subject/history/attachments/download/{id}/{attachmentId}
History attachments download
/api/subject/history/{id}
History
/api/subject/stats
Stats
/api/subject/{id}
Show
Subject Types
/api/subject-type/
List
/api/subject-type/cmd/add-field/{id}
Add field
/api/subject-type/cmd/delete/{id}
Delete
/api/subject-type/cmd/register
Register
/api/subject-type/cmd/remove-field/{typeId}/{fieldId}
Remove field
/api/subject-type/cmd/reorder-fields/{id}
Reorder fields
/api/subject-type/cmd/update-field/{typeId}/{fieldId}
Update field
/api/subject-type/cmd/update/{id}
Update
/api/subject-type/stats
Stats
/api/subject-type/{id}
Show
Subject Type Fields
/api/subject-type-field/
List
Subject Versions
/api/subject-version/
List
/api/subject-version/cmd/approve/{id}
Approve
/api/subject-version/cmd/delete/{id}
Delete
/api/subject-version/cmd/obsolete/{id}
Obsolete
/api/subject-version/cmd/register
Register
/api/subject-version/cmd/update/{id}
Update
/api/subject-version/{id}
Show
Lab Requests
Lab Requests
/api/request/
List
/api/request/cmd/assign-laboratory/{id}
Assign laboratory
/api/request/cmd/comments/{id}
Comments
/api/request/cmd/delete/{id}
Delete
/api/request/cmd/documents/upload/{id}
Documents upload
/api/request/cmd/examinations/{id}
Examinations
/api/request/cmd/from-lots
From lots
/api/request/cmd/from-subject/{subjectId}
From subject
/api/request/cmd/lab-status/{id}
Lab status
/api/request/cmd/reference/{id}
Reference
/api/request/cmd/register
Register
/api/request/cmd/samples/results/{id}
Samples results
/api/request/cmd/submit/{id}
Submit
/api/request/cmd/update/{id}
Update
/api/request/documents/download/{id}/{documentId}
Documents download
/api/request/stats
Stats
/api/request/{id}
Show
/api/request/{id}/pdf-preview
PDF preview
/api/request/{id}/readiness
Readiness
Request Templates
/api/admin/request-template/
List
Admin
/api/admin/request-template/cmd/add-field/{id}
Add field
Admin
/api/admin/request-template/cmd/delete/{id}
Delete
Admin
/api/admin/request-template/cmd/duplicate/{sourceId}
Duplicate
Admin
/api/admin/request-template/cmd/register
Register
Admin
/api/admin/request-template/cmd/remove-field/{templateId}/{fieldId}
Remove field
Admin
/api/admin/request-template/cmd/reorder-fields/{id}
Reorder fields
Admin
/api/admin/request-template/cmd/update-field/{templateId}/{fieldId}
Update field
Admin
/api/admin/request-template/cmd/update/{id}
Update
Admin
/api/request-template/
List
/api/request-template/cmd/add-field/{id}
Add field
/api/request-template/cmd/delete/{id}
Delete
/api/request-template/cmd/duplicate/{sourceId}
Duplicate
/api/request-template/cmd/register
Register
/api/request-template/cmd/remove-field/{templateId}/{fieldId}
Remove field
/api/request-template/cmd/reorder-fields/{id}
Reorder fields
/api/request-template/cmd/update-field/{templateId}/{fieldId}
Update field
/api/request-template/cmd/update/{id}
Update
/api/request-template/resolve/{subjectId}/{subjectTypeId}
Resolve
/api/request-template/{id}
Show
Request Template Fields
/api/request-template-field/
List
Samples
/api/sample/
List
/api/sample/cmd/delete/{id}
Delete
/api/sample/cmd/examinations/{id}
Examinations
/api/sample/cmd/register
Register
/api/sample/cmd/update/{id}
Update
/api/sample/{id}
Show
Examinations
/api/examination-definition/
List
/api/examination-definition/cmd/delete/{id}
Delete
/api/examination-definition/cmd/register
Register
/api/examination-definition/cmd/update/{id}
Update
/api/examination-definition/stats
Stats
Manufacturing & Supply
Production Batches
/api/batch/
List
/api/batch/cmd/create-qc-request/{id}
Create QC request
/api/batch/cmd/delete/{id}
Delete
/api/batch/cmd/register
Register
/api/batch/cmd/update-product-form/{id}
Update product form
/api/batch/cmd/update-status/{id}
Update status
/api/batch/stats
Stats
/api/batch/{id}
Show
Recipes
/api/recipe/
List
/api/recipe/cmd/delete/{id}
Delete
/api/recipe/cmd/register
Register
/api/recipe/cmd/update/{id}
Update
/api/recipe/stats
Stats
/api/recipe/{id}
Show
Recipe Versions
/api/recipe-version/
List
/api/recipe-version/cmd/add-line/{id}
Add line
/api/recipe-version/cmd/approve/{id}
Approve
/api/recipe-version/cmd/delete/{id}
Delete
/api/recipe-version/cmd/obsolete/{id}
Obsolete
/api/recipe-version/cmd/register
Register
/api/recipe-version/cmd/remove-line/{id}/{lineId}
Remove line
/api/recipe-version/cmd/update-instructions/{id}
Update instructions
/api/recipe-version/cmd/update-line/{id}/{lineId}
Update line
/api/recipe-version/cmd/update/{id}
Update
/api/recipe-version/{id}
Show
Lots
/api/lot/
List
/api/lot/cmd/delete/{id}
Delete
/api/lot/cmd/register
Register
/api/lot/cmd/update-status/{id}
Update status
/api/lot/cmd/update/{id}
Update
/api/lot/stats
Stats
/api/lot/{id}
Show
Procurement
/api/procurement/
List
/api/procurement/cmd/delete/{id}
Delete
/api/procurement/cmd/receive/{id}
Receive
/api/procurement/cmd/register
Register
/api/procurement/cmd/stage-values/{id}
Stage values
/api/procurement/cmd/update-status/{id}
Update status
/api/procurement/cmd/update/{id}
Update
/api/procurement/stages
Stages
/api/procurement/stats
Stats
/api/procurement/{id}
Show
Packaging Runs
/api/packaging-run/
List
/api/packaging-run/cmd/create-qc-request-batch
List
/api/packaging-run/cmd/create-qc-request/{id}
List
/api/packaging-run/cmd/register
List
/api/packaging-run/cmd/update-line/{id}
List
/api/packaging-run/{id}
List
Stock
/api/stock/movements
Movements
/api/stock/on-hand
On hand
Settings & Administration
Field Definitions
/api/field-definition/
List
/api/field-definition/cmd/delete/{id}
Delete
/api/field-definition/cmd/register
Register
/api/field-definition/cmd/update-width/{id}
Update width
/api/field-definition/cmd/update/{id}
Update
/api/field-definition/stats
Stats
Company
/api/company/
List
/api/company/cmd/update
Update
/api/company/cmd/update-tracking-number-format
Update tracking number format
List Configuration
/api/list-configuration/cmd/reset/{context}
Reset
/api/list-configuration/cmd/update
Update
/api/list-configuration/{context}
List
Laboratories
/api/laboratory/
List
/api/laboratory/cmd/delete/{id}
Delete
/api/laboratory/cmd/register
Register
/api/laboratory/cmd/update/{id}
Update
/api/laboratory/cmd/{id}/api-tokens/extend/{tokenId}
API tokens extend
/api/laboratory/cmd/{id}/api-tokens/register
API tokens register
/api/laboratory/cmd/{id}/api-tokens/revoke/{tokenId}
API tokens revoke
/api/laboratory/cmd/{id}/portal/clear-password
Portal clear password
/api/laboratory/cmd/{id}/portal/disable
Portal disable
/api/laboratory/cmd/{id}/portal/enable
Portal enable
/api/laboratory/cmd/{id}/portal/regenerate-token
Portal regenerate token
/api/laboratory/cmd/{id}/portal/set-password
Portal set password
/api/laboratory/stats
Stats
/api/laboratory/{id}
Show
/api/laboratory/{id}/api-tokens
API tokens
Testing Schedules
/api/testing-schedule/
List
/api/testing-schedule/cmd/complete/{id}
Complete
/api/testing-schedule/cmd/delete/{id}
Delete
/api/testing-schedule/cmd/register
Register
/api/testing-schedule/cmd/update/{id}
Update
/api/testing-schedule/{id}
Show
PDF Templates
/api/admin/pdf-template/
List
Admin
/api/admin/pdf-template/cmd/delete/{id}
Delete
Admin
/api/admin/pdf-template/cmd/register
Register
Admin
/api/admin/pdf-template/cmd/update/{id}
Update
Admin
/api/admin/pdf-template/{id}
Show
Admin
/api/pdf-template/
List
/api/pdf-template/cmd/delete/{id}
Delete
/api/pdf-template/cmd/register
Register
/api/pdf-template/cmd/update/{id}
Update
/api/pdf-template/{id}
Show
Team & Users
/api/user/
List
/api/user/api-tokens
API tokens
/api/user/avatar/download/{id}
Avatar download
/api/user/cmd/add-member
Add member
/api/user/cmd/api-tokens/extend/{id}
API tokens extend
/api/user/cmd/api-tokens/register
API tokens register
/api/user/cmd/api-tokens/revoke/{id}
API tokens revoke
/api/user/cmd/avatar/delete
Avatar delete
/api/user/cmd/avatar/upload
Avatar upload
/api/user/cmd/change-password
Change password
/api/user/cmd/generate-token
Generate token
/api/user/cmd/register
Register
/api/user/cmd/update-profile
Update profile
/api/user/me
Me
Other
Icons
/api/icons/
List