> ## Documentation Index
> Fetch the complete documentation index at: https://br.developers.hubspot.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# API dos Webhooks 

export const postmanIcon = <svg xmlns="http://www.w3.org/2000/svg" width={25} height={25} preserveAspectRatio="xMidYMid" viewBox="0 0 256 256">
    <path fill="#FF6C37" d="M254.953 144.253c8.959-70.131-40.569-134.248-110.572-143.206C74.378-7.912 10.005 41.616 1.047 111.619c-8.959 70.003 40.569 134.248 110.572 143.334 70.131 8.959 134.248-40.569 143.334-110.7Z" />
    <path fill="#FFF" d="m174.2 82.184-54.007 54.007-15.229-15.23c53.11-53.11 58.358-48.503 69.236-38.777Z" />
    <path fill="#FF6C37" d="M120.193 137.47c-.384 0-.64-.128-.895-.384l-15.358-15.229a1.237 1.237 0 0 1 0-1.792c54.007-54.006 59.638-48.887 71.028-38.649.255.256.383.512.383.896s-.128.64-.383.896l-54.007 53.878c-.128.256-.512.384-.768.384Zm-13.437-16.509 13.437 13.438 52.087-52.087c-9.47-8.446-15.87-11.006-65.524 38.65Z" />
    <path fill="#FFF" d="m135.679 151.676-14.718-14.718 54.007-54.006c14.46 14.59-7.167 38.265-39.29 68.724Z" />
    <path fill="#FF6C37" d="M135.679 152.956c-.384 0-.64-.128-.896-.384l-14.718-14.718c-.256-.256-.256-.512-.256-.896s.128-.64.384-.895L174.2 82.056a1.237 1.237 0 0 1 1.791 0 15.58 15.58 0 0 1 4.991 11.902c-.256 14.206-16.38 32.25-44.28 58.614-.383.256-.767.384-1.023.384Zm-12.926-15.998c8.19 8.319 11.646 11.646 12.926 12.926 21.5-20.476 42.36-41.464 42.488-55.926.128-3.327-1.152-6.655-3.327-9.214l-52.087 52.214Z" />
    <path fill="#FFF" d="m105.22 121.345 10.878 10.878c.256.256.256.512 0 .768-.128.128-.128.128-.256.128l-22.524 4.863c-1.152.128-2.175-.64-2.431-1.791-.128-.64.128-1.28.512-1.664l13.053-13.054c.256-.256.64-.384.768-.128Z" />
    <path fill="#FF6C37" d="M92.934 139.262c-1.92 0-3.327-1.536-3.327-3.455 0-.896.384-1.792 1.024-2.432l13.053-13.054c.768-.64 1.792-.64 2.56 0l10.878 10.878c.768.64.768 1.792 0 2.56-.256.256-.512.384-.896.512l-22.524 4.863c-.256 0-.512.128-.768.128Zm11.902-16.51-12.542 12.543c-.256.256-.383.64-.128 1.024.128.383.512.511.896.383l21.116-4.607-9.342-9.342Z" />
    <path fill="#FFF" d="M202.739 52.238c-8.191-7.935-21.373-7.679-29.307.64-7.935 8.318-7.679 21.372.64 29.306A20.678 20.678 0 0 0 199.155 85l-14.59-14.59 18.174-18.172Z" />
    <path fill="#FF6C37" d="M188.405 89.223c-12.158 0-22.012-9.854-22.012-22.012 0-12.158 9.854-22.012 22.012-22.012 5.631 0 11.134 2.176 15.23 6.143.255.256.383.512.383.896s-.128.64-.384.895L186.357 70.41l13.566 13.566c.512.512.512 1.28 0 1.792l-.256.256c-3.327 2.047-7.295 3.199-11.262 3.199Zm0-41.337c-10.75 0-19.452 8.703-19.324 19.453 0 10.75 8.702 19.452 19.452 19.324 2.944 0 5.887-.64 8.575-2.047l-13.438-13.31c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l17.149-17.15c-3.456-2.943-7.807-4.479-12.414-4.479Z" />
    <path fill="#FFF" d="m203.122 52.622-.255-.256-18.301 18.044 14.461 14.462c1.408-.896 2.816-1.92 3.967-3.072a20.51 20.51 0 0 0 .128-29.178Z" />
    <path fill="#FF6C37" d="M199.155 86.28c-.384 0-.64-.128-.896-.384l-14.589-14.59c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l18.173-18.173a1.237 1.237 0 0 1 1.791 0l.384.256c8.575 8.574 8.575 22.396.128 31.098-1.28 1.28-2.687 2.432-4.223 3.328-.384.128-.64.256-.768.256Zm-12.798-15.87 12.926 12.926c1.024-.64 2.048-1.536 2.816-2.304 7.294-7.294 7.678-19.196.64-26.875L186.357 70.41Z" />
    <path fill="#FFF" d="M176.375 84.488a7.879 7.879 0 0 0-11.134 0l-48.247 48.247 8.063 8.063 51.062-44.792c3.328-2.816 3.584-7.807.768-11.134-.256-.128-.384-.256-.512-.384Z" />
    <path fill="#FF6C37" d="M124.929 142.077c-.384 0-.64-.128-.896-.383l-8.063-8.063a1.237 1.237 0 0 1 0-1.792l48.247-48.247a9.115 9.115 0 0 1 12.926 0 9.115 9.115 0 0 1 0 12.926l-.384.384-51.063 44.792c-.128.255-.384.383-.767.383Zm-6.143-9.342 6.27 6.271 50.167-44.024c2.816-2.304 3.072-6.527.768-9.342-2.303-2.816-6.526-3.072-9.342-.768-.128.128-.256.256-.512.384l-47.351 47.48Z" />
    <path fill="#FFF" d="M80.009 187.637c-.512.256-.768.768-.64 1.28l2.175 9.214c.512 1.28-.256 2.816-1.663 3.2-1.024.384-2.176 0-2.816-.768l-14.077-13.95 45.943-45.943 15.87.256 10.75 10.75c-2.56 2.175-18.045 17.149-55.542 35.961Z" />
    <path fill="#FF6C37" d="M78.985 202.61c-1.024 0-2.048-.383-2.688-1.151l-13.95-13.95c-.255-.256-.383-.512-.383-.896 0-.383.128-.64.384-.895l45.944-45.944c.256-.256.64-.384.895-.384l15.87.256c.383 0 .64.128.895.384l10.75 10.75c.256.256.384.64.384 1.024s-.128.64-.512.896l-.895.767c-13.566 11.902-31.995 23.804-54.902 35.194l2.175 9.086c.384 1.664-.384 3.456-1.92 4.352-.767.384-1.407.512-2.047.512Zm-14.078-15.997 13.182 13.054c.384.64 1.152.896 1.792.512.64-.384.896-1.152.512-1.792l-2.176-9.214c-.256-1.152.256-2.176 1.28-2.688 22.652-11.39 40.952-23.163 54.39-34.81l-9.47-9.47-14.718-.256-44.792 44.664Z" />
    <path fill="#FFF" d="m52.11 197.62 11.006-11.007 16.38 16.381-26.107-1.791c-1.151-.128-1.92-1.152-1.791-2.304 0-.512.128-1.024.512-1.28Z" />
    <path fill="#FF6C37" d="m79.497 204.146-26.236-1.791c-1.92-.128-3.199-1.792-3.071-3.712.128-.768.384-1.535 1.024-2.047L62.22 185.59a1.237 1.237 0 0 1 1.792 0l16.38 16.38c.385.385.512.897.257 1.408-.256.512-.64.768-1.152.768Zm-16.381-15.74-10.11 10.11c-.384.255-.384.895 0 1.151.127.128.255.256.511.256l22.652 1.536-13.053-13.054ZM104.452 146.557c-.768 0-1.28-.64-1.28-1.28 0-.384.128-.64.384-.896l12.414-12.414a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-20.477 4.352h-.256Zm12.414-11.902-8.446 8.446 13.821-2.943-5.375-5.503Z" />
    <path fill="#FFF" d="m124.8 140.926-14.077 3.071c-1.024.256-2.048-.384-2.303-1.408-.128-.64 0-1.28.511-1.791l7.807-7.807 8.063 7.935Z" />
    <path fill="#FF6C37" d="M110.467 145.277a3.168 3.168 0 0 1-3.2-3.2c0-.895.385-1.663.897-2.303l7.806-7.807a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-14.078 3.072h-.64Zm6.399-10.622-6.91 6.91c-.257.257-.257.512-.129.768s.384.384.768.384l11.774-2.56-5.503-5.502ZM203.25 64.907c-.256-.767-1.151-1.151-1.92-.895-.767.255-1.151 1.151-.895 1.92 0 .127.128.255.128.383.768 1.536.512 3.455-.512 4.863-.512.64-.384 1.536.128 2.048.64.512 1.536.384 2.048-.256 1.92-2.432 2.303-5.503 1.023-8.063Z" />
  </svg>;

<Card title="Run in Postman" href="https://app.getpostman.com/run-collection/26126890-8f5582df-b553-403f-b001-6fe4cbafe4e4" icon={postmanIcon} horizontal={true} />

<DndSection>
  <DndModule numCols={10}>
    <div>
      # Webhooks

      <RelatedApiLink />
    </div>
  </DndModule>

  <DndModule numCols={2} />
</DndSection>

A API de Webhooks permite assinar eventos que acontecem em uma conta da HubSpot com sua integração instalada. Em vez de fazer uma chamada de API quando um evento acontece em uma conta conectada, o HubSpot pode enviar uma solicitação HTTP para um ponto de extremidade que você configurar. Você pode configurar eventos assinados nas configurações de seu aplicativo ou usando os pontos de extremidade detalhados abaixo. Os Webhooks podem ser uma alternativa mais escalável do que verificar alterações com frequência, especialmente para aplicativos com uma base de instalação grande.

O uso da API dos Webhooks requer o seguinte:

* Você deve configurar um aplicativo da HubSpot para usar webhooks, inscrevendo-se nos eventos sobre os quais deseja ser notificado e especificando um URL para envio dessas notificações. Consulte a [documentação dos pré-requisitos](https://br.developers.hubspot.com/docs) para obter mais informações sobre como criar um aplicativo.
* Você deve implantar um ponto de extremidade seguro (HTTPS) e disponível publicamente para esse URL que seja capaz de lidar com as cargas do webhook especificadas nesta documentação.

Os webhooks estão configurados para um [aplicativo da HubSpot](/docs/apps/legacy-apps/public-apps/overview), e não para contas individuais. Todas as contas que instalarem seu aplicativo passando pelo [fluxo de OAuth](https://br.developers.hubspot.com/docs/reference/api/app-management/oauth/tokens#initiate-an-integration-with-oauth-2.0) serão inscritas nas respectivas assinaturas do webhook.

Você pode se inscrever em eventos de objeto do CRM, que incluem contatos, empresas, negócios, tickets, produtos e itens de linha, bem como em eventos de conversas.

<Warning>
  ### Observação:

  * Você também pode [gerenciar webhooks em um aplicativo privado](/docs/apps/legacy-apps/private-apps/create-and-edit-webhook-subscriptions-in-private-apps). Nos aplicativos privados, as configurações de webhook só podem ser editadas nas configurações do aplicativo privado; elas não podem ser editadas por meio da API.
  * Para se inscrever em webhooks de conversas, você precisa acessar [a caixa de entrada de conversas e as APIs de mensagens](/docs/api-reference/conversations-conversations-inbox-&-messages-v3/guide), que estão atualmente <u>em versão beta</u>.
</Warning>

## Escopos

Para usar webhooks para assinar os eventos do CRM, o aplicativo precisará ser configurado para exigir o escopo associado que corresponde ao tipo de objeto do CRM no qual você deseja se inscrever. Por exemplo, se quiser se inscrever em eventos de contatos, você terá que solicitar o escopo `crm.objects.contacts.read`.

* Ao criar assinaturas na interface de configurações do seu aplicativo público, você será solicitado a adicionar o escopo necessário no painel *Criar novas assinaturas do webhook* antes de terminar de criar a assinatura.
* Se você estiver criando uma assinatura ao fazer uma solicitação `POST` para o ponto de extremidade `/webhooks/v3/{appId}/subscriptions`, a resposta incluirá um erro contendo o nome do escopo que você precisará definir nas configurações da interface do usuário do seu aplicativo público.
* Se o seu aplicativo já estiver usando webhooks, você não poderá remover nenhum escopo exigido pelas assinaturas de webhooks ativas sem primeiro pausar e remover as assinaturas.
* Você pode revisar os escopos necessários para cada tipo de assinatura de webhook na [tabela abaixo.](#webhook-subscriptions)

Revise a documentação de OAuth para [obter mais detalhes sobre os escopos](https://br.developers.hubspot.com/docs/reference/api/app-management/oauth/tokens#initiate-an-integration-with-oauth-2.0#scopes) e [configurar o URL de autorização](https://br.developers.hubspot.com/docs/reference/api/app-management/oauth/tokens#initiate-an-integration-with-oauth-2.0) para o seu aplicativo.

## Configurações de webhooks

Antes de configurar suas assinaturas de Webhook, você precisa especificar um URL para o qual essas notificações serão enviadas. Siga as instruções nas secções abaixo para saber como configurar totalmente as assinaturas do seu aplicativo.

<Warning>
  ### Observação:

  * As configurações de Webhooks podem ser armazenadas no cache por até cinco minutos. Quando você altera o URL do webhook, os limites de simultaneidade ou as configurações de assinatura, essas alterações podem levar até cinco minutos para entrarem em vigor.
  * O HubSpot define um limite de simultaneidade de 10 solicitações ao enviar dados de eventos de assinatura associados a uma conta que instalou seu aplicativo. Esse limite de simultaneidade é o número máximo de solicitações em andamento que o HubSpot tentará por vez. Cada solicitação pode conter até 100 eventos.
</Warning>

### Gerenciar configurações em sua conta de desenvolvedor

Você pode gerenciar a URL e o limite de acúmulo de eventos na página de configuração do aplicativo em sua conta de desenvolvedor:

* Na sua conta de desenvolvedor, acesse o painel **Aplicativo**.
* Clique no **nome** do aplicativo para o qual deseja configurar os webhooks.

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/app_id_list.png?width=600&name=app_id_list.png" alt="app_id_list" />
</Frame>

* No menu da barra lateral esquerda, acesse **Webhooks**.
* No campo *URL de destino*, insira a **URL** para a qual o HubSpot fará uma solicitação POST quando os eventos forem disparados.
* Use a configuração *Acúmulo de eventos* para ajustar o número máximo de eventos que o HubSpot tentará enviar.

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/webhook_settings.png?width=600&name=webhook_settings.png" alt="webhook_settings" />
</Frame>

* Clique em **Salvar**.

### Gerenciar configurações por meio da API

Você pode usar os seguintes pontos de extremidade e sua [chave de API de desenvolvedor](https://br.developers.hubspot.com/docs) para configurar programaticamente as configurações do webhook para um aplicativo.

Para exibir as configurações de webhooks definidas para um aplicativo, faça uma solicitação `GET` para `webhooks/v3/{appId}/settings`.

Você precisará incluir o [ID do aplicativo](https://br.developers.hubspot.com/docs) na solicitação, que pode ser encontrado abaixo do nome do aplicativo no painel *Aplicativos* ou na guia *Autenticação* nas configurações do aplicativo.

O objeto de configuração contém os seguintes campos:

| Campo                   | Description                                                                                     |
| ----------------------- | ----------------------------------------------------------------------------------------------- |
| `webhookUrl`            | A URL para a qual o HubSpot enviará notificações de webhook. A URL deve ser atendida por HTTPS. |
| `maxConcurrentRequests` | O limite de concorrência para a URL do webhook. Este valor deve ser um número maior que cinco.  |

Para editar essas configurações, faça uma solicitação `PUT` para `webhooks/v3/{appId}/settings` e inclua os seguintes campos no corpo da solicitação:

| Campo                   | Description                                                                                                                             |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `targetUrl`             | A URL disponível publicamente para que o HubSpot indique onde as payloads do evento serão entregues.                                    |
| `acúmulo`               | Configure os detalhes de acúmulo do webhook neste objeto. O objeto de acúmulo inclui os campos `period` e `maxConcurrentRequests`.      |
| `período`               | Escala de tempo para esta configuração. Pode ser `SECONDLY` (por segundo) ou `ROLLING_MINUTE` (por minuto).                             |
| `maxConcurrentRequests` | O número máximo de solicitações HTTP que o HubSpot tentará fazer para o seu aplicativo em um período de tempo determinado por `period`. |

Por exemplo, o corpo da solicitação pode ser parecido com o seguinte:

```json theme={null}
// PUT request to https://api.hubapi.com/webhooks/v3/{appId}/settings

{
  "throttling": {
    "period": "SECONDLY",
    "maxConcurrentRequests": 10
  },
  "targetUrl": "https://www.example.com/hubspot/target"
}
```

## Assinaturas de Webhook

Depois de definir a URL do Webhook e o limite de acúmulo de eventos, será necessário criar uma ou mais assinaturas. As assinaturas do Webhook informam ao HubSpot quais eventos seu aplicativo específico gostaria de receber.

As assinaturas se aplicam a todos os clientes que instalaram sua integração. Isso significa que basta você especificar uma vez as assinaturas de que precisa. Depois que uma assinatura for ativada para um aplicativo, ele começará a receber webhooks automaticamente de todos os clientes que instalaram seu aplicativo, e sua integração começará a receber gatilhos de webhook de qualquer novo cliente.

Para todas as assinaturas de webhook `associationChange`, o webhook disparará dois eventos para ambos os lados da associação.

* Ao associar dois contatos, uma assinatura de `contact.associationChange` disparará dois eventos, representando `contact 1 to contact 2` e `contact 2 to contact 1`.
* Ao associar uma empresa, se você tiver duas assinaturas de webhook, `contact.associationChange` e `company.associationChange`, receberá dois eventos. Estes representarão `contact 1 to company 1` e `company 1 to contact 1`.

Os seguintes tipos de assinatura são suportados e podem ser usados como valor para o campo `eventType` ao criar assinaturas por meio da API:

| Tipo de assinatura            | Escopo obrigatório                                                                                                                                                                                  | Descrição                                                                                                                                                                                      |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `contact.creation`            | `crm.objects.contacts.read`                                                                                                                                                                         | Receba uma notificação se um contato for criado na conta de um cliente.                                                                                                                        |
| `contact.deletion`            | Receba uma notificação se um contato for excluído na conta de um cliente.                                                                                                                           |                                                                                                                                                                                                |
| `contact.merge`               | Receba uma notificação se um contato for mesclado com outro.                                                                                                                                        |                                                                                                                                                                                                |
| `contact.associationChange`   | Receba uma notificação se um contato tiver uma associação adicionada ou removida entre ele e outro objeto de webhook suportado (contato, empresa, negócio, ticket, item de linha ou produto).       |                                                                                                                                                                                                |
| `contact.restore`             | Receba uma notificação se um contato for restaurado da exclusão.                                                                                                                                    |                                                                                                                                                                                                |
| `contact.privacyDeletion`     | Receba uma notificação se um contato for excluído por [motivos de conformidade com a privacidade](https://br.developers.hubspot.com/docs/guides/api/app-management/webhooks/overview).              |                                                                                                                                                                                                |
| `contact.propertyChange`      | Receba uma notificação se uma propriedade específica for alterada para um contato em uma conta.                                                                                                     |                                                                                                                                                                                                |
| `company.creation`            | `crm.objects.companies.read`                                                                                                                                                                        | Receba uma notificação se uma empresa for criada na conta de um cliente.                                                                                                                       |
| `company.deletion`            | Receba uma notificação se uma empresa for excluída na conta de um cliente.                                                                                                                          |                                                                                                                                                                                                |
| `company.propertyChange`      | Receba uma notificação se uma propriedade específica for alterada para uma empresa na conta de um cliente.                                                                                          |                                                                                                                                                                                                |
| `company.associationChange`   |                                                                                                                                                                                                     | Receba uma notificação se uma empresa tiver uma associação adicionada ou removida entre ela e outro objeto de webhook suportado (contato, empresa, negócio, ticket, item de linha ou produto). |
| `company.restore`             |                                                                                                                                                                                                     | Receba uma notificação se uma empresa for restaurada da exclusão.                                                                                                                              |
| `company.merge`               |                                                                                                                                                                                                     | Receba uma notificação se uma empresa for mesclada com outra.                                                                                                                                  |
| `deal.creation`               | `crm.objects.deals.read`                                                                                                                                                                            | Receba uma notificação se um negócio for criado na conta de um cliente.                                                                                                                        |
| `deal.deletion`               | Receba uma notificação se um negócio for excluído na conta de um cliente.                                                                                                                           |                                                                                                                                                                                                |
| `deal.associationChange`      | Receba uma notificação se um negócio tiver uma associação adicionada ou removida entre ele e outro objeto de webhook suportado (contato, empresa, negócio, ticket, item de linha ou produto).       |                                                                                                                                                                                                |
| `deal.restore`                | Receba uma notificação se um negócio for restaurado da exclusão.                                                                                                                                    |                                                                                                                                                                                                |
| `deal.merge`                  | Receba uma notificação se um negócio for mesclado com outro.                                                                                                                                        |                                                                                                                                                                                                |
| `deal.propertyChange`         | Receba uma notificação se uma propriedade específica for alterada para um negócio na conta de um cliente.                                                                                           |                                                                                                                                                                                                |
| `ticket.creation`             | `tickets`                                                                                                                                                                                           | Receba uma notificação se um ticket for criado na conta de um cliente.                                                                                                                         |
| `ticket.deletion`             | Receba uma notificação se um ticket for excluído na conta de um cliente.                                                                                                                            |                                                                                                                                                                                                |
| `ticket.propertyChange`       | Receba uma notificação se uma propriedade específica for alterada para um ticket na conta de um cliente.                                                                                            |                                                                                                                                                                                                |
| `ticket.associationChange`    |                                                                                                                                                                                                     | Receba uma notificação se um ticket tiver uma associação adicionada ou removida entre ele e outro objeto de webhook suportado (contato, empresa, negócio, ticket, item de linha ou produto).   |
| `ticket.restore`              |                                                                                                                                                                                                     | Receba uma notificação se um tíquete for restaurado da exclusão.                                                                                                                               |
| `ticket.merge`                |                                                                                                                                                                                                     | Receba uma notificação se um ticket for mesclado com outro.                                                                                                                                    |
| `product.creation`            | `e-commerce`                                                                                                                                                                                        | Receba uma notificação se um produto for criado na conta de um cliente.                                                                                                                        |
| `product.deletion`            | Receba uma notificação se um produto for excluído na conta de um cliente.                                                                                                                           |                                                                                                                                                                                                |
| `product.restore`             | Receba uma notificação se um produto for restaurado da exclusão.                                                                                                                                    |                                                                                                                                                                                                |
| `product.merge`               | Receba uma notificação se um produto for mesclado com outro.                                                                                                                                        |                                                                                                                                                                                                |
| `product.propertyChange`      | Receba uma notificação se um produto específico for alterado para um produto na conta de um cliente.                                                                                                |                                                                                                                                                                                                |
| `line_item.creation`          | Receba uma notificação se um item de linha for criado na conta de um cliente.                                                                                                                       |                                                                                                                                                                                                |
| `line_item.deletion`          | Receba uma notificação se um item de linha for excluído na conta de um cliente.                                                                                                                     |                                                                                                                                                                                                |
| `line_item.associationChange` | Receba uma notificação se um item de linha tiver uma associação adicionada ou removida entre ele e outro objeto de webhook suportado (contato, empresa, negócio, ticket, item de linha ou produto). |                                                                                                                                                                                                |
| `line_item.restore`           | Receba uma notificação se um item de linha for restaurado da exclusão.                                                                                                                              |                                                                                                                                                                                                |
| `line_item.merge`             | Receba uma notificação se um item de linha for mesclado com outro.                                                                                                                                  |                                                                                                                                                                                                |
| `line_item.propertyChange`    | Receba uma notificação se uma propriedade específica for alterada para um item de linha na conta de um cliente.                                                                                     |                                                                                                                                                                                                |

Os seguintes tipos de assinatura de conversas estão disponíveis para você assinar se estiver usando a[API de mensagens e caixa de entrada de conversas](/docs/api-reference/conversations-conversations-inbox-&-messages-v3/guide), que está atualmente <u>em versão beta</u>:

| Tipo de assinatura             | Scope                                                                                           | Descrição                                                         |
| ------------------------------ | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| `conversation.creation`        | `conversations.read`                                                                            | Receba uma notificação se um novo thread for criado em uma conta. |
| `conversation.deletion`        | Receba uma notificação se um thread for arquivado ou excluído de forma reversível em uma conta. |                                                                   |
| `conversation.privacyDeletion` | Receba uma notificação se um thread for excluído permanentemente em uma conta.                  |                                                                   |
| `conversation.propertyChange`  | Receba uma notificação se uma propriedade em um thread for alterada.                            |                                                                   |
| `conversation.newMessage`      | Receba uma notificação se uma nova mensagem for recebida em um thread.                          |                                                                   |

No caso de assinaturas de alteração de propriedade, você precisará especificar sobre quais propriedades deseja ser notificado. É possível especificar várias assinaturas de alteração de propriedade. Se a conta de um cliente não tiver a propriedade especificada em uma assinatura, você não receberá webhooks desse cliente para essa propriedade.

Algumas propriedades não estão disponíveis para assinaturas de alteração de propriedade do CRM. São elas:

* `num_unique_conversion_events`
* `hs_lastmodifieddate`

Se você estiver usando a [API de caixa de entrada e mensagens de conversas](/docs/api-reference/conversations-conversations-inbox-&-messages-v3/guide), que está atualmente <u>em versão beta</u>, as seguintes propriedades estarão disponíveis:

* `assignedTo`**:** o thread da conversa foi reatribuído ou teve sua atribuição cancelada. Se o thread foi reatribuído, `propertyValue` será um ID de ator na payload dos webhooks; se teve sua atribuição cancelada, a propriedade estará vazia.
* `status`**:** o status do thread de conversas foi alterado. Na carga útil dos webhooks, `propertyValue` será `OPEN` ou `CLOSED`.
* `isArchived`**:** o thread da conversa foi restaurado. O `propertyValue` na payload dos webhooks sempre será `FALSE`.

### Criar assinaturas em sua conta de desenvolvedor

Você pode criar assinaturas de webhook em sua conta de desenvolvedor da HubSpot.

* Na sua conta de desenvolvedor da HubSpot, acesse o painel **Aplicativos**.
* Clique no **nome** de um aplicativo.
* No menu da barra lateral esquerda, acesse **Webhooks**.
* Clique em **Criar assinatura**.
* No painel direito, clique no menu suspenso **Quais tipos de objeto?** e selecione os **objetos** para os quais você deseja criar uma assinatura.
* Clique no menu suspenso **Monitorar quais eventos?** e selecione os **tipos de eventos**.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/create-contact-create-subscription.png" alt="create-contact-create-subscription" />
</Frame>

* Se você estiver criando uma assinatura para eventos de alteração de propriedade, clique no menu suspenso **Quais propriedades?** e selecione as **propriedades** que devem ser monitoradas.

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/webhook_select_properties.png?width=450&name=webhook_select_properties.png" alt="" />
</Frame>

* Clique em **Assinar**.

A assinatura aparecerá nas configurações de webhooks. Novas assinaturas são criadas em um estado pausado; você precisará ativar a assinatura para que os webhooks sejam enviados:

* Na seção *Assinaturas de eventos*, passe o mouse sobre o tipo de objeto e clique em **Exibir assinaturas**.
* Marque a **caixa de seleção** ao lado do evento e, no cabeçalho da tabela, clique em **Ativar**.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/activate-subscription.png" alt="activate-subscription" />
</Frame>

### Criar assinaturas por meio da API

Você pode criar assinaturas de forma programática usando os pontos de extremidade a seguir. Você precisará usar sua chave de API de desenvolvedor ao fazer solicitações para esses pontos de extremidade.

O objeto de assinatura pode incluir os seguintes campos:

| Campo          | Description                                                                                                                                                                                                 |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`           | Um número que representa o ID exclusivo de uma assinatura.                                                                                                                                                  |
| `createdAt`    | A hora em milissegundos em que essa assinatura foi criada.                                                                                                                                                  |
| `createdBy`    | O ID associado ao usuário que criou a assinatura.                                                                                                                                                           |
| `inteligente`  | Indica se a assinatura está ativada e disparando notificações de forma ativa. O valor pode ser `true` ou `false`.                                                                                           |
| `eventType`    | O tipo de assinatura. A [tabela](https://br.developers.hubspot.com/docs/guides/api/app-management/webhooks/overview#webhook-subscriptions) no início desta seção inclui os tipos de assinatura disponíveis. |
| `propertyName` | O nome da propriedade em que a assinatura monitorará as alterações. Isso é necessário apenas para tipos de assinatura de alteração de propriedade.                                                          |

### Obter assinaturas

Para recuperar a lista de assinaturas, faça uma solicitação `GET` para `webhooks/v3/{appId}/subscriptions`.

A resposta será um conjunto de objetos que representam suas assinaturas. Cada objeto conterá informações sobre a assinatura, como o ID, a data de criação, o tipo e se a assinatura está ou não ativa no momento. Veja a seguir o exemplo de uma resposta:

```json theme={null}
// Example GET request to https://api.hubapi.com/webhooks/v3/{appId}/subscriptions

[
  {
    "id": 25,
    "createdAt": 1461704185000,
    "createdBy": 529872,
    "eventType": "contact.propertyChange",
    "propertyName": "lifecyclestage",
    "active": false
  },
  {
    "id": 59,
    "createdAt": 1462388498000,
    "createdBy": 529872,
    "eventType": "company.creation",
    "active": false
  },
  {
    "id": 108,
    "createdAt": 1463423132000,
    "createdBy": 529872,
    "eventType": "deal.creation",
    "active": true
  }
]
```

### Criar uma nova assinatura

Para criar uma nova assinatura, faça uma solicitação `POST` para `webhooks/v3/{appId}/subscriptions`.

No corpo da solicitação, você pode incluir os seguintes campos:

| Campo          | Description                                                                                                                                        |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `eventType`    | O tipo de assinatura.                                                                                                                              |
| `propertyName` | O nome da propriedade em que a assinatura monitorará as alterações. Isso é necessário apenas para tipos de assinatura de alteração de propriedade. |
| `inteligente`  | Indica se a assinatura está ativada e disparando notificações de forma ativa. O valor pode ser `true` ou `false`.                                  |

Não é necessário incluir `id`, `createdAt` ou `createdBy`, pois esses campos são definidos automaticamente.

Por exemplo, o corpo da solicitação pode ser parecido com o seguinte:

```json theme={null}
// Example POST request to https://api.hubapi.com/webhooks/v3/{appId}/subscriptions

{
  "eventType": "company.propertyChange",
  "propertyName": "companyname",
  "active": false
}
```

O `eventType` deve ser um tipo de assinatura válido, conforme definido na seção acima, e `propertyName` deve ser um nome de propriedade válido. Se um cliente não tiver uma propriedade definida que corresponda a esse valor, essa assinatura não resultará em notificação.

### Atualizar uma assinatura

Para ativar ou pausar uma assinatura, faça uma solicitação `PUT` para `webhooks/v3/{appId}/subscriptions/{subscriptionId}`.

No corpo da solicitação, inclua o seguinte:

| Campo         | Description                                                                                                       |
| ------------- | ----------------------------------------------------------------------------------------------------------------- |
| `inteligente` | Indica se a assinatura está ativada e disparando notificações de forma ativa. O valor pode ser `true` ou `false`. |

### Excluir uma assinatura

Para excluir uma assinatura, faça uma solicitação `DELETE` para `webhooks/v3/{appId}/subscriptions/{subscriptionId}`.

## Payloads de webhooks

O ponto de extremidade na URL de destino especificada nas configurações de webhooks do aplicativo receberá do HubSpot solicitações `POST` contendo dados em formato JSON.

Para garantir que as solicitações que você está recebendo no ponto de extremidade do webhook sejam provenientes do HubSpot, o HubSpot preenche um cabeçalho `X-HubSpot-Signature` com um hash SHA-256 criado usando o segredo do cliente do seu aplicativo combinado com os detalhes da solicitação. Saiba mais sobre [como validar assinaturas de solicitação](/docs/apps/legacy-apps/authentication/validating-requests).

Use as tabelas abaixo para visualizar detalhes sobre os campos que podem estar contidos no conteúdo.

| Campo            | Description                                                                                                                                                                                                                                                            |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `objectId`       | O ID do objeto que foi criado, alterado ou excluído. Para contatos, é o ID do contato; para empresas, é o ID da empresa; para negócios, é o ID do negócio; e para conversas, é o [ID do thread](/docs/api-reference/conversations-conversations-inbox-&-messages-v3/guide). |
| `propertyName`   | É enviado apenas para assinaturas de alteração de propriedade e é o nome da propriedade que foi alterada.                                                                                                                                                              |
| `propertyValue`  | É enviado apenas para assinaturas de alteração de propriedade e representa o novo valor definido para a propriedade que disparou a notificação.                                                                                                                        |
| `changeSource`   | A origem da alteração. Pode ser qualquer uma das origens de alteração que aparecem nos históricos de propriedades de contato.                                                                                                                                          |
| `eventId`        | O ID do evento que disparou essa notificação. Não há garantias de que esse valor seja exclusivo.                                                                                                                                                                       |
| `subscriptionId` | O ID da assinatura que disparou uma notificação sobre o evento.                                                                                                                                                                                                        |
| `portalId`       | O [ID da conta da HubSpot](https://knowledge.hubspot.com/account-management/manage-multiple-hubspot-accounts#check-your-current-account) do cliente onde o evento ocorreu.                                                                                             |
| `appId`          | O ID do aplicativo. Isso é usado caso você tenha vários aplicativos apontando para a mesmo URL de Webhook.                                                                                                                                                             |
| `occurredAt`     | Quando esse evento ocorreu, como uma marca de data/hora em milissegundos.                                                                                                                                                                                              |
| `eventType`      | O tipo de evento para o qual esta notificação se destina. Revise a lista de tipos de assinatura permitidos na seção de assinatura de webhooks acima.                                                                                                                   |
| `attemptNumber`  | Começando em 0, o número desta tentativa de notificação do seu serviço sobre esse evento. Se o serviço atingir o tempo limite ou lançar um erro conforme descrito na seção *Tentativas* abaixo, o HubSpot tentará enviar a notificação novamente.                      |
| `messageId`      | Somente será enviado quando um webhook estiver monitorando novas mensagens para um thread. É o ID da nova mensagem.                                                                                                                                                    |
| `messageType`    | Somente será enviado quando um webhook estiver monitorando novas mensagens para um thread. Representa o tipo de mensagem que você está enviando. Este valor pode ser `MESSAGE` ou `COMMENT`.                                                                           |

| Campo                     | Description                                                                                                                                                               |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `primaryObjectId`         | O ID do vencedor da mesclagem, que é o registro que permanece após a mesclagem. Na interface de mesclagem do HubSpot, é o registro à direita.                             |
| `mergedObjectIds`         | Uma matriz de IDs que representam os registros mesclados no vencedor da mesclagem. Na interface de mesclagem do HubSpot, é o registro à esquerda.                         |
| `newObjectId`             | O ID do registro criado como resultado da mesclagem. Isso é separado do `primaryObjectId` porque, em alguns casos, um novo registro é criado como resultado da mesclagem. |
| `numberOfPropertiesMoved` | Um número inteiro que representa quantas propriedades foram transferidas durante a mesclagem.                                                                             |

| Campo                  | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `associationType`      | O tipo de associação, que será um dos seguintes:<ul><li>`CONTACT_TO_COMPANY`</li><li>`CONTACT_TO_DEAL`</li><li>`CONTACT_TO_TICKET`</li><li>`CONTACT_TO_CONTACT`<br /><br /></li><li>`COMPANY_TO_CONTACT`</li><li>`COMPANY_TO_DEAL`</li><li>`COMPANY_TO_TICKET`</li><li>`COMPANY_TO_COMPANY`<br /><br /></li><li>`DEAL_TO_CONTACT`</li><li>`DEAL_TO_COMPANY`</li><li>`DEAL_TO_LINE_ITEM`</li><li>`DEAL_TO_TICKET`</li><li>`DEAL_TO_DEAL`<br /><br /></li><li>`TICKET_TO_CONTACT`</li><li>`TICKET_TO_COMPANY`</li><li>`TICKET_TO_DEAL`</li><li>`TICKET_TO_TICKET`<br /><br /></li><li>`LINE_ITEM_TO_DEAL`</li></ul>                  |
| `fromObjectId`         | O ID do registro do qual a alteração da associação foi feita.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `toObjectId`           | O ID do registro secundário no evento de associação.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `associationRemoved`   | Um booleano que representa o seguinte:<ul><li>`true`: o webhook foi disparado pela remoção de uma associação.</li><li>`false`: o webhook foi disparado pela criação de uma associação.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `isPrimaryAssociation` | Um booleano que representa o seguinte:<ul><li>`true`: o registro secundário é a [associação principal](https://knowledge.hubspot.com/records/associate-records#primary-company-information) do registro do qual a alteração da associação foi feita.</li><li>`false`: o registro <u>não é</u> a associação principal do registro do qual a alteração da associação foi feita. </li></ul>**Observação:** a criação de uma instância de associação principal entre dois registros de objeto fará com que a associação correspondente, que não seja a principal, também seja criada. Isso pode resultar em duas mensagens de webhook. |

```json theme={null}
//
[
  {
    "objectId": 1246965,
    "propertyName": "lifecyclestage",
    "propertyValue": "subscriber",
    "changeSource": "ACADEMY",
    "eventId": 3816279340,
    "subscriptionId": 25,
    "portalId": 33,
    "appId": 1160452,
    "occurredAt": 1462216307945,
    "eventType": "contact.propertyChange",
    "attemptNumber": 0
  },
  {
    "objectId": 1246978,
    "changeSource": "IMPORT",
    "eventId": 3816279480,
    "subscriptionId": 22,
    "portalId": 33,
    "appId": 1160452,
    "occurredAt": 1462216307945,
    "eventType": "contact.creation",
    "attemptNumber": 0
  }
]
```

Como mostrado acima, você deve esperar receber um array de objetos em uma única solicitação. O tamanho do lote pode variar, mas será de no máximo 100 notificações. O HubSpot somente enviará várias notificações quando muitos eventos ocorrerem em um curto período de tempo. Por exemplo, se você tiver inscrito novos contatos e um cliente importar um grande número de contatos, o HubSpot enviará as notificações desses contatos importados em lotes, e não uma por solicitação.

O HubSpot não garante que você receberá essas notificações na ordem em que ocorreram. Use a propriedade `occurredAt` para cada notificação a fim de determinar quando o evento que disparou a notificação ocorreu.

O HubSpot também não garante que você receberá somente uma notificação para cada evento. Pode acontecer de o HubSpot enviar a mesma notificação várias vezes, embora isso provavelmente não ocorrerá.

## Exclusões de contatos em conformidade com a privacidade

Usuários do HubSpot podem excluir permanentemente um registro de contato para cumprir as leis de privacidade. Saiba mais sobre como realizar uma [exclusão em conformidade com o GDPR](https://knowledge.hubspot.com/privacy-and-consent/how-do-i-perform-a-gdpr-delete-in-hubspot).

Você pode se inscrever no tipo de assinatura `contact.privacyDeletion` para receber notificações de Webhook quando um usuário realizar a exclusão de um contato em conformidade com a privacidade.

As notificações de exclusão de privacidade têm comportamentos especiais:

* Um evento de exclusão de privacidade também disparará o evento de exclusão de contato. Portanto, você receberá duas notificações se estiver inscrito nos dois eventos.
* Essas notificações não serão necessariamente enviadas em uma ordem específica ou no mesmo lote de mensagens. Você precisará usar o ID do objeto para corresponder mensagens separadas.

## Segurança

Para garantir que as solicitações que você está recebendo no ponto de extremidade do webhook sejam provenientes do HubSpot, o HubSpot preenche um cabeçalho `X-HubSpot-Signature` com um hash SHA-256 da concatenação do segredo do aplicativo e do corpo da solicitação que estamos enviando.

Para verificar essa assinatura, concatene o segredo do aplicativo e o corpo de solicitação não analisado da solicitação que você está gerenciando e obtenha um hash SHA-256 do resultado. Compare o hash resultante com o valor do cabeçalho `X-HubSpot-Signature`. Se esses valores corresponderem, isso confirmará que essa solicitação veio da HubSpot. Ou a solicitação veio de outra pessoa que conhece o segredo do seu aplicativo. É importante manter esse valor em segredo.

Se esses valores forem diferentes, essa solicitação pode ter sido alterada em trânsito ou alguém pode ter falsificado as notificações de webhook no seu ponto de extremidade.

Saiba mais sobre como [validar solicitações de assinatura](/docs/apps/legacy-apps/authentication/validating-requests).

## Tentativas

Se, em algum momento, o serviço enfrentar problemas ao lidar com notificações, o HubSpot fará 10 tentativas de reenviar as notificações com falha.

O HubSpot tentará novamente nos seguintes casos:

* **Falha na conexão:** se o HubSpot não conseguir estabelecer uma conexão http com a URL do webhook fornecida.
* **Tempo limite:** se o serviço demorar mais de cinco segundos para enviar uma resposta a um lote de notificações.
* **Códigos de erro:** se o serviço responder com qualquer código de status HTTP (4xx ou 5xx).

As notificações serão repetidas até 10 vezes. Essas tentativas serão divulgadas nas próximas 24 horas, com atrasos variáveis entre solicitações. Será aplicada uma randomização às notificações individuais para evitar que um grande número de falhas simultâneas sejam repetidas exatamente mesmo horário.

## Limites

As solicitações `POST` que o HubSpot envia ao seu serviço por meio das assinaturas de webhook <u>não</u> serão contabilizadas nos [limites de taxa de API do aplicativo](/docs/apps/legacy-apps/api-usage/usage-details).

Você pode criar no máximo de 1.000 assinaturas por aplicativo. Se tentar criar mais de 1.000 assinaturas, você receberá uma solicitação 400 inválida com a seguinte mensagem:

```json theme={null}
//
{
  "status": "error",
  "message": "Couldn't create another subscription. You've reached the maximum number allowed per application (1000).",
  "correlationId": "2c9beb86-387b-4ff6-96f7-dbb486c00a95",
  "requestId": "919c4c84f66769e53b2c5713d192fca7"
}
```
