<aside> ✨

What's New

Stay up-to-date with the latest features and improvements to our platform.

</aside>

2026


TruDiagnostic - v.1.49 (June 2, 2026)

🔧 Internal Improvements

No external API changes in this release. This version includes internal engineering improvements only.


TruDiagnostic - v.1.48 (May 19, 2026)

🆕 New Endpoints

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:

Sample status values:

arrayType values:

📋 Migration Notes


TruDiagnostic - v.1.47 (May 7, 2026)

🆕 New Endpoints

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:

Response 200:

{
  "object": "list",
  "data": [
    {
      "id": "mu_a1b2c3d4e5f6...",
      "object": "material_unit",
      "barcode": "BARCODEABC123",
      "order": "ord_a1b2c3d4e5f6...",
      "sku": "sku_a1b2c3d4e5f6...",
      "status": "available",
      "createdAt": "2024-08-14T10:00:00Z",
      "activatedAt": null
    }
  ],
  "hasMore": false
}

Material unit status values:


Get Material Unit

Endpoint: GET /api/materialunits/{id}

Returns a single material unit by its ID. Returns 404 if the material unit does not exist or does not belong to your application.

Response 200:

{
  "id": "mu_a1b2c3d4e5f6...",
  "object": "material_unit",
  "barcode": "BARCODEABC123",
  "order": "ord_a1b2c3d4e5f6...",
  "sku": "sku_a1b2c3d4e5f6...",
  "status": "available",
  "createdAt": "2024-08-14T10:00:00Z",
  "activatedAt": null
}

Create Order with Service Activation

Endpoint: POST /api/orders/activate

Places an order that activates one or more material units against their assigned products. Use this when you've pre-purchased services and need to activate them against specific material unit barcodes.

Request body:

{
  "items": [
    {
      "productId": "42",
      "materialUnitBarcode": "BARCODEABC123"
    }
  ]
}

productId accepts a numeric ID, SKU name, or SKU uid. materialUnitBarcode must match an available material unit barcode in your practice. Returns an order object on success (200). Returns 400 for validation errors or 409 for conflicts (e.g., barcode already activated).

🔄 Changed Endpoints

Order object — totalAmount and new discountAmount field

Affected endpoints: All endpoints returning an order object (GET /api/orders/{id}, GET /api/orders, etc.)

totalAmount now reflects the discount-adjusted amount — the discount is subtracted before this value is computed. A new discountAmount field has been added that exposes the discount applied to the order.

Before (v.1.46.x):

{
  "totalAmount": 235.00
}

After (v.1.47.x):

{
  "totalAmount": 225.00,
  "discountAmount": 10.00
}

discountAmount is 0.00 when no discount was applied.

⚡ Webhook Changes

New kit.replacement.* event family

Three new webhook events are available for subscribing to the kit replacement lifecycle:

| --- | --- |

All three share the same kit_replacement payload shape: