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

# Listar webhooks das linhas

> Retorna `{ "webhooks": [ … ], "events": [ … ] }`: todos os webhooks das linhas do seu workspace, **do mais antigo para o mais novo**, e o catálogo de eventos que você pode assinar. **O segredo de assinatura nunca é devolvido aqui** — só uma vez, por `POST /v1/phone-lines/webhooks`.

Permissões: com um token OAuth / MCP, o usuário precisa ser **Proprietário ou Administrador** (`phone_lines:webhooks`) — caso contrário, `403 PERMISSION_DENIED`.

Todo endpoint `/v1/phone-lines` aceita só uma chave **com escopo de tenant**: os webhooks das linhas pertencem ao workspace, não a um número de WhatsApp, então uma chave com escopo de número (ou uma concessão OAuth por número) recebe `403 NUMBER_SCOPE_NOT_ALLOWED` antes de qualquer verificação de papel. Um `403 PERMISSION_DENIED` / `WORKSPACE_MEMBERSHIP_REQUIRED` é enviado com `Cache-Control: no-store`.

Estes são os **webhooks das linhas** — um cadastro separado de `/v1/webhooks`: recebem só eventos `phone_line.*`, e um webhook de número nunca recebe um deles.

**Requer uma chave com escopo de tenant.**



## OpenAPI

````yaml openapi.pt.json GET /v1/phone-lines/webhooks
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/webhooks:
    get:
      tags:
        - Phone Lines
      summary: Listar webhooks das linhas
      description: >-
        Retorna `{ "webhooks": [ … ], "events": [ … ] }`: todos os webhooks das
        linhas do seu workspace, **do mais antigo para o mais novo**, e o
        catálogo de eventos que você pode assinar. **O segredo de assinatura
        nunca é devolvido aqui** — só uma vez, por `POST
        /v1/phone-lines/webhooks`.


        Permissões: com um token OAuth / MCP, o usuário precisa ser
        **Proprietário ou Administrador** (`phone_lines:webhooks`) — caso
        contrário, `403 PERMISSION_DENIED`.


        Todo endpoint `/v1/phone-lines` aceita só uma chave **com escopo de
        tenant**: os webhooks das linhas pertencem ao workspace, não a um número
        de WhatsApp, então uma chave com escopo de número (ou uma concessão
        OAuth por número) recebe `403 NUMBER_SCOPE_NOT_ALLOWED` antes de
        qualquer verificação de papel. Um `403 PERMISSION_DENIED` /
        `WORKSPACE_MEMBERSHIP_REQUIRED` é enviado com `Cache-Control: no-store`.


        Estes são os **webhooks das linhas** — um cadastro separado de
        `/v1/webhooks`: recebem só eventos `phone_line.*`, e um webhook de
        número nunca recebe um deles.


        **Requer uma chave com escopo de tenant.**
      operationId: get_phone_lines_webhooks
      responses:
        '200':
          description: Os webhooks e o catálogo de eventos
          content:
            application/json:
              schema:
                type: object
                properties:
                  webhooks:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: >-
                            O id do webhook. Use-o em todo caminho
                            `/v1/phone-lines/webhooks/{id}`.
                          example: cmh1w8b2k0001wh8example3d
                        name:
                          type: string
                          description: >-
                            Até 100 caracteres. **Nunca vazio:** criado ou
                            editado em branco, é o host da URL
                            (`hooks.example.com`). Não vai nas entregas — o
                            `name` de uma entrega é o da linha.
                          example: hooks.example.com
                        url:
                          type: string
                          description: O destino `https`, normalizado.
                          example: https://hooks.example.com/pilot/phone-lines
                        events:
                          type: array
                          items:
                            type: string
                          description: >-
                            Os eventos assinados, ou `["*"]` — todos os eventos
                            de linha, inclusive os adicionados depois.
                          example:
                            - '*'
                        active:
                          type: boolean
                          description: '`false` = pausado: não recebe entregas.'
                          example: true
                        lastDeliveryAt:
                          type:
                            - string
                            - 'null'
                          format: date-time
                          description: >-
                            ISO 8601 — a última entrega **bem-sucedida**, `null`
                            antes da primeira. Uma tentativa que falha não a
                            muda.
                          example: '2026-10-27T14:11:51.000Z'
                        lastStatusCode:
                          type:
                            - integer
                            - 'null'
                          description: >-
                            O último status HTTP que o seu endpoint respondeu,
                            com sucesso ou não, `null` quando não houve.
                          example: 200
                        createdAt:
                          type: string
                          format: date-time
                          description: ISO 8601 — quando o webhook foi criado.
                          example: '2026-10-27T13:58:02.000Z'
                  events:
                    type: array
                    items:
                      type: string
                    description: >-
                      Todos os nomes de eventos de linha. `"*"` não está na
                      lista, mas é aceito em `events`.
                    example:
                      - phone_line.purchased
                      - phone_line.audio_received
                      - phone_line.code_received
                      - phone_line.code_failed
                      - phone_line.renewed
                      - phone_line.payment_failed
                      - phone_line.suspended
                      - phone_line.returned
                      - phone_line.canceled
                      - phone_line.verification_updated
              example:
                webhooks:
                  - id: cmh1w8b2k0001wh8example3d
                    name: hooks.example.com
                    url: https://hooks.example.com/pilot/phone-lines
                    events:
                      - '*'
                    active: true
                    lastDeliveryAt: '2026-10-27T14:11:51.000Z'
                    lastStatusCode: 200
                    createdAt: '2026-10-27T13:58:02.000Z'
                events:
                  - phone_line.purchased
                  - phone_line.audio_received
                  - phone_line.code_received
                  - phone_line.code_failed
                  - phone_line.renewed
                  - phone_line.payment_failed
                  - phone_line.suspended
                  - phone_line.returned
                  - phone_line.canceled
                  - phone_line.verification_updated
        '401':
          description: >-
            Credencial ausente ou inválida (`x-api-key`, `x-api-key-id` ou
            `Authorization: Bearer`). O corpo traz só `error`, sem `code`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              examples:
                missing:
                  summary: Sem credencial
                  value:
                    error: >-
                      Missing x-api-key, x-api-key-id or Authorization Bearer
                      token
                invalid:
                  summary: API key inválida
                  value:
                    error: Invalid API key
        '403':
          description: >-
            Chave com escopo de 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`), ou workspace arquivado
            (`WORKSPACE_ARCHIVED`). `TENANT_REQUIRED`: credencial sem workspace
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              examples:
                numberScope:
                  summary: Chave com escopo de número
                  value:
                    error: This endpoint requires a tenant-scoped API key
                    code: NUMBER_SCOPE_NOT_ALLOWED
                permissionDenied:
                  summary: Usuário OAuth/MCP que não é Proprietário nem Administrador
                  value:
                    error: >-
                      Your workspace role does not allow this action
                      (phone_lines:webhooks).
                    code: PERMISSION_DENIED
                notMember:
                  summary: Usuário OAuth/MCP que não é mais membro
                  value:
                    error: >-
                      The user behind this token is not an active member of this
                      workspace.
                    code: WORKSPACE_MEMBERSHIP_REQUIRED
                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
        '500':
          description: Falha inesperada (`INTERNAL_ERROR`).
          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.