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

# Conversations

> Conversation transcripts and interaction records from chat and voice channels. 3 log types with payload schemas and examples.

Conversation transcripts and interaction records from chat and voice channels. 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.

## Conversation

**Type:** `conversation` · **Source:** Python SDK / REST

Reserved for the end of a chat or voice conversation with transcript: conversation\_id + transcript (plain string or structured turns with speaker\_label, text); one event per conversation end; triggers memory and conversation state.

**Payload**

<ResponseField name="conversation_id" type="string">
  Shared with conversation\_turn events for the same session.
</ResponseField>

<ResponseField name="channel" type="string">
  Communication channel.
</ResponseField>

<ResponseField name="duration_seconds" type="integer">
  Total conversation duration in seconds.
</ResponseField>

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

<ResponseField name="participants" type="object[]">
  <Expandable title="fields">
    <ResponseField name="role" type="string">
      Role of the participant in the conversation.. Example: `patient`, `agent`, `clinician`
    </ResponseField>

    <ResponseField name="user_id" type="string">
      User identifier when applicable.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="transcript" type="string | array" />

<ResponseField name="flagged" type="boolean">
  True when this conversation was flagged for clinical review.
</ResponseField>

<ResponseField name="flag_reason" type="string">
  Reason the conversation was flagged.
</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.CONVERSATION,
      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": "conversation",
        "patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
        "timestamp": "2026-03-18T09:00:00Z",
        "payload": {}
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  **Related types:** Use [`clinical_note`](/reference/log-types/lab-clinical#clinical-note) for provider clinical notes, [`conversation_turn`](/reference/log-types/conversations#conversation-turn) for single turn during conversation. Do not mix with conversation\_turn for the same session.
</Note>

## Conversation turn

**Type:** `conversation_turn` · **Source:** Python SDK / REST

Reserved for one turn within an ongoing conversation when logging incrementally: conversation\_id + turn\_index + speaker\_label + text; one event per turn; same session uses same conversation\_id.

**Payload**

<ResponseField name="conversation_id" type="string" required>
  Must be consistent across all turns in the same session.
</ResponseField>

<ResponseField name="turn_index" type="integer" required>
  Monotonically increasing integer within a session, starting at 0.
</ResponseField>

<ResponseField name="speaker_label" type="string" required>
  Who spoke this turn.. Example: `patient`, `agent`, `clinician`
</ResponseField>

<ResponseField name="text" type="string" required>
  The text content of this turn.
</ResponseField>

<ResponseField name="channel" type="string">
  Communication channel.
</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.CONVERSATION_TURN,
      patient_id="your-patient-id",
      payload={
          "conversation_id": "...",
          "turn_index": 0,
          "speaker_label": "patient",
          "text": "..."
      },
  )
  ```

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

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

<Note>
  **Related types:** Use [`conversation`](/reference/log-types/conversations#conversation) for full transcript at conversation end, [`clinical_note`](/reference/log-types/lab-clinical#clinical-note) for clinical notes. Do not mix with conversation transcript for the same session.
</Note>

## Memory report

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

Reserved for pre-structured facts to store in the memory bank only: content + optional type (MemoryType); bypasses extraction when type is set.

**Payload**

<ResponseField name="content" type="string" required>
  The memory fact to store. Should be a complete, self-contained statement about the patient.
</ResponseField>

<ResponseField name="type" type="string">
  MemoryType category tag. When provided, automatic tagging is skipped. interests\_concerns = hobbies/concerns; mood\_stress = emotional state; daily\_functions\_of\_living = ADL ability; symptom\_context = circumstances around symptoms; health\_history = past medical history; nutrition\_related = diet/nutrition; diagnosis = named diagnoses; treatment = regimen/treatment info; social\_determinants\_of\_health = housing/employment/transport; lab\_and\_vitals = lab/vital values in context; clinical\_observations = provider exam findings.. Example: `interests_concerns`, `mood_stress`, `daily_functions_of_living`
</ResponseField>

**Example**

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

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

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

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

<Note>
  **Related types:** Use [`conversation`](/reference/log-types/conversations#conversation) or [`clinical_note`](/reference/log-types/lab-clinical#clinical-note) for conversation or note content. Not intended for updating event state or stable state (use condition\_updated, medication\_list\_update, lab\_results, etc.). Memory is the sole target; no direct state update.
</Note>
