Kadens logoKadens logoKadens
  • Descobrir
  • Preços
EntrarComeçar
Kadens logoKadens logoKadens

Ensino

  1. Primeiros passos
  2. Academia
  3. Certificados
  4. Aprendizagem
  5. Cursos

Dinheiro

  1. Assinaturas
  2. Finanças
  3. Ingressos

Agenda

  1. Eventos
  2. Trabalho

Pessoas

  1. Comunidade
  2. Assinantes
  3. Formulários
  4. Inscrições
  5. Comunidades

Plataforma

  1. Meu site
  2. Descobrir
  3. Conta

Desenvolvedores

  1. Visão geral
  2. Chaves de API e permissões
  3. Widgets para o site
  4. Webhooks
  5. Assistentes de IA (MCP)
  6. API REST
Não encontrou o que procura?Pesquise de novo··Fale conosco
Kadens logoKadens logoKadens

Seu sucesso é nossa missão. O Kadens ajuda profissionais do movimento a serem descobertos, operarem com facilidade e crescerem com confiança. Tudo em um só lugar.

Produto

  • Descobrir
  • Cursos
  • Eventos
  • Comunidades
  • Mentoria

Para empresas

  • Kadens para ensinar
  • Kadens para eventos
  • Kadens para formulários
  • Kadens para certificados
  • Crie seu site
  • Preços
  • Agende uma demo ao vivo

Recursos

  • Centro de ajuda
  • Novidades
  • Desenvolvedores
  • Suporte

Empresa

  • Contato
  • Instagram
  • Política de privacidade
  • Termos de serviço
  • Política de cookies
Centro de ajudaContato
Navegar pela documentação · Webhooks

Ensino

  1. Primeiros passos
  2. Academia
  3. Certificados
  4. Aprendizagem
  5. Cursos

Dinheiro

  1. Assinaturas
  2. Finanças
  3. Ingressos

Agenda

  1. Eventos
  2. Trabalho

Pessoas

  1. Comunidade
  2. Assinantes
  3. Formulários
  4. Inscrições
  5. Comunidades

Plataforma

  1. Meu site
  2. Descobrir
  3. Conta

Desenvolvedores

  1. Visão geral
  2. Chaves de API e permissões
  3. Widgets para o site
  4. Webhooks
  5. Assistentes de IA (MCP)
  6. API REST
  1. Centro de ajuda
  2. Desenvolvedores
  3. Webhooks para programadores

Webhooks para programadores

A Kadens envia um pedido HTTPS para o seu endpoint sempre que algo acontece na sua conta. Cada pedido é assinado, repetido até ter êxito e listado no seu registo de entregas.

·9 min
Nesta página
  1. O que é um webhook
  2. Início rápido
  3. Teste sem um servidor
  4. Corpo do pedido
  5. Verificar assinaturas
  6. Trate eventos com segurança
  7. Repetições e limites
  8. Dados pessoais
  9. Gerenciar endpoints
  10. Catálogo de eventos
  11. Solução de problemas
  12. E agora?

O que é um webhook

Um webhook é uma mensagem que a Kadens envia para um endereço web que você escolhe sempre que algo acontece na sua conta: um pedido é pago, um bilhete é emitido, alguém faz check-in. O seu sistema recebe a mensagem e trata do resto, por exemplo adicionando o comprador à sua lista de e-mails ou atualizando uma planilha.

O que você precisa

  • Um endereço HTTPS público que aceite requisições POST. Ainda não tem um servidor? O receptor de teste cria um para você em um clique.
  • Acesso a Integrações no seu painel Kadens.

Usa Zapier, Make, n8n ou seu próprio código? Eles podem criar e remover endpoints para você com uma chave de API, através da API REST.

Leia sobre REST hooks

Início rápido

  1. 1

    Adicione um endpoint

    Abra Webhooks no seu painel, escolha Adicionar endpoint, cole seu endereço HTTPS e selecione os eventos que ele deve receber. Copie a chave de assinatura: ela é mostrada apenas uma vez.
  2. 2

    Envie um evento de teste

    Na página do endpoint, escolha Enviar evento de teste. A Kadens envia um evento de exemplo, assinado como um real, com livemode definido como false e todos os ids marcados como ids de teste.
  3. 3

    Verifique a assinatura

    Antes de confiar no corpo da requisição, verifique a assinatura no seu servidor com a chave de assinatura. Copie o código para a sua linguagem em Verificar assinaturas.
  4. 4

    Responda com um status 2xx

    Responda com qualquer status 2xx assim que o evento for armazenado. Qualquer outra resposta, ou nenhuma, conta como falha e a entrega é repetida.
Configure agora
Entre e abra Webhooks para adicionar seu primeiro endpoint.
Abrir Webhooks

Teste sem um servidor

A Kadens pode hospedar um receptor de teste para você. Escolha Testar com um receptor de teste na página de Webhooks: a Kadens cria um endereço de teste privado, conecta um endpoint que recebe todos os eventos e envia um evento de teste. Cada requisição aparece na página desse endpoint em segundos, com seus cabeçalhos, seu corpo e se a assinatura correspondeu.

O receptor de teste mantém as últimas 50 requisições por 7 dias, e os primeiros 64 KB de cada corpo.

Veja um webhook assinado chegar
Entre, abra Webhooks e escolha Testar com um receptor de teste.
Abrir Webhooks

Corpo do pedido

Todos os eventos chegam no mesmo envelope JSON, versão 2026-10-01. O evento propriamente dito está em data.

CampoTipoDescrição
idstringId único do evento, começando com evt_. O mesmo valor chega no cabeçalho webhook-id e permanece igual em toda repetição, reenvio e replay.
typestringO tipo do evento, por exemplo order.paid. O catálogo de eventos lista todos.
versionstringA versão do contrato que o payload segue. Hoje é 2026-10-01.
occurred_atstringQuando aconteceu, como data e hora ISO 8601.
account{ id, name }A conta Kadens à qual o evento pertence: seu id e seu nome.
subject.typestringO tipo de registro sobre o qual o evento trata, por exemplo order, booking ou subscription.
subject.idstringO id desse registro. Todo evento sobre o mesmo registro carrega o mesmo id.
subject.sequenceinteger | nullUm número que cresce a cada mudança no mesmo registro, para você saber qual evento é mais recente. null quando o registro não tem ordem de mudanças.
correlation_idstring | nullLiga eventos que vêm da mesma ação, quando existe uma. Caso contrário, null.
livemodebooleantrue para atividade real. false para eventos de teste, cujos ids também são marcados como ids de teste.
dataobjectO próprio evento. Seus campos dependem do tipo: veja um exemplo no catálogo de eventos.
Um corpo de requisição completo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{
  "id": "evt_2f8a1c7e9b3d4e5fa6c7d8e9f0a1b2c3",
  "type": "order.paid",
  "version": "2026-10-01",
  "occurred_at": "2026-10-01T10:00:00Z",
  "account": {
    "id": "ent_1a0f",
    "name": "Barcelona Salsa Studio"
  },
  "subject": {
    "type": "order",
    "id": "ord_91ac04",
    "sequence": 2
  },
  "correlation_id": null,
  "livemode": true,
  "data": {
    "order": {
      "id": "ord_91ac04",
      "status": "paid",
      "created_at": "2026-10-01T09:58:02Z",
      "paid_at": "2026-10-01T10:00:00Z",
      "event": {
        "id": "evt_7f3c2a",
        "name": "Salsa Congress Barcelona 2026"
      },
      "totals": {
        "gross": {
          "amount": 12000,
          "currency": "EUR"
        },
        "fees": {
          "amount": 600,
          "currency": "EUR"
        },
        "net": {
          "amount": 11400,
          "currency": "EUR"
        },
        "tax": {
          "amount": 2083,
          "currency": "EUR"
        }
      },
      "buyer": {
        "entity_id": "ent_5b21",
        "name": "Lucia Martin",
        "email": "lucia@example.com"
      },
      "lines": [
        {
          "ticket_type_id": "tt_full_pass",
          "name": "Full pass",
          "quantity": 1,
          "unit_price": {
            "amount": 12000,
            "currency": "EUR"
          }
        }
      ]
    }
  }
}

Verificar assinaturas

Os pedidos seguem a especificação Standard Webhooks, por isso as bibliotecas oficiais verificam-nos sem código específico da Kadens. Verifique sempre sobre o corpo em bruto.

CabeçalhoDescrição
webhook-idÚnico por evento. Use-o para ignorar um pedido que já processou.
webhook-timestampSegundos Unix em que o pedido foi assinado. Rejeite pedidos com mais de 300 segundos.
webhook-signatureUma ou mais assinaturas v1 separadas por espaços. Durante 24 horas depois de trocar um segredo, assinam tanto o antigo como o novo.
Mantenha a chave de assinatura privada
Cada endpoint tem sua própria chave de assinatura, começando com whsec_. Guarde-a em uma variável de ambiente, nunca no seu código nem em um repositório.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// npm install standardwebhooks
import { Webhook } from 'standardwebhooks';

const wh = new Webhook(process.env.KADENS_WEBHOOK_SECRET);

// Use the RAW request body, exactly as received (not re-serialized JSON).
app.post('/webhooks/kadens', express.raw({ type: 'application/json' }), (req, res) => {
    try {
        const event = wh.verify(req.body.toString('utf8'), req.headers);
        // event.type, event.data
        res.sendStatus(200);
    } catch {
        res.sendStatus(400);
    }
});

Trate eventos com segurança

O mesmo evento pode chegar duas vezes, atrasado ou fora de ordem. Três hábitos deixam seu receptor seguro.

Processe cada evento uma vez

Guarde o webhook-id de cada evento que você tratar. Se o mesmo chegar novamente após uma repetição, um reenvio ou um replay, responda 2xx e ignore-o.

Coloque os eventos em ordem

Uma repetição pode fazer um evento mais antigo chegar depois de um mais novo. Quando subject.sequence está definido, guarde o maior valor que você tratou para cada subject.id e ignore qualquer valor menor.

Responda primeiro, trabalhe depois

Responda 2xx assim que o evento estiver armazenado com segurança e só então faça o trabalho lento em segundo plano. Uma resposta que demore mais de 10 segundos conta como falha e é repetida.

Repetições e limites

Responda com qualquer estado 2xx para confirmar uma entrega. Qualquer outro estado, ou a falta de resposta, conta como falha.

Uma entrega falhada é repetida mais 10 vezes com intervalos crescentes, ao longo de cerca de 3 dias. Também pode reenviá-la ou repetir um intervalo de tempo a partir do seu painel.

Se o seu endpoint responder 410 Gone, ele é desativado imediatamente e não recebe mais nada até você ativá-lo de novo.

Um endpoint que falha durante 5 dias sem um único êxito é desativado, e é notificado.

Os eventos e as entregas são guardados durante 30 dias.

Cada conta pode ter até 10 endpoints próprios. Os endpoints criados pelo Zapier, Make ou n8n não contam para esse limite e têm o seu próprio máximo de 50.

Quando cada repetição acontece

Nova tentativaQuando
Repetição 130 segundos após a tentativa anterior
Repetição 22 minutos após a tentativa anterior
Repetição 310 minutos após a tentativa anterior
Repetição 430 minutos após a tentativa anterior
Repetição 51 hora após a tentativa anterior
Repetição 63 horas após a tentativa anterior
Repetição 76 horas após a tentativa anterior
Repetição 812 horas após a tentativa anterior
Repetição 924 horas após a tentativa anterior
Repetição 1024 horas após a tentativa anterior

Dados pessoais

Nomes e endereços de e-mail de compradores, portadores de bilhete e participantes são dados pessoais. Por padrão a Kadens remove esses campos dos dados antes de enviar, então o endpoint recebe o evento sem eles.

Para recebê-los, edite o endpoint e ative Incluir dados pessoais. Assim que os dados saem da Kadens, protegê-los do seu lado é sua responsabilidade.

Gerenciar endpoints

AçãoDescrição
Trocar segredoCria uma nova chave de assinatura. A antiga continua assinando por 24 horas, então você pode atualizar seu servidor sem perder nenhum evento.
ReenviarEnvia novamente todos os eventos de um intervalo de datas que o endpoint perdeu ou falhou em receber, até 30 dias atrás.
ReenviarEnvia novamente uma entrega, a partir do registro de entregas do endpoint.
Enviar evento de testeEnvia um exemplo de qualquer tipo de evento apenas para este endpoint, marcado como teste.
Desativar / AtivarInterrompe as entregas até você ativar o endpoint de novo. Depois de ativá-lo, repita o intervalo que ele perdeu.

Um endpoint que falha por 5 dias sem um único sucesso é desativado automaticamente, e você é notificado.

Catálogo de eventos

Subscreva um endpoint aos eventos de que precisa. Cada um mostra os dados que transporta.

Pedidos

order.paid

Um pedido foi pago.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
  "order": {
    "id": "ord_91ac04",
    "status": "paid",
    "created_at": "2026-10-01T09:58:02Z",
    "paid_at": "2026-10-01T10:00:00Z",
    "event": {
      "id": "evt_7f3c2a",
      "name": "Salsa Congress Barcelona 2026"
    },
    "totals": {
      "gross": {
        "amount": 12000,
        "currency": "EUR"
      },
      "fees": {
        "amount": 600,
        "currency": "EUR"
      },
      "net": {
        "amount": 11400,
        "currency": "EUR"
      },
      "tax": {
        "amount": 2083,
        "currency": "EUR"
      }
    },
    "buyer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "lines": [
      {
        "ticket_type_id": "tt_full_pass",
        "name": "Full pass",
        "quantity": 1,
        "unit_price": {
          "amount": 12000,
          "currency": "EUR"
        }
      }
    ]
  }
}
order.refunded

Um pedido foi reembolsado, total ou parcialmente.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
{
  "order": {
    "id": "ord_91ac04",
    "status": "refunded",
    "created_at": "2026-10-01T09:58:02Z",
    "paid_at": "2026-10-01T10:00:00Z",
    "event": {
      "id": "evt_7f3c2a",
      "name": "Salsa Congress Barcelona 2026"
    },
    "totals": {
      "gross": {
        "amount": 12000,
        "currency": "EUR"
      },
      "fees": {
        "amount": 600,
        "currency": "EUR"
      },
      "net": {
        "amount": 11400,
        "currency": "EUR"
      },
      "tax": {
        "amount": 2083,
        "currency": "EUR"
      }
    },
    "buyer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "lines": [
      {
        "ticket_type_id": "tt_full_pass",
        "name": "Full pass",
        "quantity": 1,
        "unit_price": {
          "amount": 12000,
          "currency": "EUR"
        }
      }
    ]
  },
  "refund": {
    "id": "ref_0c7d",
    "amount": {
      "amount": 12000,
      "currency": "EUR"
    },
    "refunded_at": "2026-10-03T08:12:40Z"
  }
}
checkout.abandoned

Um comprador iniciou uma compra e saiu sem pagar.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
  "checkout": {
    "id": "pin_3c8e21",
    "item": {
      "kind": "course",
      "id": "crs_9a20",
      "name": "Bachata Foundations"
    },
    "buyer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "amount": {
      "amount": 9900,
      "currency": "EUR"
    },
    "started_at": "2026-10-01T09:40:00Z"
  },
  "abandoned_at": "2026-10-01T10:40:00Z"
}

Ingressos

ticket.issued

Um ingresso foi emitido para o titular.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
  "ticket": {
    "id": "tkt_33d0e1",
    "order_id": "ord_91ac04",
    "status": "active",
    "event": {
      "id": "evt_7f3c2a",
      "name": "Salsa Congress Barcelona 2026"
    },
    "ticket_type": {
      "id": "tt_full_pass",
      "name": "Full pass"
    },
    "holder": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "issued_at": "2026-10-01T10:00:01Z"
  }
}
ticket.reassigned

Um ingresso foi passado para outro titular.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
  "ticket": {
    "id": "tkt_33d0e1",
    "order_id": "ord_91ac04",
    "status": "active",
    "event": {
      "id": "evt_7f3c2a",
      "name": "Salsa Congress Barcelona 2026"
    },
    "ticket_type": {
      "id": "tt_full_pass",
      "name": "Full pass"
    },
    "holder": {
      "entity_id": "ent_8e40",
      "name": "Marco Rossi",
      "email": "marco@example.com"
    },
    "issued_at": "2026-10-01T10:00:01Z"
  },
  "previous_holder": {
    "entity_id": "ent_5b21",
    "name": "Lucia Martin",
    "email": "lucia@example.com"
  },
  "reassigned_at": "2026-10-02T17:30:00Z"
}
ticket.canceled

Um ingresso foi cancelado.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
  "ticket": {
    "id": "tkt_33d0e1",
    "order_id": "ord_91ac04",
    "status": "canceled",
    "event": {
      "id": "evt_7f3c2a",
      "name": "Salsa Congress Barcelona 2026"
    },
    "ticket_type": {
      "id": "tt_full_pass",
      "name": "Full pass"
    },
    "holder": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "issued_at": "2026-10-01T10:00:01Z"
  },
  "canceled_at": "2026-10-04T12:00:00Z"
}

Participantes

attendee.registered

Um participante foi registrado em um evento.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "attendee": {
    "ticket_id": "tkt_33d0e1",
    "entity_id": "ent_5b21",
    "name": "Lucia Martin",
    "email": "lucia@example.com",
    "event": {
      "id": "evt_7f3c2a",
      "name": "Salsa Congress Barcelona 2026"
    }
  },
  "registered_at": "2026-10-01T10:05:00Z"
}
attendee.checked_in

O check-in de um participante foi feito na entrada.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "attendee": {
    "ticket_id": "tkt_33d0e1",
    "entity_id": "ent_5b21",
    "name": "Lucia Martin",
    "email": "lucia@example.com",
    "event": {
      "id": "evt_7f3c2a",
      "name": "Salsa Congress Barcelona 2026"
    }
  },
  "checked_in_at": "2026-10-10T19:02:11Z"
}
attendee.check_in_reverted

Um check-in foi desfeito.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "attendee": {
    "ticket_id": "tkt_33d0e1",
    "entity_id": "ent_5b21",
    "name": "Lucia Martin",
    "email": "lucia@example.com",
    "event": {
      "id": "evt_7f3c2a",
      "name": "Salsa Congress Barcelona 2026"
    }
  },
  "reverted_at": "2026-10-10T19:04:30Z"
}
attendee.no_show

Um portador de ingresso não fez check in antes do fim da sessão.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "attendee": {
    "ticket_id": "tkt_33d0e1",
    "entity_id": "ent_5b21",
    "name": "Lucia Martin",
    "email": "lucia@example.com",
    "event": {
      "id": "evt_7f3c2a",
      "name": "Salsa Congress Barcelona 2026"
    }
  },
  "finalized_at": "2026-10-10T23:30:00Z"
}

Eventos

event.ended

Um dos seus eventos terminou.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "edition": {
    "id": "eed_2b71",
    "name": "Salsa Congress Barcelona 2026",
    "event": {
      "id": "evt_7f3c2a",
      "name": "Salsa Congress Barcelona"
    },
    "starts_at": "2026-10-09T16:00:00Z",
    "ends_at": "2026-10-11T22:00:00Z",
    "timezone": "Europe/Madrid"
  },
  "ended_at": "2026-10-11T22:00:00Z"
}

Reservas

booking.confirmed

Uma reserva para uma sessão foi confirmada.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "booking": {
    "id": "reg_8e17c3",
    "status": "reserved",
    "session": {
      "id": "ses_62f1a8",
      "status": "scheduled",
      "program": {
        "id": "prg_0c4e",
        "name": "Contemporary Technique, Level 2"
      },
      "starts_at": "2026-10-08T17:00:00Z",
      "ends_at": "2026-10-08T18:30:00Z",
      "timezone": "Europe/Madrid",
      "location": {
        "delivery_mode": "in_person",
        "room": {
          "id": "room_a1",
          "name": "Studio A"
        }
      }
    },
    "attendee": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "confirmed_at": "2026-10-01T10:00:00Z"
}
booking.declined

Um pedido de reserva foi recusado.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "booking": {
    "id": "reg_8e17c3",
    "status": "cancelled",
    "session": {
      "id": "ses_62f1a8",
      "status": "scheduled",
      "program": {
        "id": "prg_0c4e",
        "name": "Contemporary Technique, Level 2"
      },
      "starts_at": "2026-10-08T17:00:00Z",
      "ends_at": "2026-10-08T18:30:00Z",
      "timezone": "Europe/Madrid",
      "location": {
        "delivery_mode": "in_person",
        "room": {
          "id": "room_a1",
          "name": "Studio A"
        }
      }
    },
    "attendee": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "declined_at": "2026-10-01T10:00:00Z"
}
booking.canceled

Uma reserva foi cancelada ou expirou.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
  "booking": {
    "id": "reg_8e17c3",
    "status": "cancelled",
    "session": {
      "id": "ses_62f1a8",
      "status": "scheduled",
      "program": {
        "id": "prg_0c4e",
        "name": "Contemporary Technique, Level 2"
      },
      "starts_at": "2026-10-08T17:00:00Z",
      "ends_at": "2026-10-08T18:30:00Z",
      "timezone": "Europe/Madrid",
      "location": {
        "delivery_mode": "in_person",
        "room": {
          "id": "room_a1",
          "name": "Studio A"
        }
      }
    },
    "attendee": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "reason": "canceled",
  "canceled_at": "2026-10-03T09:12:00Z"
}
booking.moved

Uma reserva foi movida para outra sessão.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
  "booking": {
    "id": "reg_8e17c3",
    "status": "reserved",
    "session": {
      "id": "ses_7b90d2",
      "status": "scheduled",
      "program": {
        "id": "prg_0c4e",
        "name": "Contemporary Technique, Level 2"
      },
      "starts_at": "2026-10-15T17:00:00Z",
      "ends_at": "2026-10-15T18:30:00Z",
      "timezone": "Europe/Madrid",
      "location": {
        "delivery_mode": "in_person",
        "room": {
          "id": "room_a1",
          "name": "Studio A"
        }
      }
    },
    "attendee": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "previous_session": {
    "id": "ses_62f1a8",
    "status": "scheduled",
    "program": {
      "id": "prg_0c4e",
      "name": "Contemporary Technique, Level 2"
    },
    "starts_at": "2026-10-08T17:00:00Z",
    "ends_at": "2026-10-08T18:30:00Z",
    "timezone": "Europe/Madrid",
    "location": {
      "delivery_mode": "in_person",
      "room": {
        "id": "room_a1",
        "name": "Studio A"
      }
    }
  },
  "moved_at": "2026-10-04T11:40:00Z"
}
booking.no_show

Um participante reservado não fez check in antes do fim da sessão.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "booking": {
    "id": "reg_8e17c3",
    "status": "reserved",
    "session": {
      "id": "ses_62f1a8",
      "status": "scheduled",
      "program": {
        "id": "prg_0c4e",
        "name": "Contemporary Technique, Level 2"
      },
      "starts_at": "2026-10-08T17:00:00Z",
      "ends_at": "2026-10-08T18:30:00Z",
      "timezone": "Europe/Madrid",
      "location": {
        "delivery_mode": "in_person",
        "room": {
          "id": "room_a1",
          "name": "Studio A"
        }
      }
    },
    "attendee": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "finalized_at": "2026-10-08T19:30:00Z"
}
session.canceled

Uma sessão agendada foi cancelada.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
  "session": {
    "id": "ses_62f1a8",
    "status": "cancelled",
    "program": {
      "id": "prg_0c4e",
      "name": "Contemporary Technique, Level 2"
    },
    "starts_at": "2026-10-08T17:00:00Z",
    "ends_at": "2026-10-08T18:30:00Z",
    "timezone": "Europe/Madrid",
    "location": {
      "delivery_mode": "in_person",
      "room": {
        "id": "room_a1",
        "name": "Studio A"
      }
    }
  },
  "cancellation_reason": "Teacher unwell",
  "canceled_at": "2026-10-07T08:00:00Z"
}
session.rescheduled

Uma sessão agendada foi remarcada para outro horário.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "session": {
    "id": "ses_62f1a8",
    "status": "scheduled",
    "program": {
      "id": "prg_0c4e",
      "name": "Contemporary Technique, Level 2"
    },
    "starts_at": "2026-10-08T18:00:00Z",
    "ends_at": "2026-10-08T19:30:00Z",
    "timezone": "Europe/Madrid",
    "location": {
      "delivery_mode": "in_person",
      "room": {
        "id": "room_a1",
        "name": "Studio A"
      }
    }
  },
  "previous_starts_at": "2026-10-08T17:00:00Z",
  "previous_ends_at": "2026-10-08T18:30:00Z",
  "rescheduled_at": "2026-10-06T15:20:00Z"
}
pack.credits_low

Um pacote de aulas chegou ao limite baixo de créditos.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
  "pack": {
    "id": "pkp_1e90",
    "product": {
      "id": "pck_10cls",
      "name": "10 class pack"
    },
    "holder": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "credits_remaining": 2,
    "credits_total": 10,
    "expires_at": "2027-01-31T23:59:59Z"
  },
  "threshold": 2,
  "crossed_at": "2026-10-08T17:00:05Z"
}

Inscrições

enrollment.created

Um aluno foi inscrito em um curso.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "enrollment": {
    "id": "crs_9a20:ent_31c7",
    "course": {
      "id": "crs_9a20",
      "name": "Bachata Foundations"
    },
    "edition": {
      "id": "ced_4b1e",
      "name": "January 2027",
      "starts_at": "2027-01-11T18:00:00Z",
      "ends_at": "2027-03-29T20:00:00Z",
      "timezone": "Europe/Madrid"
    },
    "student": {
      "entity_id": "ent_31c7",
      "name": "Lucia Fernandez",
      "email": "lucia@example.com"
    },
    "source": "subscription"
  },
  "enrolled_at": "2026-12-02T10:15:00Z"
}
enrollment.ended

A inscrição de um aluno em um curso terminou.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "enrollment": {
    "id": "crs_9a20:ent_31c7",
    "course": {
      "id": "crs_9a20",
      "name": "Bachata Foundations"
    },
    "edition": {
      "id": "ced_4b1e",
      "name": "January 2027",
      "starts_at": "2027-01-11T18:00:00Z",
      "ends_at": "2027-03-29T20:00:00Z",
      "timezone": "Europe/Madrid"
    },
    "student": {
      "entity_id": "ent_31c7",
      "name": "Lucia Fernandez",
      "email": "lucia@example.com"
    },
    "source": "subscription"
  },
  "ended_at": "2027-02-02T10:15:00Z"
}
enrollment.moved

Um aluno foi movido para outra edição do curso.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "enrollment": {
    "id": "crs_9a20:ent_31c7",
    "course": {
      "id": "crs_9a20",
      "name": "Bachata Foundations"
    },
    "edition": {
      "id": "ced_7d02",
      "name": "April 2027",
      "starts_at": "2027-04-12T17:00:00Z",
      "ends_at": "2027-06-28T19:00:00Z",
      "timezone": "Europe/Madrid"
    },
    "student": {
      "entity_id": "ent_31c7",
      "name": "Lucia Fernandez",
      "email": "lucia@example.com"
    },
    "source": "subscription"
  },
  "previous_edition": {
    "id": "ced_4b1e",
    "name": "January 2027",
    "starts_at": "2027-01-11T18:00:00Z",
    "ends_at": "2027-03-29T20:00:00Z",
    "timezone": "Europe/Madrid"
  },
  "moved_at": "2026-12-20T09:00:00Z"
}
lesson.completed

Um aluno concluiu uma aula do seu curso.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
  "enrollment": {
    "id": "crs_9a20:ent_31c7",
    "course": {
      "id": "crs_9a20",
      "name": "Bachata Foundations"
    },
    "edition": {
      "id": "ced_4b1e",
      "name": "January 2027",
      "starts_at": "2027-01-11T18:00:00Z",
      "ends_at": "2027-03-29T20:00:00Z",
      "timezone": "Europe/Madrid"
    },
    "student": {
      "entity_id": "ent_31c7",
      "name": "Lucia Fernandez",
      "email": "lucia@example.com"
    },
    "source": "subscription"
  },
  "lesson": {
    "id": "itm_2f81",
    "name": "Basic step and timing"
  },
  "completed_at": "2026-12-05T19:40:00Z"
}
course.completed

Um aluno concluiu seu curso.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "enrollment": {
    "id": "crs_9a20:ent_31c7",
    "course": {
      "id": "crs_9a20",
      "name": "Bachata Foundations"
    },
    "edition": {
      "id": "ced_4b1e",
      "name": "January 2027",
      "starts_at": "2027-01-11T18:00:00Z",
      "ends_at": "2027-03-29T20:00:00Z",
      "timezone": "Europe/Madrid"
    },
    "student": {
      "entity_id": "ent_31c7",
      "name": "Lucia Fernandez",
      "email": "lucia@example.com"
    },
    "source": "subscription"
  },
  "completed_at": "2027-03-29T20:10:00Z"
}

Assinaturas

subscription.created

Um cliente assinou um plano.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
  "subscription": {
    "id": "sub_4d2e9a",
    "status": "active",
    "plan": {
      "id": "plan_7a10",
      "name": "Monthly membership"
    },
    "price": {
      "id": "price_2c3b",
      "amount": {
        "amount": 4900,
        "currency": "EUR"
      },
      "interval": "month",
      "interval_count": 1
    },
    "current_period_start": "2026-10-01T00:00:00Z",
    "current_period_end": "2026-11-01T00:00:00Z",
    "cancel_at_period_end": false,
    "canceled_at": null,
    "customer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  }
}
subscription.renewed

Uma assinatura foi renovada e o pagamento foi concluído.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
  "subscription": {
    "id": "sub_4d2e9a",
    "status": "active",
    "plan": {
      "id": "plan_7a10",
      "name": "Monthly membership"
    },
    "price": {
      "id": "price_2c3b",
      "amount": {
        "amount": 4900,
        "currency": "EUR"
      },
      "interval": "month",
      "interval_count": 1
    },
    "current_period_start": "2026-11-01T00:00:00Z",
    "current_period_end": "2026-12-01T00:00:00Z",
    "cancel_at_period_end": false,
    "canceled_at": null,
    "customer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "invoice": {
    "id": "in_1Q2w3E",
    "amount": {
      "amount": 4900,
      "currency": "EUR"
    }
  },
  "renewed_at": "2026-11-01T00:04:12Z"
}
subscription.payment_failed

O pagamento de uma assinatura falhou.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
  "subscription": {
    "id": "sub_4d2e9a",
    "status": "past_due",
    "plan": {
      "id": "plan_7a10",
      "name": "Monthly membership"
    },
    "price": {
      "id": "price_2c3b",
      "amount": {
        "amount": 4900,
        "currency": "EUR"
      },
      "interval": "month",
      "interval_count": 1
    },
    "current_period_start": "2026-10-01T00:00:00Z",
    "current_period_end": "2026-11-01T00:00:00Z",
    "cancel_at_period_end": false,
    "canceled_at": null,
    "customer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "access_ends_at": "2026-11-08T00:04:12Z",
  "failure_code": "card_declined",
  "failed_at": "2026-11-01T00:04:12Z"
}
subscription.canceled

Uma assinatura foi cancelada.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
  "subscription": {
    "id": "sub_4d2e9a",
    "status": "active",
    "plan": {
      "id": "plan_7a10",
      "name": "Monthly membership"
    },
    "price": {
      "id": "price_2c3b",
      "amount": {
        "amount": 4900,
        "currency": "EUR"
      },
      "interval": "month",
      "interval_count": 1
    },
    "current_period_start": "2026-10-01T00:00:00Z",
    "current_period_end": "2026-11-01T00:00:00Z",
    "cancel_at_period_end": true,
    "canceled_at": null,
    "customer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "cancel_at_period_end": true,
  "ends_at": "2026-11-01T00:00:00Z",
  "canceled_at": "2026-10-15T09:30:00Z"
}
subscription.reactivated

Uma assinatura cancelada foi reativada.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "subscription": {
    "id": "sub_4d2e9a",
    "status": "active",
    "plan": {
      "id": "plan_7a10",
      "name": "Monthly membership"
    },
    "price": {
      "id": "price_2c3b",
      "amount": {
        "amount": 4900,
        "currency": "EUR"
      },
      "interval": "month",
      "interval_count": 1
    },
    "current_period_start": "2026-10-01T00:00:00Z",
    "current_period_end": "2026-11-01T00:00:00Z",
    "cancel_at_period_end": false,
    "canceled_at": null,
    "customer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "reactivated_at": "2026-10-20T18:00:00Z"
}
subscription.plan_changed

Um cliente mudou para outro plano.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
  "subscription": {
    "id": "sub_8f01bc",
    "status": "active",
    "plan": {
      "id": "plan_9b22",
      "name": "Full bundle"
    },
    "price": {
      "id": "price_5d6e",
      "amount": {
        "amount": 8900,
        "currency": "EUR"
      },
      "interval": "month",
      "interval_count": 1
    },
    "current_period_start": "2026-10-01T00:00:00Z",
    "current_period_end": "2026-11-01T00:00:00Z",
    "cancel_at_period_end": false,
    "canceled_at": null,
    "customer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "previous_subscription_ids": [
    "sub_4d2e9a"
  ],
  "credit_applied": {
    "amount": 2450,
    "currency": "EUR"
  },
  "next_billing_at": "2026-11-15T00:00:00Z",
  "changed_at": "2026-10-15T12:00:00Z"
}
subscription.ended

Uma assinatura terminou e o acesso foi encerrado.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "subscription": {
    "id": "sub_4d2e9a",
    "status": "canceled",
    "plan": {
      "id": "plan_7a10",
      "name": "Monthly membership"
    },
    "price": {
      "id": "price_2c3b",
      "amount": {
        "amount": 4900,
        "currency": "EUR"
      },
      "interval": "month",
      "interval_count": 1
    },
    "current_period_start": "2026-10-01T00:00:00Z",
    "current_period_end": "2026-11-01T00:00:00Z",
    "cancel_at_period_end": false,
    "canceled_at": "2026-11-01T00:00:00Z",
    "customer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "reason": "cancellation_requested",
  "ended_at": "2026-11-01T00:00:00Z"
}
subscription.trial_ending

O teste gratuito de um assinante termina em alguns dias.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "subscription": {
    "id": "sub_4d2e9a",
    "status": "trialing",
    "plan": {
      "id": "plan_7a10",
      "name": "Monthly membership"
    },
    "price": {
      "id": "price_2c3b",
      "amount": {
        "amount": 4900,
        "currency": "EUR"
      },
      "interval": "month",
      "interval_count": 1
    },
    "current_period_start": "2026-10-01T00:00:00Z",
    "current_period_end": "2026-11-01T00:00:00Z",
    "cancel_at_period_end": false,
    "canceled_at": null,
    "customer": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "trial_ends_at": "2026-10-15T00:00:00Z"
}

Certificados

certificate.issued

Um certificado foi emitido para o seu titular.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
  "certificate": {
    "id": "icrt_4d19b2",
    "number": "KD-2026-000142",
    "status": "active",
    "certificate": {
      "id": "crt_7a02",
      "name": "Contemporary Foundations"
    },
    "template": {
      "id": "tpl_31c8",
      "name": "2026 cohort"
    },
    "recipient": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "issued_at": "2026-10-01T10:00:00Z",
    "expires_at": null,
    "revoked_at": null,
    "verification_url": "https://kadens.io/verify-certificate/KD-2026-000142"
  }
}
certificate.revoked

Um certificado foi revogado.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "certificate": {
    "id": "icrt_4d19b2",
    "number": "KD-2026-000142",
    "status": "revoked",
    "certificate": {
      "id": "crt_7a02",
      "name": "Contemporary Foundations"
    },
    "template": {
      "id": "tpl_31c8",
      "name": "2026 cohort"
    },
    "recipient": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "issued_at": "2026-10-01T10:00:00Z",
    "expires_at": null,
    "revoked_at": "2026-11-12T08:30:00Z",
    "verification_url": "https://kadens.io/verify-certificate/KD-2026-000142"
  },
  "reason": "Issued to the wrong student",
  "revoked_at": "2026-11-12T08:30:00Z"
}

Repasses

payout.paid

Um repasse chegou à sua conta bancária.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
{
  "payout": {
    "id": "po_1Q2w3E4r",
    "status": "paid",
    "amount": {
      "amount": 113400,
      "currency": "EUR"
    },
    "arrival_date": "2026-10-06T00:00:00Z"
  },
  "paid_at": "2026-10-06T06:14:09Z"
}
payout.failed

Um repasse falhou e o dinheiro não foi transferido.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  "payout": {
    "id": "po_1Q2w3E4r",
    "status": "failed",
    "amount": {
      "amount": 113400,
      "currency": "EUR"
    },
    "arrival_date": "2026-10-06T00:00:00Z"
  },
  "failure": {
    "code": "account_closed",
    "message": "The bank account has been closed."
  },
  "failed_at": "2026-10-06T06:14:09Z"
}

Contatos

lead.captured

Um novo lead foi captado.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "lead": {
    "id": "lead_4a90",
    "audience_id": "aud_12f0",
    "email": "lucia@example.com",
    "first_name": "Lucia",
    "last_name": "Martin",
    "consent_at": "2026-10-01T09:12:00Z",
    "source": {
      "site_id": "site_77a1",
      "page_id": "page_home",
      "block_id": "blk_newsletter",
      "url": "https://salsa.example.com/"
    }
  },
  "captured_at": "2026-10-01T09:12:00Z"
}
form.submitted

Um formulário foi enviado.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
  "submission": {
    "id": "sub_61c2",
    "form": {
      "id": "frm_0d3e",
      "title": "Audition application",
      "type": "application"
    },
    "target": {
      "scope": "course",
      "id": "crs_19ab"
    },
    "submitter": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "answers": [
      {
        "field_id": "b2c1e8f0-3a4d-4c5e-9f60-1a2b3c4d5e6f",
        "label": "Dance experience",
        "type": "textarea",
        "value": "Five years of salsa",
        "display": "Five years of salsa"
      },
      {
        "field_id": "c3d2f9a1-4b5e-4d6f-8a71-2b3c4d5e6f70",
        "label": "Preferred role",
        "type": "select",
        "value": "follower",
        "display": "Follower"
      }
    ],
    "submitted_at": "2026-10-02T11:40:00Z"
  }
}
application.decided

Você aprovou, rejeitou ou colocou na lista de espera uma inscrição.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
  "submission": {
    "id": "sub_61c2",
    "form": {
      "id": "frm_0d3e",
      "title": "Audition application",
      "type": "application"
    },
    "target": {
      "scope": "course",
      "id": "crs_19ab"
    },
    "submitter": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "submitted_at": "2026-10-02T11:40:00Z"
  },
  "decision": "approved",
  "decided_at": "2026-10-06T09:00:00Z"
}
exam.results_released

Um candidato já pode ver os resultados da sua prova.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
  "submission": {
    "id": "sub_61c2",
    "form": {
      "id": "frm_0d3e",
      "title": "Audition application",
      "type": "exam"
    },
    "target": {
      "scope": "course",
      "id": "crs_19ab"
    },
    "submitter": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "submitted_at": "2026-10-02T11:40:00Z"
  },
  "result": {
    "passed": true,
    "score_percent": 86
  },
  "released_at": "2026-10-09T12:00:00Z"
}
follower.added

Alguém começou a seguir você.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
{
  "follower": {
    "entity_id": "ent_5b21",
    "name": "Lucia Martin",
    "email": "lucia@example.com"
  },
  "followed_at": "2026-10-01T08:00:00Z"
}
community.member.joined

Um membro entrou em uma das suas comunidades.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
{
  "membership": {
    "member": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "source": "ticket_holder"
  },
  "joined_at": "2026-10-01T10:00:02Z"
}
community.member.left

Um membro saiu de uma das suas comunidades.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
{
  "membership": {
    "member": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "source": "ticket_holder"
  },
  "reason": "ticket_released",
  "left_at": "2026-10-05T08:00:00Z"
}
channel_automation.webhook

Uma automação chegou a um passo de envio de webhook para um contacto.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
  "automation": {
    "id": "aut_2c81f0",
    "step_id": "step_send_webhook",
    "run_id": "run_8e41d7"
  },
  "contact": {
    "id": "con_51a9e2",
    "entity_id": null,
    "username": "lucia.dances",
    "email": "lucia@example.com",
    "tag_ids": [
      "tag_vip"
    ]
  },
  "channel": {
    "type": "instagram",
    "account_id": "cha_7d02b1"
  },
  "fired_at": "2026-10-01T10:00:00Z"
}

Feedback

review.submitted

Alguém deixou uma avaliação.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
  "review": {
    "id": "rev_8d02",
    "rating": 5,
    "comment": "Clear, patient and fun.",
    "target": {
      "kind": "course",
      "id": "crs_9a20",
      "name": "Bachata Foundations"
    },
    "author": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "submitted_at": "2026-10-12T20:15:00Z"
}
feedback.completed

Você respondeu à solicitação de feedback de um aluno.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "request": {
    "id": "fbr_51a7",
    "offering": {
      "id": "mnt_33c0",
      "name": "Video feedback on your solo"
    },
    "student": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    }
  },
  "completed_at": "2026-10-14T10:30:00Z"
}

Recompensas

reward.expiring

Uma recompensa que você deu a alguém expira em breve.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "reward": {
    "id": "grw_0a4f",
    "name": "Free drop-in class",
    "kind": "free_class",
    "holder": {
      "entity_id": "ent_5b21",
      "name": "Lucia Martin",
      "email": "lucia@example.com"
    },
    "expires_at": "2026-11-01T00:00:00Z"
  }
}

Automações

automation.step_reached

Uma sequência chegou a um passo de webhook para uma pessoa.

Dados de exemplo
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
  "automation": {
    "id": "aut_3c81"
  },
  "run": {
    "id": "run_9d42"
  },
  "step": {
    "id": "s_hotlead",
    "key": "hot_lead"
  },
  "person": {
    "entity_id": "ent_5b21",
    "name": "Lucia Martin",
    "email": "lucia@example.com"
  },
  "reached_at": "2026-10-03T08:15:00Z"
}

Webhooks

webhook.test

Um evento de teste que você enviou do Kadens.

Dados de exemplo
JSON
1
2
3
{
  "message": "This is a test event sent from Kadens."
}

Solução de problemas

Nada chega

Verifique se o endpoint está ativado e inscrito no evento, e se o seu endereço é público e usa HTTPS. Depois envie um evento de teste e abra a entrega para ver o que o seu servidor respondeu.

A assinatura nunca corresponde

Verifique contra o corpo bruto da requisição, antes de qualquer análise de JSON. Use a chave deste endpoint e confira o relógio do seu servidor: requisições mais antigas que 300 segundos são rejeitadas.

O mesmo evento chega duas vezes

Isso é esperado após uma repetição, um reenvio ou um replay. Ignore qualquer webhook-id que você já tenha tratado.

O endpoint foi desativado

Ele falhou por 5 dias sem sucesso, respondeu 410 Gone, ou alguém o desativou. Corrija o servidor, ative o endpoint e repita o intervalo que ele perdeu.

Faltam nomes ou endereços de e-mail

Os dados pessoais são removidos a menos que o endpoint os inclua. Veja Dados pessoais acima.

E agora?

Abrir no painel

Isso ajudou?

Anterior
Widgets para o site
Próximo
Assistentes de IA (MCP)

Nesta página

  1. O que é um webhook
  2. Início rápido
  3. Teste sem um servidor
  4. Corpo do pedido
  5. Verificar assinaturas
  6. Trate eventos com segurança
  7. Repetições e limites
  8. Dados pessoais
  9. Gerenciar endpoints
  10. Catálogo de eventos
  11. Solução de problemas
  12. E agora?