Webhook

Última atualização: 22 de junho de 2026

O Webhook é uma configuração que envia uma requisição HTTP para uma URL externa previamente definida quando algo acontece no Space (por exemplo, criação ou publicação de Content). É usado para integração com sistemas externos ou automação. Por exemplo, você pode configurá-lo para chamar um servidor de notificações interno sempre que um Content de produto for publicado, ou para chamar uma API externa.

O Webhook não se limita a enviar a requisição: ele também pode receber a resposta e gravá-la de volta em um Content ou Media por meio do WriteBack. É assim que se constrói um fluxo de trabalho assíncrono que absorve o resultado de uma API externa como dados dentro do Space. O Webhook é um recurso subordinado ao Space na CMA, e seu caminho tem como base /spaces/{spaceId}/webhooks.

Estrutura do recurso

A seguir está a resposta da consulta individual do Webhook "Notificação de alteração de produto". Junto com sys (atributos de sistema), ele tem campos de configuração como destino de envio, eventos assinados e condições de disparo.

{
  "sys": {
    "id": "3trmXRM3RqbgSnifyg7PWhk01Examp",
    "type": "Webhook",
    "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
    "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "createdAt": "2026-06-18T11:30:00.000Z",
    "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "updatedAt": "2026-06-18T11:30:00.000Z",
    "version": 1
  },
  "name": "Notificação de alteração de produto",
  "filters": [
    { "doc": "sys.contentType.sys.id", "op": "EQ", "value": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA" }
  ],
  "headers": [
    { "key": "X-Source", "value": "weegloo", "secret": false }
  ],
  "httpBasicUsername": "dailywear",
  "topics": ["Content.Create", "Content.Publish"],
  "transformation": { "method": "POST", "contentType": "application/json", "includeBody": true },
  "url": "https://api.dailywear.example/webhooks/products",
  "activate": true
}

Principais chaves:

  • sys.id: identificador único do Webhook. Entra no {webhookId} dos caminhos de consulta individual, modificação e exclusão.
  • url: URL de destino externa a ser chamada quando o evento ocorrer.
  • topics: array que define quais eventos serão assinados. O formato é explicado abaixo em topics.
  • filters: condições que efetivamente disparam, dentre os eventos assinados. É explicado abaixo em filters.
  • transformation: configuração que altera o formato da requisição de saída (método, corpo etc.). É explicado abaixo em transformation.
  • writeBacks: array de operações que recebem a resposta externa e gravam de volta em Content ou Media. Não está presente no exemplo acima. É explicado abaixo em writeBacks.

Atributos de sistema (sys)

Todo Webhook armazena os atributos de sistema comuns no objeto sys. space, createdBy e updatedBy entram no formato Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).

AtributoTipoDescrição
idstringIdentificador único do recurso.
typestringTipo do recurso. Para Webhook é sempre "Webhook".
spaceRefer<Space>O Space ao qual este Webhook pertence.
createdByRefer<User>Usuário que criou.
createdAtstring (date-time)Momento da criação.
updatedByRefer<User>Último usuário que modificou.
updatedAtstring (date-time)Momento da última modificação.
versioninteger (≥1)Versão do recurso. Aumenta em 1 a cada modificação.

O Webhook é um recurso de configuração, portanto não tem o conceito de publicação. Diferentemente de Content ou Content Type, ele não possui atributos de estado de publicação como publish, archive ou status, apenas o version para rastreamento de alterações. Ligar e desligar não é controlado por publicação, mas pelo campo de corpo activate.

Atributos do corpo

O corpo do Webhook (os valores de configuração enviados na criação e modificação e retornados na resposta) é composto pelos seguintes campos.

CampoTipoObrigatórioDescrição
namestring (1~64)Nome do Webhook.
urlstring (url)URL de destino externa a ser chamada quando o evento ocorrer.
activatebooleanSe está ativado. Se false, a requisição não é enviada mesmo quando o evento ocorre.
topicsstring[]Array de eventos a assinar. Consulte topics abaixo.
filtersFilter[]Array de condições de disparo. Se vazio, todos os eventos assinados disparam. Consulte filters abaixo.
headersWebhookHeader[] (0~30)Array de cabeçalhos HTTP a enviar na requisição.
httpBasicUsernamestring (1~32)Nome de usuário da autenticação HTTP Basic.
httpBasicPasswordstring (1~32)Senha da autenticação HTTP Basic. É somente de escrita. Não aparece na resposta.
transformationTransformationPersonalização da requisição de saída. Consulte transformation abaixo.
writeBacksWriteBack[]Array de operações de escrita a executar ao receber a resposta. Consulte writeBacks abaixo.

Cada item de headers é composto por key (obrigatório), value (obrigatório) e secret (opcional, boolean). Cabeçalhos com secret igual a true têm o valor ocultado na resposta. Coloque valores que não devem ser expostos, como chaves de API, em cabeçalhos com secret: true.

topics

Cada item de topics tem o formato {recurso}.{ação}. Por exemplo: Content.Create, Content.Publish, Media.Create.

A ação é uma das seguintes ou *, que significa todas as ações do recurso (por exemplo, Content.*).

AçãoSignificado
AllTodas as ações.
CreateCriação.
ReadConsulta.
EditEdição.
SaveSalvar (modificação). O evento de modificação é Save. Não é Update.
DeleteExclusão.
PublishPublicação.
UnpublishCancelamento de publicação.
ArchiveArquivamento.
UnarchiveDesarquivamento.

filters

filters é um array que restringe, dentre os topics assinados, as condições que efetivamente disparam o Webhook. Cada filtro tem o seguinte formato.

{ "doc": "sys.contentType.sys.id", "op": "EQ", "value": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA" }
  • doc: caminho do campo a comparar. É um dentre sys.id, sys.contentType.sys.id, sys.createdBy.sys.id e sys.updatedBy.sys.id.
  • op: operador de comparação. É um dentre EQ, NE, IN, NOT_IN, REGEX e NOT_REGEX.
  • value: valor de comparação. Para EQ, NE, REGEX e NOT_REGEX informe uma string; para IN e NOT_IN informe um array de strings.

Quando há vários filtros, todos precisam ser satisfeitos para disparar (AND). Se filters estiver vazio, todos os eventos dos topics assinados disparam.

transformation

transformation altera o formato da requisição HTTP de saída. Se não for especificado, todo o payload do recurso sai como está, com o POST padrão.

ChaveTipoDescrição
methodstringMétodo HTTP. Um dentre GET, POST, PUT, DELETE e PATCH.
contentTypestringContent-Type do corpo da requisição.
bodyobjectObjeto que compõe o corpo a enviar usando templates de JSON Pointer.
includeBodybooleanSe o corpo do recurso de disparo deve ser enviado junto.

writeBacks

writeBacks é um array ordenado de operações que pegam a resposta externa recebida pelo Webhook e gravam de volta em Content ou Media. Elas são executadas em ordem somente quando a API externa responde com 2xx. Cada item tem um único $content (WriteBackContent) ou $media (WriteBackMedia).

Chaves de WriteBackContent ($content):

ChaveTipoDescrição
actionstringUm dentre Create, Update, Delete, Publish, Unpublish, Archive e Unarchive.
contentTypeRefer<ContentType>O Content Type a criar no Create. Basta informar o sys.id.
targetstringTemplate de JSON Pointer que aponta para o sys.id do Content alvo em Update, Delete etc. (por exemplo, { /response/id }). Precisa estar envolvido por { }; se não estiver, é tratado como literal. Se omitido, o alvo passa a ser o recurso que disparou o Webhook.
localestringLocale em que o valor será gravado em Create e Update. Código de locale ou template de pointer. Se omitido, o locale padrão do Space.
fieldsobjectMapa de chave de campo alvo → expressão de origem em Create e Update. A chave é o apiName do campo do Content alvo.
publishbooleanSe deve publicar após Create ou Update. Valor padrão true.
unpublishbooleanSe deve cancelar a publicação antes da exclusão em Delete. Valor padrão true.

Chaves de WriteBackMedia ($media):

ChaveTipoDescrição
actionstringUm dentre Create, Delete, Publish, Unpublish, Archive e Unarchive.
sourcestringTemplate de pointer do valor a importar como Media em Create (por exemplo, { /response/data/0/url }). Precisa estar envolvido por { }.
encodingstringModo de interpretação de source em Create. Um dentre Url, Base64 e Binary.
localestringLocale em que o arquivo, o título e a descrição serão gravados em Create. Se omitido, o locale padrão do Space.
titlestringTítulo do Media em Create (expressão de origem ou literal).
descriptionstringDescrição do Media em Create.
targetstringTemplate de pointer que aponta para o sys.id do Media alvo em Delete etc. Se omitido, o alvo é o recurso de disparo.
publishbooleanSe deve publicar após a conclusão do processamento em Create. Valor padrão true.
unpublishbooleanSe deve cancelar a publicação antes da exclusão em Delete. Valor padrão true.

A seguir está um exemplo de writeBacks que extrai valores do JSON de resposta externa e cria um Content.

"writeBacks": [
  {
    "$content": {
      "action": "Create",
      "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA" } },
      "locale": "ko-KR",
      "fields": {
        "productName": "{ /response/title }",
        "price": "{ /response/price }"
      },
      "publish": true,
      "unpublish": true
    }
  }
]

{ /response/... } é um template de JSON Pointer que extrai valores do JSON de resposta recebido pelo Webhook. As chaves de fields (productName, price) são o apiName dos campos do Content alvo. O exemplo acima preenche o title da resposta no productName do Content e o price em price, cria o Content e depois o publica.

API

A URL base de todos os endpoints abaixo é https://cma.weegloo.com/v1, e é necessário um token Bearer no cabeçalho Authorization que autentique na CMA. A modificação (PUT) e a modificação parcial (PATCH) devem enviar também o cabeçalho X-Weegloo-Version (o sys.version do recurso atual) para o controle de concorrência otimista.

  • Content: dados de corpo que disparam o Webhook ou que ele grava por WriteBack.
  • Media: recurso de arquivo que pode ser criado por WriteBack.
  • SpaceRole: para restringir com :self o acesso ao Content de trabalho do Webhook.