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

# Download a recording

> Download the recording of a call your organization owns. The `call_recording_url` on a call record already points here, on the current API host. The response is the audio itself: `audio/ogg` for recordings Drive Health stored and `audio/wav` for recordings fetched from the telephony provider, so read the `Content-Type` header. Fetch it from your backend; never place the organization key in a browser `audio` element or link.



## OpenAPI

````yaml /openapi/backend.json get /api/calls/recording/{call_id}
openapi: 3.0.3
info:
  title: Drive Health operational API
  version: 1.0.0
  description: >-
    Server-to-server API for organizations integrating with Drive Health. It
    starts chat and voice conversations and reads the calls, chats, transcripts,
    and recordings those conversations produce. Authenticate every request with
    an organization API key.
servers:
  - url: https://backend.drivehealth.ai
    description: Production. Use the API origin supplied for your environment.
security:
  - organizationBearer: []
  - organizationApiKey: []
tags:
  - name: Chat
    description: >-
      Start a chat with a caregiver, exchange messages, and end the session.
      These routes also answer on the compatibility mount `/v1/chat/...`.
  - name: Voice
    description: Start phone calls from an owned number and register browser voice calls.
  - name: Results
    description: >-
      Read the calls, chat sessions, transcripts, and recordings your
      organization owns.
paths:
  /api/calls/recording/{call_id}:
    get:
      tags:
        - Results
      summary: Download a recording
      description: >-
        Download the recording of a call your organization owns. The
        `call_recording_url` on a call record already points here, on the
        current API host. The response is the audio itself: `audio/ogg` for
        recordings Drive Health stored and `audio/wav` for recordings fetched
        from the telephony provider, so read the `Content-Type` header. Fetch it
        from your backend; never place the organization key in a browser `audio`
        element or link.
      operationId: getCallRecording
      parameters:
        - name: call_id
          in: path
          required: true
          description: ID of the call whose recording to download.
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: The recording audio.
          content:
            audio/ogg:
              schema:
                type: string
                format: binary
            audio/wav:
              schema:
                type: string
                format: binary
        '400':
          description: The call was not found in your organization, or it has no recording.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
              examples:
                unknownCall:
                  summary: Call not found
                  value:
                    err: true
                    msg: Call record not found.
                recordingDisabled:
                  summary: Recording disabled
                  value:
                    err: true
                    msg: Call recording disabled.
                noRecording:
                  summary: No recording
                  value:
                    err: true
                    msg: Recording not found.
        '403':
          $ref: '#/components/responses/Refused'
components:
  schemas:
    ErrorEnvelope:
      type: object
      required:
        - err
        - msg
      properties:
        err:
          type: boolean
          example: true
        msg:
          type: string
          description: What went wrong.
    Refusal:
      type: object
      required:
        - detail
      properties:
        detail:
          type: string
          description: Why the request was refused.
  responses:
    Refused:
      description: >-
        Refused before the endpoint ran, with `detail` instead of the standard
        envelope: the key is missing, invalid, or revoked; more than one
        credential was presented; or a selector names a different organization.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
          examples:
            invalidKey:
              summary: Invalid or revoked key
              value:
                detail: Unauthorized
            noCredential:
              summary: No credential
              value:
                detail: Authentication credentials were not provided.
            conflictingCredentials:
              summary: More than one credential
              value:
                detail: >-
                  More than one credential was presented. Send an organization
                  key or a session token, not both.
            foreignSelector:
              summary: Selector names another organization
              value:
                detail: >-
                  This key belongs to a different organization than the request
                  selected.
  securitySchemes:
    organizationBearer:
      type: http
      scheme: bearer
      description: >-
        An organization API key starting with `dh_`, sent as `Authorization:
        Bearer dh_your_api_key`.
    organizationApiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Alternative to the Authorization header. Send one credential per
        request.

````

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