Skip to main content

Lab Report Parsing API (Feb 2026)

Introducing the Lab Report Parsing API – extract structured biomarker data from lab report files and match results to standardized LOINC codes.

Details

Overview

The Lab Report Parsing API enables you to digitize lab results from any source. Upload a PDF, JPEG, or PNG lab report, and Junction extracts structured data with LOINC standardization.

New Endpoints

  • POST /lab_report/v1/parser/job – Upload a lab report to create a parsing job
  • GET /lab_report/v1/parser/job/ – Retrieve job status and extracted results

Key Features

  • Multi-format support – Parse PDF, JPEG, and PNG lab reports up to 10 MB
  • LOINC matching – Extracted biomarkers are matched to standardized LOINC codes for cross-lab comparability
  • Human review option – Flag jobs for manual verification before completion
  • Structured output – Get biomarker name, value, unit, reference range, and interpretation

Webhook Events

  • lab_report.parsing_job.created – Triggered when a new parsing job is submitted
  • lab_report.parsing_job.updated – Triggered when a parsing job status changes (completed, failed, pending review)

Use Cases

  • Patient uploads – Allow patients to submit lab reports from other providers
  • Historical data import – Digitize paper records and legacy PDFs
  • Multi-source aggregation – Combine results from various labs using LOINC standardization
This feature is currently in beta. Contact your account manager to enable it.
Check out the Lab Report Parsing documentation to get started.

Lab Account Selection in Ordering Flow (Feb 2026)

You can now scope orders to a specific lab account during creation. A new team-level lab accounts endpoint lets you list available accounts, and a new lab_account_id parameter on the order creation endpoint lets you specify which account to use.

Details

New Endpoint

  • GET /v3/lab_test/lab_account – List lab accounts accessible to your team. Supports optional lab_account_id and status query parameters.

Updated Endpoints

  • POST /v3/order/create – New optional lab_account_id parameter to specify which lab account to use. If omitted, the backend resolves the appropriate account automatically.
  • POST /v3/order/import – Now accepts lab accounts in PENDING status, enabling order imports while accounts are still being set up.
  • GET /v3/lab_tests/markers – New optional lab_slug query parameter to filter markers by lab. When a lab account is selected, you can use this to retrieve only the markers available under that lab.

Behavior

  • When lab_account_id is provided, available panels and markers are filtered to those supported by the selected account’s lab.
  • When recreating an order with update_reason=INCORRECT_LAB, the backend now resolves a fresh lab account rather than carrying forward the incorrect one.

Idempotency of Ordering (Sep 2025)

We’ve added idempotency behavior on the order endpoint, to prevent duplicate orders
Check out the documentation.

Enhanced Lab Order Management with Result Interpretation Filtering (June 2025)

We’ve enhanced the Orders page with new filtering and visualization capabilities for lab test result interpretations, making it easier to identify and prioritize critical patient results.

Details

What’s New

  • Interpretation Filter – Filter orders by clinical result interpretation using the new “Interpretation” dropdown filter
  • Critical Value Indicators – The orders table now displays visual indicators for orders with critical results
  • Enhanced Order Details – Order detail views now include interpretation badges highlighting critical findings

Filter Options

The new Interpretation filter allows you to quickly locate orders based on their clinical assessment:
  • Normal – Orders with results within normal reference ranges
  • Abnormal – Orders with results outside normal ranges but not critically urgent
  • Critical – Orders with results requiring immediate clinical attention

Visual Enhancements

Orders Table

  • Critical value indicators help you quickly spot high-priority results that need immediate attention
  • Clear visual distinction between normal, abnormal, and critical interpretations

Order Details View

  • Prominent badges display the interpretation status for easy identification
  • Critical results are highlighted with distinctive styling to ensure they don’t go unnoticed
You can combine the Interpretation filter with existing filters like Order Status, Date Range, and Order Type for more precise result filtering.
This enhancement improves clinical workflow efficiency by enabling healthcare teams to quickly identify and prioritize orders requiring immediate attention.

Introducing Panel Renaming & Archiving (May 2025)

We’ve added more control to how you manage test panels.
Now you can skip the support email and work directly in the Test Catalog to:
  • Rename panel names
  • Archive outdated or unused panels to keep things clean
  • View archived panels using the “Status” filter and “unarchive” to make panels active again
Existing orders tied to archived panels will remain active and processable.Full product guide →

Problem in Transit Order Statuses (Mar 2025)

Testkit orders now support two new statuses representing problems in transit. Refer to the lab test lifecycle documentation.

Details

We’re introducing two new statuses for the OrderLowLevelStatus enum (problem_in_transit_lab and problem_in_transit_customer) and two for the OrderStatus enum (collecting_sample.testkit.problem_in_transit_customer and collecting_sample.testkit.problem_in_transit_lab)—and we may make further changes in the future. To ensure future compatibility, we ask that you avoid exhaustive matching on enum values. Code that assumes all current values are exhaustive could break or fail to compile with SDK upgrades.Here’s how to verify and ensure you benefit from future enhancements:
  1. Look for areas in your code where you take an action based on the values of a Junction-defined enum. For example, you might have Python code like this:
Python
match status:
    case OrderStatus.TESTKIT_ORDERED:
        handle_ordered()
    case OrderStatus.TESTKIT_AWAITING_REGISTRATION:
        handle_awaiting_registration()
        # other cases...
  1. Check unknown values in your code paths are handled gracefully—for example, by using default cases. Logging unknown values can help you stay informed.
Python
match status:
    # previous cases...
    case unknown_status:
        logger.warning(f"Unknown status received: {repr(unknown_status)}")
  1. Make sure you’re running the latest version of our SDK.
  2. You’re good to go. Once you’ve checked the code paths won’t break if Junction-defined enums start including new values, no further action is needed.

Source Marker Identification for Results (Nov 2024)

Results now feature the source, orderable marker from which they originated. Refer to the documentation

PSC Appointment Scheduling API (Oct 2024)

Walk-in Phlebotomy orders now allow for appointment booking directly with Vital. Refer to the documentation

Phlebotomy Availability API - Start Date Query (Sep 2024)

You can now supply a start_date to the Appointment Availability API. The API always responds with 14 days worth of slots.

À La Carte Ordering (Sep 2024)

Vital now supports ordering à-la-carte, as well as a revamped ordering flow.

Details

Check out the Ordering documentation.

Partial Results Webhook (Jul 2024)

Vital now supports sending webhooks for partial results, on a team-by-team configuration.

Details

Check out the Partial Results Notifications documentation.

Patient Service Center (PSC) Availability API (Jul 2024)

It is now possible to verify lab PSC availability in regards to a zip code, radius or order.

Details

Check out the Patient Service Center documentation.

Create Lab Tests With Provider IDs (Jun 2024)

It is now possible to create lab tests using the Laboratory’s unique provider id. This allows payloads to be shared across sandbox and production.

Details

Check out the Create a Lab Test documentation.

Ask on Order Entry (AOE) (Jun 2024)

You can now order panels with AOE requirements via the API.

Details

Check out the AOE documentation.