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

# Atualizar webhook

> Atualize a configuração de um webhook existente

## Conceituação

Atualiza parcialmente a configuração de um webhook. Apenas os campos enviados no body são atualizados — os demais permanecem inalterados.

### Atualizar eventos

Ao enviar o campo `events`, a lista substitui **todos** os eventos existentes:

```json theme={null}
{ "events": ["MESSAGE_RECEIVED", "MESSAGE_STATUS", "CONNECTED"] }
```

### Habilitar ou rotacionar a assinatura HMAC

Se você enviar `signing: true`, um novo `secret` é gerado e retornado nesta resposta. Use isso também para **rotacionar** o secret sem precisar recriar o webhook.

```json theme={null}
{ "signing": true }
```

<Warning>
  O novo `secret` é retornado **apenas nesta resposta**. Armazene-o antes de sair da página ou fechar a sessão.
</Warning>

### Desabilitar temporariamente

```json theme={null}
{ "status": "DISABLED" }
```

O webhook para de receber eventos enquanto estiver `DISABLED`. Para reativar:

```json theme={null}
{ "status": "ENABLED" }
```

<Note>
  Este endpoint requer a role **ENTERPRISE** na sua conta.
</Note>

<Note>
  O `webhookId` é obtido no retorno do endpoint [Criar webhook](/webhooks/create-webhook) ou [Listar webhooks](/webhooks/list-webhooks).
</Note>


## OpenAPI

````yaml pt/webhooks/openapi.json PATCH /v1/channels/{channelId}/webhooks/{webhookId}
openapi: 3.1.0
info:
  title: Hub Message - Webhooks API
  description: >-
    API para criar e gerenciar endpoints de webhook por canal. Requer role
    ENTERPRISE.
  version: 1.0.0
servers:
  - url: https://api.hubmessage.io
security:
  - bearerAuth: []
paths:
  /v1/channels/{channelId}/webhooks/{webhookId}:
    patch:
      tags:
        - Webhooks
      summary: Atualizar webhook
      description: >-
        Atualiza parcialmente a configuração do webhook. Apenas os campos
        enviados são atualizados.
      operationId: updateWebhook
      parameters:
        - name: channelId
          in: path
          required: true
          description: ID do canal
          schema:
            type: string
            example: 019E4C54B1B375A28970B605CA9B03C3
        - name: webhookId
          in: path
          required: true
          description: ID do webhook
          schema:
            type: string
            example: A1B2C3D4E5F6789012345678901234AB
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateWebhookRequest'
            examples:
              disable:
                summary: Desabilitar webhook
                value:
                  status: DISABLED
              reenable:
                summary: Reabilitar webhook
                value:
                  status: ENABLED
              updateUrlAndEvents:
                summary: Atualizar URL e eventos
                value:
                  url: https://nova-url.suaempresa.com/webhooks/hubmessage
                  events:
                    - MESSAGE_RECEIVED
                    - MESSAGE_STATUS
                    - CONNECTED
                    - DISCONNECTED
              enableSignature:
                summary: Habilitar / rotacionar assinatura HMAC
                value:
                  signing: true
              updateAuth:
                summary: Atualizar autenticação para Bearer
                value:
                  auth:
                    type: BEARER
                    token: novo-token-secreto
      responses:
        '200':
          description: >-
            Webhook atualizado com sucesso. O campo `secret` é retornado
            **apenas** quando `signing` foi habilitado nesta atualização.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookCreatedResponse'
              examples:
                afterEnableSigning:
                  summary: Após habilitar assinatura (secret retornado)
                  value:
                    id: A1B2C3D4E5F6789012345678901234AB
                    channelId: 019E4C54B1B375A28970B605CA9B03C3
                    instanceId: 019E4C54B1B375A28970B605CA9B03C3
                    url: https://app.suaempresa.com/webhooks/hubmessage
                    description: Webhook principal de produção
                    events:
                      - MESSAGE_RECEIVED
                      - MESSAGE_STATUS
                    status: ENABLED
                    signing: true
                    secret: >-
                      d4e5f6789012345678901234abcdef0123456789abcdef0123456789ab12c3d4
                    auth:
                      type: BEARER
                      configured: true
                    payloadFormat: DEFAULT
                    customAttributes: {}
                    createdAt: 2025-01-15T10:30:00.000+0000
                    updatedAt: 2025-01-20T14:00:00.000+0000
                afterDisable:
                  summary: Após desabilitar (sem secret)
                  value:
                    id: A1B2C3D4E5F6789012345678901234AB
                    channelId: 019E4C54B1B375A28970B605CA9B03C3
                    instanceId: 019E4C54B1B375A28970B605CA9B03C3
                    url: https://app.suaempresa.com/webhooks/hubmessage
                    description: Webhook principal de produção
                    events:
                      - MESSAGE_RECEIVED
                      - MESSAGE_STATUS
                    status: DISABLED
                    signing: true
                    auth:
                      type: BEARER
                      configured: true
                    payloadFormat: DEFAULT
                    customAttributes: {}
                    createdAt: 2025-01-15T10:30:00.000+0000
                    updatedAt: 2025-01-20T15:00:00.000+0000
        '400':
          description: Requisição inválida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: 400
                message: Validation error
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Webhook não encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: 404
                message: Webhook not found
        '422':
          description: Regra de negócio violada — conta sem role ENTERPRISE
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: 422
                message: This action requires ENTERPRISE role
components:
  schemas:
    UpdateWebhookRequest:
      type: object
      description: >-
        Todos os campos são opcionais — apenas os campos enviados são
        atualizados.
      properties:
        url:
          type: string
          description: Nova URL de destino
          example: https://nova-url.suaempresa.com/webhooks/hubmessage
        description:
          type: string
          description: Nova descrição
        events:
          type: array
          description: Nova lista de eventos — substitui todos os eventos existentes
          items:
            type: string
            enum:
              - MESSAGE_RECEIVED
              - MESSAGE_DELIVERY
              - MESSAGE_STATUS
              - RECEIVED_STATUS
              - RECEIVED_AND_DELIVERY
              - CONNECTED
              - DISCONNECTED
              - PRESENCE_CHAT
              - INITIAL_DATA
              - BLOCK
        status:
          type: string
          enum:
            - ENABLED
            - DISABLED
          description: '`DISABLED` pausa a entrega de eventos sem excluir o webhook'
        signing:
          type: boolean
          description: >-
            Habilita ou rotaciona a assinatura HMAC. Gera um novo `secret`
            retornado na resposta.
        auth:
          $ref: '#/components/schemas/WebhookAuth'
        payloadFormat:
          type: string
          enum:
            - DEFAULT
        customAttributes:
          type: object
          additionalProperties: true
    WebhookCreatedResponse:
      allOf:
        - $ref: '#/components/schemas/WebhookResponse'
        - type: object
          properties:
            secret:
              type: string
              description: >-
                Segredo HMAC de 64 caracteres hex — retornado **apenas** quando
                `signing` é habilitado no create ou update. Armazene-o com
                segurança; não poderá ser recuperado depois.
              example: a3f1c2d4e5b6789012345678901234abcdef0123456789abcdef0123456789ab
    Error:
      type: object
      properties:
        error:
          type: integer
        message:
          type: string
    WebhookAuth:
      type: object
      description: Configura como o Hub Message se autentica ao chamar sua URL
      properties:
        type:
          type: string
          enum:
            - NONE
            - BEARER
            - API_KEY
            - BASIC
            - CUSTOM_HEADER
          description: Tipo de autenticação
          example: BEARER
        token:
          type: string
          description: >-
            Token para autenticação `BEARER` — enviado no header `Authorization:
            Bearer <token>`
          example: meu-token-secreto
        key:
          type: string
          description: Chave para autenticação `API_KEY`
        username:
          type: string
          description: Usuário para autenticação `BASIC`
        password:
          type: string
          description: Senha para autenticação `BASIC`
        headerName:
          type: string
          description: Nome do header para `CUSTOM_HEADER`
          example: X-Api-Key
        headerValue:
          type: string
          description: Valor do header para `CUSTOM_HEADER`
    WebhookResponse:
      type: object
      properties:
        id:
          type: string
          description: ID único do webhook
          example: A1B2C3D4E5F6789012345678901234AB
        channelId:
          type: string
          description: ID do canal ao qual o webhook pertence
          example: 019E4C54B1B375A28970B605CA9B03C3
        instanceId:
          type: string
          deprecated: true
          description: Descontinuado — use `channelId`
          example: 019E4C54B1B375A28970B605CA9B03C3
        url:
          type: string
          description: URL de destino dos eventos
          example: https://app.suaempresa.com/webhooks/hubmessage
        description:
          type: string
          nullable: true
          description: Descrição do webhook
          example: Webhook principal de produção
        events:
          type: array
          description: Tipos de evento configurados
          items:
            type: string
          example:
            - MESSAGE_RECEIVED
            - MESSAGE_STATUS
        status:
          type: string
          enum:
            - ENABLED
            - DISABLED
          description: Status atual do webhook
          example: ENABLED
        signing:
          type: boolean
          description: Indica se a assinatura HMAC está habilitada
          example: true
        auth:
          $ref: '#/components/schemas/WebhookAuthInfo'
        payloadFormat:
          type: string
          enum:
            - DEFAULT
          description: Formato do payload entregue
          example: DEFAULT
        customAttributes:
          type: object
          additionalProperties: true
          description: Atributos extras configurados
          example: {}
        createdAt:
          type: string
          format: date-time
          description: Data de criação
          example: 2025-01-15T10:30:00.000+0000
        updatedAt:
          type: string
          format: date-time
          description: Data da última atualização
          example: 2025-01-15T10:30:00.000+0000
    WebhookAuthInfo:
      type: object
      description: >-
        Resumo da autenticação configurada — credenciais não são retornadas por
        segurança
      properties:
        type:
          type: string
          enum:
            - NONE
            - BEARER
            - API_KEY
            - BASIC
            - CUSTOM_HEADER
          example: BEARER
        configured:
          type: boolean
          description: '`true` quando credenciais estão configuradas'
          example: true
  responses:
    Unauthorized:
      description: Token inválido ou ausente.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: 401
            message: Unauthorized
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Secret Key gerada no painel de Segurança do Hub Message

````