clerk/clerk-webhooks

Webhooks do Clerk para eventos em tempo real e sincronização de dados. Verifique com o `verifyWebhook` do pacote específico do framework. Lide com eventos de usuário, sessão, organização, cobrança e pagamento. Construa funcionalidades orientadas a eventos como sincronização de banco de dados, notificações e integrações.

O que é clerk-webhooks?

Este skill permite a utilização de webhooks do Clerk para processar eventos em tempo real, como criação de usuários, atualizações de sessão, alterações em organizações, eventos de cobrança e pagamento. Ele é útil para desenvolvedores que desejam construir funcionalidades orientadas a eventos, como sincronização de dados com bancos de dados externos, envio de notificações em tempo real ou integração com serviços terceiros. O skill suporta os frameworks Next.js, Express, Fastify, Redwood, Remix, Vue e Nuxt — e em cada um deles, a verificação da autenticidade dos webhooks é feita usando a função `verifyWebhook` do pacote específico (`@clerk/nextjs`, `@clerk/express`, etc.). O fluxo de uso envolve definir um endpoint que recebe o evento, verificar o cabeçalho `svix-signature` com o `CLERK_WEBHOOK_SECRET` configurado no Clerk Dashboard, e então processar o evento de acordo com o tipo (`user.created`, `organization.updated`, `session.ended`, etc.). O skill também lista os principais eventos disponíveis e fornece um exemplo prático de implementação em Next.js com a API Route. Sua principal vantagem é eliminar a necessidade de polling e permitir reações imediatas a mudanças no Clerk.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/clerk/skills/tree/main/skills/clerk-webhooks

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que clerk-webhooks faz?

Webhooks do Clerk para eventos em tempo real e sincronização de dados. Verifique com o verifyWebhook do pacote específico do framework. Lide com eventos de usuário, sessão, organização, cobrança e pagamento. Construa funcionalidades orientadas a eventos como sincronização de banco de dados, notificações e integrações.

Visão Geral

Os webhooks do Clerk permitem que você receba notificações em tempo real sobre eventos que ocorrem na sua instância do Clerk, como criação/atualização/exclusão de usuários, sessões e organizações. Eles são essenciais para sincronizar dados com sistemas externos (banco de dados próprio, CRM, etc.), disparar notificações, ou integrar com outros serviços.

Como Funciona

  1. Configure um endpoint HTTP (rota de API) no seu servidor para receber eventos.
  2. O Clerk envia uma requisição POST com payload JSON para esse endpoint sempre que um evento ocorre.
  3. Cada requisição inclui um cabeçalho svix-signature que deve ser verificado usando o segredo do webhook (CLERK_WEBHOOK_SECRET).
  4. Use a função verifyWebhook do pacote específico do seu framework para validar a assinatura.
  5. Processe o evento baseado no campo type do payload.

Plataformas Suportadas

  • Next.js: @clerk/nextjs
  • Express: @clerk/express
  • Fastify: @clerk/fastify
  • Redwood: @clerk/redwood
  • Remix: @clerk/remix
  • Vue: @clerk/vue
  • Nuxt: @clerk/nuxt

Eventos Disponíveis

Os principais eventos que você pode escutar incluem:

  • user.created
  • user.updated
  • user.deleted
  • session.created
  • session.ended
  • session.removed
  • organization.created
  • organization.updated
  • organization.deleted
  • organizationMembership.created
  • organizationMembership.updated
  • organizationMembership.deleted
  • billing.created
  • billing.updated
  • payment.created

Exemplo de Implementação (Next.js)

// app/api/webhooks/route.ts
import { Webhook } from 'svix';
import { headers } from 'next/headers';
import { WebhookEvent } from '@clerk/nextjs/server';

export async function POST(req: Request) {
  const WEBHOOK_SECRET = process.env.CLERK_WEBHOOK_SECRET;

  if (!WEBHOOK_SECRET) {
    throw new Error('CLERK_WEBHOOK_SECRET não está definido');
  }

  // Obter cabeçalhos
  const headerPayload = headers();
  const svixId = headerPayload.get('svix-id');
  const svixTimestamp = headerPayload.get('svix-timestamp');
  const svixSignature = headerPayload.get('svix-signature');

  if (!svixId || !svixTimestamp || !svixSignature) {
    return new Response('Cabeçalhos svix ausentes', { status: 400 });
  }

  const payload = await req.json();
  const body = JSON.stringify(payload);

  const wh = new Webhook(WEBHOOK_SECRET);
  let evt: WebhookEvent;

  try {
    evt = wh.verify(body, {
      'svix-id': svixId,
      'svix-timestamp': svixTimestamp,
      'svix-signature': svixSignature,
    }) as WebhookEvent;
  } catch (err) {
    console.error('Falha na verificação do webhook:', err);
    return new Response('Verificação falhou', { status: 400 });
  }

  const eventType = evt.type;

  // Processar eventos
  switch (eventType) {
    case 'user.created':
      console.log('Usuário criado:', evt.data.id);
      // Sincronizar com banco de dados
      break;
    case 'user.updated':
      console.log('Usuário atualizado:', evt.data.id);
      break;
    case 'organization.created':
      console.log('Organização criada:', evt.data.id);
      break;
    default:
      console.log('Tipo de evento não tratado:', eventType);
  }

  return new Response('Recebido', { status: 200 });
}

Variáveis de Ambiente

  • CLERK_WEBHOOK_SECRET: Segredo obtido no Dashboard do Clerk (configuração do webhook).

Boas Práticas

  • Verificação obrigatória: Sempre verifique a assinatura do webhook para evitar eventos falsificados.
  • Idempotência: Processe eventos de forma idempotente (use id do evento para evitar duplicatas).
  • Tratamento de erros: Capture e registre erros, mas sempre retorne 200 para evitar reenvios desnecessários.
  • Timeout curto: Responda rapidamente (200) para não bloquear o Clerk. Para tarefas lentas, use filas ou workers assíncronos.

Recursos Adicionais

Individual skills in this repo

This repo contains 19 individual skills — each has its own dedicated page.

clerk/clerk

Clerk authentication router. Use when user asks about adding authentication, setting up Clerk, custom sign-in flows, Swift or native iOS auth, native Android auth, Next.js patterns, React patterns, Vue patterns, Nuxt patterns, Astro patterns, TanStack Start patterns, Expo patterns, React Router patterns, Chrome Extension patterns, organizations, billing, subscriptions, payments, pricing, plans, seat-based pricing, feature entitlements, syncing users, or testing. Automatically routes to the specific skill based on their task.

clerk/clerk-android

Implement Clerk authentication for native Android apps using Kotlin and Jetpack Compose with clerk-android source-guided patterns. Use for prebuilt AuthView/UserButton or custom API-driven auth flows. Do not use for Expo or React Native projects.

clerk/clerk-astro-patterns

Astro patterns with Clerk — middleware, SSR pages, island components, API routes, static vs SSR rendering. Triggers on: astro clerk, clerk astro middleware, astro protected page, clerk island component, astro API route auth, clerk astro SSR.

clerk/clerk-backend-api

Clerk Backend REST API explorer and executor. Browse tags, inspect endpoint schemas, and execute authenticated requests. Use when listing users, managing organizations, or calling any Clerk API endpoint.

clerk/clerk-billing

Clerk Billing for subscription management - render Clerk's PricingTable and in-app checkout drawer, configure subscription plans, seat-limit plans for B2B, feature entitlements with has(), and billing webhooks. Use for SaaS monetization, plan gating, checkout flows, trials, invoicing, and subscription lifecycle management.

clerk/clerk-chrome-extension-patterns

Chrome Extension auth with @clerk/chrome-extension -- popup/sidepanel setup, syncHost for OAuth/SAML via web app, createClerkClient for service workers and headless extensions, stable CRX ID. Triggers on: Chrome extension auth, Plasmo clerk, popup sign-in, syncHost, background service worker token, createClerkClient, headless extension.

clerk/clerk-custom-ui

Custom authentication flows and component appearance - hooks (useSignIn, useSignUp), themes, colors, fonts, CSS. Use for custom sign-in/sign-up flows, appearance styling, visual customization, branding.

clerk/clerk-expo

Implement Clerk authentication for Expo and React Native apps using @clerk/expo source-guided patterns. Use for prebuilt AuthView/UserButton or custom hook-driven auth flows. Do not use for native iOS/Swift, native Android/Kotlin, or web framework projects.

clerk/clerk-expo-patterns

Expo / React Native patterns with Clerk — SecureStore token cache, OAuth deep linking, useAuth in native, Expo Router protected routes, push notifications with user context. Triggers on: expo clerk, clerk react native, SecureStore token cache, expo router auth, OAuth deep link clerk, mobile auth clerk.

clerk/clerk-nextjs-patterns

Advanced Next.js patterns - middleware, Server Actions, caching with Clerk.

clerk/clerk-nuxt-patterns

Nuxt 3 auth patterns with @clerk/nuxt - middleware, composables, server API routes, SSR. Triggers on: Nuxt auth, useAuth composable, clerkMiddleware Nuxt, server API Clerk, Nuxt route protection.

clerk/clerk-orgs

Clerk Organizations for B2B SaaS - create multi-tenant apps with org switching, role-based access, verified domains, and enterprise SSO. Use for team workspaces, RBAC, org-based routing, member management.

clerk/clerk-react-patterns

React SPA auth patterns with @clerk/react for Vite/CRA - ClerkProvider setup, useAuth/useUser/useClerk hooks, React Router protected routes, custom sign-in flows. Triggers on: Vite Clerk setup, React Router auth, useAuth hook, protected route, custom sign-in form React.

clerk/clerk-react-router-patterns

React Router v7 patterns with Clerk — rootAuthLoader, getAuth in loaders, clerkMiddleware, protected routes, SSR user data, org switching. Triggers on: react-router auth, rootAuthLoader, getAuth loader, react-router protected route, loader authentication, SSR auth react-router.

clerk/clerk-setup

Add Clerk authentication to any project by following the official quickstart guides.

clerk/clerk-swift

Implement Clerk authentication for native Swift and iOS apps using ClerkKit and ClerkKitUI source-guided patterns. Use for prebuilt AuthView or custom native flows. Do not use for Expo or React Native projects.

clerk/clerk-tanstack-patterns

TanStack React Start auth patterns with @clerk/tanstack-react-start - createServerFn, beforeLoad guards, loaders, Vinxi server. Triggers on: TanStack auth, createServerFn clerk, beforeLoad protection, TanStack Start middleware.

clerk/clerk-testing

E2E testing for Clerk apps. Use with Playwright or Cypress for auth flow tests.

clerk/clerk-vue-patterns

Vue 3 patterns with Clerk — composables (useAuth, useUser, useClerk, useOrganization), Vue Router guards, Pinia auth store integration. Triggers on: vue clerk, useAuth vue, clerk composables, vue router clerk guard, pinia auth clerk. For Nuxt, use clerk-nuxt-patterns instead.

Habilidades Relacionadas