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

# Baixar gravação da chamada

> Retorna a gravação da ligação de um pedido cujo `hasAudio` é `true` — o próprio arquivo armazenado, não um JSON. Servida da nossa cópia privada, nunca da URL da operadora.

`Content-Type` é o formato da própria gravação — em geral `audio/wav` ou `audio/mpeg`, porque o formato da operadora varia de uma ligação para outra (`application/octet-stream` quando nenhum foi armazenado) —, com o `Content-Length`. `Content-Disposition: attachment; filename="activation-{activationId}.wav"` (`.mp3` para um MP3; sem extensão para qualquer outro formato). `Cache-Control: private, no-store`: a gravação fala o código de ativação.

`404 ACTIVATION_NOT_FOUND` responde, sem distinção: um pedido de outro workspace ou um id desconhecido; um pedido **sem gravação** (`hasAudio: false` — a espera expirou ou foi cancelada antes de qualquer ligação, ou a ligação não pôde ser baixada ou armazenada); e qualquer pedido de uma linha `RETURNED` ou `CANCELED` — uma linha que sai do seu workspace tem as gravações apagadas.

Raramente você precisa montar esta URL: os webhooks `phone_line.audio_received`, `phone_line.code_received` e `phone_line.code_failed` a trazem como `audioUrl` sempre que o pedido tem gravação. A URL não contém credencial — envie a sua chave junto.

**Exige uma chave com escopo de tenant** — uma chave com escopo de número (ou concessão OAuth por número) recebe `403 NUMBER_SCOPE_NOT_ALLOWED`. Permissão `phone_lines:read`: com um token OAuth / MCP, o usuário precisa ser **Proprietário ou Administrador** (caso contrário, `403 PERMISSION_DENIED`).

> [!WARNING]
>
> **O código de ativação é uma credencial.** Quem o tiver consegue registrar uma conta de WhatsApp na linha. Não cole uma resposta com código em lugar público.


## OpenAPI

````yaml openapi.pt.json GET /v1/phone-lines/activations/{activationId}/audio
openapi: 3.1.0
info:
  title: API Pilot Status
  version: 1.0.0
  license:
    name: Pilot Status Terms of Service
    url: https://pilotstatus.com.br/terms
  description: >-
    API REST pública do Pilot Status. Autentique com o header `x-api-key:
    ps_...` (ou `x-api-key-id`). Base URL: https://pilotstatus.com.br
servers:
  - url: https://pilotstatus.com.br
security:
  - apiKey: []
  - apiKeyId: []
paths:
  /v1/phone-lines/activations/{activationId}/audio:
    get:
      tags:
        - Phone Lines
      summary: Baixar a gravação da ligação
      description: >-
        Retorna a gravação da ligação de um pedido cujo `hasAudio` é `true` — o
        próprio arquivo armazenado, não um JSON. Servida da nossa cópia privada,
        nunca da URL da operadora.


        `Content-Type` é o formato da própria gravação — em geral `audio/wav` ou
        `audio/mpeg`, porque o formato da operadora varia de uma ligação para
        outra (`application/octet-stream` quando nenhum foi armazenado) —, com o
        `Content-Length`. `Content-Disposition: attachment;
        filename="activation-{activationId}.wav"` (`.mp3` para um MP3; sem
        extensão para qualquer outro formato). `Cache-Control: private,
        no-store`: a gravação fala o código de ativação.


        `404 ACTIVATION_NOT_FOUND` responde, sem distinção: um pedido de outro
        workspace ou um id desconhecido; um pedido **sem gravação** (`hasAudio:
        false` — a espera expirou ou foi cancelada antes de qualquer ligação, ou
        a ligação não pôde ser baixada ou armazenada); e qualquer pedido de uma
        linha `RETURNED` ou `CANCELED` — uma linha que sai do seu workspace tem
        as gravações apagadas.


        Raramente você precisa montar esta URL: os webhooks
        `phone_line.audio_received`, `phone_line.code_received` e
        `phone_line.code_failed` a trazem como `audioUrl` sempre que o pedido
        tem gravação. A URL não contém credencial — envie a sua chave junto.


        **Exige uma chave com escopo de tenant** — uma chave com escopo de
        número (ou concessão OAuth por número) recebe `403
        NUMBER_SCOPE_NOT_ALLOWED`. Permissão `phone_lines:read`: com um token
        OAuth / MCP, o usuário precisa ser **Proprietário ou Administrador**
        (caso contrário, `403 PERMISSION_DENIED`).
      operationId: get_phone_lines_activations_activationid_audio
      parameters:
        - name: activationId
          in: path
          required: true
          schema:
            type: string
          example: cmg5k3a7c0002ac8example4q
          description: >-
            O id do pedido de código (`activation.id`, retornado por `POST
            /v1/phone-lines/{id}/activations`).
      responses:
        '200':
          description: >-
            A gravação da ligação, como foi armazenada (binário).
            `Cache-Control: private, no-store`.
          headers:
            Content-Type:
              description: >-
                O formato da própria gravação — em geral `audio/wav` ou
                `audio/mpeg`; `application/octet-stream` quando nenhum foi
                armazenado.
              schema:
                type: string
              example: audio/wav
            Content-Length:
              description: Tamanho da gravação em bytes.
              schema:
                type: integer
              example: 221228
            Content-Disposition:
              description: >-
                `attachment; filename="activation-{activationId}.wav"` — `.mp3`
                para um MP3, sem extensão para qualquer outro formato.
              schema:
                type: string
              example: attachment; filename="activation-cmg5k3a7c0002ac8example4q.wav"
            Cache-Control:
              description: >-
                Sempre `private, no-store`: a gravação fala o código de
                ativação.
              schema:
                type: string
                enum:
                  - private, no-store
            X-Content-Type-Options:
              description: Sempre `nosniff`.
              schema:
                type: string
                enum:
                  - nosniff
          content:
            audio/wav:
              schema:
                type: string
                format: binary
            audio/mpeg:
              schema:
                type: string
                format: binary
            application/octet-stream:
              schema:
                type: string
                format: binary
        '401':
          description: >-
            Header `x-api-key` / `x-api-key-id` ausente ou inválido (o corpo
            traz só `error`)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Invalid API key
        '403':
          description: >-
            Chave com escopo de número ou concessão OAuth por número
            (`NUMBER_SCOPE_NOT_ALLOWED`); token OAuth/MCP de um usuário que não
            é Proprietário nem Administrador (`PERMISSION_DENIED`) ou que não é
            mais membro ativo (`WORKSPACE_MEMBERSHIP_REQUIRED`); workspace
            arquivado (`WORKSPACE_ARCHIVED`). `TENANT_REQUIRED`: credencial sem
            workspace
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              examples:
                number_scope_not_allowed:
                  summary: Chave com escopo de número
                  value:
                    error: This endpoint requires a tenant-scoped API key
                    code: NUMBER_SCOPE_NOT_ALLOWED
                permission_denied:
                  summary: Papel sem phone_lines:read
                  value:
                    error: >-
                      Your workspace role does not allow this action
                      (phone_lines:read).
                    code: PERMISSION_DENIED
                workspace_membership_required:
                  summary: Não é mais membro
                  value:
                    error: >-
                      The user behind this token is not an active member of this
                      workspace.
                    code: WORKSPACE_MEMBERSHIP_REQUIRED
                workspace_archived:
                  summary: Workspace arquivado
                  value:
                    error: >-
                      This workspace has been archived and its API is closed. |
                      Este workspace foi arquivado e sua API está encerrada.
                    code: WORKSPACE_ARCHIVED
                tenantRequired:
                  summary: Credencial sem workspace
                  value:
                    error: This credential is not bound to a workspace.
                    code: TENANT_REQUIRED
        '404':
          description: >-
            Nenhum pedido com esse id no seu workspace, um pedido sem gravação
            (`hasAudio: false`) ou um pedido de uma linha `RETURNED` /
            `CANCELED`
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Code request not found. | Pedido de código não encontrado.
                code: ACTIVATION_NOT_FOUND
        '500':
          description: Falha inesperada
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Unexpected error. | Erro inesperado.
                code: INTERNAL_ERROR
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Sua chave de API ps_
    apiKeyId:
      type: apiKey
      in: header
      name: x-api-key-id
      description: Id da chave de API (alternativa ao x-api-key)

````

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