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

# Ver config do endpoint do Flow

> A ligação `data_exchange` de UM Flow: para onde reencaminhamos a troca decifrada (`url`), se existe segredo de assinatura (`hasSecret`), a NOSSA URL de proxy para este Flow (`endpointUri`), o que a Meta tem registado (`metaEndpointUri`), se os dois DIVERGEM (`drift`) e se o número tem sequer um par de chaves de cifra (`numberHasKey`).

⭐ `numberHasKey: false` é o campo pelo qual esta rota existe. Sem par de chaves no número a Meta não tem com que cifrar, portanto a chamada nunca chega ao proxy, portanto o destino nunca é usado — e mais nada, de nenhum dos lados, reporta isso. `warnings` leva os mesmos factos como códigos estáveis: `FLOW_ENDPOINT_NO_DESTINATION`, `FLOW_ENDPOINT_NUMBER_HAS_NO_KEY`, `FLOW_ENDPOINT_KEY_NOT_AT_META`, `FLOW_ENDPOINT_META_URI_UNKNOWN`, `FLOW_ENDPOINT_META_DRIFT`.

O segredo HMAC em si NUNCA é devolvido aqui — só `hasSecret`. Permissão `flows:manage`, e deliberadamente não `flows:read`: `endpointUri` e `metaEndpointUri` embutem o token de caminho do endpoint do número, e esse token é a credencial do proxy.

**Exige chave com escopo de número.** Uma chave de tenant precisa nomear o número no header `x-whatsapp-number-id`, senão recebe 403 `TENANT_SCOPE_NOT_ALLOWED`.



## OpenAPI

````yaml openapi.pt.json GET /v1/flows/{id}/endpoint
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/flows/{id}/endpoint:
    get:
      tags:
        - Flows
      summary: Ver config do endpoint do Flow
      description: >-
        A ligação `data_exchange` de UM Flow: para onde reencaminhamos a troca
        decifrada (`url`), se existe segredo de assinatura (`hasSecret`), a
        NOSSA URL de proxy para este Flow (`endpointUri`), o que a Meta tem
        registado (`metaEndpointUri`), se os dois DIVERGEM (`drift`) e se o
        número tem sequer um par de chaves de cifra (`numberHasKey`).


        ⭐ `numberHasKey: false` é o campo pelo qual esta rota existe. Sem par de
        chaves no número a Meta não tem com que cifrar, portanto a chamada nunca
        chega ao proxy, portanto o destino nunca é usado — e mais nada, de
        nenhum dos lados, reporta isso. `warnings` leva os mesmos factos como
        códigos estáveis: `FLOW_ENDPOINT_NO_DESTINATION`,
        `FLOW_ENDPOINT_NUMBER_HAS_NO_KEY`, `FLOW_ENDPOINT_KEY_NOT_AT_META`,
        `FLOW_ENDPOINT_META_URI_UNKNOWN`, `FLOW_ENDPOINT_META_DRIFT`.


        O segredo HMAC em si NUNCA é devolvido aqui — só `hasSecret`. Permissão
        `flows:manage`, e deliberadamente não `flows:read`: `endpointUri` e
        `metaEndpointUri` embutem o token de caminho do endpoint do número, e
        esse token é a credencial do proxy.


        **Exige chave com escopo de número.** Uma chave de tenant precisa nomear
        o número no header `x-whatsapp-number-id`, senão recebe 403
        `TENANT_SCOPE_NOT_ALLOWED`.
      operationId: get_flows_id_endpoint
      parameters:
        - name: id
          in: path
          required: true
          description: >-
            O id **local** do Flow — o campo `id` que `GET /v1/flows` devolve,
            nunca o `metaFlowId`.
          schema:
            type: string
          example: cmf1a2b3c4d5e6f7g8h9i0j1
      responses:
        '200':
          description: A ligação atual do endpoint `data_exchange` deste Flow
          content:
            application/json:
              example:
                flowId: cmf1a2b3c4d5e6f7g8h9i0j1
                url: https://hooks.acme.com/flows/data-exchange
                hasSecret: true
                endpointUri: >-
                  https://pilotstatus.com.br/api/flows/endpoint/AbC123.../1122334455
                metaEndpointUri: >-
                  https://pilotstatus.com.br/api/flows/endpoint/AbC123.../1122334455
                drift: false
                numberHasKey: true
                numberKeyUploadedAt: '2026-09-01T18:04:00.000Z'
                warnings: []
        '401':
          description: Header `x-api-key` / `x-api-key-id` ausente ou inválido
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Unauthorized
        '403':
          description: >-
            Chave com escopo de tenant usada em endpoint com escopo de número,
            ou o papel da chave não tem a permissão
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Tenant-scoped keys cannot call number endpoints
                code: TENANT_SCOPE_NOT_ALLOWED
        '404':
          description: >-
            Nenhum Flow com esse id dentro da WABA da própria chave. Nunca 403:
            um Flow de outro tenant é indistinguível de um que não existe, de
            propósito — um 403 confirmaria o id alheio a quem o adivinhou
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Portuguese half
                  errorEN:
                    type: string
                    description: English half
                  code:
                    type: string
              example:
                error: Flow não encontrado para o número desta chave.
                errorEN: Flow not found for this key's number.
                code: FLOW_NOT_FOUND
        '422':
          description: >-
            O número da chave não é Meta (API Oficial) ou não tem WABA associada
            (`FLOW_REQUIRES_META_NUMBER`), ou é um número Meta fora da WABA dona
            deste Flow e por isso nunca poderá enviá-lo
            (`FLOW_NUMBER_WABA_MISMATCH`)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Portuguese half
                  errorEN:
                    type: string
                    description: English half
                  code:
                    type: string
              example:
                error: >-
                  Flows existem apenas em números Meta (API Oficial). O número
                  desta chave não é Meta ou não tem uma WABA associada — use uma
                  chave de um número Meta.
                errorEN: >-
                  Flows only exist on Meta (Cloud API) numbers. This key's
                  number is not a Meta number, or has no WABA behind it — use a
                  key bound to a Meta number.
                code: FLOW_REQUIRES_META_NUMBER
        '429':
          description: Limite de taxa excedido
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Too many requests
        '500':
          description: Erro interno. Nunca carrega a mensagem interna — essa fica no log
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Portuguese half
                  errorEN:
                    type: string
                    description: English half
                  code:
                    type: string
              example:
                error: Erro interno do servidor.
                errorEN: Internal server error.
                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)

````