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

# Histórico de códigos

> Retorna os pedidos de código da linha, **do mais recente para o mais antigo**, com os códigos: `{ "activations": [ … ] }`. Também funciona em linhas suspensas — elas mantêm o histórico. Uma linha de outro workspace responde `404 LINE_NOT_FOUND` — nunca uma lista vazia.

Uma linha que saiu do seu workspace — `RETURNED` ou `CANCELED` — tem o histórico **apagado**: os pedidos continuam listados (`id`, `status`, horários, `failureReason`), mas `code` vem `null` e `hasAudio` passa a `false` à medida que as gravações são apagadas. Enviado com `Cache-Control: no-store`: os códigos são credenciais.

**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/{id}/activations
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/{id}/activations:
    get:
      tags:
        - Phone Lines
      summary: Histórico de códigos da linha
      description: >-
        Retorna os pedidos de código da linha, **do mais recente para o mais
        antigo**, com os códigos: `{ "activations": [ … ] }`. Também funciona em
        linhas suspensas — elas mantêm o histórico. Uma linha de outro workspace
        responde `404 LINE_NOT_FOUND` — nunca uma lista vazia.


        Uma linha que saiu do seu workspace — `RETURNED` ou `CANCELED` — tem o
        histórico **apagado**: os pedidos continuam listados (`id`, `status`,
        horários, `failureReason`), mas `code` vem `null` e `hasAudio` passa a
        `false` à medida que as gravações são apagadas. Enviado com
        `Cache-Control: no-store`: os códigos são credenciais.


        **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_id_activations
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          example: cmg5k2l1n0001pl8example9x
          description: >-
            O `id` da linha (de `GET /v1/phone-lines`) — não o número de
            telefone.
        - name: limit
          in: query
          required: false
          description: >-
            De 1 a 100 (padrão 20). Qualquer outro valor (0, 101, um número
            decimal, texto, vazio) → `400 INVALID_LIMIT`.
          schema:
            type: string
            description: (integer (1–100))
          example: '20'
      responses:
        '200':
          description: >-
            Os pedidos de código da linha, do mais recente para o mais antigo.
            Enviado com `Cache-Control: no-store`.
          headers:
            Cache-Control:
              description: '`no-store`'
              schema:
                type: string
                enum:
                  - no-store
          content:
            application/json:
              schema:
                type: object
                properties:
                  activations:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: O id do pedido (`activationId`).
                        lineId:
                          type: string
                          description: A linha à qual o pedido pertence.
                        status:
                          type: string
                          enum:
                            - WAITING
                            - CAPTURED
                            - TRANSCRIBED
                            - TIMED_OUT
                            - FAILED
                          description: >-
                            `WAITING`, `CAPTURED`, `TRANSCRIBED`, `TIMED_OUT` ou
                            `FAILED`. Continue consultando enquanto `status` for
                            `WAITING`, ou `CAPTURED` com `failureReason: null`;
                            qualquer outra combinação é definitiva.
                        requestedAt:
                          type: string
                          format: date-time
                          description: ISO 8601 — quando o pedido foi aberto.
                        pollDeadline:
                          type: string
                          format: date-time
                          description: >-
                            ISO 8601 — fim da janela de captura, 5 minutos
                            depois do pedido.
                        code:
                          type:
                            - string
                            - 'null'
                          description: >-
                            O código de 6 dígitos, quando o pedido está
                            `TRANSCRIBED` e o código foi encontrado. `null` caso
                            contrário. **É uma credencial** — quem o tiver pode
                            registrar uma conta de WhatsApp na linha.
                        capturedAt:
                          type:
                            - string
                            - 'null'
                          format: date-time
                          description: >-
                            ISO 8601 — quando a gravação da ligação foi
                            armazenada.
                        transcribedAt:
                          type:
                            - string
                            - 'null'
                          format: date-time
                          description: ISO 8601 — quando a transcrição terminou.
                        failureReason:
                          type:
                            - string
                            - 'null'
                          description: >-
                            Por que um pedido em estado definitivo não tem
                            código: `no_call_in_window`, `canceled_by_customer`,
                            `no_code_in_transcript`, `transcription_failed`,
                            `audio_download_failed`, `audio_store_failed`,
                            `poll_not_scheduled`, ou `null`. Trate um valor
                            desconhecido como falha, já que novos valores podem
                            ser adicionados.
                        hasAudio:
                          type: boolean
                          description: >-
                            Se uma gravação da ligação está armazenada — para
                            baixar em `GET
                            /v1/phone-lines/activations/{activationId}/audio` e
                            ouvir no painel.
                      required:
                        - id
                        - lineId
                        - status
                        - requestedAt
                        - pollDeadline
                        - code
                        - capturedAt
                        - transcribedAt
                        - failureReason
                        - hasAudio
                required:
                  - activations
              example:
                activations:
                  - id: cmg5k3a7c0002ac8example4q
                    lineId: cmg5k2l1n0001pl8example9x
                    status: TRANSCRIBED
                    requestedAt: '2026-10-01T14:10:00.000Z'
                    pollDeadline: '2026-10-01T14:15:00.000Z'
                    code: '123456'
                    capturedAt: '2026-10-01T14:11:42.000Z'
                    transcribedAt: '2026-10-01T14:11:51.000Z'
                    failureReason: null
                    hasAudio: true
                  - id: cmg5j9x2b0001ac8example7m
                    lineId: cmg5k2l1n0001pl8example9x
                    status: TIMED_OUT
                    requestedAt: '2026-10-01T13:40:00.000Z'
                    pollDeadline: '2026-10-01T13:45:00.000Z'
                    code: null
                    capturedAt: null
                    transcribedAt: null
                    failureReason: no_call_in_window
                    hasAudio: false
        '400':
          description: '`limit` não é um inteiro de 1 a 100'
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: >-
                  limit must be an integer between 1 and 100. | limit deve ser
                  um inteiro entre 1 e 100.
                code: INVALID_LIMIT
        '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: Nenhuma linha com esse id no seu workspace
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Line not found. | Linha não encontrada.
                code: LINE_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.