Pular para o conteúdo principal

Como confirmar o celular 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 celular cadastrado. A Woovi envia um código de 6 dígitos pelo WhatsApp para esse número. O sócio informa o código para você, e você o confirma na API.

São dois endpoints:

  • POST /api/v1/kyc/representatives/phone-code envia o código.
  • POST /api/v1/kyc/representatives/phone-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_PHONE_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 phone do sócio, o mesmo enviado em POST /api/v1/kyc/representatives ou no onboarding. Ele precisa ser um celular brasileiro com DDD e 9 dígitos.
  • A confirmação fica presa ao número. Se você trocar o phone depois, o sócio precisa confirmar de novo.
  • Se o celular 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 WhatsApp.
  • 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/phone-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 pelo WhatsApp. 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 WhatsApp não aceitou foi reenviado.
ALREADY_VERIFIEDO celular atual já está confirmado.
SAME_AS_ACCOUNT_USERUm usuário da conta já confirmou este celular. 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/phone-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 WhatsApp.
{
"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 celular foi confirmado.
ALREADY_VERIFIEDO celular já estava confirmado.
SAME_AS_ACCOUNT_USERNão há nada a confirmar. Um usuário da conta já confirmou este celular.
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 celular 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 número de celular6 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 WhatsApp não aceitar o código, o envio 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 celular, POST /api/v1/kyc/onboarding/submit responde 409:

{
"error": "O sócio ***.456.789-** não confirmou o celular no WhatsApp.",
"code": "MISSING_REPRESENTATIVE_PHONE_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), PHONE_INVALID (não é um celular brasileiro, só no envio), PHONE_PLACEHOLDER (número de preenchimento, como (99) 99999-9999, 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_PHONE_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 WhatsApp não aceitou o código (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 o celular",
"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/phone-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 phone 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 WhatsApp.
  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​