Skip to main content

Como confirmar o e-mail de um sócio administrador via API?

Quando a sua empresa conduz o onboarding inteiro pela API, você precisa provar que cada sócio administrador tem acesso ao e-mail cadastrado. A Woovi envia um código de 6 dígitos para esse endereço. O sócio informa o código para você, e você o confirma na API.

São dois endpoints:

  • POST /api/v1/kyc/representatives/email-code envia o código.
  • POST /api/v1/kyc/representatives/email-code/verify confirma o código.

O formulário hospedado da Woovi faz a mesma confirmação na tela do sócio. Use estes endpoints só quando o sócio não passa pelo formulário.

Referência completa

Para o schema, parâmetros e exemplos interativos, veja a seção KYC da API Reference.

Quando a confirmação é exigida​

A confirmação só vale quando a empresa dona do registro tem a feature KYC_REPRESENTATIVE_EMAIL_OTP. Sem ela, o submit não pede nada e os dois endpoints respondem 403 com code FEATURE_NOT_ENABLED, depois das checagens do registro e do sócio (um registro inexistente ainda responde 404 e um sócio inexistente, 400).

Com a feature ativa:

  • Só os sócios ADMIN ativos precisam confirmar. Se o registro tem administradores marcados como alvo (target: true), só eles precisam.
  • O código vai para o email do sócio, o mesmo enviado em POST /api/v1/kyc/representatives ou no onboarding. Ele precisa ser um endereço real, não um domínio de preenchimento como example.com.
  • A confirmação fica presa ao endereço. Se você trocar o email depois, o sócio precisa confirmar de novo.
  • Se o e-mail do sócio é o mesmo que um usuário da conta já confirmou, não há código a enviar. A API responde SAME_AS_ACCOUNT_USER. Esse atalho não existe em registros BaaS: neles todo administrador confirma pelo e-mail.
  • Empresas internacionais (KYC_INTERNACIONAL) e o ambiente de sandbox não pedem a confirmação. Nelas os endpoints também respondem 403 FEATURE_NOT_ENABLED.

Autenticação​

Envie o AppID no header Authorization, como nos outros endpoints de KYC. Veja Primeiros passos com a API de KYC Onboarding.

Requisitos​

  • A empresa deve possuir a feature BAAS (ou PARTNER).
  • A aplicação deve possuir o scope KYC_REPRESENTATIVES_POST, o mesmo usado para cadastrar sócios.
  • O registro precisa estar PENDING.

Enviar o código​

POST /api/v1/kyc/representatives/email-code

Campos​

  • correlationID (obrigatório): o correlationID enviado em POST /api/v1/kyc/onboarding, ou o CNPJ do registro.
  • representativeId (obrigatório): o id do sócio, retornado por GET /api/v1/kyc/representatives.
{
"correlationID": "merchant-4417",
"representativeId": "6650e0f1a2b3c4d5e6f70809"
}

Resposta​

Toda resposta sobre o envio é um 200 com um outcome. Os limites também respondem 200, não erro.

{
"outcome": "CODE_SENT"
}
outcomeSignificado
CODE_SENTO código foi enviado por e-mail. Pode ser um código novo ou o código ainda válido, enviado de novo.
ALREADY_SENTNada novo foi gasto. O código saiu há menos de 30 segundos, ou um código que o envio não aceitou foi reenviado.
ALREADY_VERIFIEDO e-mail atual já está confirmado.
SAME_AS_ACCOUNT_USERUm usuário da conta já confirmou este e-mail. Não há nada a fazer.
COOLDOWNAguarde 30 segundos desde o último código.
SEND_LIMIT_REACHEDNão há mais envios disponíveis agora. Veja Limites.
BLOCKEDO sócio errou o código 3 vezes. Nenhum código novo por 24 horas a partir do último erro.
TRY_AGAINUma chamada concorrente venceu, ou o limitador de envios está indisponível. Chame de novo.

Confirmar o código​

POST /api/v1/kyc/representatives/email-code/verify

Campos​

  • correlationID (obrigatório): o mesmo do envio.
  • representativeId (obrigatório): o mesmo do envio.
  • code (obrigatório): os 6 dígitos que o sócio recebeu no e-mail.
{
"correlationID": "merchant-4417",
"representativeId": "6650e0f1a2b3c4d5e6f70809",
"code": "123456"
}

Resposta​

Toda resposta sobre o código é um 200 com um outcome, inclusive o código errado.

{
"outcome": "VERIFIED"
}
outcomeSignificado
VERIFIEDO e-mail foi confirmado.
ALREADY_VERIFIEDO e-mail já estava confirmado.
SAME_AS_ACCOUNT_USERNão há nada a confirmar. Um usuário da conta já confirmou este e-mail.
WRONG_CODEO código não confere. Conta como uma tentativa errada.
CODE_EXPIREDO código tem mais de 10 minutos. Envie um novo.
NO_ACTIVE_CODENenhum código foi enviado para o e-mail atual.
BLOCKEDO sócio errou o código 3 vezes. Tente de novo 24 horas após o último erro.
TRY_AGAINUma chamada concorrente venceu. Chame de novo.

Um code que não tem exatamente 6 dígitos responde 400 com INVALID_CODE_FORMAT e não gasta tentativa.

Limites​

RegraValor
Validade do código10 minutos
Intervalo entre dois envios30 segundos
Envios por sócio3 por hora
Envios por registro10 por hora, somando todos os sócios
Envios por endereço de e-mail6 por dia, somando todos os registros
Códigos errados3 erros bloqueiam envio e confirmação por 24 horas após o último erro

Enquanto o código está válido, um novo envio manda o mesmo código de novo, sem gerar outro. Esse reenvio conta nos limites de envio. O código certo zera a contagem de erros.

Se o envio do e-mail falhar, a chamada responde 502 com DELIVERY_FAILED. Chamar de novo depois de 30 segundos reenvia o mesmo código sem gastar envio, no máximo 2 vezes por código.

Efeito no submit​

Enquanto algum administrador exigido não confirmar o e-mail, POST /api/v1/kyc/onboarding/submit responde 409:

{
"error": "O sócio ***.456.789-** não confirmou o e-mail.",
"code": "MISSING_REPRESENTATIVE_EMAIL_VERIFICATION"
}

Envie e confirme o código desse sócio e chame o submit de novo.

Códigos de resposta​

StatusDescrição
200Resposta com outcome (tabelas acima)
400Body inválido, ou code REPRESENTATIVE_NOT_FOUND, REPRESENTATIVE_NOT_IN_SCOPE (o sócio não precisa confirmar), EMAIL_INVALID (não é um e-mail, só no envio), EMAIL_PLACEHOLDER (domínio de preenchimento, como example.com, só no envio) ou INVALID_CODE_FORMAT (só na confirmação)
401AppID inválido
403Empresa sem BAAS, aplicação sem o scope KYC_REPRESENTATIVES_POST, ou code FEATURE_NOT_ENABLED (empresa sem KYC_REPRESENTATIVE_EMAIL_OTP, internacional ou sandbox)
404Nenhum registro com este correlationID nesta empresa
409code REGISTER_CLOSED: o registro não está mais PENDING
502code DELIVERY_FAILED: o e-mail não foi aceito (só no envio)

Os erros com code trazem também error, uma mensagem em português. Decida pelo code, não pela mensagem.

{
"error": "Este sócio não precisa confirmar um e-mail",
"code": "REPRESENTATIVE_NOT_IN_SCOPE"
}

Quando falta um campo no body, o 400 traz em error a lista de problemas de validação (cada item com code, path e message) e não tem code no nível de cima.

Exemplos em código​

curl 'https://api.woovi.com/api/v1/kyc/representatives/email-code' -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: SEU_APPID_AQUI" \
--data-binary '{
"correlationID": "merchant-4417",
"representativeId": "6650e0f1a2b3c4d5e6f70809"
}'

Fluxo completo​

  1. Cadastre o sócio ADMIN com o email dele em POST /api/v1/kyc/representatives (ou no onboarding).
  2. Busque o id do sócio em GET /api/v1/kyc/representatives.
  3. Chame o envio. Com CODE_SENT, peça ao sócio o código que chegou no e-mail.
  4. Chame a confirmação com o código. Com VERIFIED, o sócio está confirmado.
  5. Repita para cada administrador exigido e chame POST /api/v1/kyc/onboarding/submit.

Veja também​