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

# Atualizar número (privacidade + settings)

> Atualização PARCIAL do número: só o que vier no corpo muda. **Não existe** `POST /v1/numbers/{id}/settings` — configuração de número é este PATCH, e o `syncFullHistory` da Evolution API não tem equivalente aqui (use `settings.historyImportEnabled`).

`piiMode` controla a retenção das conversas e é obrigatório acompanhar `piiRetentionDays` (1–3650) quando for `STORE_X_DAYS`.

O bloco `settings` tem dois grupos. `historyImportEnabled`, `webhookHistoricalMessages`, `ignoreNewsletters` e `markReadOnSend` são configurações da plataforma — `ignoreNewsletters` descarta publicação de Canal (`@newsletter`) na entrada, antes da conversa, da mensagem guardada e do webhook; `markReadOnSend` (padrão `true`) é o padrão do `markRead` do `POST /v1/messages/send`; é aceito em qualquer provider, mas só tem efeito em número oficial (Meta), e a resposta avisa isso em `settings.appliesTo.sending` (`"meta"` ou `"none"`). Os outros seis são os `advancedSettings` do Evolution GO e só se aplicam a número não-oficial (conectado por QR) — em número Meta eles são aceitos e guardados, mas nunca aplicados, e a resposta avisa isso em `settings.appliesTo.advanced: "none"`. Mandar `null` num campo do GO **volta ao default do provider**; não é `false`.

Os campos do GO também são empurrados para as instâncias conectadas do número; o resultado vem em `settingsSync`. O push é best-effort: instância fora do ar não faz o PATCH falhar, e o valor persistido é reaplicado no próximo provisionamento.

Corpo sem nenhum campo reconhecido é `400 EMPTY_PATCH` — não é no-op silencioso.



## OpenAPI

````yaml openapi.pt.json PATCH /v1/numbers/{id}
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/numbers/{id}:
    patch:
      tags:
        - Numbers
      summary: Atualizar número (privacidade + settings)
      description: >-
        Atualização PARCIAL do número: só o que vier no corpo muda. **Não
        existe** `POST /v1/numbers/{id}/settings` — configuração de número é
        este PATCH, e o `syncFullHistory` da Evolution API não tem equivalente
        aqui (use `settings.historyImportEnabled`).


        `piiMode` controla a retenção das conversas e é obrigatório acompanhar
        `piiRetentionDays` (1–3650) quando for `STORE_X_DAYS`.


        O bloco `settings` tem dois grupos. `historyImportEnabled`,
        `webhookHistoricalMessages`, `ignoreNewsletters` e `markReadOnSend` são
        configurações da plataforma — `ignoreNewsletters` descarta publicação de
        Canal (`@newsletter`) na entrada, antes da conversa, da mensagem
        guardada e do webhook; `markReadOnSend` (padrão `true`) é o padrão do
        `markRead` do `POST /v1/messages/send`; é aceito em qualquer provider,
        mas só tem efeito em número oficial (Meta), e a resposta avisa isso em
        `settings.appliesTo.sending` (`"meta"` ou `"none"`). Os outros seis são
        os `advancedSettings` do Evolution GO e só se aplicam a número
        não-oficial (conectado por QR) — em número Meta eles são aceitos e
        guardados, mas nunca aplicados, e a resposta avisa isso em
        `settings.appliesTo.advanced: "none"`. Mandar `null` num campo do GO
        **volta ao default do provider**; não é `false`.


        Os campos do GO também são empurrados para as instâncias conectadas do
        número; o resultado vem em `settingsSync`. O push é best-effort:
        instância fora do ar não faz o PATCH falhar, e o valor persistido é
        reaplicado no próximo provisionamento.


        Corpo sem nenhum campo reconhecido é `400 EMPTY_PATCH` — não é no-op
        silencioso.
      operationId: patch_numbers_id
      parameters:
        - name: id
          in: path
          required: true
          description: ID do número de WhatsApp.
          schema:
            type: string
          example: num_01HZX...
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                piiMode:
                  type: string
                  enum:
                    - STORE_INDEFINITE
                    - STORE_X_DAYS
                    - RELAY_ONLY
                  description: >-
                    Política de retenção das conversas. Opcional — omita para
                    mudar só as `settings`.
                  example: STORE_X_DAYS
                piiRetentionDays:
                  type:
                    - integer
                    - 'null'
                  minimum: 1
                  maximum: 3650
                  description: >-
                    Obrigatório (1–3650) quando `piiMode` é `STORE_X_DAYS`;
                    forçado a null nos demais casos.
                  example: 30
                settings:
                  type: object
                  description: >-
                    Configurações por número. Parcial: só as chaves que você
                    enviar mudam.
                  properties:
                    historyImportEnabled:
                      type: boolean
                      description: >-
                        Importa o histórico que o provedor entrega na conexão.
                        Padrão **true** para números criados a partir de
                        2026-09-16 (era `false` de 2026-08-26 a 2026-09-16;
                        números existentes mantêm o valor que já têm). Decida na
                        criação — o provedor entrega o histórico numa rajada
                        única logo após a conexão e ele não pode ser pedido de
                        novo, então um PATCH depois de criar corre contra essa
                        rajada.
                      example: false
                    webhookHistoricalMessages:
                      type: boolean
                      description: >-
                        Entrega essas mensagens do histórico aos seus webhooks.
                        Padrão `false`: cada reconexão replica o histórico e a
                        sua integração não consegue distingui-lo de tráfego novo
                        (no plano FREE ele também consumiria cota de inbound).
                        Para LER o histórico, use `GET /v1/messages/history`.
                      example: false
                    ignoreNewsletters:
                      type: boolean
                      description: >-
                        Descarta publicações de Canal do WhatsApp
                        (`@newsletter`) na entrada: sem conversa, sem mensagem
                        guardada, sem webhook. Padrão `false`, então um número
                        que hoje recebe canais continua recebendo. Este NÃO é um
                        campo do Evolution GO: o provedor não tem um gate de
                        `@newsletter` para onde empurrá-lo (ao contrário do
                        `ignoreGroups`, que ele mesmo aplica), então uma
                        publicação de canal sempre chega à plataforma e só pode
                        ser recusada aqui. Um número oficial (Meta Cloud API)
                        nunca recebe canais.
                      example: false
                    markReadOnSend:
                      type: boolean
                      description: >-
                        Padrão do campo `markRead` do `POST /v1/messages/send`.
                        Padrão `true`: todo envio marca como lida (tiques azuis)
                        a última mensagem recebida do contato e mostra
                        "digitando" antes. `false`: em número oficial (Meta
                        Cloud API) os envios saem SEM o indicador "digitando" e
                        SEM marcar a conversa como lida — a Cloud API só mostra
                        o "digitando" como parte de uma confirmação de leitura,
                        então as duas coisas não se separam. Um envio pode
                        sobrescrever com `markRead`. Em número não-oficial é
                        guardado sem efeito: o envio nunca marca como lido ali
                        (a leitura na chegada é o `readMessages`).
                      example: true
                    alwaysOnline:
                      type:
                        - boolean
                        - 'null'
                      description: >-
                        Mantém a presença do WhatsApp sempre online. Só para
                        números não oficiais (Pilot Status web). `null` volta ao
                        padrão do provedor.
                      example: false
                    rejectCall:
                      type:
                        - boolean
                        - 'null'
                      description: >-
                        Rejeita automaticamente as chamadas recebidas. Só para
                        números não oficiais. `null` volta ao padrão do
                        provedor.
                      example: true
                    msgRejectCall:
                      type:
                        - string
                        - 'null'
                      maxLength: 1000
                      description: >-
                        Texto respondido quando uma chamada é rejeitada (string
                        vazia = sem resposta). Só para números não oficiais.
                        `null` volta ao padrão do provedor.
                      example: I don't take calls here
                    readMessages:
                      type:
                        - boolean
                        - 'null'
                      description: >-
                        Marca toda mensagem recebida como lida. Só para números
                        não oficiais. `null` volta ao padrão do provedor.
                      example: false
                    ignoreGroups:
                      type:
                        - boolean
                        - 'null'
                      description: >-
                        Descarta mensagens de grupo dentro do provedor. Repare
                        no nome do campo: este é o dialeto do Evolution GO
                        (`ignoreGroups`), NÃO o `groupsIgnore` da v2. Defini-lo
                        explicitamente vence o valor derivado das suas
                        assinaturas de webhook de grupo. Só para números não
                        oficiais.
                      example: false
                    ignoreStatus:
                      type:
                        - boolean
                        - 'null'
                      description: >-
                        Descarta atualizações de Status/stories. Só para números
                        não oficiais. `null` volta ao padrão do provedor.
                      example: false
      responses:
        '200':
          description: Número atualizado
          content:
            application/json:
              example:
                id: num_01HZX...
                number: '+5511999999999'
                name: Atendimento
                provider: WEB
                state: OPEN
                isFullyConnected: true
                piiMode: STORE_X_DAYS
                piiRetentionDays: 30
                settings:
                  historyImportEnabled: false
                  webhookHistoricalMessages: false
                  ignoreNewsletters: false
                  markReadOnSend: true
                  alwaysOnline: null
                  rejectCall: true
                  msgRejectCall: I don't take calls here
                  readMessages: null
                  ignoreGroups: null
                  ignoreStatus: null
                  appliesTo:
                    history: all
                    advanced: evolution-go
                    sending: none
                settingsSync:
                  applied: 1
                  failed: 0
                  skipped: 0
                health:
                  qualityRating: null
                  messagingLimitTier: null
                  metaStatus: null
                  code: null
                  reason: null
                  sendable: true
                extraChargeUnpaidSince: null
                extraChargeDisconnectAt: null
                meta: null
        '400':
          description: >-
            Configurações inválidas, ou nada para atualizar — ou `INVALID_BODY`
            quando o corpo não é um JSON válido
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              examples:
                invalidSettings:
                  summary: INVALID_SETTINGS
                  value:
                    error: settings.rejectCall must be a boolean or null
                    code: INVALID_SETTINGS
                emptyPatch:
                  summary: EMPTY_PATCH
                  value:
                    error: Nothing to update — send `piiMode` and/or `settings`
                    code: EMPTY_PATCH
                invalidBody:
                  summary: Corpo não é um JSON válido
                  value:
                    error: >-
                      The request body is not valid JSON | O corpo da requisição
                      não é um JSON válido
                    code: INVALID_BODY
        '401':
          description: Chave de API ausente ou inválida
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              example:
                error: Unauthorized
        '404':
          description: Número não encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              example:
                error: Number not found
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.