Retrieving results

This section describes a basic flow to retrieve the results of a given test. The BioTests API offers a few variants, be sure to refer to the full API Reference.

Retrieving the test id

In order to retrieve the results of a particular test, you will generally need the test ID. This is different from the kit ID or order number. The test ID is shared with you via a webhook notification (it is included in all notifications starting at the LAB_ACCESSIONED step). If you use other endpoints than the one used in this page, however, be sure to check whether you need the test id or the kit id.

Retrieving the test results

The results can then be retrieved by calling the GET api.hurdle.bio/tests/v2/{testid} endpoint. The results look like this:

{
    "id": "6377bcd6cd7907948cb56ff7",
    "kitId": "MMM1234535",
    "productCode": "C1BLP05400",
    "status": "PROCESSED",
    "metadata": {
        "dateOfBirth": "1990-05-12",
        "gender": "f"
    },
    "registeredAt": "2022-11-18T17:11:50.243Z",
    "specimens": [
        {
            "id": "6377bcd6cd7907948cb56ff8",
            "barcode": "BLC2211006182093",
            "status": "PROCESSED",
            "testId": "6377bcd6cd7907948cb56ff7",
            "processedAt": "2022-11-18T17:14:31.493Z",
            "registeredAt": "2022-11-18T17:11:00.000Z",
            "accessionedAt": "2022-11-18T17:12:25.043Z",
            "specimenType": "CAPILLARY_BLOOD_DBS"
        }
    ],
    "biomarkerResults": [
        {
            "id": "6377bd775428f230ea2a7431",
            "result": "20",
            "specimenId": "6377bcd6cd7907948cb56ff8",
            "testId": "6377bcd6cd7907948cb56ff7",
            "interpretation": "NORMAL",
            "biomarker": {
                "id": "62c2c004cb575368fb1593ed",
                "name": "LDL Cholesterol",
                "code": "LDL",
                "unit": "mg/dl",
                "interpretationRule": {
                    "rule": "RANGE",
                    "value": {
                        "NORMAL": [
                            "<=99"
                        ],
                        "HIGH": [
                            ">99"
                        ]
                    }
                },
                "specimenType": "CAPILLARY_BLOOD_DBS"
            }
        },
        {
            "id": "6377bd775428f230ea2a742f",
            "result": "20",
            "specimenId": "6377bcd6cd7907948cb56ff8",
            "testId": "6377bcd6cd7907948cb56ff7",
            "interpretation": "LOW",
            "biomarker": {
                "id": "62c2bfaccb575368fb1593ec",
                "name": "Triglycerides",
                "code": "TGL",
                "unit": "mg/dl",
                "interpretationRule": {
                    "rule": "RANGE",
                    "value": {
                        "LOW": [
                            "<26"
                        ],
                        "NORMAL": [
                            ">=26",
                            "<=149"
                        ],
                        "HIGH": [
                            ">149"
                        ]
                    }
                },
                "specimenType": "CAPILLARY_BLOOD_DBS"
            }
        },
        {
            "id": "6377bd775428f230ea2a742d",
            "result": "20",
            "specimenId": "6377bcd6cd7907948cb56ff8",
            "testId": "6377bcd6cd7907948cb56ff7",
            "interpretation": "DIABETES",
            "biomarker": {
                "id": "62cea5a521d4c31a5ab7f63a",
                "name": "Hemoglobin A1c",
                "code": "HbA1c",
                "unit": "%",
                "interpretationRule": {
                    "rule": "RANGE",
                    "value": {
                        "NORMAL": [
                            "<5.7"
                        ],
                        "PRE_DIABETIC": [
                            ">=5.7",
                            "<=6.4"
                        ],
                        "DIABETES": [
                            ">6.4"
                        ]
                    }
                },
                "specimenType": "CAPILLARY_BLOOD_DBS"
            },
          # redacted for brevity
        }
    ],
    "productDisclaimer": {
        "disclaimer": "NULL"
    },
    "reportUrlPaths": [
        "/tests/v2/6377bcd6cd7907948cb56ff7/reports/967f5438-d1f1-43d2-acf7-48c2981fb448"
    ]
}

For each biomarker in the test, you can read the measurement, interpretation, and reference interpretation rules.

Edge cases

Sometimes things go wrong, and there is no result. For example, if there was not enough blood in a capillary blood test. You may then see error messages as text instead of the actual result, in the result field. The interpretation will then be indefinite. For example:

# ...
"interpretation": "Indefinite",
"result": "Quantity Not Sufficient"
# ...

Results

The result field contains the result as measured by the lab. It is typically numerical, although it could be categorical for some biomarkers (e.g. DETECTED). Alternatively, when something goes wrong, an error code can be returned. The list of possible result error codes is as follows:

Error codeDescription
Expired SampleIn order to ensure the accuracy of your results we can only accept samples within a set time-window. Unfortunately the time between your sample being taken and tested is too great. Please contact customer services for support.
CancelledYour test has been cancelled. Please contact customer services for more information.
ClottedDuring transit your blood sample has clotted, so it cannot be processed in the lab. This is most commonly caused by not mixing the sample after the blood has been collected. This does not indicate any medical problem. Please contact customer services for support.
DiscardedThe sample was discarded by the lab. This can be for a number of reasons. Please contact customer services for support.
HaemolysedDuring transit the red blood cells in your sample have broken down. This can be due to squeezing your finger too hard, or movement in the post which causes damage to the cells. This does not indicate any medical problem. Please contact customer services for support.
IctericYour blood test has a high level of bilirubin, which may affect the accuracy of results of other tests. We recommend that you seek advice from your doctor to advise you on further or repeat testing.
Insufficient SampleThere is not enough of the sample in the tube to perform an accurate test. Please contact customer services for support.
Labelling ErrorThere was a problem with the label on your sample. In order to ensure that we match the correct sample to the correct patient the lab cannot process this test. Please contact customer services for support.
Incorrect sample tubeDifferent sample bottles are used for different tests. It appears your sample had an incorrect lid or tube. Please contact customer services for support.
LipaemicYour test had a very high level of fat (or lipids), which has made it impossible to provide an accurate result. This is most commonly caused by eating a meal high in fats prior to your test. Please contact customer services for support.
Sample not received by labUnfortunately your sample was not received by the lab. Please contact customer services for support.
Test not suitableIn some cases the lab is not able to ensure the accuracy of the test. In this case they do not complete the test. This can be due to a number of reasons. Please contact customer services for support.
Error in labIn some cases the lab is not able to ensure the accuracy of the test. In this case they do not complete the test. This can be due to a number of reasons. Please contact customer services for support.
Sample contaminatedIn rare cases the sample contains an unexpected substance, in which case the lab does not complete the test in order to ensure the accuracy of results released. This can be due to a number of reasons. Please contact customer services for support.
Triglycerides too highYour test had a very high level of triglycerides, which has made it impossible to provide an accurate result. We recommend that you seek advice from your doctor to advise you on further or repeat testing.
Test not recognisedIt is not possible to provide a result as the test requested was not recognised in the lab, or some details were missing from the order. Please contact customer services for support.
White cells damagedThe white cells in your sample have broken down in transit, or clumped together, meaning that it is not possible to provide an accurate result. Please contact customer services for support.
Not CalculatedThe lab was unable to carry out a calculation based on your sample results. This may be due to problems with the sample. Please contact customer services for support.
Incorrect sample typeThe type of sample received by the lab was not appropriate for the type of bottle used or test requested. Please contact customer services for support.
Sample Pending ReviewYour sample returned an unexpected result and needs to be reprocessed to ensure that it is accurate. Please contact customer services for support.
Blood tube expiredThe sample bottle has expired, so the accuracy of the test cannot be guaranteed. Please contact customer services for support.
IndeterminateA clear or definite result cannot be returned. Please contact customer services for support.
No formA completed sample form was not received with your sample. Please contact customer services for support.
Test sampleThis sample was marked as a test sample only. If you have received this error please contact customer services for support.
Crystals in sampleCrystals were found in the sample, which can be caused by high levels of minerals in your blood or urine. Please discuss this result with your doctor.
Discuss with doctorThis result cannot be interpreted on its own. You will need to discuss this with your doctor, who will assess the significance of this value.

Interpretation codes

The interpretation field of a result can be:

  • Indefinite: this would happen if the result is an error (see above), or if for some reason an interpretation could not be applied (this would be the case for some biomarkers based on the phase of the fertility cycle, when we don't know which phase the test taker was in)
  • Any of the following interpretation codes. Which codes are sent depend on each biomarker, and can depend on the lab (this is why some interpretations seem very similar to others). Note that the meaning detailed in the following table is only indicative: the official interpretation comes from a lab and consists only of that one keyword.
Interpretation codeMeaning
NORMALResult falls within the range of normal values for this patient
LOWThe result is lower than expected for this patient, so medical assessment is advised
BORDERLINE_HIGH*The result is on the upper limit of normal for this patient, so medical assessment is advised
HIGHThe result is higher than expected for this patient, so medical assessment is advised
VERY_LOW*The result is significantly lower than expected for this patient, so urgent medical assessment is advised
VERY_HIGH*The result is significantly higher than expected for this patient, so urgent medical assessment is advised
CRITICAL_LOWThe result could indicate an immediate danger to the patient which requires an urgent medical assessment
CRITICAL_HIGHThe result could indicate an immediate danger to the patient which requires an urgent medical assessment
CRITICAL*The result could indicate an immediate danger to the patient which requires an urgent medical assessment
MILDLY_DEFICIENT*The result is a little lower than expected for this patient
SEVERELY_DEFICIENT*The result is a much lower than the ideal level and needs a medical review
DEFICIENTThe result is lower than expected for this patient, so medical assessment is advised
INSUFFICIENTThe result is a little lower than expected for this patient, so medical assessment is advised
ADEQUATEResult falls within the range of normal values for this patient
OPTIMALResult falls within the range of ideal values for this patient
UNDETECTED*No trace was found in the sample
DETECTED*The element or pathogen being investigated was found in the sample, so medical assessment is advised
PRE_DIABETICThe result suggests the patient is prediabetic and needs appropriate medical advice
DIABETES_/_GLYCEMIC_CONTROLWhere the patient doesn’t have a diagnosis of diabetes, this result requires immediate medical review. Where the patient already has a diagnosis of diabetes, this result suggests good control.
DIABETESWhere the patient doesn’t have a diagnosis of diabetes, this result requires immediate medical review. Where the patient already has a diagnosis of diabetes, this result suggests poor control.
CONSIDER_TOXICITYThe result is significantly higher than expected for this patient, so urgent medical assessment is advised

Items marked with an (*)asterisk are considered rarely used (few biomarkers).

Note that the interpretation rule relevant to the patient is returned with each result.

Note about critical results

When a lab detects a critical result, an escalation process immediately starts - before the results are even published. Some labs will then return this result as critical, while others will just report them as high or low. This means that:

  • results that were critical and were escalated might not be flagged as critical in the results
  • results that are flagged as critical do not require specific treatment as the process has already happened or started in parallel.

Units

The unit returned with the result will be one of the following:

mmol/L
g/L
IU/L
U/L
mg/L
pmol/L
nmol/L
mU/L
ug/L
%
mg/dL
IU/mL
x10^12/L
L/L
fL
x10^9/L
mmol/mol
mL/min/1.73m^2
pg/cell
[blank]
ratio
pg
ng/mL
pg/mL
ng/dL
µU/mL
kU/L
µmol/L
mIU/mL
µg/L
age acceleration (years)
mIU/L
kg/m2
MET minutes
h
score
servings/day
servings/week
µIU/mL