GuiaPlano Ultimate

Configure webhooks

Envie atualizações em tempo real sobre agendamentos, clientes, faturas e mais para seu próprio sistema e verifique se cada requisição vem do Softalon.

5 min de leituraFunção: Super Administrador ou superiorIntegrações e desenvolvedoresAtualizado em 25 de outubro de 2026
Abrir no app

Um webhook envia uma requisição HTTP para uma URL que você escolhe sempre que algo acontece no seu salão, por exemplo quando um agendamento é criado ou um cliente é atualizado. Use-o para manter outro sistema sincronizado com o Softalon.

Antes de começar

  • Seu salão está no plano Ultimate.
  • Você tem a função Super Administrador ou Proprietário.
  • Você tem uma URL que aceita requisições POST com corpo JSON, começando com https:// ou http://.

Crie um webhook

  1. 1

    Etapa 1 de 4

    Abra Webhooks

    Acesse Configurações › Desenvolvedores › Webhooks e clique em Criar Webhook.

  2. 2

    Etapa 2 de 4

    Informe o destino

    Preencha a URL de Destino, por exemplo https://example.com/webhook, e, se quiser, uma Descrição para reconhecê-lo depois.

  3. 3

    Etapa 3 de 4

    Escolha os tópicos

    Em Tópicos, selecione os eventos que você quer. A aba Todos os Tópicos lista todos os tópicos disponíveis, e Tópicos Selecionados mostra o que você escolheu. Sua URL recebe apenas os tópicos que você selecionar.

  4. 4

    Etapa 4 de 4

    Salve

    Clique em Criar Webhook.

    Você verá:

    Webhook Criado, e o webhook aparece na tabela com a chave de status ativada.

Tópicos

Os tópicos seguem o formato resource.action. Estes estão disponíveis:

ÁreaTópicos
Membros da equipesalons/member.created, .updated, .deleted
Locaislocations/location.created, .updated, .deleted
Serviçosservices/service.created, .updated, .deleted
Clientesclients/client.created, .updated, .deleted, .birthday, .lapsed
Códigos de login dos clientesclients/session_request.code_generated
Agendamentosbooking/appointment.created, .updated, .deleted, .upcoming, .started
Conversasconversations/conversation.created, .updated, .deleted
Faturasfinances/invoice.created, .updated, .deleted

Para saber o que cada gatilho significa, consulte Como funcionam os gatilhos de automação.

O que o Softalon envia

Cada evento é uma requisição POST com corpo JSON:

{
  "topic": "booking/appointment.created",
  "event": {
    "id": "...",
    "type": "booking/appointment.created",
    "resource": "booking/appointment",
    "resourceId": "...",
    "salonId": "...",
    "data": {
      "object": { "...": "the full object" },
      "previousAttributes": { "...": "changed fields, for updates" }
    }
  }
}

A requisição tem estes cabeçalhos:

CabeçalhoValor
X-Webhook-Signaturesha256= seguido da assinatura
X-Webhook-TopicO tópico, por exemplo booking/appointment.created
X-Webhook-Endpoint-IdO ID do seu webhook
X-Webhook-Delivery-IdO ID desta entrega. Ele continua o mesmo quando uma entrega é repetida.
User-AgentSoftalon API

Verifique a assinatura

Todo webhook tem um segredo. O Softalon assina o corpo da requisição com ele usando HMAC-SHA256 e envia o resultado em hexadecimal em X-Webhook-Signature. Calcule o mesmo valor a partir do corpo bruto da requisição e compare. Se não coincidirem, ignore a requisição.

const crypto = require("crypto");

function isValid(rawBody, header, secret) {
  const expected = "sha256=" + crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(header));
}

Para gerenciar o segredo, use os botões da coluna Segredo:

  • O botão de olho mostra o segredo completo, e o botão de copiar o copia.
  • O botão de gerar novamente cria um novo segredo na hora. O segredo antigo deixa de funcionar imediatamente, então atualize seu sistema ao mesmo tempo.

Entregas e novas tentativas

  • Sua URL precisa responder com um código de status 2xx em até 10 segundos. Qualquer outra coisa conta como falha.
  • Uma entrega que falhou é repetida, até 5 tentativas no total. A espera entre as tentativas aumenta: cerca de 30 segundos, 1 minuto, 2 minutos e 4 minutos.
  • Use X-Webhook-Delivery-Id para ignorar uma entrega que você já processou.

Cada entrega tem um destes status:

StatusO que significa
pendingAguardando envio.
deliveredSua URL respondeu com um status 2xx.
failedA última tentativa falhou. Se ainda restarem tentativas, ela é repetida.
exhaustedAs 5 tentativas falharam. Ela não será repetida.

O app ainda não mostra um registro de entregas. Você pode ler as entregas pela API em GET /v1/salons/:salonId/webhook-endpoints/:webhookEndpointId/deliveries. Consulte Crie um app de API.

Se as últimas 5 entregas de um webhook estiverem todas esgotadas (exhausted), o Softalon desativa o webhook. Corrija seu endpoint e ative a chave de status novamente. Os eventos que acontecem enquanto um webhook está desativado não são enviados depois.

Edite, pause ou exclua um webhook

  • Pausar: desative a chave na coluna Status.
  • Editar: abra o menu da linha e escolha Atualizar.
  • Excluir: abra o menu da linha e escolha Excluir.

Os webhooks só enviam enquanto seu salão tem uma assinatura ativa, em teste ou em atraso, em um plano que inclui webhooks.

Perguntas frequentes

Cada entrega é enviada separadamente e repetida no próprio cronograma, então não conte com a ordem em que as requisições chegam. Use os registros de data e hora do próprio objeto.