Blood Result Upload

Submit OCR, FHIR, or HL7 blood result files for asynchronous BRU processing, track status, and receive terminal updates when published results are available.

Blood Result Upload

Blood Result Upload, or BRU, lets you submit one or more blood result source files to InsideTracker for asynchronous processing. Use it to upload supported files, submit them for processing, and track when published blood results are available for downstream outputs such as recommendations, category scores, and Inner Age.

Upload files

Send one supported source file at a time for a linked customer record.

Submit a process

Group uploaded files into an asynchronous BRU processing job.

Handle completion

Track processing so your application knows when published blood results are available.

Where This Fits

Use BRU when your application or User has files containing blood results.

BRU is different from lab ordering. Use Lab Connect when you need to order a new Quest or Mobile Blood Draw test. Use Add Blood Result when your system already has discrete marker values and needs to submit them directly through the structured blood result API.

What You Need

Before implementing BRU, make sure you have:

  • A linked InsideTracker customer record for your User.
  • A customer-level token.
  • The bru.upload scope to upload files and submit a process.
  • The bru.status scope to retrieve process status.
  • One or more supported blood result source files.
  • A way to store uploadedFileId and processId values in your system.
  • A way to check processing status after process submission.

Supported Upload Types

BRU uses one route model for all supported source files. The backend processing type differs by file format.

Processing typeAccepted sourceAccepted MIME typesSize limit
Document/OCRPDFapplication/pdfSmaller than 50 MB
Document/OCRGIF, JPEG, PNG, or WebP imageimage/gif, image/jpeg, image/png, image/webpSmaller than 50 MB
FHIR.ndjson or .jsonlapplication/json, application/ndjson, application/x-ndjson, text/plainSmaller than 50 MB
HL7.hl7application/hl7, application/hl7-v2, text/plainSmaller than 10 MB

InsideTracker performs virus scanning on uploaded files. Infected files are rejected. Unsupported file types return 400 Bad Request.

How BRU Works

1. Upload Each File

Upload each source file separately with multipart/form-data:

POST /bru/customer/v1/files
Content-Type: multipart/form-data
Authorization: Bearer {customer_token}

Include one required multipart field:

FieldTypeDescription
filestring <binary>Single supported BRU source file.

Successful response:

{
  "uploadedFileId": "97395c45-160a-44e6-a6db-f76570e12f8f"
}
FieldDescription
uploadedFileIdTemporary file identifier required for BRU process submission.

Additional upload behavior:

  • Store every returned uploadedFileId until process submission.
  • Uploads are rate limited to 14 files per customer per 300 seconds.
  • Uploaded files expire after 24 hours if they are not submitted in a BRU process.

2. Submit The BRU Process

Submit a process with the full list of file IDs returned by the upload step:

POST /bru/customer/v1/processes
Content-Type: application/json
Authorization: Bearer {customer_token}
{
  "uploadedFileIds": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ]
}
FieldDescription
uploadedFileIdsList of temporary file identifiers returned by the upload step. Must include at least one file.

The process submission returns 202 Accepted with a processId and the current process state. Store the returned processId so you can track the submission.

A single BRU process must contain at least one file, and every file in that process must use the same processing type. Do not mix Document/OCR, FHIR, and HL7 files in the same process.

Process submission and status responses include fields such as:

FieldDescription
processIdIdentifier for the asynchronous BRU process.
autoPublishResultIndicates whether the process is configured to publish results automatically.
validationModeValidation mode for the process, such as AUTO.
statusCurrent process status, such as DOCUMENT_UPLOADED after submission.
bloodResultsPublished blood result legacy IDs when available.
createdAtProcess creation timestamp.
updatedAtMost recent process update timestamp.

3. Track Processing

Use the process status endpoint when you need the latest process state:

GET /bru/customer/v1/processes/{processId}
Authorization: Bearer {customer_token}

The response returns the current process state using the same process fields described above. When a process is in a terminal state, the response may include bloodResults with published blood result legacy IDs.

File Type Guidance

Use the tab for the source format you are submitting.

Use OCR when a User has existing blood result documents, such as lab PDFs, scans, screenshots, or photos of printed reports. InsideTracker processes those files asynchronously and converts extracted marker values into structured blood biomarker data when possible.

Source expectations

  • Supported file types for OCR are PDF, GIF, JPEG, PNG, and WebP.
  • Each file must be smaller than 50 MB.
  • Clear, complete, readable documents are more likely to process successfully than blurry, cropped, or partial images.
  • OCR extraction is not guaranteed. Set expectations that the file is being processed and converted into structured health data when possible.

User Experience States

BRU processing is asynchronous for all supported file types. In your application, use simple states that reflect the file submission and processing lifecycle.

StateMeaning
Not startedUser has not uploaded or selected files.
UploadingOne or more files are being submitted.
ProcessingFiles were accepted and are being processed by InsideTracker.
Results availableProcessing published blood results successfully.
Action neededUpload failed, the file could not be processed, or no published result was produced.

Process Statuses

BRU processes may return these statuses:

StatusMeaning
DOCUMENT_UPLOADEDThe process was accepted and its uploaded files are ready for processing.
DOCUMENT_PARSEDThe source files were parsed.
DOCUMENT_MAPPEDParsed markers were mapped. Processing will next either publish the results or finish without publication.
PUBLISHEDProcessing finished and blood results were published through the existing Blood API.
COMPLETEProcessing finished without publishing blood results.

Completion Handling

Use the process response or configured BRU completion events to correlate the completed process back to the User and submission in your system.

FieldUse
extIdMaps the event back to your User.
processIdMatches the event to the BRU process you submitted.
statusIndicates the terminal process state.
bloodResultsContains published blood result legacy IDs when results are available.
validationModeIndicates the validation mode used for the process.
autoPublishResultIndicates whether the process was configured to publish automatically.

Terminal states:

StatusMeaningApplication action
PUBLISHEDProcessing completed successfully and published blood results are available through the existing Blood API.Mark the submission complete and retrieve or refresh downstream blood result/output data.
COMPLETEProcessing completed, but no published blood result was produced.Do not show new results. Route the submission through your support or exception-handling workflow.

Implementation Checklist

Before building
  • You have a linked customer record and customer-level token for the User.
  • Your token includes bru.upload and bru.status.
  • You accept only supported Document/OCR, FHIR, or HL7 source files.
  • You upload each file separately and store every returned uploadedFileId.
  • You submit all relevant uploadedFileIds in one BRU process.
  • You do not mix Document/OCR, FHIR, and HL7 files in the same process.
  • You store the returned processId.
  • You can poll GET /bru/customer/v1/processes/{processId} and handle configured BRU completion events if enabled.
  • You handle PUBLISHED as the success path for published blood results.
  • You have an exception path if processing completes without published results.

Testing Checklist

  • Upload succeeds for a supported OCR document or image.
  • Upload succeeds for a valid FHIR R4 Observation NDJSON file.
  • Upload succeeds for a valid HL7 v2 ORU^R01 .hl7 file.
  • Multiple files of the same processing type can be submitted through one BRU process, with each file uploaded separately.
  • Mixed Document/OCR, FHIR, and HL7 files are not submitted in the same process.
  • Oversized or unsupported files produce a clear User-facing error.
  • Completion status updates the correct User.
  • Duplicate or repeated uploads do not create confusing User-facing results.
  • Support can trace a User issue back to the submitted file and BRU processId.

Related Topics

  • Webhooks
  • Add Blood Result
  • Lab Connect
  • Adding Profile Data

Did this page help you?