Skip to content

Webhooks

1. Introdução

1.1 Nome do Serviço

O serviço, denominado business-webhook, tem como propósito principal notificar os clientes sobre eventos específicos relacionados à plataforma. Utilizando webhooks, podemos enviar notificações através de chamadas POST para URLs fornecidas pelos clientes.

1.2 Eventos Suportados

Atualmente, o webhook suporta dois eventos principais:

  • registered-requests: Acionado quando um pedido é registrado na plataforma.
    • Este evento é notificado em casos de sucesso e erro.
  • processed-requests: Disparado quando um pedido é processado.
    • Este evento é notificado apenas em casos de sucesso no processamento do pedido.

1.3 Exemplos de Uso

  • Assim que o pedido entra na plataforma, é gerado o evento registered-requests. O cliente passa a receber a notificação incluindo id do pedido na Minu e, se aplicável, rewardValue. Nos casos onde ocorre erro, errorCode e message podem ser fornecidos.
  • Após a trajetória do pedido no sistema, finalizando com seu processamento, o evento processed-requests é acionado. Os dados a serem notificados incluem requestId e informações da request como: deliveredPrizes, canceledPrizes, createdDate, concludedDate e, se aplicável, rewardValue.

1.4 Autenticação Suportada

O business-webhook atualmente oferece suporte a diversos métodos de autenticação, discutidos em detalhes na seção específica.


2. Formas de receber as notificações de pedidos

Os clientes podem configurar URLs de callback com ou sem autenticação para cada evento.

Exemplo de configurações:

  • Não receber notificações para registered-requests do plano-bronze.
  • Receber notificações de processed-requests do plano-bronze em uma URL específica.
  • Receber notificações de ambos os eventos do plano-prata na mesma URL.
  • Receber notificações em URLs separadas para ambos eventos do plano-ouro.
  • Ou inclusive receber todas as notificações de todas as experiências na mesma URL.

2.1 Inscrição por pedido

Enviar a URL para notificação diretamente no body da requisição dos pedidos:

json
{
  "experience": "nome-da-campanha",
  "data": {
    // dados do pedido
  },
  "event": "evento-da-campanha",
  "registeredCallbackUrl": "URL da API de destino da notificação quando o pedido for registrado (registered-request) pela Minu",
  "processedCallbackUrl": "URL da API de destino da notificação quando o pedido for processado (processed-request) com sucesso pela Minu"
}

2.2 Inscrição por cliente

Quando as URLs permanecem as mesmas para todos os pedidos, habilite o envio de notificações uma única vez, informando eventos, URLs e dados de autenticação.

2.3 Inscrição por experiência/campanha

Permite definir URLs diferentes para cada campanha. Solicite o ajuste para a Minu informando eventos, URLs, experiências e dados de autenticação.


3. Informações de Contrato

3.1 Evento registered-requests

Exemplo:

json
{
  "id": "61df44be9a9c9310d70a9831",
  "rewardValue": "100",
  "errorCode": "9999",
  "message": "teste"
}

Campos obrigatórios:

PropriedadeTipoDescrição
id*stringIdentificador do pedido na plataforma Minu.
rewardValueintegerValor da recompensa a ser entregue. Retornado apenas quando há recompensa.
errorCodestringCódigo de erro interno da plataforma Minu. Retornado apenas em erro.
messagestringMensagem de erro. Retorna apenas quando há mensagem a ser exibida.

3.2 Evento processed-requests

Exemplo:

json
{
  "id": "61df44be9a9c9310d70a9831",
  "rewardValue": 10000000,
  "concluded": "0000-00-00T00:00:00.000Z",
  "delivered": [
    {
      "value": 10000000,
      "quantity": 10000000,
      "name": "nome-da-experiência",
      "title": "Título da Experiência",
      "deliveryDetail": {
        "timestamp": "0000-00-00T00:00:00.000Z",
        "info": {
          "name": "delivered",
          "bucket": "nomeDoPremio",
          "coupon": "f1317XXXXX",
          "paymentId": "65972b0e2cdd96e4c0XXXXXX",
          "requestId": "65972b0e2cdd96e4c0XXXXXX",
          "triggerId": "65972b0e2cdd96e4c0XXXXXX",
          "rewardId": "65972b0e2cdd96e4c0XXXXXX",
          "description": "Descrição da entrega"
        },
        "forwarded": false
      }
    }
  ],
  "canceled": [
    {
      "value": 10000000,
      "quantity": 10000000,
      "priceless": false,
      "name": "nome-da-experiência",
      "title": "Título da Experiência",
      "deliveryDetail": {
        "timestamp": "0000-00-00T00:00:00.000Z",
        "info": {
          "name": "canceled",
          "reason": "Motivo do cancelamento",
          "reasonCode": 5,
          "description": "Descrição do cancelamento.",
          "paymentId": "65983b14c183c71c80e77ed5"
        },
        "forwarded": false
      }
    }
  ]
}

Campos obrigatórios:

PropriedadeTipoDescrição
id*stringIdentificador do pedido na plataforma Minu.
rewardValueintegerValor da recompensa a ser entregue. Retornado apenas quando há recompensa.
concluded*stringData e hora da conclusão do processamento do pedido.
delivered*arrayArray de objetos com informações dos prêmios entregues.
canceled*arrayArray de objetos com informações dos prêmios cancelados.

4. Rotina de Retentativa

O business-webhook possui uma rotina de retentativa para garantir o envio das notificações. Se ocorrer um erro em uma chamada para a URL do cliente, os dados da notificação são armazenados para até 5 tentativas de envio, com intervalos de 3 horas entre cada uma.


5. Tipos de Autenticação Suportados

O business-webhook oferece suporte aos seguintes tipos de autenticação:

  • Bearer Token: Inclusão de um token de acesso no cabeçalho Authorization.
  • Basic Token: Codificação do nome de usuário e senha em base64, incluída no cabeçalho Authorization.
  • OAuth2.0: Framework de autorização para acesso a recursos em nome de um usuário.
  • mTLS (Mutual TLS): Autenticação mútua usando certificados digitais durante o handshake TLS/SSL.

É possível utilizar mTLS em conjunto com qualquer um dos outros métodos para reforçar a segurança das notificações. Todos os métodos estão disponíveis inclusive nas rotinas de retentativas.

API

Propriedades disponíveis na configuração do Webhooks

PropriedadeTipoDescrição
_idstringIdentificador único da subscription.
accountIdstringIdentificador da conta associada à subscription.
eventstringTipo de evento que será notificado via callback.
descriptionstringDescrição breve da subscription.
activebooleanIndica se a subscription está ativa.
experiencesarrayLista de experiências consideradas para envio da notificação.
callbackobjectInformações do callback associado à subscription.
urlstringURL do callback.
authorizationobjectInformações de autorização do callback.
↳ ↳ BasicstringTipo de autorização Basic
↳ ↳ BearerstringTipo de autorização Bearer
↳ ↳ oauth2objectInformações de autenticação OAuth2 do callback.
↳ ↳ ↳ client_idstringID do cliente OAuth2.
↳ ↳ ↳ client_secretstringSegredo do cliente OAuth2.
↳ ↳ ↳ urlstringURL do endpoint OAuth2.
↳ ↳ ↳ audiencestringPúblico-alvo do token OAuth2.
↳ ↳ mtlsobjectInformações de autorização mTLS do callback.
↳ ↳ ↳ twoFactorobjectInformações de autenticação de dois fatores do callback.
↳ ↳ ↳ ↳ oauth2objectInformações de autenticação OAuth2 do callback.
↳ ↳ ↳ ↳ ↳ client_idstringID do cliente OAuth2.
↳ ↳ ↳ ↳ ↳ client_secretstringSegredo do cliente OAuth2.
↳ ↳ ↳ ↳ ↳ urlstringURL do endpoint OAuth2.
↳ ↳ ↳ ↳ ↳ audiencestringPúblico-alvo do token OAuth2.
customHeadersobjectCabeçalhos customizados do callback.

Listar Subscriptions

Método HTTP: GET

URL: /subscriptions

Exemplo de Requisição

http
curl --location --request GET 'https://api.minu.biz/v2/subscriptions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>'

Exemplo de Resposta

Se a requisição for bem sucedida, a API retornará as seguintes propriedades no formato JSON.

json

[
  {
    "_id": "691770a90becaf552c201261",
    "accountId": "56dd875f00d3db01005f872a",
    "event": "registered-request",
    "callback": {
      "url": "https://test/integracao/callback/minu"
    },
    "description": "Evento registered-request para o cliente Homologacao Minutrade",
    "experiences": [
      "empresa-teste-callback"
    ],
    "active": true
  },
  {
    "_id": "691770a90becaf552c201423",
    "callback": {
      "url": "https://test/integracao/callback/minu",
      "authorization": {
        "mtls": {
          "twoFactor": {
            "oauth2": {
              "client_id": "client-id",
              "client_secret": "client-secret",
              "url": "https://my-callback-url.com/oauth/token"
            }
          }
        }
      }
    },
    "accountId": "56dd875f00d3db01005f872a",
    "event": "processed-request",
    "description": "Evento processed-request para o cliente Homologacao Minutrade",
    "experiences": [],
    "active": false
  }
]

Criar Subscriptions

Método HTTP: POST

URL: /subscriptions

Exemplo de Requisição

http
curl --location --request POST 'https://api.minu.biz/v2/subscriptions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{
    "callback": {
        "url": "https://my-callback-url.com/webhook",
        "authorization": {
            "Basic": "bearer",
            "Bearer": "eyJraWQiOi",
            "oauth2": {
              "client_id": "client-id",
              "client_secret": "client-secret",
              "url": "https://my-callback-url.com/oauth/token"
            }
        }
    },
    "event": "processed-request",
    "description": "Webhook para pedidos processados",
    "experiences": ["exp-9299"]
}'

Exemplo de Resposta

Se a requisição for bem sucedida, a API retornará as seguintes propriedades no formato JSON.

json
{
  "event": "processed-request",
  "experiences": [
    "exp-9299"
  ],
  "accountId": "56dd875f00d3db01005f872a",
  "callback": {
    "url": "https://my-callback-url.com/webhook",
    "authorization": {
      "Basic": "bearer",
      "Bearer": "eyJraWQiOi",
      "oauth2": {
        "client_id": "client-id",
        "client_secret": "client-secret",
        "url": "https://my-callback-url.com/oauth/token"
      }
    }
  },
  "description": "Webhook para pedidos processados",
  "_id": "69b807b62e193031e65bec03"
}

Atualizar Subscriptions

Método HTTP: PUT

URL: /subscriptions/{subscriptionId}

Exemplo de Requisição

http
curl --location --request PUT 'https://api.minu.biz/v2/subscriptions/69b807b62e193031e65bec03' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{bearerToken}}' \
--header 'Cookie: XSRF-TOKEN=4812a8f6-8c69-434a-b76b-1b1a7754e557' \
--data '{
    "callback": {
        "url": "https://alterada.com/webhook",
        "authorization": {
            "Basic": "bearer alterado2"
        }
    },
    "description": "ALTERANDO DESCRIPTION 2",
    "experiences": ["NOVA EXPERIENCE", "NOVA EXPERIENCE 2"]
}'

Exemplo de Resposta

Se a requisição for bem sucedida, a API retornará as seguintes propriedades no formato JSON.

json
{
  "experiences": [
    "NOVA EXPERIENCE",
    "NOVA EXPERIENCE 2"
  ],
  "callback": {
    "url": "https://alterada.com/webhook",
    "authorization": {
      "Basic": "bearer alterado2"
    }
  },
  "description": "ALTERANDO DESCRIPTION 2",
  "_id": "69b807b62e193031e65bec03"
}