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

# Depreciar Flow

> Aposenta um Flow na Meta sem apagá-lo, e sem apagar as respostas já enviadas. Não é o mesmo que `DELETE /v1/flows/{id}`: apagar só funciona em `DRAFT` e remove a linha; depreciar age sobre um Flow que chegou à Meta e apenas o marca.

`supersededByFlowId` fecha o par com `clonedFromFlowId`: o clone aponta para trás, a depreciação para frente. Como publicar é irreversível, esse ponteiro é a única coisa que liga as versões de um mesmo formulário ao longo do tempo.

`supersededBy` é ecoado na resposta **sempre**, `null` incluído — é a única forma de distinguir "o sucessor que mandei foi gravado" de "o campo se perdeu entre o meu cliente e a linha". Corpo truncado dá 400, e não corpo vazio, porque corpo vazio é um pedido legítimo aqui. Permissão `flows:manage`.

**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 POST /v1/flows/{id}/deprecate
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}/deprecate:
    post:
      tags:
        - Flows
      summary: Depreciar Flow
      description: >-
        Aposenta um Flow na Meta sem apagá-lo, e sem apagar as respostas já
        enviadas. Não é o mesmo que `DELETE /v1/flows/{id}`: apagar só funciona
        em `DRAFT` e remove a linha; depreciar age sobre um Flow que chegou à
        Meta e apenas o marca.


        `supersededByFlowId` fecha o par com `clonedFromFlowId`: o clone aponta
        para trás, a depreciação para frente. Como publicar é irreversível, esse
        ponteiro é a única coisa que liga as versões de um mesmo formulário ao
        longo do tempo.


        `supersededBy` é ecoado na resposta **sempre**, `null` incluído — é a
        única forma de distinguir "o sucessor que mandei foi gravado" de "o
        campo se perdeu entre o meu cliente e a linha". Corpo truncado dá 400, e
        não corpo vazio, porque corpo vazio é um pedido legítimo aqui. Permissão
        `flows:manage`.


        **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: post_flows_id_deprecate
      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
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                supersededByFlowId:
                  type: string
                  minLength: 1
                  description: >-
                    O id **LOCAL** do Flow sucessor — o mesmo `id` que `GET
                    /v1/flows` devolve, **não** o `metaFlowId`. Opcional:
                    depreciar sem sucessor é legítimo. Mas
                    presente-e-inutilizável é um pedido diferente de ausente —
                    string vazia ou só de espaços é recusada com 400
                    `FLOW_DEPRECATE_INVALID_SUCCESSOR` em vez de descartada,
                    porque cadeia de versões que termina em silêncio é invisível
                    depois. O sucessor é verificado como sendo do seu tenant; um
                    que não seja dá 404.
                  example: cmf2b3c4d5e6f7g8h9i0j1k2
            example:
              supersededByFlowId: cmf2b3c4d5e6f7g8h9i0j1k2
      responses:
        '200':
          description: Flow depreciado
          content:
            application/json:
              example:
                flowId: cmf1a2b3c4d5e6f7g8h9i0j1
                deprecated: true
                supersededBy: cmf2b3c4d5e6f7g8h9i0j1k2
        '400':
          description: >-
            `FLOW_DEPRECATE_INVALID_SUCCESSOR`, `FLOW_BODY_INVALID`,
            `FLOW_UNKNOWN_FIELDS` (um `supersededByFlowId` escrito errado cai
            aqui em vez de passar como "sem sucessor"), `FLOW_NUMBER_FROM_KEY`,
            ou recusa da Meta
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Portuguese half
                  errorEN:
                    type: string
                    description: English half
                  code:
                    type: string
              example:
                error: >-
                  `supersededByFlowId`, quando enviado, tem de ser o id LOCAL
                  (não vazio) do Flow sucessor — o mesmo `id` que `GET
                  /api/v1/flows` devolve, e não o `metaFlowId`. Omita o campo
                  para depreciar sem sucessor.
                errorEN: >-
                  `supersededByFlowId`, when sent, must be the LOCAL (non-empty)
                  id of the successor Flow — the same `id` `GET /api/v1/flows`
                  returns, not the `metaFlowId`. Omit the field to deprecate
                  with no successor.
                code: FLOW_DEPRECATE_INVALID_SUCCESSOR
        '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: >-
            O Flow, ou o `supersededByFlowId` que você nomeou, não resolve
            dentro do seu tenant
          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
        '409':
          description: >-
            O Flow saiu de `DRAFT`. Publicar é irreversível na Meta — clone para
            começar uma versão nova
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Portuguese half
                  errorEN:
                    type: string
                    description: English half
                  code:
                    type: string
              example:
                error: >-
                  Este Flow já foi publicado na Meta e não pode mais ser
                  alterado. Clone-o para criar uma nova versão.
                errorEN: >-
                  This Flow is already published on Meta and can no longer be
                  changed. Clone it to create a new version.
                code: FLOW_NOT_DRAFT
        '422':
          description: >-
            O número da chave não é Meta (API Oficial), ou não tem WABA
            associada
          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)

````