Visão geral
O onboarding produz uma conta unificada totalmente provisionada e espelhada na infraestrutura de processamento. Ao final do fluxo você terá:- Uma conta unificada visível em GET /unified/accounts/sellers/ com
zoop_idpreenchido. - Uma conta bancária unificada com os dados de liquidação, propagada para a infraestrutura de processamento.
- Um split unificado vinculado a um plano de split (atribuído automaticamente no fluxo padrão), de modo que taxas e comissões sejam calculadas a cada venda.
- Um ou mais documentos unificados com as imagens de KYC enviadas à infraestrutura de processamento.
- A capacidade de chamar POST /unified/accounts/sellers/{sellers_pk}/transactions/ e demais endpoints relacionados.
Decisão: pessoa física ou jurídica? Independente ou subconta?
Duas escolhas ortogonais moldam o seu payload.Pessoa Física (PF) vs Pessoa Jurídica (PJ)
Pessoa Física (PF) vs Pessoa Jurídica (PJ)
type da conta define o formato jurídico.SELLER_PF/SUB_SELLER_PF— pessoa física brasileira. Exige um objetopersoncom CPF (taxpayer_id, 11 dígitos). Os documentos de KYC são da pessoa física (selfie + RG ou CNH).SELLER_PJ/SUB_SELLER_PJ— pessoa jurídica brasileira. Exige tanto um objetoperson(o representante legal / titular) quanto um objetocompanycom CNPJ (tax_id, 14 dígitos).
400 se type for SELLER_PJ/SUB_SELLER_PJ e o objeto company estiver ausente.Taxas, exigências de KYC e planos de split disponíveis dependem do tipo — escolha com cuidado, raramente é alterado depois.Vendedor independente vs subconta
Vendedor independente vs subconta
- Vendedores independentes (
SELLER_PF/SELLER_PJ) são lojistas de nível superior, registrados diretamente na infraestrutura de processamento. Eles possuem a própria conta bancária, o próprio split e o própriozoop_id. - Subcontas (
SUB_SELLER_PF/SUB_SELLER_PJ) ficam abaixo de um vendedor existente (seuparent). Elas não são registradas separadamente na infraestrutura de processamento — reutilizam ozoop_iddo pai para chamadas à rede de adquirência, mas mantêm seus próprios dados de pessoa/empresa para fins de relatório, extrato e roteamento de split. Use este modelo para filiais, quiosques ou agentes de venda que devem aparecer distintos nos relatórios, mas liquidar sob um único guarda-chuva.
Etapa 1 — Registrar o vendedor
Existem dois pontos de entrada HTTP, dependendo de o caso ser um vendedor independente ou uma subconta.Vendedor independente — POST /unified/accounts/sellers/
person (sempre), company (quando type for PJ), bank_account, além dos campos regulatórios mcc, category, revenue, statement_descriptor e email.Opcional: informe um invitation_link (um short_id vindo de POST …/invitation-links/) para pré-preencher o split (agente / N1 / N2 / plano) e, se o link carregar um parent, promover automaticamente a conta a subconta.Subconta — POST /unified/accounts/sellers/{parent}/sub/
POST /unified/accounts/sellers/{sellers_pk}/sub/ com type igual a SUB_SELLER_PF ou SUB_SELLER_PJ. A validação exige person (e company para PJ), mas não exige bank_account, mcc, category, revenue ou statement_descriptor de imediato — subcontas herdam o registro na rede de adquirência por meio do pai e podem ser preenchidas depois com PATCH .../sellers/{sellers_pk}/.O parent da nova conta é definido automaticamente a partir da URL.Alternativa — endpoint de registro direto (legado)
POST /seller/register/ faz proxy diretamente para os endpoints de pessoas físicas ou jurídicas da infraestrutura de processamento. Ele não cria uma conta unificada nem persiste nada localmente, e não exige autenticação no nível da view. Use-o apenas para sondagens pontuais de integração ou em migrações de dados — nunca para onboarding em produção. Os fluxos produtivos devem passar pelo roteador unificado, para que o acesso, os splits e o espelho unificado permaneçam consistentes.Etapa 2 — Definir a conta bancária de liquidação
Se você usouPOST /unified/accounts/sellers/, o bloco bank_account já está no payload e essa etapa pode ser pulada.
Para subcontas, ou quando for necessário trocar a conta bancária posteriormente, envie uma atualização parcial do vendedor. A conta bancária é criada na primeira escrita, caso ainda não exista.
| Campo | Tipo | Significado |
|---|---|---|
number | string | Número da conta, incluindo o dígito verificador. |
agency | string | Número da agência. |
code | string | Código bancário brasileiro de 3 dígitos (FEBRABAN). Zeros à esquerda são normalizados quando enviados à infraestrutura de processamento. |
type | enum | CHECKING_ACCOUNT ou SAVINGS_ACCOUNT. |
Etapa 3 — Atribuir um plano de split
Um plano de split descreve como dividir cada venda entre o vendedor, o master, o agente, os distribuidores N1/N2 e o desenvolvedor, por tipo de pagamento e parcela. Todo vendedor ativo precisa ter um, caso contrário o número máximo de parcelas cai para1 e o cálculo de split não é executado nas transações.
Atribuição automática (caminho padrão)
Atribuição automática (caminho padrão)
invitation_link, o servidor lê a configuração de plano de split padrão da plataforma (cujo valor padrão é "Plano Pro Padrão") e atribui o primeiro plano cujo nome contenha esse trecho. O split criado fica sinalizado como gerenciado pelo sistema.Se a configuração de plano padrão estiver vazia, nenhum split automático é criado e você precisará defini-lo explicitamente (próximo accordion).Atribuição via link de convite
Atribuição via link de convite
invitation_link.short_id válido, o split é montado a partir do próprio link: agent, n1_distributor, n2_distributor e plan são copiados do link (caindo para o split do criador do link quando algum campo estiver vazio).É assim que equipes de funil de onboarding pré-atribuem comissões a um lojista indicado. Veja POST …/invitation-links/.Atribuição / alteração manual
Atribuição / alteração manual
Etapa 4 — Enviar documentos de KYC
As imagens de KYC são enviadas uma por vez viaPOST /unified/accounts/sellers/{sellers_pk}/documents/upload/ como multipart/form-data. O arquivo é armazenado no S3 em account/{seller_id}/documents/{document_id}.{ext}, um documento unificado é criado com status='pending' e um job é enfileirado para enviar o arquivo à infraestrutura de processamento.
Formatos aceitos: PNG, JPEG, WEBP, BMP, HEIC, HEIF — validados tanto pelo tipo MIME quanto pela extensão.
O campo de formulário document_type é obrigatório e deve ser um dos valores:
document_type | Quando usar |
|---|---|
SELFIE | Foto do rosto do titular, capturada ao vivo. Obrigatória para toda conta. |
CNH_FULL, CNH_FRONT, CNH_BACK | Carteira Nacional de Habilitação — documento aberto completo ou cada um dos lados. |
RG_FRONT, RG_BACK | RG brasileiro, ambos os lados. |
Documentos PF
Documentos PF
- Uma
SELFIE. - Ou
CNH_FULL, ou ambosCNH_FRONT+CNH_BACK, ou ambosRG_FRONT+RG_BACK.
Documentos PJ
Documentos PJ
person informado no registro) precisa passar pelo KYC, e não a empresa em si neste endpoint. Envie o mesmo conjunto exigido para uma conta PF, vinculado ao identificador da conta jurídica.A documentação corporativa (contrato social etc.) é tratada hoje fora deste endpoint — alinhe com o time de operações.zoop_id e zoop_acquirer_status são preenchidos quando o job de envio é concluído do lado da infraestrutura de processamento.
Etapa 5 — Acompanhar o status de ativação
Dois campos da conta descrevem onde ela está no pipeline de onboarding. Faça polling emGET /unified/accounts/sellers/{id}/ e observe:
| Campo | Origem | O que significa |
|---|---|---|
zoop_id | Definido pelo job de registro após a criação na infraestrutura de processamento. | null até a chamada de registro ser bem-sucedida. Quando não nulo, já é possível cobrar. |
zoop_internal_status | Estado interno de sincronização, mais o ciclo de vida do job local. | WAITING enquanto o job de registro está enfileirado; OK depois que o vendedor é aceito; FAILED se o registro for rejeitado. A partir daí, texto livre — valores como ENABLED vindos da infraestrutura de processamento fluem verbatim. |
zoop_acquirer_status | Última resposta ou erro conhecido na rede de adquirência. | Útil para suporte quando zoop_internal_status for FAILED — carrega os primeiros 100 caracteres da mensagem de erro. |
zoop_idnão é nulo.zoop_internal_statuséOK(ou um valor de sucesso vindo da infraestrutura de processamento, comoENABLED).- Existe uma conta bancária cadastrada.
- Há um plano de split definido.
- Documentos de KYC cobrindo selfie + identidade foram enviados e aceitos pela infraestrutura de processamento.
O que acontece nos bastidores
Quando a chamada de criação retorna, o vendedor ainda não existe na infraestrutura de processamento. A plataforma armazena tudo localmente primeiro e, em seguida, apoia-se no pipeline Sales / Unified / Jobs para propagar os dados.- A criação salva a conta (e os objetos aninhados de pessoa, empresa, conta bancária e split) em uma única transação de banco e cria o vínculo de acesso do chamador.
- O split é materializado — a partir do link de convite, se houver, ou então a partir da configuração de plano de split padrão da plataforma.
- Se a nova conta não for subconta e a configuração de registro automático estiver ativa (o padrão é ligado), a criação enfileira o job de registro na infraestrutura de processamento.
- O job em segundo plano: (a) monta o vendedor e os endereços a partir dos dados unificados, (b) marca a conta como
WAITING, (c) envia o vendedor para a infraestrutura de processamento, (d) associa a conta bancária, (e) anexa o plano de split como uma assinatura na infraestrutura de processamento e (f) grava de volta ozoop_ide alterazoop_internal_statusparaOK. - Ao enviar um documento, um job paralelo baixa o arquivo do S3, o envia para a infraestrutura de processamento e atualiza o documento unificado.
Armadilhas comuns
CPF / CNPJ duplicado na infraestrutura de processamento
CPF / CNPJ duplicado na infraestrutura de processamento
400 se o CPF (PF) ou CNPJ (PJ) já estiver vinculado a outro vendedor no marketplace. O job de registro captura o erro, grava a mensagem em zoop_acquirer_status e muda zoop_internal_status para FAILED. Consulte esse campo para ver o erro real — a conta unificada permanece no banco, mas não é utilizável para transações.Falta de conta bancária no momento do registro
Falta de conta bancária no momento do registro
Plano de split ausente ou não reconhecido
Plano de split ausente ou não reconhecido
1 em todas as transações futuras. Confirme sempre, em GET /plans/plans/split/, que existe um plano contendo o trecho configurado.Registro automático desligado
Registro automático desligado
zoop_id permanece null, transações não podem ser criadas e não há erro a inspecionar. Verifique essa configuração antes de supor que o job está quebrado. O job pode ser disparado manualmente por um operador.Subconta a quem se espera registro próprio
Subconta a quem se espera registro próprio
zoop_id do pai. Postar transações contra uma subconta cujo pai não possui zoop_id falha com Seller not found. Sempre conclua o onboarding do pai primeiro.Documentos enviados antes de o vendedor ter zoop_id
Documentos enviados antes de o vendedor ter zoop_id
zoop_id da conta pai para encaminhá-lo. Se você enviar documentos nos poucos segundos entre a criação e a conclusão do job de registro, o job de envio se reagenda. O documento unificado é criado de qualquer forma — se a espera durar mais do que o esperado, verifique antes o zoop_internal_status do vendedor.