> ## Documentation Index
> Fetch the complete documentation index at: https://docs.olira.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Lab & clinical

> Lab results, clinical notes, imaging, procedures, encounters, and other clinical observations. 15 log types with payload schemas and examples.

Lab results, clinical notes, imaging, procedures, encounters, and other clinical observations. Submit these via `POST /v1/logs/batch` or the [Python SDK](/reference/sdk); see [How logs work](/send-data/how-logs-work) for submission fields and the difference between **lifecycle-tracked** and point-in-time log types.

## Lab results

**Type:** `lab_results` · **Source:** Python SDK / REST, Integration · **Extensible**

Reserved for laboratory test results (blood, urine, etc.): results from a lab with test identity (loinc\_code or test\_name) and value (value\_numeric/value\_string + unit); single result, panel, or batch.

**Payload**

<ResponseField name="panel_loinc_code" type="string | null">
  LOINC code for the panel (e.g. CBC, CMP). Enables grouping of individual results.
</ResponseField>

<ResponseField name="panel_name" type="string | null">
  Human-readable panel name (e.g. 'Complete Blood Count').
</ResponseField>

<ResponseField name="collection_datetime" type="string">
  ISO 8601 UTC datetime when the specimen was collected.
</ResponseField>

<ResponseField name="ordered_by_npi" type="string | null">
  NPI of the ordering provider.
</ResponseField>

<ResponseField name="performing_lab" type="object | null">
  <Expandable title="fields">
    <ResponseField name="name" type="string">
      Name of the laboratory that performed the tests.
    </ResponseField>

    <ResponseField name="clia_number" type="string">
      CLIA certificate number of the performing lab.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="results" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="loinc_code" type="string">
      Preferred. test\_name and specimen\_type resolved server-side when provided.. Example: `4548-4`, `718-7`, `2160-0`
    </ResponseField>

    <ResponseField name="test_name" type="string">
      Required when loinc\_code is absent.
    </ResponseField>

    <ResponseField name="specimen_type" type="string">
      E.g. blood, urine, serum. Provide for best-effort LOINC mapping when loinc\_code is absent.
    </ResponseField>

    <ResponseField name="test_category" type="string">
      Broad category for grouping when LOINC is absent.. One of: `hematology`, `metabolic`, `lipid`, `oncology_marker`, `cardiac`, `diabetes`, `renal`, `hepatic`, `other`
    </ResponseField>

    <ResponseField name="value_numeric" type="number">
      Quantitative result.
    </ResponseField>

    <ResponseField name="value_string" type="string">
      Non-quantitative result (e.g. positive, negative, trace). Use when result is not numeric.
    </ResponseField>

    <ResponseField name="unit" type="string">
      Always required. Use the actual unit reported by the lab (UCUM recommended but not enforced).
    </ResponseField>

    <ResponseField name="abnormal_flag" type="string">
      H = high, L = low, N = normal, HH = critical high, LL = critical low\.. One of: `H`, `L`, `N`, `HH`, `LL`
    </ResponseField>

    <ResponseField name="reference_range_low" type="number">
      Lab-specific reference range. Omit entirely if not known — do not send 0 or null as placeholder.
    </ResponseField>

    <ResponseField name="reference_range_high" type="number">
      Lab-specific reference range. Omit entirely if not known — do not send 0 or null as placeholder.
    </ResponseField>

    <ResponseField name="result_status" type="string">
      Finality of the result.. One of: `final`, `preliminary`, `corrected`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="extensions" type="object">
  Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Accepts a legacy string (e.g. 'patient\_self\_report') or a structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.LAB_RESULTS,
      patient_id="your-patient-id",
      payload={
          "results": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "lab_results",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "results": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`vitals_measurement`](/reference/log-types/lab-clinical#vitals-measurement) for vital signs, [`weight_measurement`](/reference/log-types/passive-data#weight-measurement), [`spo2_reading`](/reference/log-types/passive-data#spo2-reading) or [`cgm_reading`](/reference/log-types/passive-data#cgm-reading) for device weight/SpO2/CGM, [`clinical_measurement`](/reference/log-types/lab-clinical#clinical-measurement) for non-lab clinical measurements e.g. ejection fraction, [`procedure_result`](/reference/log-types/lab-clinical#procedure-result) for pathology/procedure result narrative.
</Note>

## Vitals measurement

**Type:** `vitals_measurement` · **Source:** Python SDK / REST, App SDK (coming soon), Integration · **Extensible**

Reserved for vital signs (BP, heart rate, SpO2, weight, temperature, respiratory rate) from any source: structured vitals from manual entry, EHR flowsheet, or connected device when not using device-specific events.

**Payload**

<ResponseField name="measurements" type="object" required>
  <Expandable title="fields">
    <ResponseField name="systolic_bp_mmhg" type="number | null">
      Systolic blood pressure in mmHg.
    </ResponseField>

    <ResponseField name="diastolic_bp_mmhg" type="number | null">
      Diastolic blood pressure in mmHg.
    </ResponseField>

    <ResponseField name="heart_rate_bpm" type="number | null">
      Beats per minute.
    </ResponseField>

    <ResponseField name="spo2_percent" type="number | null">
      Oxygen saturation percentage (0–100).. Minimum: 0. Maximum: 100
    </ResponseField>

    <ResponseField name="weight_kg" type="number | null">
      Kilograms.
    </ResponseField>

    <ResponseField name="temperature_celsius" type="number | null">
      Degrees Celsius.
    </ResponseField>

    <ResponseField name="respiratory_rate_bpm" type="number | null">
      Breaths per minute.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="context" type="object" required>
  <Expandable title="fields">
    <ResponseField name="position" type="string | null">
      Patient posture during measurement.. One of: `sitting`, `standing`, `supine`
    </ResponseField>

    <ResponseField name="fasting" type="boolean | null">
      Whether the patient was fasting at the time of measurement.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="source" type="string | object" required>
  Who asserted this fact. Accepts a legacy string (e.g. 'patient\_self\_report') or a structured Source object.
</ResponseField>

<ResponseField name="collection_datetime" type="string | null" required>
  ISO 8601 UTC datetime of measurement.
</ResponseField>

<ResponseField name="extensions" type="object">
  Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.VITALS_MEASUREMENT,
      patient_id="your-patient-id",
      payload={
          "measurements": {...},
          "context": {...},
          "source": "...",
          "collection_datetime": "..."
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "vitals_measurement",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "measurements": {...},
          "context": {...},
          "source": "...",
          "collection_datetime": "..."
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`lab_results`](/reference/log-types/lab-clinical#lab-results) for lab test results, [`clinical_measurement`](/reference/log-types/lab-clinical#clinical-measurement) for non-vital clinical measurements like ejection fraction. Not intended for device-only weight/SpO2 if using weight\_measurement or spo2\_reading. vital\_type inferred from populated fields.
</Note>

## Clinical note

**Type:** `clinical_note` · **Source:** Python SDK / REST, Integration · **Extensible**

Reserved for provider-authored clinical notes with structured sections: progress notes, H\&P, discharge summary, etc., with required sections\[] (section\_label, content); source (manual\_entry, ehr\_integration, hie\_integration).

**Payload**

<ResponseField name="note_type" type="string" required>
  Category of clinical note.. One of: `progress_note`, `history_and_physical`, `social_history`, `family_history`, `medical_history`, `surgical_history`, `psychosocial_history`, `financial_history`, `discharge_summary`, `consultation_note`, `other`
</ResponseField>

<ResponseField name="loinc_code" type="string">
  Recommended LOINC codes: 11506-3 (Progress note), 34117-2 (H\&P), 11488-4 (Consultation note), 18842-5 (Discharge summary).
</ResponseField>

<ResponseField name="authored_by" type="object">
  <Expandable title="fields">
    <ResponseField name="name" type="string">
      Author's full name.
    </ResponseField>

    <ResponseField name="npi" type="string">
      Author's National Provider Identifier.
    </ResponseField>

    <ResponseField name="role" type="string">
      Author's clinical role.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="authored_date" type="string">
  ISO 8601 date the note was authored.
</ResponseField>

<ResponseField name="encounter_id" type="string">
  Links this note to a care\_encounter event.
</ResponseField>

<ResponseField name="source" type="string | object" required>
  Who asserted this fact. Accepts a legacy string (e.g. 'patient\_self\_report') or a structured Source object.
</ResponseField>

<ResponseField name="sections" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="section_label" type="string" required>
      CCDA-style section label (e.g. Chief Complaint, Assessment and Plan, Medications).
    </ResponseField>

    <ResponseField name="content" type="string" required>
      Full text content of this section.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="extensions" type="object">
  Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.CLINICAL_NOTE,
      patient_id="your-patient-id",
      payload={
          "note_type": "progress_note",
          "source": "...",
          "sections": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "clinical_note",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "note_type": "progress_note",
          "source": "...",
          "sections": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`conversation`](/reference/log-types/conversations#conversation) for patient-AI or patient-clinician conversation transcripts, [`unstructured_report`](/reference/log-types/lab-clinical#unstructured-report) for unstructured document blob. loinc\_code optional for document type.
</Note>

## Clinical finding

**Type:** `clinical_finding` · **Source:** Python SDK / REST, Integration · **Extensible**

Reserved for discrete clinical findings or observations from exam or assessment: findings\[] with description (e.g. hepatomegaly, rash); body\_site, severity, negation, recorded\_at optional.

**Payload**

<ResponseField name="findings" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="description" type="string" required>
      Plain-language description of the finding (e.g. hepatomegaly, bilateral pitting oedema, macular rash).
    </ResponseField>

    <ResponseField name="body_site" type="string">
      Anatomic location of the finding (e.g. right upper quadrant, lower extremities).
    </ResponseField>

    <ResponseField name="severity" type="string">
      Severity descriptor (e.g. mild, moderate, severe).
    </ResponseField>

    <ResponseField name="negation" type="boolean">
      True when the finding is explicitly absent (e.g. no hepatomegaly). False or omit when the finding is present.
    </ResponseField>

    <ResponseField name="recorded_at" type="string">
      ISO 8601 UTC datetime when the finding was documented.
    </ResponseField>

    <ResponseField name="extensions" type="object">
      Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Accepts a legacy string (e.g. 'patient\_self\_report') or a structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.CLINICAL_FINDING,
      patient_id="your-patient-id",
      payload={
          "findings": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "clinical_finding",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "findings": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`clinical_measurement`](/reference/log-types/lab-clinical#clinical-measurement) or [`lab_results`](/reference/log-types/lab-clinical#lab-results) for numeric measurements, [`imaging_result`](/reference/log-types/lab-clinical#imaging-result) for imaging impressions, [`procedure_result`](/reference/log-types/lab-clinical#procedure-result) for procedure outcomes.
</Note>

## Procedure result

**Type:** `procedure_result` · **Source:** Python SDK / REST, Integration · **Extensible**

Reserved for pathology or procedure result narrative: results\[] with result\_type (pathology/procedure), test\_name, value\_string/value\_numeric, specimen\_site, performed\_at; collection\_datetime optional.

**Payload**

<ResponseField name="results" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="result_type" type="string" required>
      pathology = tissue/biopsy/histological result; procedure = interventional or diagnostic procedure outcome.. One of: `pathology`, `procedure`
    </ResponseField>

    <ResponseField name="loinc_code" type="string">
      LOINC code for the procedure if available.
    </ResponseField>

    <ResponseField name="test_name" type="string" required>
      Name of the procedure or test (e.g. colonoscopy, core needle biopsy, bronchoscopy).
    </ResponseField>

    <ResponseField name="value_string" type="string">
      Narrative or categorical result value.
    </ResponseField>

    <ResponseField name="value_numeric" type="number">
      Numeric result value when applicable.
    </ResponseField>

    <ResponseField name="unit" type="string">
      Unit for value\_numeric when applicable.
    </ResponseField>

    <ResponseField name="specimen_site" type="string">
      Anatomic site of the specimen (e.g. liver, colon, left breast).
    </ResponseField>

    <ResponseField name="procedure_code" type="string">
      CPT or similar procedure code.
    </ResponseField>

    <ResponseField name="status" type="string">
      Result status (e.g. final, preliminary).
    </ResponseField>

    <ResponseField name="performed_at" type="string">
      ISO 8601 UTC datetime when the procedure was performed.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="collection_datetime" type="string">
  ISO 8601 UTC datetime when the specimen was collected.
</ResponseField>

<ResponseField name="extensions" type="object">
  Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Accepts a legacy string (e.g. 'patient\_self\_report') or a structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.PROCEDURE_RESULT,
      patient_id="your-patient-id",
      payload={
          "results": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "procedure_result",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "results": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`lab_results`](/reference/log-types/lab-clinical#lab-results) for routine lab test results, [`imaging_result`](/reference/log-types/lab-clinical#imaging-result) for imaging, [`genomic_variant`](/reference/log-types/lab-clinical#genomic-variant) for genomic variants.
</Note>

## Genomic variant

**Type:** `genomic_variant` · **Source:** Python SDK / REST, Integration · **Extensible**

Reserved for genomic or molecular variants: variants\[] with gene, variant\_designation, variant\_type, classification, actionability, reported\_at.

**Payload**

<ResponseField name="variants" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="gene" type="string" required>
      Gene symbol (e.g. BRCA1, EGFR, KRAS, TP53, ALK).
    </ResponseField>

    <ResponseField name="variant_designation" type="string">
      Specific variant notation (e.g. p.Gly12Val, exon 19 deletion, G12C, c.1799T>A).
    </ResponseField>

    <ResponseField name="variant_type" type="string">
      Type of variant.. Example: `missense`, `deletion`, `insertion`
    </ResponseField>

    <ResponseField name="classification" type="string">
      Clinical significance classification.. Example: `pathogenic`, `likely_pathogenic`, `VUS`
    </ResponseField>

    <ResponseField name="actionability" type="string">
      Clinical actionability note (e.g. FDA-approved therapy available, clinical trial eligible).
    </ResponseField>

    <ResponseField name="reported_at" type="string">
      ISO 8601 UTC datetime when the variant was reported.
    </ResponseField>

    <ResponseField name="extensions" type="object">
      Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Accepts a legacy string (e.g. 'patient\_self\_report') or a structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.GENOMIC_VARIANT,
      patient_id="your-patient-id",
      payload={
          "variants": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "genomic_variant",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "variants": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`lab_results`](/reference/log-types/lab-clinical#lab-results) for other lab results, [`procedure_result`](/reference/log-types/lab-clinical#procedure-result) for procedure or pathology. Not intended for condition/diagnosis (condition\_updated).
</Note>

## Imaging result

**Type:** `imaging_result` · **Source:** Python SDK / REST, Integration · **Extensible**

Reserved for imaging study findings: findings\[] with modality (CT, MRI, PET, etc.), body\_region, impression, finding\_description, performed\_at; study\_date optional.

**Payload**

<ResponseField name="findings" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="modality" type="string" required>
      Imaging modality.. Example: `CT`, `MRI`, `PET`
    </ResponseField>

    <ResponseField name="body_region" type="string">
      Anatomic region imaged (e.g. chest, abdomen and pelvis, brain, left breast).
    </ResponseField>

    <ResponseField name="impression" type="string">
      Overall radiologist or cardiologist impression or conclusion.
    </ResponseField>

    <ResponseField name="finding_description" type="string">
      Detailed description of individual imaging findings.
    </ResponseField>

    <ResponseField name="performed_at" type="string">
      ISO 8601 UTC datetime when the imaging study was performed.
    </ResponseField>

    <ResponseField name="extensions" type="object">
      Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="study_date" type="string">
  ISO 8601 UTC date of the imaging study.
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Legacy string or structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.IMAGING_RESULT,
      patient_id="your-patient-id",
      payload={
          "findings": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "imaging_result",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "findings": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`clinical_finding`](/reference/log-types/lab-clinical#clinical-finding) for clinical findings from physical exam, [`procedure_result`](/reference/log-types/lab-clinical#procedure-result) for procedure/pathology, [`lab_results`](/reference/log-types/lab-clinical#lab-results) for lab results.
</Note>

## Clinical measurement

**Type:** `clinical_measurement` · **Source:** Python SDK / REST, Integration · **Extensible**

Reserved for non-lab clinical measurements from physical exam, imaging, or procedure: ejection fraction, tumour diameter, ECOG, BMI from visit, QTc, and similar exam/imaging/procedure-derived values.

**Payload**

<ResponseField name="measurements" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="measurement_type" type="string" required>
      Type of measurement.. Example: `ejection_fraction`, `tumor_diameter`, `bmi`
    </ResponseField>

    <ResponseField name="value_numeric" type="number">
      Numeric measurement value.
    </ResponseField>

    <ResponseField name="value_string" type="string">
      Descriptive value when not numeric (e.g. normal, mildly reduced).
    </ResponseField>

    <ResponseField name="unit" type="string">
      Measurement unit (e.g. %, mm, ms, kg/m2).
    </ResponseField>

    <ResponseField name="code_system" type="string">
      Coding system for the code field (e.g. LOINC, SNOMED).
    </ResponseField>

    <ResponseField name="code" type="string">
      Code for the measurement type in the specified code\_system.
    </ResponseField>

    <ResponseField name="body_site" type="string">
      Anatomic site of measurement if applicable.
    </ResponseField>

    <ResponseField name="measured_at" type="string">
      ISO 8601 UTC datetime when the measurement was taken.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="extensions" type="object">
  Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Accepts a legacy string (e.g. 'patient\_self\_report') or a structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.CLINICAL_MEASUREMENT,
      patient_id="your-patient-id",
      payload={
          "measurements": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "clinical_measurement",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "measurements": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  Not intended for lab test results (CBC, Hgb, Hct, Plt, glucose, BUN, creatinine, etc.); use lab\_results for those.
</Note>

## Treatment response assessment

**Type:** `treatment_response_assessment` · **Source:** Python SDK / REST, Integration · **Extensible**

Reserved for treatment response or disease response assessment: assessments\[] with response\_category (e.g. CR, PR, SD, PD), treatment\_description, assessment\_method, reference\_date.

**Payload**

<ResponseField name="assessments" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="treatment_description" type="string">
      Description of the treatment being assessed (e.g. carboplatin + paclitaxel, pembrolizumab).
    </ResponseField>

    <ResponseField name="response_category" type="string" required>
      RECIST or clinical response category.. Example: `CR`, `PR`, `SD`
    </ResponseField>

    <ResponseField name="assessment_method" type="string">
      Assessment criteria used.. Example: `RECIST 1.1`, `PERCIST`, `iRECIST`
    </ResponseField>

    <ResponseField name="reference_date" type="string">
      ISO 8601 UTC date of the assessment.
    </ResponseField>

    <ResponseField name="recorded_at" type="string">
      ISO 8601 UTC datetime when the assessment was recorded.
    </ResponseField>

    <ResponseField name="extensions" type="object">
      Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Legacy string or structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.TREATMENT_RESPONSE_ASSESSMENT,
      patient_id="your-patient-id",
      payload={
          "assessments": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "treatment_response_assessment",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "assessments": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`treatment_phase`](/reference/log-types/profile#treatment-phase) for treatment phase transition, [`imaging_result`](/reference/log-types/lab-clinical#imaging-result) or [`procedure_result`](/reference/log-types/lab-clinical#procedure-result) for imaging or procedure result. Not intended for condition/diagnosis (condition\_updated).
</Note>

## Clinical plan item

**Type:** `clinical_plan_item` · **Source:** Python SDK / REST, Integration · **Lifecycle-tracked** · **Extensible**

Reserved for discrete future plan items — things to remember that are coming up: orders, referrals, follow-up appointments, scheduled procedures (e.g. 'colonoscopy 2026-03-01', 'referral to cardiology').

**Payload**

<ResponseField name="items" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="action_type" type="string" required>
      Type of plan action.. Example: `referral`, `order`, `follow_up`
    </ResponseField>

    <ResponseField name="description" type="string">
      Description of the specific plan item (e.g. colonoscopy 2026-03-01, referral to cardiology for evaluation).
    </ResponseField>

    <ResponseField name="target_date" type="string">
      Expected date for the action (ISO 8601 date or datetime string).
    </ResponseField>

    <ResponseField name="status" type="string">
      Current status of the plan item. Use: active (pending/scheduled/upcoming), resolved (completed/done), inactive (on hold), entered\_in\_error (cancelled).. Example: `active`, `resolved`, `inactive`
    </ResponseField>

    <ResponseField name="recorded_at" type="string">
      ISO 8601 UTC datetime when this plan item was documented.
    </ResponseField>

    <ResponseField name="extensions" type="object">
      Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Legacy string or structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.CLINICAL_PLAN_ITEM,
      patient_id="your-patient-id",
      payload={
          "items": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "clinical_plan_item",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "items": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  Not intended for standing medication instructions or ongoing regimens (e.g. 'continue letrozole as prescribed'); use medication\_list\_update or medication\_adherence for medications. Do not use for general care instructions that are not discrete future actions.
</Note>

## Care encounter

**Type:** `care_encounter` · **Source:** Python SDK / REST, Integration · **Lifecycle-tracked** · **Extensible**

Reserved for care encounters or visits: encounters\[] with encounter\_type, facility, department, start\_date, end\_date, primary\_reason, recorded\_at.

**Payload**

<ResponseField name="encounters" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="encounter_type" type="string" required>
      Type of care encounter.. Example: `outpatient`, `inpatient`, `ED`
    </ResponseField>

    <ResponseField name="facility" type="string">
      Name of the facility or institution where the encounter occurred.
    </ResponseField>

    <ResponseField name="department" type="string">
      Clinical department (e.g. oncology, cardiology, emergency).
    </ResponseField>

    <ResponseField name="start_date" type="string">
      ISO 8601 UTC datetime of encounter start.
    </ResponseField>

    <ResponseField name="end_date" type="string">
      ISO 8601 UTC datetime of encounter end.
    </ResponseField>

    <ResponseField name="primary_reason" type="string">
      Chief complaint or primary reason for the encounter.
    </ResponseField>

    <ResponseField name="outcome" type="string">
      Encounter outcome/disposition.
    </ResponseField>

    <ResponseField name="extensions" type="object">
      Open key/value bag for non-canonical encounter fields (lossy fields land here).
    </ResponseField>

    <ResponseField name="recorded_at" type="string">
      ISO 8601 UTC datetime when this encounter was recorded.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Legacy string or structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.CARE_ENCOUNTER,
      patient_id="your-patient-id",
      payload={
          "encounters": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "care_encounter",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "encounters": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`care_team`](/reference/log-types/profile#care-team) for care team members, [`clinical_plan_item`](/reference/log-types/lab-clinical#clinical-plan-item) for future plan items or referrals, [`emergency_contact`](/reference/log-types/profile#emergency-contact) for emergency contact.
</Note>

## Unstructured report

**Type:** `unstructured_report` · **Source:** Python SDK / REST, Integration

Reserved for unstructured document payloads to be processed by extraction: document\_type + text (or content) for OCR/PDF/EHR export; document\_type selects extraction config.

**Payload**

<ResponseField name="document_type" type="string" required>
  Selects the extraction pipeline configuration to apply to the document.. One of: `clinical_note`, `radiology_imaging`, `operative_procedure`, `cardiology_diagnostic`, `pathology_report`, `lab_report`, `genomic_report`, `discharge_summary`, `patient_intake`, `external_records_package`
</ResponseField>

<ResponseField name="text" type="string" required>
  Raw document content as plain text. Use this or content, not both.
</ResponseField>

<ResponseField name="content" type="string">
  Alternative to text for raw body.
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Legacy string or structured Source object.
</ResponseField>

<ResponseField name="recorded_at" type="string">
  ISO 8601 UTC datetime when the document was received.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.UNSTRUCTURED_REPORT,
      patient_id="your-patient-id",
      payload={
          "document_type": "clinical_note",
          "text": "..."
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "unstructured_report",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "document_type": "clinical_note",
          "text": "..."
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`clinical_note`](/reference/log-types/lab-clinical#clinical-note) for structured clinical notes with sections, [`conversation`](/reference/log-types/conversations#conversation) for conversation transcript. Use when the source is a raw document blob, not already-structured event data.
</Note>

## Procedure

**Type:** `procedure` · **Source:** Python SDK / REST, Integration · **Lifecycle-tracked** · **Extensible**

Reserved for recording procedures the patient has undergone (surgical, interventional, diagnostic): procedures\[] with procedure\_name, cpt\_code, snomed\_code, performed\_date, body\_site, status, outcome, performing\_provider.

**Payload**

<ResponseField name="procedures" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="procedure_name" type="string" required>
      Human-readable procedure name (e.g. lumpectomy, port-a-cath placement, colonoscopy).
    </ResponseField>

    <ResponseField name="cpt_code" type="string">
      CPT billing code (e.g. 19301).
    </ResponseField>

    <ResponseField name="snomed_code" type="string">
      SNOMED CT concept code.
    </ResponseField>

    <ResponseField name="performed_date" type="string">
      ISO 8601 UTC datetime the procedure was performed.
    </ResponseField>

    <ResponseField name="body_site" type="string">
      Anatomical location (e.g. left breast, colon).
    </ResponseField>

    <ResponseField name="status" type="string">
      Procedure status.. One of: `completed`, `not_done`, `in_progress`
    </ResponseField>

    <ResponseField name="outcome" type="string">
      Procedure outcome summary.
    </ResponseField>

    <ResponseField name="performing_provider" type="string">
      Provider or surgeon who performed the procedure.
    </ResponseField>

    <ResponseField name="notes" type="string">
      Additional clinical notes.
    </ResponseField>

    <ResponseField name="extensions" type="object">
      Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
    </ResponseField>

    <ResponseField name="action" type="string">
      Incremental action for this entry. Defaults to add; 'remove' deletes the matching entry.. One of: `add`, `update`, `remove`
    </ResponseField>

    <ResponseField name="entry_key" type="string">
      Optional explicit upsert/dedup identity for this entry; resolved server-side when omitted.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Legacy string or structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.PROCEDURE,
      patient_id="your-patient-id",
      payload={
          "procedures": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "procedure",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "procedures": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`procedure_result`](/reference/log-types/lab-clinical#procedure-result) for procedure/pathology results or lab values, [`clinical_plan_item`](/reference/log-types/lab-clinical#clinical-plan-item) for scheduled future procedures, [`imaging_result`](/reference/log-types/lab-clinical#imaging-result) for imaging study results. Maps to FHIR Procedure resource.
</Note>

## Care goal

**Type:** `care_goal` · **Source:** Python SDK / REST, Integration · **Lifecycle-tracked** · **Extensible**

Reserved for structured care goals (clinical targets, behavioral targets, patient preferences): goals\[] with goal\_description, goal\_type, target\_value, target\_date, current\_status, achievement\_status, priority, category, notes. Distinct from clinical\_plan\_item (discrete future actions) — care goals are standing measurable targets or aspirational outcomes. Maps to FHIR Goal resource.

**Payload**

<ResponseField name="goals" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="goal_description" type="string" required>
      Human-readable description of the goal (e.g. 'Maintain HbA1c below 7%', 'Walk 7000 steps daily').
    </ResponseField>

    <ResponseField name="goal_type" type="string">
      Category of goal.. One of: `clinical_target`, `behavioral_target`, `patient_preference`
    </ResponseField>

    <ResponseField name="target_value" type="string">
      Specific measurable target (e.g. 'HbA1c \< 7%', '7000 steps/day').
    </ResponseField>

    <ResponseField name="target_date" type="string">
      ISO 8601 UTC target achievement date.
    </ResponseField>

    <ResponseField name="current_status" type="string">
      Current status of the goal.. One of: `active`, `completed`, `cancelled`, `on_hold`
    </ResponseField>

    <ResponseField name="achievement_status" type="string">
      How much progress has been made toward the goal.. One of: `in_progress`, `achieved`, `not_achieved`, `no_progress`
    </ResponseField>

    <ResponseField name="priority" type="string">
      Goal priority.. One of: `high`, `medium`, `low`
    </ResponseField>

    <ResponseField name="category" type="string">
      Domain category (e.g. dietary, physical-activity, lab-value, symptom-management).
    </ResponseField>

    <ResponseField name="notes" type="string">
      Additional clinical notes.
    </ResponseField>

    <ResponseField name="recorded_at" type="string">
      ISO 8601 UTC datetime when the goal was recorded.
    </ResponseField>

    <ResponseField name="extensions" type="object">
      Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Legacy string or structured Source object.
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.CARE_GOAL,
      patient_id="your-patient-id",
      payload={
          "goals": [...]
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "care_goal",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "goals": [...]
      }
      }
    ]
  }
  ```
</CodeGroup>

## Care action

**Type:** `care_action` · **Source:** Python SDK / REST, Integration · **Lifecycle-tracked** · **Extensible**

Reserved for logging an alert or task surfaced for the care team: item\_type (alert|task); title; description; summary; severity; status (active|inactive|resolved); entry\_key as the upsert/dedup identity; resolved\_by; linked\_conversation\_id / linked\_encounter\_id; source as a free-string generation source distilled into the entry's sources.

**Payload**

<ResponseField name="item_type" type="string" required>
  Discriminates an alert from a task.. One of: `alert`, `task`
</ResponseField>

<ResponseField name="title" type="string" required>
  Short headline for the alert/task.
</ResponseField>

<ResponseField name="description" type="string">
  Longer detail.
</ResponseField>

<ResponseField name="summary" type="string">
  One-line synthesized summary.
</ResponseField>

<ResponseField name="severity" type="string">
  e.g. low, medium, high, critical.
</ResponseField>

<ResponseField name="status" type="string">
  Lifecycle status (ClinicalStatus); defaults to active on log.. One of: `active`, `inactive`, `resolved`, `remission`, `entered_in_error`
</ResponseField>

<ResponseField name="entry_key" type="string">
  Upsert/dedup identity; defaults to title when omitted.
</ResponseField>

<ResponseField name="resolved_by" type="string">
  Who/what resolved the item.
</ResponseField>

<ResponseField name="linked_conversation_id" type="string">
  Originating/related conversation id.
</ResponseField>

<ResponseField name="linked_encounter_id" type="string">
  Originating/related encounter id.
</ResponseField>

<ResponseField name="source" type="string | object">
  Who asserted this fact. Accepts a legacy string (e.g. 'patient\_self\_report') or a structured Source object with type, asserter, reference\_id, source\_system.
</ResponseField>

<ResponseField name="extensions" type="object">
  Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry's extensions (leaf-level, last-writer-wins by event timestamp).
</ResponseField>

**Example**

<CodeGroup>
  ```python Python theme={null}
  import olira
  from olira import OliraLogType

  olira.log(
      log_type=OliraLogType.CARE_ACTION,
      patient_id="your-patient-id",
      payload={
          "item_type": "alert",
          "title": "..."
      },
  )
  ```

  ```http HTTP theme={null}
  POST /v1/logs/batch
  Authorization: Bearer YOUR_API_KEY
  Content-Type: application/json

  {
    "logs": [
      {
        "log_type": "care_action",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {
          "item_type": "alert",
          "title": "..."
      }
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`condition`](/reference/log-types/profile#condition) for clinical conditions, [`symptom_report`](/reference/log-types/symptom-reports#symptom-report) for symptoms.
</Note>
