Atualização Cadastral de Sellers
A atualização cadastral é o processo pelo qual a Zoop solicita ao marketplace que revise os dados de um seller após o onboarding. A revisão pode ser disparada por dois motivos:
- ACP — Atualização Cadastral Periódica: recorrente, em intervalos pré-definidos pela Zoop.
- ACI — Atualização por Inconsistência: pontual, quando a Zoop identifica inconsistência ou insuficiência nos dados do seller.
Ambos os fluxos usam o mesmo evento de webhook (regulatory.registration.review.required) e o mesmo endpoint de envio (PUT /registration/review). O que diferencia o fluxo é o campo payload.object.type, que define também as regras de prazo e completude.
ObrigatórioO cumprimento dos fluxos de ACP e ACI faz parte das exigências regulatórias do setor de meios de pagamento. O não atendimento aos prazos pode sujeitar o seller a penalidades, incluindo bloqueio de movimentações financeiras.
Conceitos
ACP — Atualização Cadastral Periódica
Disparada de forma recorrente pela Zoop em um momento pré-determinado do ciclo de vida do seller. O marketplace não tem visibilidade prévia da data do próximo disparo de cada seller e deve manter o endpoint receptor de webhooks sempre operacional.
A ACP exige envio completo de todos os campos cadastrais previstos em uma atualização cadastral para o tipo de seller (PF ou PJ), independentemente de já estarem corretos na base da Zoop.
| Característica | Valor |
|---|---|
payload.object.type | REGISTRATION_REVIEW_REQUIRED |
| Prazo total | 60 dias |
| Status inicial | PENDING (dias 0–30), depois OVERDUE (dias 30–60) |
| Completude do envio | Completa, obrigatória |
ACI — Atualização por Inconsistência
Disparada pela Zoop quando uma inconsistência ou insuficiência é identificada nos dados de um seller. Pode ocorrer:
- após o onboarding;
- após uma ACP (quando os dados enviados ainda apresentam inconsistência);
- após uma ACI anterior (quando a inconsistência persiste).
A ACI permite envio parcial: o marketplace deve atualizar apenas os campos listados em payload.requested_fields. Os demais campos do seller permanecem inalterados.
| Característica | Valor |
|---|---|
payload.object.type | INCONSISTENT_DATA_UPDATE_REQUIRED |
| Prazo total | 30 dias |
| Status inicial | OVERDUE (não há fase PENDING) |
| Completude do envio | Parcial — apenas campos em requested_fields |
Fluxo end-to-end
O processo envolve três atores: Zoop, marketplace e seller.
┌─────────┐ 1. webhook ┌──────────────┐ 2. coleta ┌────────┐
│ Zoop │ ───────────────> │ Marketplace │ ──────────────> │ Seller │
│ │ │ │ │ │
│ │ │ │ <────────────── │ │
│ │ │ │ 3. devolve │ │
│ │ <─────────────── │ │ │ │
└─────────┘ 4. envio API └──────────────┘ └────────┘
1. A Zoop dispara o webhook O evento regulatory.registration.review.required é entregue ao endpoint de webhooks configurado pelo marketplace. O payload identifica o seller, o tipo de fluxo (ACP ou ACI), o prazo e os campos a serem atualizados.
2. O marketplace solicita os dados ao seller Ao receber o webhook, o marketplace deve iniciar uma jornada de coleta com o seller (in-app, e-mail, push, formulário etc.) para obter os dados solicitados. Os dados devem ser coletados diretamente do seller no momento da solicitação.
3. O seller devolve os dados ao marketplace O seller informa os dados atualizados pela jornada criada pelo marketplace.
4. O marketplace envia os dados à Zoop Com os dados em mãos, o marketplace chama PUT /registration/review enviando o payload conforme o tipo de fluxo. A Zoop processa a requisição, atualiza o cadastro e marca o processo como FINISHED.
Webhook
Evento
| Campo | Valor |
|---|---|
| Evento | regulatory.registration.review.required |
| Método | POST |
| Destino | Endpoint de webhooks configurado pelo marketplace |
| Timeout esperado | O marketplace deve responder 200 OK em até 30 segundos |
Payload
{
"id": "evt_abc123",
"type": "regulatory.registration.review.required",
"created_at": "2026-06-15T10:30:00Z",
"payload": {
"object": {
"type": "REGISTRATION_REVIEW_REQUIRED",
"process_id": "prc_9f8e7d6c5b4a",
"customer_id": "sel_1a2b3c4d5e6f",
"status": "PENDING",
"deadline_at": "2026-08-14T23:59:59Z",
"requested_fields": [
"revenue",
"address.line1",
"address.postal_code"
]
}
}
}Campos relevantes
| Campo | Tipo | Descrição |
|---|---|---|
payload.object.type | string | Diferencia o fluxo. Valores: REGISTRATION_REVIEW_REQUIRED (ACP) ou INCONSISTENT_DATA_UPDATE_REQUIRED (ACI). |
payload.object.process_id | string | Identificador único do processo de atualização. Use como chave de idempotência em retentativas de envio. |
payload.object.customer_id | string | Identificador do seller (seller_id). |
payload.object.status | string | Status atual do processo. Valores: PENDING, OVERDUE, EXPIRED, FINISHED. |
payload.object.deadline_at | string (ISO 8601) | Data e hora limite para regularização. |
payload.object.requested_fields | array de strings | Lista de campos que devem ser atualizados. Em ACP, contempla todos os campos cadastrais previstos. Em ACI, contempla apenas os campos com inconsistência. |
Como diferenciar ACP de ACI
O evento é o mesmo em ambos os fluxos. A diferenciação se faz pelo campo payload.object.type:
if (payload.object.type === "REGISTRATION_REVIEW_REQUIRED") {
// Fluxo ACP — envie todos os campos cadastrais previstos para o tipo de seller
} else if (payload.object.type === "INCONSISTENT_DATA_UPDATE_REQUIRED") {
// Fluxo ACI — envie apenas os campos listados em requested_fields
}Endpoint de envio
Após coletar os dados com o seller, o marketplace envia a atualização à Zoop.
PUT /v1/marketplaces/{marketplace_id}/sellers/{seller_id}/registration/reviewDocumentação de referência: Atualizar registro de revisão cadastral.
Autenticação
A chamada exige mTLS combinado com autenticação Basic ou Bearer, conforme configuração do marketplace no ambiente de produção.
Headers
| Header | Valor |
|---|---|
Content-Type | application/json |
Authorization | Basic {credenciais} ou Bearer {token} |
Idempotency-Key | {process_id} (recomendado em retentativas) |
Body — ACP (envio completo)
Para o fluxo ACP, o marketplace deve enviar todos os campos cadastrais previstos para o tipo de seller.
Pessoa Física:
{
"process_id": "prc_9f8e7d6c5b4a",
"revenue": "10000_to_50000",
"address": {
"line1": "Avenida Paulista, 1000",
"line2": "Apto 502",
"line3": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"postal_code": "01310100",
"country_code": "BR"
}
}Pessoa Jurídica: inclui adicionalmente owner.revenue e owner.address referentes ao representante legal.
{
"process_id": "prc_9f8e7d6c5b4a",
"revenue": "100000_to_500000",
"address": {
"line1": "Avenida Paulista, 1000",
"line2": "Conj. 1501",
"line3": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"postal_code": "01310100",
"country_code": "BR"
},
"owner": {
"revenue": "50000_to_100000",
"address": {
"line1": "Rua das Flores, 250",
"line2": "Casa 2",
"line3": "Vila Madalena",
"city": "São Paulo",
"state": "SP",
"postal_code": "05432010",
"country_code": "BR"
}
}
}Body — ACI (envio parcial)
Para o fluxo ACI, o marketplace deve enviar apenas os campos listados em requested_fields no webhook. Os demais campos do seller serão preservados.
{
"process_id": "prc_9f8e7d6c5b4a",
"revenue": "50000_to_100000",
"address": {
"postal_code": "01310100"
}
}Validações de campos
| Campo | Regra |
|---|---|
postal_code | 8 dígitos, sem máscara (ex.: "01310100") |
country_code | Código ISO 3166-1 alpha-2 em letras maiúsculas (ex.: "BR") |
revenue | Faixa de receita, em formato de string padronizado (ex.: "10000_to_50000"). Não enviar valor exato. |
address.line1 | Logradouro e número, concatenados (ex.: "Avenida Paulista, 1000") |
address.line2 | Complemento (opcional) |
address.line3 | Bairro |
Atenção ao formato de endereçoA Seller API utiliza o formato
line1/line2/line3, distinto do formato adotado pelos endpoints bancários (street/number/complement). Ao chamarPUT /registration/review, utilize sempre o formatoline*.
Respostas
| Código | Significado | Ação esperada |
|---|---|---|
200 OK | Atualização sincronizada com sucesso. Processo passa para FINISHED. | Nenhuma ação adicional. |
400 Bad Request | Payload inválido (campo ausente, formato incorreto, valor fora da regra). | Corrigir o payload e reenviar. |
401 Unauthorized | Falha de autenticação. | Validar credenciais e configuração mTLS. |
404 Not Found | process_id ou seller_id não encontrado. | Verificar os identificadores recebidos no webhook. |
409 Conflict | Processo já concluído ou inválido para o estado atual. | Validar o status do processo antes de reenviar. |
500 Internal Server Error | Falha na sincronização interna da Zoop. A atualização não foi concluída. | Reenviar a requisição utilizando process_id como chave de idempotência. Se persistir, abrir chamado no suporte. |
Status e prazos
Cada processo de atualização passa por até quatro status ao longo de seu ciclo de vida.
| Status | ACP | ACI | Significado | Envio permitido |
|---|---|---|---|---|
PENDING | Dias 0–30 | — | Processo aberto, dentro do prazo regular. | Sim |
OVERDUE | Dias 30–60 | Dias 0–30 | Em período de tolerância. Prazo regular excedido, mas ainda dentro do limite máximo. | Sim |
EXPIRED | Após 60 dias | Após 30 dias | Prazo máximo atingido sem regularização. | Sim — ver nota abaixo |
FINISHED | — | — | Atualização concluída com sucesso. | Não aplicável |
Prazo da ACP
A ACP tem prazo total de 60 dias, divididos em duas fases:
- Dias 0–30 (
PENDING): prazo regular para regularização. - Dias 30–60 (
OVERDUE): período de tolerância. O envio permanece válido.
Prazo da ACI
A ACI tem prazo total de 30 dias e não possui fase PENDING: o processo inicia diretamente em OVERDUE.
Envio após EXPIRED
EXPIREDO endpoint PUT /registration/review continua aceitando envios mesmo após o status EXPIRED — não há bloqueio técnico ao envio. Contudo, sellers em EXPIRED ficam sujeitos a penalidades regulatórias, que podem incluir o bloqueio de movimentações financeiras (cash-in e cash-out).
A recomendação é que o marketplace priorize o envio dos dados de processos OVERDUE e EXPIRED o quanto antes para mitigar riscos ao seller.
Regras de coleta
As regras a seguir são obrigatórias e podem ser objeto de auditoria pela Zoop. O descumprimento pode acarretar penalidades regulatórias ao marketplace.
1. Os dados devem ser coletados diretamente do seller
Os dados enviados em ACP ou ACI devem ser obtidos diretamente do seller no momento da solicitação, por meio de jornada ativa (in-app, e-mail, formulário etc.).
Não é permitido preencher o payload de envio com:
- dados de bureaus ou fontes externas;
- dados da base interna do marketplace;
- dados coletados no onboarding do seller;
- dados de envios anteriores (ACP ou ACI prévias).
A Zoop poderá solicitar evidências (telas, fluxos, logs) que comprovem a coleta direta no momento da revisão.
2. Envio completo em ACP, parcial em ACI
- Em ACP, todos os campos cadastrais previstos para o tipo de seller (PF ou PJ) devem ser enviados, independentemente de o dado já estar correto na base.
- Em ACI, apenas os campos listados em
payload.requested_fieldsdevem ser enviados. Enviar campos fora dessa lista pode resultar em rejeição da requisição.
3. Um seller pode ter múltiplos processos abertos
Um mesmo seller pode receber notificações sucessivas — por exemplo, uma nova ACI após o envio de uma ACP, caso persista inconsistência nos dados. Cada notificação possui seu próprio process_id e deve ser tratada como um processo independente, com coleta e envio próprios.
O marketplace deve ser capaz de armazenar e processar múltiplos process_id simultâneos para o mesmo seller.
4. Use process_id como chave de idempotência
process_id como chave de idempotênciaEm caso de retentativa (timeout, erro 5xx, falha de rede), a requisição deve ser reenviada utilizando o process_id como Idempotency-Key. Isso evita reprocessamento duplicado do mesmo processo.
Cenários comuns
Cenário 1 — ACP após onboarding
- O seller foi cadastrado há
Nperíodos. A Zoop dispara o webhook comtype=REGISTRATION_REVIEW_REQUIRED. - O marketplace recebe o webhook, responde
200 OKe aciona o seller para coleta. - O seller informa os dados atualizados pela jornada criada pelo marketplace.
- O marketplace chama
PUT /registration/reviewcom todos os campos previstos para o tipo do seller. - A Zoop responde
200 OKe o processo passa aFINISHED.
Cenário 2 — ACI após inconsistência identificada
- A Zoop identifica inconsistência em campos específicos do cadastro do seller e dispara o webhook com
type=INCONSISTENT_DATA_UPDATE_REQUIRED. O camporequested_fieldslista os campos com inconsistência. - O marketplace responde
200 OKe aciona o seller para coleta dos campos solicitados. - O seller informa os dados pela jornada criada pelo marketplace.
- O marketplace chama
PUT /registration/reviewenviando apenas os campos listados emrequested_fields. - A Zoop responde
200 OKe o processo passa aFINISHED.
Cenário 3 — ACI subsequente a uma ACP
- O marketplace concluiu uma ACP com sucesso (processo
FINISHED). - Durante o processamento dos dados recebidos, a Zoop identifica inconsistência em um ou mais campos. Minutos depois, um novo webhook é disparado com
type=INCONSISTENT_DATA_UPDATE_REQUIREDe um novoprocess_id, listando os campos a serem corrigidos. - O marketplace trata como um processo novo e independente: aciona o seller, coleta os dados solicitados e envia.
Cenário 4 — Múltiplas ACIs em sequência
Se uma ACI for finalizada e ainda restar inconsistência nos dados, a Zoop poderá disparar nova ACI com novo process_id. O marketplace deve ser capaz de processar quantas ACIs forem necessárias até a estabilização do cadastro.
Cenário 5 — Retentativa após erro 500
- O marketplace envia
PUT /registration/review. A Zoop responde500 Internal Server Error. - O marketplace reenvia a mesma requisição, com o mesmo payload e utilizando
process_idcomoIdempotency-Key. - Em caso de persistência do erro, o marketplace deve abrir chamado no suporte. O processo permanece em seu status atual (
PENDINGouOVERDUE) e o prazo continua correndo.
Referências
Updated 3 days ago
