<aside> ✨
What's New
Stay up-to-date with the latest features and improvements to our platform.
</aside>
New sample.reprocessed webhook event
A new webhook event is available for subscribing to lab sample reprocessing. This event fires when a sample is sent back for reprocessing by the lab.
Subscribe using the event type: sample.reprocessed
{
"Object": "webhook_event",
"Type": "sample.reprocessed",
"Data": {
"SampleId": "1234",
"Kit": {
"Sku": "TruAge",
"KitId": "CAQL5G9WUL4AG7AL",
"KitIdExternal": ""
},
"ByUserId": 10042,
"BusinessUnitId": 1,
"PracticeId": 10042,
"PublicName": "sample.reprocessed",
"Version": 1,
"EventTime": "2026-06-30T14:00:00.0000000Z",
"IdempotentKey": "a1b2c3d4e5f6...",
"EventName": "SampleReprocessedInLabIntegrationEvent",
"Avatar": 2,
"AvatarName": "Provider",
"UniversalId": "usr_a1b2c3d4e5f6..."
},
"Id": "hook_a1b2c3d4e5f6..."
}
Key payload fields:
SampleId — identifier of the sample being reprocessedKit — kit context including barcode (KitId) and product SKUPracticeId — the practice associated with the kitPOST /api/reports — OpenAPI contract correction
In v.1.50, the OpenAPI spec for this endpoint incorrectly listed request body properties in snake_case (kit_id, report_type, render_strategy, render_details). The documented contract has been restored to camelCase (KitId, ReportType, RenderStrategy, RenderDetails).
Runtime behavior was never affected — the API accepts camelCase, PascalCase, and snake_case inputs regardless of what the spec shows. If your integration sends requests directly (not via a generated client), no changes are needed. If you regenerated a client from the Swagger spec between v.1.50 and this release, regenerate again to pick up the corrected property names.
Kit objects now include date_received_in_lab
The KitObject response shape now includes a date_received_in_lab field indicating the date the lab received the kit. This field is nullable and will be null for kits that have not yet been received.
Affected endpoints:
GET /api/kits/{id}GET /api/kitsGET /api/kits/searchGET /api/orders/search (responses include kit objects)Example response (new field):
{
"object": "kit",
"id": "kit_a1b2c3d4e5f6",
"status": "SampleReceived",
"date_created": "2024-08-13",
"date_received_in_lab": "2024-08-15"
}
Search query language: received_in_lab filter now supported
GET /api/kits/search now accepts received_in_lab as a filter field in the query parameter.
GET /api/kits/search?query=received_in_lab>2024-08-01
GET /api/kits/search?query=received_in_lab>=2024-08-01 AND received_in_lab<2024-09-01
Both changes are non-breaking and additive. Existing integrations continue to work without modification.
No external API changes in this release. This version includes internal engineering improvements only.
POST /api/orders, POST /api/orders/activate, and DELETE /api/orders/{id} are unchanged.POST /api/registrations or POST /api/orders/registration request/response contracts.List Samples for a Kit
Endpoint: GET /api/kits/{id}/samples
Returns all samples associated with a kit. Scoped to your application's practice.
Response 200:
{
"object": "list",
"data": [
{
"id": "smp_1a2b3c4d5e6f...",
"object": "sample",
"status": "Completed",
"arrayType": "EPICv2Custom",
"beadchipId": "207134830027_R01C01",
"kit": "kit_a1b2c3d4e5f6...",
"createdAt": "2026-02-10T14:23:00Z"
}
],
"hasMore": false
}
Get Sample
Endpoint: GET /api/samples/{id}
Returns a single sample by its ID. Returns 404 if the sample does not exist or does not belong to your application.
Response 200:
{
"id": "smp_1a2b3c4d5e6f...",
"object": "sample",
"status": "Completed",
"arrayType": "EPICv2Custom",
"beadchipId": "207134830027_R01C01",
"kit": "kit_a1b2c3d4e5f6...",
"createdAt": "2026-02-10T14:23:00Z"
}
Sample field reference:
id — unique identifier for this samplestatus — current lab status (see values below)arrayType — diagnostic array technology used to process this sample (see values below)beadchipId — beadchip position assigned when the sample reaches the analysis stage (e.g. 207134830027_R01C01). null until that point.kit — ID of the kit this sample belongs tocreatedAt — UTC timestamp when the sample was createdSample status values:
NotAvailable — sample has not yet been createdReceived — sample received at the labExtractDna — DNA extraction in progressSubmitted — submitted for analysisDnaQuantification — DNA quantification underwayAnalysisRequested — analysis has been requestedBisulfiteConversion — bisulfite conversion underway (epigenetic products)DiagnosticFilesReceived — diagnostic data files receivedLabFailed — sample failed due to a lab-side issue; reprocessing or a kit replacement may followAnalysisFailed — analysis step failedAnalysisQcFailed — sample did not pass quality controlCompleted — sample processing is completearrayType values:
EPICv2Custom — Illumina EPIC v2 (TruDiagnostic custom configuration)EPICv2Regular — Illumina EPIC v2 (standard)EPICv1 — Illumina EPIC v1MSARegular — Illumina MSA (standard)MSACustom — Illumina MSA (custom)GSAv3 — Illumina GSA v3GSAv4 — Illumina GSA v4TruDx — TruDx arrayPGx — Pharmacogenomics arrayEnlighten — Enlighten arrayImprintome — Imprintome arrayXTRACoRSIV — XTRACoRSIV arraysamples field (an array of sample IDs). Call GET /api/kits/{id} first to retrieve the IDs, then use GET /api/samples/{id} to fetch individual sample details.List Available Material Units
Endpoint: GET /api/materialunits
Returns a paginated list of material units that have not yet been activated. Scoped to your application's practice.
Query parameters:
page (integer, default: 0) — page offsetlimit (integer, 1–100, default: 10) — results per pageResponse 200: