> ## 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.

# Profile

> Stable patient facts: demographics, conditions, care team, insurance, allergies, and related records. 13 log types with payload schemas and examples.

Stable patient facts: demographics, conditions, care team, insurance, allergies, and related records. 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.

## Demographics

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

Reserved for patient identity and contact (stable profile): name, dob, sex, marital\_status, address, phone, email, language, ethnicity; patch style.

**Payload**

<ResponseField name="name" type="string">
  Full name of the patient.
</ResponseField>

<ResponseField name="dob" type="string">
  Date of birth in ISO 8601 date format (YYYY-MM-DD).
</ResponseField>

<ResponseField name="sex" type="string">
  Biological sex or sex assigned at birth.
</ResponseField>

<ResponseField name="marital_status" type="string">
  Patient's marital status (e.g. single, married, widowed).
</ResponseField>

<ResponseField name="address" type="object">
  <Expandable title="fields">
    <ResponseField name="street" type="string">
      Street address.
    </ResponseField>

    <ResponseField name="city" type="string">
      City.
    </ResponseField>

    <ResponseField name="state" type="string">
      State or region.
    </ResponseField>

    <ResponseField name="zip" type="string">
      Postal/ZIP code.
    </ResponseField>

    <ResponseField name="country" type="string">
      Country.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="phone" type="string">
  Contact phone number (legacy scalar; superseded by telecom). Still accepted via computed back-read.
</ResponseField>

<ResponseField name="email" type="string">
  Contact email address (legacy scalar; superseded by telecom). Still accepted via computed back-read.
</ResponseField>

<ResponseField name="telecom" type="object[]">
  ContactPoint list (phone/email/...); supersedes scalar phone/email.

  <Expandable title="fields">
    <ResponseField name="system" type="string">
      ContactPoint system (e.g. phone, email, fax, sms).
    </ResponseField>

    <ResponseField name="value" type="string">
      The contact value.
    </ResponseField>

    <ResponseField name="use" type="string">
      ContactPoint use (e.g. home, work, mobile).
    </ResponseField>

    <ResponseField name="rank" type="integer">
      Preference order; 1 = most preferred.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="addresses" type="object[]">
  Address list; supersedes scalar address.

  <Expandable title="fields">
    <ResponseField name="street" type="string">
      Street address.
    </ResponseField>

    <ResponseField name="city" type="string">
      City.
    </ResponseField>

    <ResponseField name="state" type="string">
      State or region.
    </ResponseField>

    <ResponseField name="zip" type="string">
      Postal/ZIP code.
    </ResponseField>

    <ResponseField name="country" type="string">
      Country.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="identifiers" type="object[]">
  External identifiers (e.g. MRN).

  <Expandable title="fields">
    <ResponseField name="system" type="string">
      Identifier system (e.g. MRN, SSN, MBI).
    </ResponseField>

    <ResponseField name="value" type="string" required>
      The identifier value.
    </ResponseField>

    <ResponseField name="type" type="string">
      Identifier type label, e.g. 'MRN', 'NPI', 'MBI'.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="language" type="string">
  Preferred language as BCP 47 tag (e.g. en-US, es-MX).
</ResponseField>

<ResponseField name="ethnicity" type="string">
  Patient's self-reported ethnicity.
</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. Legacy string or structured Source object.
</ResponseField>

**Example**

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

  olira.log(
      log_type=OliraLogType.DEMOGRAPHICS,
      patient_id="your-patient-id",
      payload={},
  )
  ```

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

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

<Note>
  **Related types:** Use [`care_team`](/reference/log-types/profile#care-team) for care team providers, [`emergency_contact`](/reference/log-types/profile#emergency-contact) for emergency contact. Not intended for clinical or event data.
</Note>

## Condition

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

Reserved for documenting any condition in the patient's medical history, covering both currently active and past/resolved conditions: disease\_type = diagnosis or condition name (e.g. breast cancer, COPD, diabetes, UTI); stage = disease stage or grade; clinical\_status = active|resolved|remission|inactive|entered\_in\_error; snomed\_code for coded interoperability; icd10\_codes\[]; conditions\[] for multi-condition payloads.

**Payload**

<ResponseField name="disease_type" type="string">
  Primary/legacy condition name (e.g. breast cancer, COPD, type 2 diabetes).
</ResponseField>

<ResponseField name="stage" type="string">
  Disease stage or grade (e.g. Stage III, T2N1M0, Grade 2).
</ResponseField>

<ResponseField name="diagnosis_date" type="string">
  ISO 8601 datetime of diagnosis.
</ResponseField>

<ResponseField name="icd10_codes" type="string[]">
  ICD-10-CM codes for the condition.
</ResponseField>

<ResponseField name="clinical_status" type="string">
  Current clinical status of the condition.. One of: `active`, `resolved`, `remission`, `inactive`, `entered_in_error`
</ResponseField>

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

<ResponseField name="onset_date" type="string">
  Date of symptom onset (may predate formal diagnosis).
</ResponseField>

<ResponseField name="recorded_at" type="string">
  Date the condition was recorded in the source system.
</ResponseField>

<ResponseField name="is_primary" type="boolean">
  True when this is the patient's primary/index condition.
</ResponseField>

<ResponseField name="conditions" type="object[]">
  Multi-condition payload; each entry maps to ConditionEntry.

  <Expandable title="fields">
    <ResponseField name="disease_type" type="string">
      Condition name (mirrors top-level disease\_type).
    </ResponseField>

    <ResponseField name="stage" type="string">
      Disease stage or grade (e.g. Stage III, T2N1M0, Grade 2).
    </ResponseField>

    <ResponseField name="diagnosis_date" type="string">
      ISO 8601 datetime of diagnosis.
    </ResponseField>

    <ResponseField name="icd10_codes" type="string[]">
      ICD-10-CM codes for this condition.
    </ResponseField>

    <ResponseField name="clinical_status" type="string">
      Current clinical status of this condition.. One of: `active`, `resolved`, `remission`, `inactive`, `entered_in_error`
    </ResponseField>

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

    <ResponseField name="onset_date" type="string">
      Date of symptom onset (may predate formal diagnosis).
    </ResponseField>

    <ResponseField name="recorded_at" type="string">
      Date this condition was recorded in the 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>
  </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.CONDITION,
      patient_id="your-patient-id",
      payload={},
  )
  ```

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

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

<Note>
  **Related types:** Use [`treatment_phase`](/reference/log-types/profile#treatment-phase) for treatment phase transitions, [`procedure`](/reference/log-types/lab-clinical#procedure) for procedure outcomes. Not intended for transient symptoms (symptom\_reported). Supersedes condition\_updated with expanded coverage of all clinical statuses.
</Note>

## Preferences

**Type:** `preferences` · **Source:** Python SDK / REST · **Extensible**

Reserved for communication and lifestyle preferences (stable profile): reading\_level, tone, dietary\_preferences, comfort\_with\_technology, energy\_level, symptoms\_need\_help\_managing, things\_to\_track, notification\_preferences; patch style.

**Payload**

<ResponseField name="reading_level" type="string">
  Patient's preferred reading or health literacy level (e.g. basic, intermediate, advanced).
</ResponseField>

<ResponseField name="tone" type="string">
  Preferred communication tone (e.g. formal, conversational, supportive).
</ResponseField>

<ResponseField name="dietary_preferences" type="string[]">
  Dietary restrictions or preferences (e.g. vegetarian, low-sodium, gluten-free).
</ResponseField>

<ResponseField name="comfort_with_technology" type="string">
  Self-reported comfort with digital tools (e.g. low, moderate, high).
</ResponseField>

<ResponseField name="energy_level" type="string">
  Self-reported typical energy level.
</ResponseField>

<ResponseField name="symptoms_need_help_managing" type="string[]">
  Symptoms the patient wants help tracking or managing.
</ResponseField>

<ResponseField name="things_to_track" type="string[]">
  Health metrics or topics the patient wants to monitor.
</ResponseField>

<ResponseField name="notification_preferences" type="object">
  <Expandable title="fields">
    <ResponseField name="push" type="boolean">
      Whether push notifications are enabled.
    </ResponseField>

    <ResponseField name="email" type="boolean">
      Whether email notifications are enabled.
    </ResponseField>

    <ResponseField name="sms" type="boolean">
      Whether SMS notifications are enabled.
    </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. Legacy string or structured Source object.
</ResponseField>

**Example**

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

  olira.log(
      log_type=OliraLogType.PREFERENCES,
      patient_id="your-patient-id",
      payload={},
  )
  ```

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

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

<Note>
  Not intended for clinical data; care plan or medications.
</Note>

## Emergency contact

**Type:** `emergency_contact` · **Source:** Python SDK / REST · **Extensible**

Reserved for healthcare proxy or emergency contact (stable profile): name, relationship, phone, email; patch style.

**Payload**

<ResponseField name="name" type="string">
  Full name of the emergency contact or healthcare proxy.
</ResponseField>

<ResponseField name="relationship" type="string">
  Relationship to the patient (e.g. spouse, parent, sibling, friend).
</ResponseField>

<ResponseField name="phone" type="string">
  Contact phone number.
</ResponseField>

<ResponseField name="email" type="string">
  Contact email address.
</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="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.EMERGENCY_CONTACT,
      patient_id="your-patient-id",
      payload={},
  )
  ```

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

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

<Note>
  **Related types:** Use [`care_team`](/reference/log-types/profile#care-team) for care team providers, [`demographics`](/reference/log-types/profile#demographics) for demographics.
</Note>

## Care team

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

Reserved for care team providers (stable profile): members\[] with action (add/update/remove), role, name, npi, organization.

**Payload**

<ResponseField name="members" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="action" type="string" required>
      Whether this member is being added, updated, or removed from the care team.. One of: `add`, `update`, `remove`
    </ResponseField>

    <ResponseField name="role" type="string" required>
      Clinical role of the provider (e.g. oncologist, cardiologist, primary\_care, nurse, pharmacist).
    </ResponseField>

    <ResponseField name="name" type="string">
      Provider's full name.
    </ResponseField>

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

    <ResponseField name="organization" type="string">
      Healthcare organization or practice the provider is affiliated with.
    </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_TEAM,
      patient_id="your-patient-id",
      payload={
          "members": [...]
      },
  )
  ```

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

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

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

## Insurance

**Type:** `insurance` · **Source:** Python SDK / REST · **Extensible**

Reserved for payer and plan (stable profile): payer, plan\_name, member\_id, group\_id; patch style.

**Payload**

<ResponseField name="payer" type="string">
  Name of the insurance company or payer.
</ResponseField>

<ResponseField name="plan_name" type="string">
  Name of the insurance plan.
</ResponseField>

<ResponseField name="member_id" type="string">
  Patient's member ID on the insurance plan.
</ResponseField>

<ResponseField name="group_id" type="string">
  Group number associated with the insurance plan.
</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="rank" type="string">
  Coverage rank; identity discriminator for the multi-entry insurance module. Omit for a single/primary plan.. One of: `primary`, `secondary`
</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="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.INSURANCE,
      patient_id="your-patient-id",
      payload={},
  )
  ```

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

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

<Note>
  **Related types:** Use [`pharmacy`](/reference/log-types/profile#pharmacy) for pharmacy. Not intended for other profile or event data.
</Note>

## Social determinants

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

Reserved for social determinants of health (stable profile): living\_situation, support\_system, transportation\_access, employment\_status, housing\_stability; patch style.

**Payload**

<ResponseField name="living_situation" type="string">
  Patient's living arrangement (e.g. lives alone, lives with family, assisted living).
</ResponseField>

<ResponseField name="support_system" type="string">
  Availability and nature of social support (e.g. strong family support, limited support network).
</ResponseField>

<ResponseField name="transportation_access" type="string">
  Access to transportation for healthcare and daily needs (e.g. has car, relies on public transport, no access).
</ResponseField>

<ResponseField name="employment_status" type="string">
  Employment status (e.g. employed full-time, unemployed, retired, on disability).
</ResponseField>

<ResponseField name="housing_stability" type="string">
  Stability of housing situation (e.g. stable, at risk, unhoused).
</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. Legacy string or structured Source object.
</ResponseField>

**Example**

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

  olira.log(
      log_type=OliraLogType.SOCIAL_DETERMINANTS,
      patient_id="your-patient-id",
      payload={},
  )
  ```

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

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

<Note>
  **Related types:** Use [`demographics`](/reference/log-types/profile#demographics) for demographics, [`care_team`](/reference/log-types/profile#care-team) for care team. Not intended for clinical findings or events.
</Note>

## Pharmacy

**Type:** `pharmacy` · **Source:** Python SDK / REST · **Extensible**

Reserved for the patient's pharmacy contact (stable profile): name, address, phone; patch style.

**Payload**

<ResponseField name="name" type="string">
  Name of the patient's preferred pharmacy.
</ResponseField>

<ResponseField name="address" type="object">
  <Expandable title="fields">
    <ResponseField name="street" type="string">
      Street address.
    </ResponseField>

    <ResponseField name="city" type="string">
      City.
    </ResponseField>

    <ResponseField name="state" type="string">
      State or region.
    </ResponseField>

    <ResponseField name="zip" type="string">
      Postal/ZIP code.
    </ResponseField>

    <ResponseField name="country" type="string">
      Country.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="phone" type="string">
  Pharmacy contact phone number.
</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="type" type="string">
  Pharmacy type; identity discriminator for the multi-entry pharmacy module.. One of: `retail`, `mail_order`
</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="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.PHARMACY,
      patient_id="your-patient-id",
      payload={},
  )
  ```

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

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

<Note>
  **Related types:** Use [`medication_list_update`](/reference/log-types/medication#medication-list-update) for medications list, [`insurance`](/reference/log-types/profile#insurance) for insurance.
</Note>

## Treatment phase

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

Reserved for treatment phase or care intent transition: new\_phase (active\_treatment, surveillance, palliative, remission), effective\_date, changed\_by; triggers downstream effects.

**Payload**

<ResponseField name="previous_phase" type="string">
  Prior treatment phase for audit purposes. Omit if first phase transition.
</ResponseField>

<ResponseField name="new_phase" type="string" required>
  active\_treatment = receiving curative or life-prolonging treatment; surveillance = monitoring after treatment with no active disease; palliative = symptom management and comfort focus; remission = no detectable disease.. One of: `active_treatment`, `surveillance`, `palliative`, `remission`
</ResponseField>

<ResponseField name="effective_date" type="string" required>
  ISO 8601 date when the new phase becomes effective.
</ResponseField>

<ResponseField name="changed_by" type="string" required>
  clinician = explicit provider decision; system = triggered automatically by clinical logic.. One of: `clinician`, `system`
</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_PHASE,
      patient_id="your-patient-id",
      payload={
          "new_phase": "active_treatment",
          "effective_date": "...",
          "changed_by": "clinician"
      },
  )
  ```

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

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

<Note>
  **Related types:** Use [`treatment_response_assessment`](/reference/log-types/lab-clinical#treatment-response-assessment) for response assessment like RECIST. Not intended for condition or diagnosis (condition\_updated); medication or plan changes.
</Note>

## Allergy / intolerance

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

Reserved for known allergies and intolerances (stable profile): allergies\[] with allergen, category (food|medication|environment|biologic|other), criticality (high|low|unable\_to\_assess), clinical\_status, reactions\[], snomed\_code, recorded\_date. Use action=add|update|remove per entry for incremental updates.

**Payload**

<ResponseField name="allergies" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="allergen" type="string" required>
      Allergen substance or product name (e.g. penicillin, shellfish, peanuts, latex).
    </ResponseField>

    <ResponseField name="category" type="string">
      Category of the allergen.. One of: `food`, `medication`, `environment`, `biologic`, `other`
    </ResponseField>

    <ResponseField name="criticality" type="string">
      Potential severity of a future reaction.. One of: `high`, `low`, `unable_to_assess`
    </ResponseField>

    <ResponseField name="clinical_status" type="string">
      Current clinical status of the allergy.. One of: `active`, `inactive`, `resolved`
    </ResponseField>

    <ResponseField name="reactions" type="string[]">
      Observed or reported reactions (e.g. anaphylaxis, hives, rash).
    </ResponseField>

    <ResponseField name="snomed_code" type="string">
      SNOMED CT code for the allergen substance.
    </ResponseField>

    <ResponseField name="recorded_date" type="string">
      ISO 8601 datetime when this allergy was first recorded.
    </ResponseField>

    <ResponseField name="action" type="string">
      Incremental action for this entry. Defaults to add if omitted.. One of: `add`, `update`, `remove`
    </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.ALLERGY_INTOLERANCE,
      patient_id="your-patient-id",
      payload={
          "allergies": [...]
      },
  )
  ```

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

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

<Note>
  **Related types:** Use [`medication_list_update`](/reference/log-types/medication#medication-list-update) for medication interactions. Not intended for adverse drug reactions without allergy status; transient side effects (symptom\_reported). Maps to FHIR AllergyIntolerance resource.
</Note>

## Immunization

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

Reserved for vaccination and immunization records (stable profile): immunizations\[] with vaccine\_name, cvx\_code, administered\_date, status, dose\_number, series\_name, administered\_by.

**Payload**

<ResponseField name="immunizations" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="vaccine_name" type="string" required>
      Vaccine product name (e.g. Moderna COVID-19 mRNA, Fluzone High-Dose).
    </ResponseField>

    <ResponseField name="cvx_code" type="string">
      CDC CVX code (e.g. 208 for Moderna COVID-19).
    </ResponseField>

    <ResponseField name="lot_number" type="string">
      Vaccine lot number.
    </ResponseField>

    <ResponseField name="administered_date" type="string">
      ISO 8601 UTC datetime the vaccine was administered.
    </ResponseField>

    <ResponseField name="status" type="string">
      Whether the dose was administered.. One of: `completed`, `not_done`
    </ResponseField>

    <ResponseField name="dose_number" type="integer">
      Dose sequence number in the series (1, 2, booster…).
    </ResponseField>

    <ResponseField name="series_name" type="string">
      Immunization series name (e.g. Primary, Booster).
    </ResponseField>

    <ResponseField name="administered_by" type="string">
      Provider or facility that administered the vaccine.
    </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.IMMUNIZATION,
      patient_id="your-patient-id",
      payload={
          "immunizations": [...]
      },
  )
  ```

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

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

<Note>
  **Related types:** Use [`medication_list_update`](/reference/log-types/medication#medication-list-update) for medication administration, [`allergy_intolerance`](/reference/log-types/profile#allergy-/-intolerance) for allergic reactions to vaccines, [`lab_results`](/reference/log-types/lab-clinical#lab-results) for lab serology results. Maps to FHIR Immunization resource.
</Note>

## Device

**Type:** `device` · **Source:** Python SDK / REST · **Lifecycle-tracked** · **Extensible**

Reserved for implanted and medical devices (stable profile): devices\[] with device\_name, device\_type (implanted|external|wearable), udi, manufacturer, implanted\_date, removed\_date, body\_site, status. Use action=add|update|remove per entry for lifecycle management.

**Payload**

<ResponseField name="devices" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="device_name" type="string" required>
      Device name or model (e.g. Medtronic MRI SureScan ICD, Dexcom G7).
    </ResponseField>

    <ResponseField name="device_type" type="string">
      Device category.. One of: `implanted`, `external`, `wearable`
    </ResponseField>

    <ResponseField name="udi" type="string">
      Unique Device Identifier from the device label.
    </ResponseField>

    <ResponseField name="manufacturer" type="string">
      Device manufacturer.
    </ResponseField>

    <ResponseField name="implanted_date" type="string">
      ISO 8601 UTC datetime of implantation.
    </ResponseField>

    <ResponseField name="removed_date" type="string">
      ISO 8601 UTC datetime of removal (if removed).
    </ResponseField>

    <ResponseField name="body_site" type="string">
      Anatomical location (e.g. left chest wall, abdomen).
    </ResponseField>

    <ResponseField name="status" type="string">
      Current device status.. One of: `active`, `inactive`, `removed`
    </ResponseField>

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

    <ResponseField name="action" type="string">
      Incremental action for this entry. Defaults to add if omitted.. One of: `add`, `update`, `remove`
    </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.DEVICE,
      patient_id="your-patient-id",
      payload={
          "devices": [...]
      },
  )
  ```

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

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

<Note>
  Not intended for consumer wearables syncing data streams (passive SDK); care team equipment; home monitoring interpreted data (vitals\_updated). Internal-only: not produced by the FHIR bundle absorber; not submittable via public SDK. Use for server-side or trusted pipelines only.
</Note>

## Family history

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

Reserved for family medical history by relative (stable profile): relatives\[] with relationship, conditions\[] (each with condition\_name, snomed\_code, icd10\_code, onset\_age), deceased, notes. Entries are upserted by relationship — sending a relative again updates their conditions list.

**Payload**

<ResponseField name="relatives" type="object[]" required>
  <Expandable title="fields">
    <ResponseField name="relationship" type="string" required>
      Relationship to patient (e.g. mother, father, sibling, maternal\_grandmother).
    </ResponseField>

    <ResponseField name="conditions" type="object[]">
      <Expandable title="fields">
        <ResponseField name="condition_name" type="string" required>
          Condition name (e.g. breast cancer, colorectal cancer, type 2 diabetes).
        </ResponseField>

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

        <ResponseField name="icd10_code" type="string">
          ICD-10 code.
        </ResponseField>

        <ResponseField name="onset_age" type="integer">
          Age of onset for this family member.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="deceased" type="boolean">
      Whether the family member is deceased.
    </ResponseField>

    <ResponseField name="notes" type="string">
      Free-text notes about this family member's history.
    </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.FAMILY_HISTORY,
      patient_id="your-patient-id",
      payload={
          "relatives": [...]
      },
  )
  ```

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

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

<Note>
  **Related types:** Use [`condition`](/reference/log-types/profile#condition) for patient's own diagnoses, [`genomic_variant`](/reference/log-types/lab-clinical#genomic-variant) for genetic variant results. Maps to FHIR FamilyMemberHistory resource.
</Note>
