Estamos revisando estes procedimentos. Pessoas técnicas podem encontrar ajustes em códigos de erro ou mapeamentos de payload; valide com os logs e o OpenAPI mais recente. Pessoas não técnicas podem continuar usando o passo a passo e acionar o time de suporte caso algo pareça diferente do descrito.
👤 Cadastro - Dados Pessoais
Guia completo para consultar e atualizar informações cadastrais dos clientes.
Introdução
Este serviço permite que você gerencie os dados cadastrais dos clientes de forma completa, incluindo:
- 👤 Consulta de dados pessoais
- ✏️ Atualização de dados pessoais
- 📍 Gerenciamento de endereços
- 🔍 Busca de endereço por CEP
URLs Base:
- Produção:
https://api.credsystem.com.br/private-label-app/api/v1 - Homologação:
https://apihml.credsystem.com.br/private-label-app/api/v1
Autenticação
Todas as requisições precisam incluir o token de autenticação no header:
Authorization: Bearer <seu_token_jwt>
Tokens inválidos ou expirados retornarão erro 401 Unauthorized.
Dados Pessoais
1. Consultar Dados Pessoais
Retorne as informações cadastrais completas do cliente autenticado.
Endpoint: GET /dados-pessoais
Headers:
Authorization: Bearer <seu_token_jwt>
Accept: application/json
Content-Type: application/json
Exemplo de Request:
GET /private-label-app/api/v1/cadastro/dados-pessoais HTTP/1.1
Host: bff-app-privatelabel-hml.credsystem.com.br
Authorization: Bearer <token>
Accept: application/json
Resposta de Sucesso (200):
{
"codigo": 12345,
"cpf": "12345678901",
"nome": "JOÃO DA SILVA",
"email": "joao@example.com",
"nascimento": "1990-01-15",
"sexo": "M",
"estadoCivil": "Casado",
"nomeMae": "MARIA SILVA",
"documento": "123456789",
"tipoDocumento": "RG",
"orgaoEmissor": "SSP/SP",
"dataEmissaoDocumento": "2020-01-10",
"tipoResidencia": "Própria",
"faixaRiscoAtual": "Baixo"
}
Campos da Resposta:
codigo: ID único do cliente no sistemacpf: CPF sem formatação (apenas números)nome: Nome completo em maiúsculasemail: E-mail cadastradonascimento: Data de nascimento (formato YYYY-MM-DD)sexo: Sexo ("M" para Masculino, "F" para Feminino)estadoCivil: Estado civil (Solteiro, Casado, Divorciado, Viúvo)nomeMae: Nome completo da mãedocumento: Número do documento de identificaçãotipoDocumento: Tipo do documento (RG, CNH, RNE)orgaoEmissor: Órgão emissor do documento (ex: SSP/SP)dataEmissaoDocumento: Data de emissão do documentotipoResidencia: Tipo de moradia (Própria, Alugada, Familiar)faixaRiscoAtual: Classificação de risco do cliente
Exemplo de cURL:
curl -X 'GET' \
'https://bff-app-privatelabel-hml.credsystem.com.br/private-label-app/api/v1/cadastro/dados-pessoais' \
-H 'accept: application/json' \
-H 'Authorization: Bearer SEU_TOKEN_JWT'
Use este endpoint para preencher formulários de edição de perfil ou exibir dados do cliente.
2. Atualizar Dados Pessoais
Atualize as informações cadastrais do cliente.
Endpoint: PUT /dados-pessoais
Headers:
Authorization: Bearer <seu_token_jwt>
Accept: application/json
Content-Type: application/json
Body (exemplo):
{
"codigo": 12345,
"cpf": "12345678901",
"nome": "JOÃO DA SILVA",
"email": "joao.novo@example.com",
"nascimento": "1990-01-15",
"sexo": "M",
"estadoCivil": "Casado",
"nomeMae": "MARIA SILVA",
"documento": "123456789",
"tipoDocumento": "RG",
"orgaoEmissor": "SSP/SP",
"dataEmissaoDocumento": "2020-01-10",
"tipoResidencia": "Própria",
"faixaRiscoAtual": "Baixo"
}
Campos do Request:
- Todos os campos são obrigatórios
codigo: Deve ser o ID do cliente autenticadocpf: Não pode ser alteradonome: Nome completo (será convertido para maiúsculas)email: E-mail válidonascimento: Formato YYYY-MM-DDsexo: "M" ou "F"- Demais campos conforme especificação anterior
Resposta de Sucesso (200):
{
"statusCode": 200,
"reasonPhrase": "OK",
"httpVersion": "1.1",
"content": "Dados pessoais atualizados com sucesso"
}
Exemplo de cURL:
curl -X 'PUT' \
'https://bff-app-privatelabel-hml.credsystem.com.br/private-label-app/api/v1/cadastro/dados-pessoais' \
-H 'accept: application/json' \
-H 'Authorization: Bearer SEU_TOKEN_JWT' \
-H 'Content-Type: application/json' \
-d '{
"codigo": 12345,
"cpf": "12345678901",
"nome": "JOÃO DA SILVA",
"email": "joao.novo@example.com",
"nascimento": "1990-01-15",
"sexo": "M",
"estadoCivil": "Casado",
"nomeMae": "MARIA SILVA",
"documento": "123456789",
"tipoDocumento": "RG",
"orgaoEmissor": "SSP/SP",
"dataEmissaoDocumento": "2020-01-10",
"tipoResidencia": "Própria",
"faixaRiscoAtual": "Baixo"
}'
- O CPF não pode ser alterado
- Alguns campos podem ter validações específicas no backend
- Sempre envie todos os campos obrigatórios
Gerenciamento de Endereços
3. Listar Endereços
Consulte todos os endereços cadastrados do cliente.
Endpoint: GET /dados-pessoais/endereco
Headers:
Authorization: Bearer <seu_token_jwt>
Accept: application/json
Resposta de Sucesso (200):
[
{
"tipoEndereco": "Residencial",
"endereco": "Rua das Flores",
"numero": 123,
"complemento": "Apto 45",
"bairro": "Jardins",
"cep": "01234567",
"cidade": "São Paulo",
"siglaEstado": "SP",
"localEndereco": 1
},
{
"tipoEndereco": "Comercial",
"endereco": "Av Paulista",
"numero": 1000,
"complemento": "Sala 501",
"bairro": "Bela Vista",
"cep": "01310100",
"cidade": "São Paulo",
"siglaEstado": "SP",
"localEndereco": 2
}
]
Campos da Resposta:
tipoEndereco: Tipo (Residencial, Comercial, Outros)endereco: Nome da rua/avenidanumero: Número do imóvelcomplemento: Informações adicionais (opcional)bairro: Nome do bairrocep: CEP sem formatação (8 dígitos)cidade: Nome da cidadesiglaEstado: UF (2 letras)localEndereco: Identificador do endereço
Exemplo de cURL:
curl -X 'GET' \
'https://bff-app-privatelabel-hml.credsystem.com.br/private-label-app/api/v1/cadastro/dados-pessoais/endereco' \
-H 'accept: application/json' \
-H 'Authorization: Bearer SEU_TOKEN_JWT'
4. Atualizar Endereços
Atualize os endereços cadastrados do cliente.
Endpoint: PUT /dados-pessoais/endereco
Headers:
Authorization: Bearer <seu_token_jwt>
Accept: application/json
Content-Type: application/json
Body:
{
"codigo": 12345,
"enderecos": [
{
"tipoEndereco": "Residencial",
"endereco": "Rua das Flores",
"numero": 123,
"complemento": "Apto 45",
"bairro": "Jardins",
"cep": "01234567",
"cidade": "São Paulo",
"siglaEstado": "SP",
"localEndereco": 1
}
]
}
Campos do Request:
codigo: ID do cliente (obrigatório)enderecos: Array de endereços (obrigatório)
Campos de cada Endereço:
tipoEndereco: Tipo do endereço (obrigatório)endereco: Logradouro (obrigatório)numero: Número do imóvel (obrigatório)complemento: Complemento (opcional)bairro: Bairro (obrigatório)cep: CEP com 8 dígitos (obrigatório)cidade: Cidade (obrigatório)siglaEstado: UF (obrigatório)localEndereco: Identificador (opcional)
Resposta de Sucesso (200):
{
"statusCode": 200,
"reasonPhrase": "OK",
"httpVersion": "1.1",
"content": "Endereço atualizado com sucesso"
}
Exemplo de cURL:
curl -X 'PUT' \
'https://bff-app-privatelabel-hml.credsystem.com.br/private-label-app/api/v1/cadastro/dados-pessoais/endereco' \
-H 'accept: application/json' \
-H 'Authorization: Bearer SEU_TOKEN_JWT' \
-H 'Content-Type: application/json' \
-d '{
"codigo": 12345,
"enderecos": [
{
"tipoEndereco": "Residencial",
"endereco": "Rua das Flores",
"numero": 123,
"complemento": "Apto 45",
"bairro": "Jardins",
"cep": "01234567",
"cidade": "São Paulo",
"siglaEstado": "SP",
"localEndereco": 1
}
]
}'
Você pode enviar múltiplos endereços no array enderecos para cadastrar/atualizar vários de uma vez.
Consulta de CEP
5. Buscar Endereço por CEP
Facilite o preenchimento de formulários buscando dados pelo CEP.
Endpoint: GET /cep/{cep}
Parâmetros:
cep(path, obrigatório): CEP com 8 dígitos sem formatação
Headers:
Authorization: Bearer <seu_token_jwt>
Accept: application/json
Exemplo:
GET /private-label-app/api/v1/cadastro/cep/01234567 HTTP/1.1
Host: bff-app-privatelabel-hml.credsystem.com.br
Authorization: Bearer <token>
Accept: application/json
Resposta de Sucesso (200):
{
"cep": "01234567",
"endereco": "Rua das Flores",
"bairro": "Jardins",
"cidade": "São Paulo",
"siglaEstado": "SP"
}
Campos da Resposta:
cep: CEP consultadoendereco: Logradouro encontradobairro: Bairro do CEPcidade: Cidade do CEPsiglaEstado: UF do estado
Exemplo de cURL:
curl -X 'GET' \
'https://bff-app-privatelabel-hml.credsystem.com.br/private-label-app/api/v1/cadastro/cep/01234567' \
-H 'accept: application/json' \
-H 'Authorization: Bearer SEU_TOKEN_JWT'
Use este endpoint para autocompletar formulários de endereço quando o usuário digitar o CEP.
Erro - CEP Não Encontrado (404):
{
"error": {
"message": "CEP não encontrado",
"code": 404
}
}
Códigos de Resposta
| Código | Status | Descrição |
|---|---|---|
| 200 | ✅ Sucesso | Operação realizada com sucesso |
| 204 | ∅ Sem conteúdo | Sem dados para retornar |
| 400 | ⚠️ Bad Request | Parâmetros inválidos ou dados incompletos |
| 401 | ⛔ Unauthorized | Token inválido ou expirado |
| 404 | 🔍 Not Found | Recurso não encontrado (ex: CEP inválido) |
| 500 | 💥 Internal Error | Erro interno do servidor |
Tratamento de Erros
Erro de Validação (400)
{
"error": {
"message": "Parâmetros inválidos ou dados incompletos",
"code": 400
}
}
Erro de Autenticação (401)
{
"error": {
"message": "Token Inválido ou Token Expirado",
"code": 401
}
}
CEP Não Encontrado (404)
{
"error": {
"message": "CEP não encontrado",
"code": 404
}
}
Fluxo de Edição de Perfil
1. Cliente acessa "Meu Perfil"
↓
2. Carregar Dados Pessoais (GET /dados-pessoais)
↓
3. Exibir formulário preenchido
↓
4. Cliente edita informações (ex: e-mail)
↓
5. Validar dados no frontend
↓
6. Enviar atualização (PUT /dados-pessoais)
↓
7. Exibir mensagem de sucesso
Fluxo de Atualização de Endereço
1. Cliente acessa "Endereços"
↓
2. Listar Endereços (GET /dados-pessoais/endereco)
↓
3. Cliente clica em "Adicionar/Editar Endereço"
↓
4. Cliente digita o CEP
↓
5. Buscar endereço (GET /cep/{cep})
↓
6. Preencher campos automaticamente
↓
7. Cliente completa número e complemento
↓
8. Salvar endereço (PUT /dados-pessoais/endereco)
↓
9. Atualizar lista de endereços
Exemplos de Implementação
Exemplo 1: Formulário de Edição de Perfil
// Carregar dados do cliente
async function carregarDadosPerfil() {
try {
const response = await fetch(
'https://bff-app-privatelabel-hml.credsystem.com.br/private-label-app/api/v1/cadastro/dados-pessoais',
{
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json'
}
}
);
if (!response.ok) {
throw new Error('Erro ao carregar dados');
}
const dados = await response.json();
// Preencher formulário
document.getElementById('nome').value = dados.nome;
document.getElementById('email').value = dados.email;
document.getElementById('cpf').value = formatarCPF(dados.cpf);
document.getElementById('nascimento').value = dados.nascimento;
document.getElementById('sexo').value = dados.sexo;
document.getElementById('estadoCivil').value = dados.estadoCivil;
document.getElementById('nomeMae').value = dados.nomeMae;
return dados;
} catch (error) {
console.error('Erro ao carregar perfil:', error);
alert('Não foi possível carregar seus dados');
}
}
// Atualizar dados do cliente
async function atualizarDadosPerfil(dados) {
try {
const response = await fetch(
'https://bff-app-privatelabel-hml.credsystem.com.br/private-label-app/api/v1/cadastro/dados-pessoais',
{
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(dados)
}
);
if (!response.ok) {
throw new Error('Erro ao atualizar dados');
}
const resultado = await response.json();
alert(resultado.content);
} catch (error) {
console.error('Erro ao atualizar perfil:', error);
alert('Não foi possível atualizar seus dados');
}
}
Exemplo 2: Busca de CEP com Autopreenchimento
// Buscar endereço por CEP
async function buscarCEP(cep) {
// Remover formatação do CEP
const cepLimpo = cep.replace(/\D/g, '');
if (cepLimpo.length !== 8) {
alert('CEP inválido');
return;
}
try {
const response = await fetch(
`https://bff-app-privatelabel-hml.credsystem.com.br/private-label-app/api/v1/cadastro/cep/${cepLimpo}`,
{
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json'
}
}
);
if (response.status === 404) {
alert('CEP não encontrado');
return;
}
if (!response.ok) {
throw new Error('Erro ao buscar CEP');
}
const endereco = await response.json();
// Preencher campos
document.getElementById('endereco').value = endereco.endereco;
document.getElementById('bairro').value = endereco.bairro;
document.getElementById('cidade').value = endereco.cidade;
document.getElementById('estado').value = endereco.siglaEstado;
// Focar no campo número
document.getElementById('numero').focus();
return endereco;
} catch (error) {
console.error('Erro ao buscar CEP:', error);
alert('Erro ao consultar CEP');
}
}
// Event listener para campo CEP
document.getElementById('cep').addEventListener('blur', function(e) {
const cep = e.target.value;
if (cep) {
buscarCEP(cep);
}
});
Exemplo 3: Gerenciar Múltiplos Endereços
// Listar endereços do cliente
async function listarEnderecos() {
try {
const response = await fetch(
'https://bff-app-privatelabel-hml.credsystem.com.br/private-label-app/api/v1/cadastro/dados-pessoais/endereco',
{
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json'
}
}
);
if (!response.ok) {
throw new Error('Erro ao carregar endereços');
}
const enderecos = await response.json();
// Renderizar lista
const lista = document.getElementById('lista-enderecos');
lista.innerHTML = '';
enderecos.forEach(endereco => {
const card = criarCardEndereco(endereco);
lista.appendChild(card);
});
return enderecos;
} catch (error) {
console.error('Erro ao listar endereços:', error);
alert('Não foi possível carregar os endereços');
}
}
// Salvar endereços
async function salvarEnderecos(codigoCliente, enderecos) {
try {
const response = await fetch(
'https://bff-app-privatelabel-hml.credsystem.com.br/private-label-app/api/v1/cadastro/dados-pessoais/endereco',
{
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
codigo: codigoCliente,
enderecos: enderecos
})
}
);
if (!response.ok) {
throw new Error('Erro ao salvar endereços');
}
const resultado = await response.json();
alert(resultado.content);
// Recarregar lista
await listarEnderecos();
} catch (error) {
console.error('Erro ao salvar endereços:', error);
alert('Não foi possível salvar os endereços');
}
}
// Criar card visual de endereço
function criarCardEndereco(endereco) {
const card = document.createElement('div');
card.className = 'endereco-card';
card.innerHTML = `
<div class="tipo">${endereco.tipoEndereco}</div>
<div class="logradouro">
${endereco.endereco}, ${endereco.numero}
${endereco.complemento ? ' - ' + endereco.complemento : ''}
</div>
<div class="localidade">
${endereco.bairro} - ${endereco.cidade}/${endereco.siglaEstado}
</div>
<div class="cep">CEP: ${formatarCEP(endereco.cep)}</div>
<button onclick="editarEndereco(${endereco.localEndereco})">Editar</button>
`;
return card;
}
Funções Auxiliares
Formatação de CPF
function formatarCPF(cpf) {
return cpf.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/, '$1.$2.$3-$4');
}
function limparCPF(cpf) {
return cpf.replace(/\D/g, '');
}
Formatação de CEP
function formatarCEP(cep) {
return cep.replace(/(\d{5})(\d{3})/, '$1-$2');
}
function limparCEP(cep) {
return cep.replace(/\D/g, '');
}
Validação de E-mail
function validarEmail(email) {
const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return regex.test(email);
}
Validação de Data
function validarDataNascimento(data) {
const nascimento = new Date(data);
const hoje = new Date();
const idade = hoje.getFullYear() - nascimento.getFullYear();
// Deve ter pelo menos 18 anos
return idade >= 18;
}
Boas Práticas
1. Validação no Frontend
function validarFormularioPerfil(dados) {
const erros = [];
if (!dados.nome || dados.nome.length < 3) {
erros.push('Nome deve ter pelo menos 3 caracteres');
}
if (!validarEmail(dados.email)) {
erros.push('E-mail inválido');
}
if (!validarDataNascimento(dados.nascimento)) {
erros.push('Cliente deve ter pelo menos 18 anos');
}
if (erros.length > 0) {
alert(erros.join('\n'));
return false;
}
return true;
}
2. Cache de Dados
// Cache dos dados pessoais
const CACHE_TIME = 300000; // 5 minutos
async function getDadosPessoaisComCache() {
const cache = sessionStorage.getItem('dadosPessoais');
const cacheTime = sessionStorage.getItem('dadosPessoaisTime');
if (cache && cacheTime && (Date.now() - cacheTime < CACHE_TIME)) {
return JSON.parse(cache);
}
const dados = await carregarDadosPerfil();
sessionStorage.setItem('dadosPessoais', JSON.stringify(dados));
sessionStorage.setItem('dadosPessoaisTime', Date.now());
return dados;
}
3. Feedback Visual
async function atualizarPerfilComFeedback(dados) {
// Mostrar loading
const botao = document.getElementById('btn-salvar');
botao.disabled = true;
botao.textContent = 'Salvando...';
try {
await atualizarDadosPerfil(dados);
// Mostrar sucesso
mostrarNotificacao('Dados atualizados com sucesso!', 'success');
// Limpar cache
sessionStorage.removeItem('dadosPessoais');
} catch (error) {
mostrarNotificacao('Erro ao atualizar dados', 'error');
} finally {
botao.disabled = false;
botao.textContent = 'Salvar';
}
}
4. Debounce para Busca de CEP
let timeoutCEP;
function buscarCEPComDebounce(cep) {
clearTimeout(timeoutCEP);
timeoutCEP = setTimeout(() => {
buscarCEP(cep);
}, 500); // Aguarda 500ms após parar de digitar
}
Glossário
| Termo | Significado |
|---|---|
| CPF | Cadastro de Pessoas Físicas |
| CEP | Código de Endereçamento Postal |
| UF | Unidade Federativa (sigla do estado) |
| Logradouro | Nome da rua, avenida, travessa, etc. |
| Órgão Emissor | Instituição que emitiu o documento (ex: SSP/SP) |
| Faixa de Risco | Classificação de risco do cliente (Baixo, Médio, Alto) |
Perguntas Frequentes
1. Posso alterar o CPF do cliente? Não, o CPF é um dado imutável e não pode ser alterado.
2. Quantos endereços um cliente pode ter? Não há limite definido. Você pode cadastrar endereços residencial, comercial e outros.
3. O que fazer se o CEP não for encontrado? Se receber erro 404, solicite que o cliente preencha manualmente ou verifique se o CEP está correto.
4. Preciso enviar todos os campos ao atualizar? Sim, todos os campos obrigatórios devem ser enviados na atualização.
5. Como sei qual é o codigo do cliente?
O código é retornado no GET /dados-pessoais e deve ser o mesmo usado nas atualizações.
Suporte
Para dúvidas ou problemas com a integração, entre em contato com a equipe de suporte técnico.