Verificação KYC
Abre o pedido de verificação de identidade do seller, envia e remove os documentos da empresa e consulta a situação da análise.
KYC ("know your customer", conheça seu cliente) é a verificação de identidade que algumas lojas exigem do seller antes de liberar vendas e repasses. O seller abre um pedido, anexa documentos da empresa (cartão CNPJ, contrato social, documento do responsável, comprovante de endereço, extrato bancário) e a equipe da loja analisa. Estas rotas são o lado do seller; a decisão é do administrador.
Só funcionam quando a loja ligou o módulo vendor-kyc. Sem ele, todas respondem 403 com {"error":"module_disabled","module":"vendor-kyc"}.
Situações
Nas respostas, o status vem como letra de um caractere.
| Letra | Nome | Significado |
|---|---|---|
P | pending | Pedido aberto, aceita documentos. |
O | in_review | A equipe da loja está analisando. |
A | approved | Aprovado. Vale por 1 ano a partir da aprovação. |
R | rejected | Recusado, veja rejection_reason. |
E | expired | Vencido; é preciso refazer. |
Os documentos têm P (pendente), A (aprovado) e R (recusado).
Tipos de documento (document_type)
| Valor | Documento |
|---|---|
cnpj_card | Cartão CNPJ |
social_contract | Contrato social |
id_document | Documento de identidade do responsável |
address_proof | Comprovante de endereço |
bank_statement | Extrato bancário |
Consultar a situação
/api/v1/vendor/kycSellerSituação da verificação e documentos enviados
Devolve a verificação mais recente do seller, seus documentos e se o seller está hoje verificado (aprovada e dentro da validade).
{
"verification": {
"id": "6c0a3b2e-4d5f-4a8e-9b1c-7e2f1a0b9c3d",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"status": "P",
"submitted_at": "2026-10-11T20:00:00Z",
"notes": "",
"vendor_name": "Loja Seller Teste"
},
"documents": [
{
"id": "0b1c2d3e-4f50-4a61-8b72-93a4b5c6d7e8",
"verification_id": "6c0a3b2e-4d5f-4a8e-9b1c-7e2f1a0b9c3d",
"document_type": "cnpj_card",
"file_name": "cartao-cnpj.pdf",
"file_url": "/uploads/kyc-documents/94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36/5a1f0c9e.pdf",
"status": "P",
"uploaded_at": "2026-10-11T20:05:00Z"
}
],
"is_verified": false
}{ "verification": null, "documents": [], "is_verified": false }Campos da resposta
verificationobjectnull se o seller nunca abriu uma.verification.iduuidverification.statusstringPOAREverification.submitted_atstringverification.reviewed_atstringverification.expires_atstringverification.rejection_reasonstringverification.notesstringdocumentsarraydocuments[].iduuiddocId da remoção.documents[].document_typestringcnpj_cardsocial_contractid_documentaddress_proofbank_statementdocuments[].file_namestringdocuments[].file_urlstringdocuments[].statusstringPARdocuments[].rejection_reasonstringdocuments[].uploaded_atstringis_verifiedbooleantrue só se há verificação aprovada e ainda válida.Abrir o pedido
/api/v1/vendor/kyc/submitSellerAbre um pedido de verificação KYC
Cria uma verificação nova em pending, com a lista de checagens que a equipe da loja vai percorrer. Sem corpo. Só pode haver um pedido ativo por vez: se já existe um pending ou in_review, a resposta é 409. Depois de uma recusa ou de uma expiração, você pode abrir outro.
{
"id": "6c0a3b2e-4d5f-4a8e-9b1c-7e2f1a0b9c3d",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"status": "P",
"submitted_at": "2026-10-11T20:00:00Z",
"notes": ""
}Enviar um documento
/api/v1/vendor/kyc/documentsSellerEnvia um documento da empresa
Envio de arquivo em multipart/form-data. O servidor confere o conteúdo do arquivo, não a extensão: só PDF, JPEG e PNG são aceitos, com até 10 MB. O mesmo tipo de documento pode ser enviado mais de uma vez.
Corpo da requisição (multipart/form-data)
document_typestringobrigatóriocnpj_cardsocial_contractid_documentaddress_proofbank_statementfilefileobrigatório{
"message": "document uploaded",
"document_type": "cnpj_card",
"file_url": "/uploads/kyc-documents/94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36/5a1f0c9e.pdf"
}Remover um documento
/api/v1/vendor/kyc/documents/{docId}SellerRemove um documento ainda pendente
Apaga um documento que a equipe da loja ainda não analisou (P). Documento já aprovado ou recusado não pode ser removido.
Parâmetros de caminho
docIduuidobrigatórioid dentro de documents.{ "message": "document deleted" }Exemplo de requisição
# 1. abrir o pedido
curl -X POST "$BASE_URL/api/v1/vendor/kyc/submit" \
-H "Authorization: Bearer $TOKEN"
# 2. enviar um documento
curl -X POST "$BASE_URL/api/v1/vendor/kyc/documents" \
-H "Authorization: Bearer $TOKEN" \
-F "document_type=cnpj_card" \
-F "file=@cartao-cnpj.pdf;type=application/pdf"
# 3. acompanhar
curl "$BASE_URL/api/v1/vendor/kyc" -H "Authorization: Bearer $TOKEN"Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Envio de documento sem ter aberto o pedido. | {"error":"no KYC verification found ... submit for verification first"} |
| 400 | Pedido fora de pending ou rejected ao enviar documento. | {"error":"cannot upload documents while verification is O"} |
| 400 | Formulário inválido ou maior que 10 MB. | {"error":"failed to parse form (max 10MB)","detail":"..."} |
| 400 | document_type ausente. | {"error":"document_type is required"} |
| 400 | document_type fora da lista. | {"error":"invalid document_type","detail":"Valid types: cnpj_card, social_contract, id_document, address_proof, bank_statement"} |
| 400 | file ausente. | {"error":"file is required","detail":"..."} |
| 400 | Arquivo que não é PDF, JPEG ou PNG. | {"error":"unsupported file type","detail":"Accepted: PDF, JPG, PNG. Detected: text/plain; charset=utf-8"} |
| 400 | docId não é UUID válido. | {"error":"invalid docId","detail":"docId must be a valid UUID"} |
| 401 | Sem token. | {"error":"authentication required"} |
| 403 | Módulo desligado na loja. | {"error":"module_disabled","module":"vendor-kyc"} |
| 404 | Usuário sem cadastro de seller. | {"error":"vendor profile not found"} |
| 404 | Remoção sem pedido de verificação. | {"error":"no KYC verification found"} |
| 409 | Já existe um pedido pending ou in_review. | {"error":"failed to create verification","detail":"vendor already has an active KYC verification"} |
| 500 | Remoção de documento inexistente ou já analisado. | {"error":"failed to delete document","detail":"document not found or already reviewed"} |