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

# Get a receptionist call

> One AI Receptionist call with everything the list returns plus the full `transcript` (speaker and message per turn) and `extracted_data` (the structured details the post-call analysis pulled from the conversation). Returns 404 if the call isn't your organization's. Requires the receptionist:read scope.

| Requirement | Detail |
| - | - |
| **Scope** | `receptionist:read` |
| **Rate limit** | About 60 requests per minute per API key (shared by all endpoints; approximate) |
| **Cost** | Free |

> [!TIP]
>
> **Safety**
>
> * **Writes data:** No
> * **Safe to retry:** Yes
> * **Contacts an outside system:** None
> * **Dry run:** Not needed (read-only).

Everything [List receptionist calls](https://docs.healos.ai/api-reference/receptionist/list-receptionist-calls.md) returns for the call, plus:

* `transcript`: the conversation in order, one `{ speaker, message }` per turn. `user` is the caller, `assistant` is the AI receptionist. `null` when no transcript was recorded.
* `extracted_data`: the structured details the post-call analysis pulled from the transcript, such as the reason for the call or whether a callback was requested. Keys vary by call and by what the practice's receptionist is configured to collect; treat unknown keys as informational.

The transcript and extracted details are protected health information. Store them as you would any patient record.

Guide: [Receptionist call transcripts](https://docs.healos.ai/recipes/receptionist-call-transcripts.md). Errors: [Error catalog](https://docs.healos.ai/errors.md).


## OpenAPI

````yaml openapi/ext-api-v1.json GET /receptionist/calls/{callId}
openapi: 3.0.0
info:
  title: Healos External API
  version: 1.0.0
  description: >-
    External API for managing patients, documents, and appointments, listing
    providers and note templates, pulling clinical notes (with transcript and
    patient context), running insurance eligibility checks, browsing the EHR
    action catalog, reading AI Receptionist calls (summary, transcript,
    extracted details and recording), managing the AI Receptionist inbox tasks,
    and registering webhooks for note and document events.
servers:
  - url: https://api.healos.ai/ext-api/v1
    description: Production
  - url: http://localhost:8787/ext-api/v1
    description: Local development
security:
  - ApiKeyAuth: []
paths:
  /receptionist/calls/{callId}:
    get:
      tags:
        - Receptionist
      summary: Get a receptionist call
      description: >-
        One AI Receptionist call with everything the list returns plus the full
        `transcript` (speaker and message per turn) and `extracted_data` (the
        structured details the post-call analysis pulled from the conversation).
        Returns 404 if the call isn't your organization's. Requires the
        receptionist:read scope.
      parameters:
        - schema:
            type: string
            description: >-
              Call identifier, from GET /receptionist/calls or the post-call
              webhook's `call_id`.
            example: c0a80101-0000-4000-8000-000000000001
          required: true
          name: callId
          in: path
      responses:
        '200':
          description: Call with transcript and extracted details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReceptionistCallDetailResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Insufficient scope (needs receptionist:read)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Call not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
components:
  schemas:
    ReceptionistCallDetailResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/ReceptionistCallDetail'
      required:
        - data
    Error:
      type: object
      properties:
        error:
          type: string
      required:
        - error
    RateLimitError:
      type: object
      properties:
        error:
          type: string
          example: Rate limit exceeded. Please retry after the window resets.
        code:
          type: string
          enum:
            - daily_cap_reached
          description: >-
            Set when the organization reached its daily cap for this paid
            operation (not on a per-minute limit).
        reset_at:
          type: string
          format: date-time
          description: 'With `code`: when the daily cap resets (next 00:00 UTC).'
          example: '2026-10-28T00:00:00.000Z'
      required:
        - error
    ReceptionistCallDetail:
      type: object
      properties:
        id:
          type: string
          description: >-
            Call identifier. The same id the post-call webhook sends as
            `call_id`.
          example: c0a80101-0000-4000-8000-000000000001
        direction:
          type: string
          description: '`inbound` or `outbound`.'
          example: inbound
        status:
          type: string
          description: >-
            The call status as the dashboard shows it: completed, missed,
            voicemail or failed.
          example: completed
        outcome:
          type: string
          nullable: true
          description: >-
            What the call ended as: booked, rescheduled, cancelled, confirmed,
            could_not_book, transferred, question_answered, message_taken,
            hung_up, other. Null until the post-call analysis has run.
          example: message_taken
        outcome_reason:
          type: string
          nullable: true
          description: >-
            Why the call was transferred or could not be booked
            (asked_for_person, no_availability, chart_not_found,
            insurance_not_accepted, ...).
          example: no_availability
        transfer_status:
          type: string
          nullable: true
          description: >-
            How a warm transfer ended (connected, no_answer, busy, voicemail,
            ...). Null when no transfer was attempted.
          example: connected
        caller_name:
          type: string
          nullable: true
          example: Pat Example
        from_number:
          type: string
          description: The caller's number (E.164).
          example: '+15555550100'
        to_number:
          type: string
          description: The receptionist line that was called (E.164).
          example: '+15555550199'
        patient_id:
          type: string
          nullable: true
          description: >-
            The HealOS patient the call was linked to, usable with GET
            /patients/{patientId}. Null when the caller was not matched to a
            chart.
          example: '700000000000000001'
        started_at:
          type: string
          nullable: true
          example: '2026-10-27T14:03:11.000Z'
        ended_at:
          type: string
          nullable: true
          example: '2026-10-27T14:07:42.000Z'
        duration_sec:
          type: integer
          nullable: true
          description: Call length in seconds, which is also the recording length.
          example: 271
        summary:
          type: string
          nullable: true
          description: The post-call summary (two to three sentences).
          example: >-
            Caller asked to reschedule a follow-up with Dr. Example; no Tuesday
            slot was open, so a callback was requested.
        has_recording:
          type: boolean
          description: >-
            Whether a recording exists. Fetch the audio with GET
            /receptionist/calls/{callId}/recording.
        has_transcript:
          type: boolean
          description: >-
            Whether a transcript exists. GET /receptionist/calls/{callId}
            returns it.
        review_status:
          type: string
          description: 'Staff review state in the HealOS inbox: unreviewed or reviewed.'
          example: unreviewed
        created_at:
          type: string
          description: >-
            When HealOS received the call record. `from_date` and `to_date`
            filter on this.
          example: '2026-10-27T14:07:50.000Z'
        updated_at:
          type: string
          example: '2026-10-27T14:08:02.000Z'
        transcript:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/ReceptionistTranscriptTurn'
          description: >-
            The conversation in order. Null when no transcript was recorded (a
            call that never connected, or a record older than the retention
            window).
        extracted_data:
          type: object
          nullable: true
          additionalProperties:
            nullable: true
          description: >-
            The structured details the post-call analysis pulled from the
            transcript (reason for call, callback requested, suggested task
            category, ...). Keys vary by call; treat unknown keys as
            informational.
          example:
            reason_for_call: reschedule follow-up
            callback_requested: true
            appointment_requested: false
      required:
        - id
        - direction
        - status
        - outcome
        - outcome_reason
        - transfer_status
        - caller_name
        - from_number
        - to_number
        - patient_id
        - started_at
        - ended_at
        - duration_sec
        - summary
        - has_recording
        - has_transcript
        - review_status
        - created_at
        - updated_at
        - transcript
        - extracted_data
    ReceptionistTranscriptTurn:
      type: object
      properties:
        speaker:
          type: string
          description: 'Who spoke: `user` is the caller, `assistant` is the AI receptionist.'
          example: user
        message:
          type: string
          example: I need to reschedule my appointment.
      required:
        - speaker
        - message
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: API key obtained from /api/v1/ext-api-keys

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.