> ## Documentation Index
> Fetch the complete documentation index at: https://developer.wabox.me/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Wabox é uma API não-oficial de WhatsApp (aparelho vinculado). Tudo é snake_case; a base é https://api.wabox.me/instances/{instance_id}/token/{token}.
> Envios respondem { id, message_id, wabox_id, status: "queued" } na hora; o resultado real chega no webhook delivery. Envios não são idempotentes: confira GET /queue antes de repetir.
> Sempre verifique X-Wabox-Signature (HMAC-SHA256 de "<t>.<corpo cru>") nos webhooks e deduplique por event_id.
> Botões, listas, carrossel e catálogo são best effort e não renderizam no WhatsApp Web/Desktop. Não existem: chamadas, listas de transmissão, histórico de mensagens, instância mobile.
> Não invente endpoints ou campos: use o OpenAPI em https://api.wabox.me/openapi.json.

# Atualizar webhooks (parcial)

> Atualiza só os campos enviados; os demais ficam como estão. Envie `null` em uma `*_url` para desativar aquele webhook. URLs precisam ser http(s). `single_url_enabled: true` + `single_url` manda todos os eventos para uma URL só (roteie por `type` ou pelo header `X-Wabox-Event`). Definir uma URL não nula desliga `use_workspace_webhooks` (a instância passa a usar a própria configuração); envie `use_workspace_webhooks: true` para voltar a herdar do workspace. Retorna a configuração completa após a alteração.



## OpenAPI

````yaml /openapi.json put /instances/{instance_id}/token/{token}/webhooks
openapi: 3.1.0
info:
  title: Wabox API
  description: >-
    API pública do Wabox — WhatsApp via REST + webhooks.


    Base: `{server}/instances/{instance_id}/token/{token}`. Header
    `Client-Token` obrigatório quando ativado em Segurança.


    Tudo em `snake_case`. Datas ISO-8601 (UTC). Erros: `{ "error": { "code":
    "...", "message": "..." } }`.


    Envios respondem `{ id, message_id, wabox_id, status: "queued" }` na hora; o
    resultado chega no webhook `delivery`. `message_id` já é o id definitivo do
    WhatsApp.
  version: '1.0'
  contact: {}
servers:
  - url: https://api.wabox.me
security: []
tags:
  - name: Instance
    description: >-
      Conexão (QR code / código de pareamento), status, webhooks e configurações
      da instância.
    x-group: Instância
  - name: Messages
    description: >-
      Envio de texto, mídia, localização, contatos, reações, enquetes e ações
      sobre mensagens. Tudo passa pela fila; o resultado chega no webhook
      `delivery`.
    x-group: Mensagens
  - name: Interactive
    description: >-
      Botões, listas, carrossel, PIX, eventos de calendário, status (stories) e
      convite de canal. Best effort: renderizam no celular; o WhatsApp
      Web/Desktop não exibe botões, listas nem carrossel.
    x-group: Interativos
  - name: Queue
    description: Mensagens aguardando envio (pacing anti-ban ou instância desconectada).
    x-group: Fila
  - name: Chats
    description: >-
      Lista de conversas, ações (arquivar, silenciar, fixar, ler) e mensagens
      temporárias.
    x-group: Chats
  - name: Contacts
    description: Contatos, foto de perfil, verificação de números e bloqueio.
    x-group: Contatos
  - name: Profile
    description: Nome, recado e foto do número conectado.
    x-group: Perfil
  - name: Groups
    description: >-
      Criar, listar, administrar participantes, links de convite e
      configurações.
    x-group: Grupos
  - name: Communities
    description: Comunidades e vínculo de grupos.
    x-group: Comunidades
  - name: Newsletters
    description: >-
      Canais (newsletters): criar, seguir, ler e reagir a posts. Para publicar,
      use qualquer `send-*` com `phone: <id>@newsletter`.
    x-group: Canais
  - name: Privacy
    description: Configurações de privacidade da conta.
    x-group: Privacidade
  - name: Business
    description: >-
      Perfil comercial, catálogo de produtos, pedidos e envio de
      produto/catálogo/pedido. Best effort: depende do protocolo do WhatsApp
      Web.
    x-group: Business e catálogo
  - name: Labels
    description: Etiquetas (labels) de conversas — só em contas WhatsApp Business.
    x-group: Etiquetas
  - name: Partner
    description: >-
      Para integradores: criar e administrar instâncias do próprio workspace
      Partner com o header `Partner-Token` (base `/partner`, sem
      `instance_id`/`token` na URL). As instâncias criadas aqui são operadas
      pela API pública normal e não têm trial nem `402`.
    x-group: Partner
  - name: Webhooks
    description: Eventos entregues por `POST` na URL configurada em cada instância.
    x-group: Webhooks
paths:
  /instances/{instance_id}/token/{token}/webhooks:
    put:
      tags:
        - Instance
      summary: Atualizar webhooks (parcial)
      description: >-
        Atualiza só os campos enviados; os demais ficam como estão. Envie `null`
        em uma `*_url` para desativar aquele webhook. URLs precisam ser http(s).
        `single_url_enabled: true` + `single_url` manda todos os eventos para
        uma URL só (roteie por `type` ou pelo header `X-Wabox-Event`). Definir
        uma URL não nula desliga `use_workspace_webhooks` (a instância passa a
        usar a própria configuração); envie `use_workspace_webhooks: true` para
        voltar a herdar do workspace. Retorna a configuração completa após a
        alteração.
      operationId: instance.updateWebhooks
      parameters:
        - name: instance_id
          required: true
          in: path
          description: Id da instância (dashboard › instância › Credenciais).
          schema:
            type: string
          example: 8f2a3c1e-6b7d-4e5f-9a0b-1c2d3e4f5a6b
        - name: token
          required: true
          in: path
          description: Token da instância. Trate como senha.
          schema:
            type: string
          example: 3A1F5C7E9B2D4F6A8C0E1B3D5F7A9C2E
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                received_url:
                  nullable: true
                  type: string
                  format: uri
                delivery_url:
                  nullable: true
                  type: string
                  format: uri
                message_status_url:
                  nullable: true
                  type: string
                  format: uri
                connected_url:
                  nullable: true
                  type: string
                  format: uri
                disconnected_url:
                  nullable: true
                  type: string
                  format: uri
                chat_presence_url:
                  nullable: true
                  type: string
                  format: uri
                single_url_enabled:
                  type: boolean
                  description: >-
                    `true` = todos os eventos vão para `single_url`; as `*_url`
                    por tipo são ignoradas.
                single_url:
                  nullable: true
                  description: >-
                    URL única para todos os eventos (quando
                    `single_url_enabled`).
                  type: string
                  format: uri
                notify_sent_by_me:
                  type: boolean
                ignore_groups:
                  type: boolean
                ignore_private:
                  type: boolean
                ignore_text:
                  type: boolean
                ignore_image:
                  type: boolean
                ignore_video:
                  type: boolean
                ignore_audio:
                  type: boolean
                ignore_document:
                  type: boolean
                ignore_received_callback:
                  type: boolean
                ignore_delivery_callback:
                  type: boolean
                ignore_message_status_callback:
                  type: boolean
                ignore_connected_callback:
                  type: boolean
                ignore_disconnected_callback:
                  type: boolean
                ignore_chat_presence_callback:
                  type: boolean
                use_workspace_webhooks:
                  type: boolean
                  description: >-
                    `true` = a instância usa as URLs e filtros configurados no
                    workspace (painel › Webhooks) e ignora os campos próprios; o
                    `secret` continua sendo da instância. Definir uma URL não
                    nula na instância desliga isso automaticamente, salvo se
                    `use_workspace_webhooks` vier junto.
            examples:
              basico:
                summary: Definir URLs e ignorar grupos
                value:
                  received_url: https://example.com/wabox/received
                  message_status_url: https://example.com/wabox/message-status
                  ignore_groups: true
              unica:
                summary: Uma URL para todos os eventos
                value:
                  single_url_enabled: true
                  single_url: https://example.com/wabox
              desativar:
                summary: Desativar um webhook
                value:
                  chat_presence_url: null
              workspace:
                summary: Voltar a herdar do workspace
                value:
                  use_workspace_webhooks: true
      responses:
        '200':
          description: Configuração de webhooks após a alteração.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceWebhooks'
              example:
                use_workspace_webhooks: false
                received_url: https://example.com/wabox/received
                delivery_url: https://example.com/wabox/delivery
                message_status_url: https://example.com/wabox/message-status
                connected_url: https://example.com/wabox/connected
                disconnected_url: https://example.com/wabox/disconnected
                chat_presence_url: null
                single_url_enabled: false
                single_url: null
                notify_sent_by_me: false
                ignore_groups: true
                ignore_private: false
                ignore_text: false
                ignore_image: false
                ignore_video: false
                ignore_audio: false
                ignore_document: false
                ignore_received_callback: false
                ignore_delivery_callback: false
                ignore_message_status_callback: false
                ignore_connected_callback: false
                ignore_disconnected_callback: false
                ignore_chat_presence_callback: false
                secret: whsec_9f8e7d6c5b4a39281706f5e4d3c2b1a0
        '401':
          description: Instância/token inválidos ou `Client-Token` ausente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                error:
                  code: instance_not_found
                  message: Instance not found or invalid token
      x-codeSamples:
        - lang: typescript
          label: TypeScript (@wabox/sdk)
          source: |
            import { createWabox } from "@wabox/sdk";

            const wabox = createWabox({
              instanceId: process.env.WABOX_INSTANCE_ID!,
              token: process.env.WABOX_TOKEN!,
            });

            const { data, error } = await wabox.PUT("/webhooks", {
              body: {
                received_url: "https://example.com/wabox/received",
                message_status_url: "https://example.com/wabox/message-status",
                ignore_groups: true
              },
            });
            if (error) throw new Error(error.error.message);
            console.log(data);
components:
  schemas:
    InstanceWebhooks:
      type: object
      properties:
        use_workspace_webhooks:
          type: boolean
          description: >-
            `true` = usa as URLs e filtros do workspace (painel › Webhooks) e
            ignora os campos abaixo; o `secret` é sempre da instância.
        received_url:
          nullable: true
          description: URL http(s) ou `null` (desligado).
          type: string
        delivery_url:
          nullable: true
          description: URL http(s) ou `null` (desligado).
          type: string
        message_status_url:
          nullable: true
          description: URL http(s) ou `null` (desligado).
          type: string
        connected_url:
          nullable: true
          description: URL http(s) ou `null` (desligado).
          type: string
        disconnected_url:
          nullable: true
          description: URL http(s) ou `null` (desligado).
          type: string
        chat_presence_url:
          nullable: true
          description: URL http(s) ou `null` (desligado).
          type: string
        single_url_enabled:
          type: boolean
          description: >-
            `true` = todos os eventos vão para `single_url`; as `*_url` por tipo
            são ignoradas.
        single_url:
          nullable: true
          description: URL única para todos os eventos (quando `single_url_enabled`).
          type: string
        notify_sent_by_me:
          type: boolean
        ignore_groups:
          type: boolean
        ignore_private:
          type: boolean
        ignore_text:
          type: boolean
        ignore_image:
          type: boolean
        ignore_video:
          type: boolean
        ignore_audio:
          type: boolean
        ignore_document:
          type: boolean
        ignore_received_callback:
          type: boolean
        ignore_delivery_callback:
          type: boolean
        ignore_message_status_callback:
          type: boolean
        ignore_connected_callback:
          type: boolean
        ignore_disconnected_callback:
          type: boolean
        ignore_chat_presence_callback:
          type: boolean
        secret:
          nullable: true
          description: >-
            Chave HMAC do header `X-Wabox-Signature` quando a instância usa a
            própria configuração; `null` = entregas não assinadas. Herdando do
            workspace (`use_workspace_webhooks`), as entregas usam o `secret` do
            workspace.
          type: string
      required:
        - use_workspace_webhooks
        - received_url
        - delivery_url
        - message_status_url
        - connected_url
        - disconnected_url
        - chat_presence_url
        - single_url_enabled
        - single_url
        - notify_sent_by_me
        - ignore_groups
        - ignore_private
        - ignore_text
        - ignore_image
        - ignore_video
        - ignore_audio
        - ignore_document
        - ignore_received_callback
        - ignore_delivery_callback
        - ignore_message_status_callback
        - ignore_connected_callback
        - ignore_disconnected_callback
        - ignore_chat_presence_callback
        - secret
      additionalProperties: false
    ApiError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: >-
                Código estável do erro (`instance_not_found`,
                `invalid_request`…).
            message:
              type: string
              description: Descrição legível, em inglês.
            details:
              description: 'Contexto extra (ex.: `issues` de validação).'
              type: object
              additionalProperties: {}
          required:
            - code
            - message
          additionalProperties: false
      required:
        - error
      additionalProperties: false

````