contas de cliente para SaaS
O cliente do seu SaaS.Um cliente, um lugar só.
Sessão, times, cobrança, suporte e métricas sobre a mesma ficha. A sua autenticação continua sua; o resto lê o mesmo cliente — sem manter quatro bancos em sincronia.
grátis até 50.000 contatos ativos por mês · ambiente de teste incluso
Ana Rocha
ana@studiolume.com.br
- id
- ct_8f2a1c6b
- identificado por
- usr_8421
- e-mail verificado
- sim
- primeira visita
- 12 mar 2026
- Identidade
- Cobrança
- Suporte
- Métricas
- Onboarding
- NPS
- Pontos
- Termos
no ar hoje
O que já está de pé
Tudo em volta da sua autenticação, com as decisões difíceis já tomadas — as que só aparecem depois que alguém tenta contornar.
identidade
A sua autenticação continua sua
O seu servidor assina o id do usuário com um HMAC e o
bootidentifica a pessoa. Uma assinatura errada é recusada, nunca rebaixada — e um e-mail só vira prova quando um link ou um código volta da caixa de entrada.ambientes
Live e test desde o primeiro dia
Toda organização nasce com os dois, e a chave carrega o ambiente:
uk_sk_live_…euk_sk_test_…. Dado de teste nunca encosta no número que você olha.jwt
Cinco minutos, verificado por você
O seu backend confere a sessão contra o JWKS do ambiente, sozinho. Nenhuma chamada ao UserKit no caminho do request.
times
Uma pessoa, vários times
Um contato pode estar em dois clientes com dois planos. A assinatura pertence ao CLIENTE, o papel dentro dele é vocabulário seu, e o time ativo viaja no
X-Customer-Id— nunca num cursor guardado.cobrança
O gateway é o seu
Catálogo, assinaturas e faturas espelhados do provedor que você já conectou. A UserKit nunca cobra ninguém em nome de ninguém.
engajamento
Suporte, avisos, pontos e filas
Conversas por e-mail e no widget, notificações in-app, checklists, pontos e filas de acesso antecipado — tudo movido por fatos que o seu produto já publica.
integração
Como entra no seu produto
Três passos, nesta ordem. Os pacotes estão em beta fechado; a conta já dá acesso ao painel e à API.
- 01
Instale o pacote
Um pacote, sem dependências. Existe o equivalente sem React, e um para quem quer o token num cookie httpOnly no próprio domínio.
terminalnpm install @userkit/react - 02
Diga quem está na página
O seu backend assina o id do usuário com o segredo do ambiente e o boot identifica o contato. Sem hash a sessão fica marcada como não verificada; com hash errado ela é recusada.
app.tsximport { useEffect } from "react"; import { UserKitProvider, SignedIn, SignedOut, useUserKit, } from "@userkit/react"; function Boot() { const client = useUserKit(); useEffect(() => { // { external_id, hash } vem do seu servidor: // hash = HMAC-SHA256(identity_secret, external_id) fetch("/api/userkit-boot").then((r) => r.json()) .then(({ external_id, hash }) => client.boot({ externalId: external_id, hash })); }, [client]); return null; } export default function App() { return ( <UserKitProvider publishableKey="uk_pk_live_…"> <Boot /> <SignedOut><SeuLogin /></SignedOut> <SignedIn><Painel /></SignedIn> </UserKitProvider> ); } - 03
Confira no seu backend
O JWT vale cinco minutos e é assinado em ES256 por ambiente. O SDK renova 30 segundos antes de expirar, então pedir o token a cada request está correto.
api/rota.tsimport { createRemoteJWKSet, jwtVerify } from "jose"; const jwks = createRemoteJWKSet( new URL("https://api.userkit.dev/v1/jwks/uk_pk_live_…"), ); const { payload } = await jwtVerify(token, jwks); payload.sub; // o id do contato
preço
Grátis até 50.000 contatos ativos por mês.
O teto é alto de propósito. Você paga quando já estiver sendo pago.
Ver os planos- contato ativo
- Quem teve uma sessão autenticada no mês. Visitante anônimo não conta e ambiente de teste não conta — a exclusão está na consulta, não na boa vontade de quem escreve a próxima.
- passar do teto
- Avisa em 80% e em 100%, e para por aí. Nenhum caminho que cria sessão lê o medidor: estourar o limite nunca deixa o seu cliente do lado de fora.
Comece pelo ambiente de teste.
A conta nasce com os dois ambientes e as chaves de cada um. Nada do que você fizer em teste aparece no que é real.