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

# Consultar ativação

> Um pedido de código: o `status` e, quando estiver `TRANSCRIBED`, o `code`. Consulte-o depois de `POST /v1/phone-lines/{id}/activations`, a cada alguns segundos — o status só pode mudar depois da nossa próxima verificação da linha, feita a cada 15 segundos, aproximadamente.

**Não pare de consultar no primeiro status diferente de `WAITING`.** Continue consultando enquanto `status` for `WAITING`, ou `CAPTURED` com `failureReason: null` (a ligação chegou e o código está sendo lido — uma transcrição que falha é refeita a partir da gravação armazenada, até 3 tentativas no total, então isso pode levar alguns minutos). `TRANSCRIBED` não garante um código — verifique `code` (`null` com `no_code_in_transcript` quando nenhum código de 6 dígitos foi ouvido). `TIMED_OUT` é registrado na primeira verificação depois de `pollDeadline`, até cerca de 15 segundos depois; essa verificação ainda lê a linha uma última vez, então um pedido também pode passar de `WAITING` para `CAPTURED` logo depois do seu `pollDeadline`.

A gravação não vem nesta resposta: `hasAudio: true` indica que existe uma, servida por `GET /v1/phone-lines/activations/{activationId}/audio`. Um pedido de outro workspace responde `404 ACTIVATION_NOT_FOUND`, da mesma forma que um pedido que não existe. Enviado com `Cache-Control: no-store`: o código é uma credencial.

**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}
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}:
    get:
      tags:
        - Phone Lines
      summary: Consultar um pedido de código
      description: >-
        Um pedido de código: o `status` e, quando estiver `TRANSCRIBED`, o
        `code`. Consulte-o depois de `POST /v1/phone-lines/{id}/activations`, a
        cada alguns segundos — o status só pode mudar depois da nossa próxima
        verificação da linha, feita a cada 15 segundos, aproximadamente.


        **Não pare de consultar no primeiro status diferente de `WAITING`.**
        Continue consultando enquanto `status` for `WAITING`, ou `CAPTURED` com
        `failureReason: null` (a ligação chegou e o código está sendo lido — uma
        transcrição que falha é refeita a partir da gravação armazenada, até 3
        tentativas no total, então isso pode levar alguns minutos).
        `TRANSCRIBED` não garante um código — verifique `code` (`null` com
        `no_code_in_transcript` quando nenhum código de 6 dígitos foi ouvido).
        `TIMED_OUT` é registrado na primeira verificação depois de
        `pollDeadline`, até cerca de 15 segundos depois; essa verificação ainda
        lê a linha uma última vez, então um pedido também pode passar de
        `WAITING` para `CAPTURED` logo depois do seu `pollDeadline`.


        A gravação não vem nesta resposta: `hasAudio: true` indica que existe
        uma, servida por `GET /v1/phone-lines/activations/{activationId}/audio`.
        Um pedido de outro workspace responde `404 ACTIVATION_NOT_FOUND`, da
        mesma forma que um pedido que não existe. Enviado com `Cache-Control:
        no-store`: o código é uma credencial.


        **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
      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: 'O pedido de código. 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:
                  activation:
                    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:
                  - activation
              examples:
                transcribed:
                  summary: TRANSCRIBED — código pronto
                  value:
                    activation:
                      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
                waiting:
                  summary: WAITING — continue consultando
                  value:
                    activation:
                      id: cmg5k3a7c0002ac8example4q
                      lineId: cmg5k2l1n0001pl8example9x
                      status: WAITING
                      requestedAt: '2026-10-01T14:10:00.000Z'
                      pollDeadline: '2026-10-01T14:15:00.000Z'
                      code: null
                      capturedAt: null
                      transcribedAt: null
                      failureReason: null
                      hasAudio: false
        '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
          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.