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

# Get a recording

> Download a call's audio via a short-lived, authenticated redirect.

<Info>
  This returns a **`307` redirect** to a short-lived pre-signed audio URL — auth is enforced on the
  first hop, then it redirects to the file. Any client that follows redirects (`curl -L`, browsers,
  players, SDKs) works transparently. Don't cache the redirect target; it expires.
</Info>

<Tip>
  Rather than polling, subscribe to
  [`call.recording.ready`](/developers/webhooks/events#call-recording-ready) — it fires when the
  recording is ready and even carries a ready-to-use pre-signed URL in the payload.
</Tip>


## OpenAPI

````yaml developers/openapi.json GET /v1/calls/{call_id}/recording
openapi: 3.1.0
info:
  title: Vocily API
  description: >-
    Public REST API for placing outbound voice calls and reading their results.
    Authenticate with a workspace API key as a Bearer token.
  version: v1
servers:
  - url: https://api.vocily.com
    description: Production
security: []
paths:
  /v1/calls/{call_id}/recording:
    get:
      tags:
        - calls
      summary: Get a recording
      description: >-
        Redirects (`307`) to a short-lived, pre-signed URL to download the
        call's audio. Any client that follows redirects works. Returns `404`
        until the recording is finalized.
      operationId: get_call_recording_v1_calls__call_id__recording_get
      parameters:
        - name: call_id
          in: path
          required: true
          schema:
            type: string
            title: Call Id
        - name: authorization
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Authorization
        - name: X-Vocily-Workspace
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Vocily-Workspace
        - name: X-Vocily-Org
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Vocily-Org
      responses:
        '307':
          description: Redirect (`Location`) to a short-lived pre-signed recording URL.
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: unauthorized
                message: Missing or invalid API key.
        '404':
          description: The recording isn't finalized yet, or the call was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: recording_not_available
                message: Recording not available for this call.
        '429':
          description: Rate limit exceeded — honor Retry-After.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: rate_limited
                message: Rate limit exceeded — honor Retry-After.
      security:
        - bearerAuth: []
components:
  schemas:
    ApiError:
      type: object
      properties:
        code:
          type: string
          example: invalid_request
        message:
          type: string
          example: Malformed request parameter.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Your API key as a Bearer token, e.g. `Authorization: Bearer vk_…`.'

````