Já integra este fluxo? Revise o checklist de mudanças na integração de
ativação.
O que é uma sessão de ativação
Para receber pagamentos, todo vendedor precisa de um cadastro financeiro aprovado: dados pessoais ou da empresa, documento de identidade, selfie e conta para saques, tudo verificado. Construir esse formulário — com upload de documentos, validações e regras regulatórias que mudam — é caro e não é o core da sua plataforma. Umaactivation_session resolve isso: é um link temporário para uma página
hospedada pela Chargefy onde o seu vendedor preenche o cadastro completo.
Você cria a sessão pela API, redireciona o vendedor para a url retornada, e
a Chargefy cuida do formulário, dos uploads, da coleta da conta para saques e do
envio para análise. Quando termina, o vendedor volta para o seu produto pela
return_url.
Três coisas que a palavra “session” não significa aqui:
- Não é um login. É uma autorização temporária, de uso único, embutida na URL.
- Não é permanente. A URL expira em 60 segundos se não for aberta; gerar
outra é um novo
POST(barato e idempotente). - Não é onde o resultado mora. A sessão termina quando o cadastro é
enviado. Aprovação e reprovação chegam depois, pela
organization.
Os três objetos do fluxo
A regra de ouro: o
org_* é o identificador estável. Cadastro reprovado,
documento trocado, nova tentativa — nada disso muda o org_*, e nada do que
você construiu em cima dele (produtos, integrações, histórico) se perde.
Pré-requisitos
- Sua plataforma ativa e com o setup concluído (sem isso, o create responde
409). - Uma API key de plataforma (
Authorization: Bearer {{PLATFORM_API_KEY}}). - Um endpoint de webhook registrado — o resultado da ativação chega por evento, não por polling.
- A organização conectada criada com documento (CPF ou CNPJ). O documento define se o fluxo abre como pessoa física ou jurídica.
Passo a passo
1. Crie (ou reaproveite) a organização conectada
id (org_*). Chamadas repetidas com o mesmo documento retornam a
mesma organização — sem duplicatas.
2. Crie a sessão de ativação
Só dois campos são obrigatórios:- Enquanto a sessão estiver aberta, o ID não muda. Repetir o
POSTpara uma sessãocreatedouin_progressdevolve o mesmoas_*com uma URL nova. - Uma nova tentativa recebe um novo ID. Depois de
submitted, a sessão anterior não é reaberta. Se a organização puder reenviar o cadastro, o próximoPOSTcria outroas_*. Oorg_*continua sendo o mesmo. - A
urlvale 60 segundos e é de uso único. Ela foi feita para redirect imediato, não para mandar por e-mail. Se o vendedor demorar, gere outra com um novoPOST. metadataé seu campo de correlação (string → string, até 50 chaves). Ele volta na consulta da sessão — útil para ligar a sessão ao seu registro interno.
3. Redirecione o vendedor
Envie o vendedor para aurl imediatamente após criar a sessão
(redirect no navegador dele). No fluxo hospedado ele vai:
- Confirmar os dados pessoais ou da empresa (o documento já vem do cadastro da organização);
- Descrever a atividade do negócio;
- Fotografar/enviar o documento de identidade e uma selfie;
- Informar a conta para saques que vai receber os repasses;
- Revisar e enviar.
4. O vendedor volta pela return_url
Quando ele conclui (ou abandona) o fluxo, volta para a sua return_url.
A Chargefy preserva os parâmetros que já existiam na URL e acrescenta:
O retorno não é a aprovação. Mesmo
status=submitted informa apenas que o
cadastro entrou em processamento. A tela de retorno certa é neutra:
“Recebemos seu cadastro” ou “Continue seu cadastro”, decidida pelo estado real
(webhook ou um GET /v1/organizations/{id}).
5. Chega o organization.updated de análise
Quando o vendedor envia o cadastro, a organização passa para análise e seu
endpoint recebe um organization.updated
com activation_status: "in_review". O que está sendo verificado aparece em
requirements.pending_verification.
in_review significa “cadastro recebido”, não “aprovado”. No seu produto,
o estado certo aqui é “em análise”. Não libere recebimentos por este evento.6. Chega o resultado, pela organization
A análise é assíncrona (minutos, às vezes mais). O veredito chega pororganization.updated:
Aprovado — libere os recebimentos:
7. Reprovou? Corrija e reenvie — sem drama
disabled não é fim de linha. requirements diz o que aconteceu e o que
fazer: cada item de errors traz o motivo (code, message), o campo
apontado (requirement) e a instrução (resolution); missing consolida os
caminhos que precisam ser corrigidos; disabled_reason marca os casos
terminais.
disabled_reason: null→ há caminho de correção. Mostre a instrução ao vendedor (os caminhos emmissingdizem o que recoletar) e chamePOST /v1/activation-sessionsde novo para o mesmoorg_*. A Chargefy cria uma nova sessão, com outroas_*, e reaproveita os dados já salvos para que o vendedor corrija apenas o necessário. A nova página abre diretamente na etapa relacionada à reprovação. Arquivos ainda válidos permanecem no formulário: se apenas o documento foi recusado, por exemplo, a selfie atual continua visível e pode ser mantida, removida ou substituída. Removê-la torna o novo envio obrigatório antes da revisão.disabled_reasonpreenchido → o caso é terminal:"rejected.attempt_limit_reached"significa limite de tentativas esgotado;"rejected.other"significa que não há caminho de reenvio. Nos dois casos, encaminhe ao suporte e não repita a ativação em loop.
O ciclo de vida da sessão
Consulta pontual:
GET /v1/activation-sessions/{id}
— útil para depurar, mas o dia a dia é orientado por webhook. No GET, url
e expires_at voltam null de propósito: URL só nasce no POST.
Como acompanhar o resultado
Todos os eventos carregam o objeto completo em
data.object e apenas os
campos alterados em data.previous_attributes. Processe por id do evento
(idempotência) e trate código de pendência desconhecido de forma genérica —
o conjunto cresce. Catálogo completo:
Tipos de eventos.
Erros do create que o seu código deve tratar
Boas práticas de produto
- Um botão, uma chamada. “Ativar recebimentos” →
POST→ redirect. A idempotência elimina a necessidade de gerenciar estado de sessão do seu lado. - Estados visíveis no seu admin: não iniciado (
not_submitted), em análise (in_review), ativo (active), pendência (disabled+requirements). São os quatro estados deactivation_status— não invente um quinto. - Na reprovação, mostre o motivo, não um beco. “Cadastro reprovado,
procure o suporte” queima conversão; “o nome informado não confere com o
CPF — corrija e reenvie” resolve na hora. Use
resolution(ou traduza pelocode). - Notifique o vendedor quando
organization.updatedchegar — aprovado ou reprovado, é ele quem precisa agir ou comemorar. - Use
metadatapara correlação, nunca para lógica: a Chargefy só ecoa.
O que não fazer
- Não crie outra
organizationporque um cadastro reprovou. O retry é sempre no mesmoorg_*— criar outra conta espalha o histórico do vendedor. - Não trate o retorno à
return_urlcomo aprovação (nem como envio). - Não faça polling da sessão para saber o resultado — o resultado nem
fica nela; escute
organization.updated. - Não guarde nem reenvie a
url— expira em 60 segundos; emita outra na hora do clique. - Não crie sessões em loop após reprovação sem o vendedor corrigir algo:
tentativas repetidas com os mesmos dados terminam em
activation_not_retryable.
Perguntas frequentes
O vendedor fechou a aba no meio. Perdeu tudo? Não. O progresso fica salvo na sessão. Um novoPOST /v1/activation-sessions
emite outra URL e o fluxo reabre onde parou.
Quanto tempo demora a análise?
Normalmente minutos, mas é assíncrona por natureza. Modele o estado “em
análise” como parte normal do funil, não como erro.
Posso mandar a URL por e-mail/WhatsApp?
Não como está — ela expira em 60 segundos. O padrão certo: o link do seu
e-mail aponta para o seu produto, que cria a sessão na hora do clique e
redireciona.
O vendedor errou o CPF/CNPJ. E agora?
Enquanto a organização não está ativa e não tem pagamentos, troque o
document com POST /v1/organizations/{id} e crie uma nova sessão — mesmo
org_*, sem perder nada. Veja
reenviar KYC de uma organização.
Sessão em ambiente de teste?
Funciona. Com credencial de teste, a análise é simulada e o desfecho é
escolhido pelo CPF/CNPJ da organização — a tabela está em
Ativação por API.
Preciso guardar o as_*?
Só se quiser correlacionar eventos ou depurar. O identificador que o seu
sistema precisa guardar é o org_*.
Referências
- Objeto e operações:
activation_session· create · get - Resultado e pendências:
organization· Requisitos de ativação - Eventos:
organization.updated· tipos de eventos - Contexto de plataforma: organizações conectadas · reenviar KYC

