Pular para o conteúdo principal

🛒 API de Venda Loja

Este guia apresenta o passo a passo para integração com o serviço de vendas em estabelecimentos lojistas, permitindo realizar vendas com cartão, biometria, consultar limites e gerenciar transações.

🎯 Visão Geral

A API de Venda Loja permite que você:

  • 🔐 Crie pré-autorizações para validar vendas com senha ou biometria
  • Capture (efetive) vendas após a pré-autorização
  • Desfaça vendas quando necessário
  • 💳 Consulte limites e situação de cartões
  • 📋 Cancele contratos de vendas
  • 🔑 Obtenha working keys para criptografia de senhas

URLs Base:

  • Homologação: https://apihml.credsystem.com.br/venda-loja/api/v1
  • Produção: https://api.credsystem.com.br/venda-loja/api/v1
📚 Recursos Adicionais

🔐 Autenticação

Esta API utiliza Oracle IDCS com o fluxo Client Credentials (servidor para servidor).

Todos os endpoints requerem autenticação via Bearer Token (JWT) no header:

Authorization: Bearer <seu_token_jwt>
PropriedadeValor
SistemaOracle IDCS
Fluxo OAuth2Client Credentials
TipoServidor para Servidor (sem usuário)
TokenAccess Token (JWT)
Atenção

Tokens inválidos ou expirados retornarão erro 401 Unauthorized.

🔑 Como obter o token?

📚 Endpoints Disponíveis

1️⃣ Consultar Limite e Situação do Cartão

Consulta o limite disponível e a situação do cartão antes de realizar uma venda. Use este endpoint para verificar se o cliente tem limite suficiente e quais planos estão disponíveis.

Endpoint: GET /limite-situacao

Parâmetros de consulta:

ParâmetroTipoLocalObrigatórioDescrição
cartaostringheader⚠️ Condicional*Número do cartão do cliente
cpfstringheader⚠️ Condicional*CPF do cliente a ser consultado
estabelecimentointegerquery✅ SimCódigo numérico da ESTABELECIMENTO que está realizando a consulta
valorCompranumberquery✅ SimValor da compra a ser validado
isInfoPlanosbooleanquery❌ NãoQuando true, retorna informações detalhadas sobre limites e planos de pagamento disponíveis. Quando false, retorna informações completas do cliente incluindo contratos e parcelas (padrão: false)
⚠️ Condicional

Envie cartao OU cpf — um deles é obrigatório, mas não é necessário enviar ambos.

Exemplos de Requisição:

curl -X GET "https://apihml.credsystem.com.br/venda-loja/api/v1/limite-situacao?estabelecimento=12345&valorCompra=150.00&isInfoPlanos=true" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "cartao: 1234567890123456" \
-H "cpf: 12345678901"

Exemplo de Resposta (200 Success):

{
"titular": "João da Silva",
"numeroCartao": "1234567890123456",
"nascimento": "01/01/1980",
"limiteDisponivel": 5000.0,
"situacaoCartao": "ATIVO",
"vencimento": "12/2028",
"dataAtivacao": "2024-01-15",
"isHabilitadoCompra": true,
"dscmotivo": "",
"isClienteTombado": false,
"dataUltimaCompra": "2026-03-15",
"temSeguroContratado": false,
"Planos": [
{
"parcelas": 3,
"tipoParcelamento": "ESTABELECIMENTO",
"vencimento": "2026-05-15",
"limiteDisponivel": 5000.0,
"valorParcela": 50.0,
"valorCompra": 150.0,
"valorLimite": 10000.0,
"isComJuros": false,
"codigoPlano": "PLANO01"
}
],
"proximoVencimento": "2026-05-15",
"dataPrimeiraEmissao": "2026-04-13T23:54:45.686Z"
}
🔄 Primeira Compra / Reativação

Se deseja realizar uma Desconto de primeira compra, utilize o campo dataAtivacao:

  • Campo dataAtivacao presente: Cartão já foi ativado anteriormente
  • Campo dataAtivacao ausente ou nulo: Cartão não foi ativado ainda

Situações especiais:

  • Se a situacaoCartao for DESBLOQUEADO ou BLOQUEADO pelo motivo de Emissão, o cliente conseguirá transacionar normalmente na primeira compra
  • Após a primeira compra bem-sucedida, o cartão será automaticamente ativado e desbloqueado por emissão

❗ Possíveis Situações do Cartão:

SituaçãoPode Comprar?Descrição
DESBLOQUEADO✅ SimCartão ativo e funcionando normalmente
BLOQUEADO✅ SimCartão bloqueado por emissão — pode comprar na primeira compra
BLOQUEADO❌ NãoCartão bloqueado temporariamente (verifique dscmotivo para o motivo específico)
CANCELADO❌ NãoCartão cancelado definitivamente
Melhor Prática

Consulte o limite antes de exibir as opções de parcelamento. Assim você mostra apenas as parcelas que o cliente pode realmente utilizar.

Problemas com este endpoint?

Consulte o 🔧 Guia de Troubleshooting - Limite e Situação para erros comuns e ações recomendadas.


2️⃣ Obter Working Key

Obtém a chave de trabalho (working key) utilizada para criptografar dados sensíveis, como a senha do cartão, antes do envio nas requisições de pré-autorização. A working key retornada possui algoritmo definido e data de expiração, devendo ser utilizada conforme as diretrizes de segurança.

Endpoint: GET /working-key

Exemplos de Requisição:

curl -X GET "https://apihml.credsystem.com.br/venda-loja/api/v1/working-key" \
-H "Authorization: Bearer SEU_TOKEN_JWT"

Exemplo de Resposta (200 Success):

{
"workingKey": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"algoritmo": "AES-256",
"dataExpiracao": "2026-04-15T23:59:59.000Z"
}
🔐 Como gerar a senhaCriptografada?

Consulte o Guia de Geração de PIN Block para ver o passo a passo completo com exemplos de como criptografar a senha do cliente.

Segurança

Armazene a working key de forma segura. Nunca a exponha em logs, respostas de API públicas ou interfaces de usuário.

Problemas com este endpoint?

Consulte o 🔧 Guia de Troubleshooting - Working Key para erros comuns e ações recomendadas.


3️⃣ Criar Pré-Autorização com Cartão

Cria uma pré-autorização de venda utilizando dados do cartão (tarja + senha criptografada ou tarja + CVV2 sem senha). Este passo valida os dados, verifica o limite disponível e reserva o valor para captura posterior.

Endpoint: POST /pre-autorizacoes

Corpo da Requisição:

{
"estabelecimento": "12345",
"identificador": "PDV01",
"codigoMaquina": "MAQ001",
"usuario": "vendedor01",
"nsu": "123456789012",
"cartao": {
"tarja": "1234567890123456",
"cvv2": "123",
"voucher": "VOUCHER123",
"senhaCriptografada": "abc123xyz456"
},
"venda": {
"valor": 150.00,
"quantidadeParcelas": 3,
"tipoParcelamento": "ESTABELECIMENTO",
"codigoPlano": "PLANO01"
},
"msgId": "c1c96252-6fa3-46a9-b3de-bc29ebff8865"
}

Campos da Requisição:

CampoTipoObrigatórioDescrição
estabelecimentostring✅ SimCódigo do estabelecimento lojista
identificadorstring✅ SimIdentificador do ponto de venda (PDV)
codigoMaquinastring✅ SimCódigo da máquina/terminal
usuariostring✅ SimUsuário que está realizando a venda
nsustring✅ SimNúmero Sequencial Único da transação (12 dígitos)
cartao.tarjastring⚠️ Condicional*Número do cartão (tarja magnética)
cartao.voucherstring⚠️ Condicional*Voucher do cartão digital
cartao.senhaCriptografadastring⚠️ Condicional*Senha criptografada com a working key
cartao.cvv2string⚠️ Condicional*Código de segurança do cartão
venda.valornumber✅ SimValor total da venda (formato decimal)
venda.quantidadeParcelasinteger✅ SimQuantidade de parcelas (1 para à vista)
venda.tipoParcelamentostring✅ SimTipo de parcelamento: ESTABELECIMENTO ou ADMINISTRADORA
venda.codigoPlanostring✅ SimCódigo do plano de parcelamento
msgIdstring✅ SimIdentificador único para rastreamento de log (formato UUID)
⚠️ Campos Condicionais
  • Se usar tarja: Envie senhaCriptografada + cvv2 (obrigatórios)
  • Se usar voucher: Envie apenas cvv2 (obrigatório)
  • Você deve enviar tarja OU voucher — um deles é obrigatório, mas não ambos.
🔐 Como gerar a senhaCriptografada?

O valor deste campo deve ser um PIN Block gerado com a Working Key obtida no passo anterior. Consulte o Guia de Geração de PIN Block para ver o passo a passo completo com exemplos de como criptografar a senha do cliente.

Exemplos de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"estabelecimento": "12345",
"identificador": "PDV01",
"codigoMaquina": "MAQ001",
"usuario": "vendedor01",
"nsu": "123456789012",
"cartao": {
"tarja": "1234567890123456",
"cvv2": "123",
"voucher": "VOUCHER123",
"senhaCriptografada": "abc123xyz456"
},
"venda": {
"valor": 150.00,
"quantidadeParcelas": 3,
"tipoParcelamento": "ESTABELECIMENTO",
"codigoPlano": "PLANO01"
},
"msgId": "c1c96252-6fa3-46a9-b3de-bc29ebff8865"
}'

Exemplo de Resposta (200 Success):

{
"preAutorizacao": 789012,
"mensagem": "Pré-autorização criada com sucesso",
"status": "APROVADO"
}
Importante

Guarde o número da preAutorizacao — você precisará dele para capturar (confirmar) a venda.

Problemas com este endpoint?

Consulte o 🔧 Guia de Troubleshooting - Pré-autorização com Cartão para erros comuns e ações recomendadas.


4️⃣ Criar Pré-Autorização com Biometria

Cria uma pré-autorização utilizando biometria do cliente para maior segurança. Este método não requer a senha do cartão — retorna uma URL de validação biométrica.

Endpoint: POST /pre-autorizacoes/biometria

Corpo da Requisição:

{
"cpf": "12345678901",
"estabelecimento": "12345",
"nsu": "123456789012",
"codigoMaquina": "MAQ001",
"venda": {
"valor": 150.00,
"quantidadeParcelas": 3,
"tipoParcelamento": "ESTABELECIMENTO",
"numeroPedido": "PED-2025-001",
"codigoPlano": "PLANO01"
},
"identificador": "PDV01"
}

Campos da Requisição:

CampoTipoObrigatórioDescrição
cpfstring✅ SimCPF do cliente
estabelecimentostring✅ SimCódigo do estabelecimento lojista
nsustring✅ SimNúmero Sequencial Único da transação (12 dígitos)
codigoMaquinastring✅ SimCódigo da máquina/terminal
venda.valornumber✅ SimValor total da venda (formato decimal)
venda.quantidadeParcelasinteger✅ SimQuantidade de parcelas (1 para à vista)
venda.tipoParcelamentostring✅ SimTipo de parcelamento: ESTABELECIMENTO ou ADMINISTRADORA
venda.numeroPedidostring✅ SimNúmero do pedido para referência
venda.codigoPlanostring✅ SimCódigo do plano de parcelamento
identificadorstring✅ SimIdentificador do ponto de venda (PDV)

Exemplos de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/biometria" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"cpf": "12345678901",
"estabelecimento": "12345",
"nsu": "123456789012",
"codigoMaquina": "MAQ001",
"venda": {
"valor": 150.00,
"quantidadeParcelas": 3,
"tipoParcelamento": "ESTABELECIMENTO",
"numeroPedido": "PED-2025-001",
"codigoPlano": "PLANO01"
},
"identificador": "PDV01"
}'

Exemplo de Resposta (200 Success):

{
"aceito": "S",
"preAutorizacao": 789013,
"biometria": {
"acess_token": "abc123xyz",
"token": "abc123xyz",
"url": "https://credsystem-biometria-webview-hml.credsystem.com.br//unico/#/com-interacao?session=abc123xyz",
"urlLinkExterno": "https://app-link-biometria-hml.credsystem.com.br/unico/#/com-interacao?session=abc123xyz"
}
🔐 Como Usar os Dados de Retorno da Biometria?

Os campos retornados (url, urlLinkExterno, acess_token, token) devem ser utilizados para redirecionar o cliente à plataforma de validação biométrica.

Consulte o Guia CredFace - Integração Biométrica para aprender como:

  • Exibir a URL em um WebView (app mobile) ou QR Code
  • Gerenciar os tokens de sessão
  • Validar o resultado da autenticação biométrica
  • Implementar callbacks e webhooks de confirmação
Vantagens da Biometria
  • 🔒 Maior segurança — Dados da senha não trafegam na requisição
  • 🚀 Melhor experiência — Cliente não precisa digitar senha
  • Reduz fraudes — Validação biométrica em tempo real
Problemas com este endpoint?

Consulte o 🔧 Guia de Troubleshooting - Pré-autorização com Biometria para erros comuns e ações recomendadas.


5️⃣ Consultar Status da Pré-Autorização

Consulta o status atual de uma pré-autorização criada anteriormente.

Endpoint: GET /pre-autorizacoes/sonda/{preautorizacao}

Parâmetros de consulta:

  • preautorizacao (string, via query, obrigatório) - Número pré-autorização a ser consultada.

Exemplos de Requisição:

curl -X GET "https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/sonda/789012" \
-H "Authorization: Bearer SEU_TOKEN_JWT"

Exemplo de Resposta (200 Success):

{
"preAutorizacao": 789012,
"status": "APROVADO",
"valor": 200,
"dataHora": "2026-04-13T23:54:45.686Z"
}

Possíveis Situações:

SituaçãoDescriçãoPróximo Passo
PENDENTE_CAPTURAPré-autorização aprovada, aguardando capturaCapturar a venda
CAPTURADOVenda já capturada (confirmada)Venda concluída
CANCELADOPré-autorização canceladaCriar nova pré-autorização
NEGADOPré-autorização negadaVerificar limite/dados do cartão
Problemas com este endpoint?

Consulte o 🔧 Guia de Troubleshooting - Consulta Status para erros comuns e ações recomendadas.


6️⃣ Capturar (Efetivar) Venda

Efetiva a venda após a pré-autorização ser aprovada. Este passo debita o valor do cliente e gera o contrato.

Endpoint: POST /pre-autorizacoes/captura

Corpo da Requisição:

{
"estabelecimento": "12345",
"preAutorizacao": 789012,
"numeroPedido": "PED-2025-001",
"valor": 150.00
}

Campos da Requisição:

CampoTipoObrigatórioDescrição
estabelecimentostring✅ SimCódigo do estabelecimento lojista
preAutorizacaointeger✅ SimNúmero da pré-autorização a ser capturada
numeroPedidostring✅ SimNúmero do pedido para referência
valornumber✅ SimValor a ser capturado (deve ser igual ou menor que o valor pré-autorizado)

Exemplos de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/captura" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"estabelecimento": "12345",
"preAutorizacao": 789012,
"numeroPedido": "PED-2025-001",
"valor": 150.00
}'

Exemplo de Resposta (201 Created):

{
"contrato": "950044877",
"valorPrestacao": 200,
"primeiroVencimento": "2025-12-03T14:35:00.000Z",
"comprovante": "Comprovante em formato texto para impressora térmica"
}
🖨️ Formato do Comprovante

O campo comprovante retorna um texto formatado pronto para impressão em impressora térmica. Você pode enviar diretamente para a impressora sem necessidade de processamento adicional.

Venda Confirmada!

O cliente foi debitado e a venda foi concluída. Guarde o numeroContrato para cancelamentos futuros.

Problemas com este endpoint?

Consulte o 🔧 Guia de Troubleshooting - Captura para erros comuns e ações recomendadas.


7️⃣ Desfazer Venda

Desfaz (estorna) uma venda previamente capturada. Use quando o cliente solicitar cancelamento ou em caso de erro na transação.

Endpoint: POST /pre-autorizacoes/desfazimento

Prazo para Desfazimento

O desfazimento geralmente deve ser realizado no mesmo dia da venda. Verifique as políticas da sua rede.

Corpo da Requisição:

{
"estabelecimento": "12345",
"tarja": "1234567890123456",
"voucher": "VOUCHER123",
"valor": 150.00,
"nsu": "123456789012",
"codigoMaquina": "MAQ001",
"cpf": "12345678901",
"cartao": "1234567890123456"
}

Campos da Requisição:

CampoTipoObrigatórioDescrição
estabelecimentostring✅ SimCódigo do estabelecimento lojista
valornumber✅ SimValor a ser estornado
nsustring✅ SimNSU da transação original (12 dígitos)
codigoMaquinastring✅ SimCódigo da máquina/terminal
cpfstring✅ SimCPF do cliente
cartaostring⚠️ Condicional*Número do cartão
tarjastring⚠️ Condicional*Número do cartão (tarja magnética)
voucherstring⚠️ Condicional*Voucher do cartão digital
⚠️ Campos Condicionais

Envie cartao + tarja OU voucher — um dos grupos é obrigatório, mas não é necessário enviar ambos:

  • Cartão físico (tarja magnética): envie cartao e tarja
  • Cartão digital: envie voucher

Exemplos de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/desfazimento" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"estabelecimento": "12345",
"tarja": "1234567890123456",
"valor": 150.00,
"nsu": "123456789012",
"codigoMaquina": "MAQ001",
"cpf": "12345678901",
"cartao": "1234567890123456"
}'

Exemplo de Resposta (201 Created):

{
"nsu": "123456789012",
"mensagem": "Venda desfeita com sucesso",
"status": "ESTORNADO",
}
Problemas com este endpoint?

Consulte o 🔧 Guia de Troubleshooting - Desfazimento para erros comuns e ações recomendadas.


8️⃣ Cancelar Contrato

Cancela um contrato de venda já efetivado.

Endpoint: POST /contrato/cancelamento

Corpo da Requisição:

{
"estabelecimento": "12345",
"identificador": "PDV01",
"contrato": "456789",
"codigoMaquina": "MAQ001",
"cartao": "1234567890123456",
"tarja": "1234567890123456",
"voucher": "VOUCHER123",
"cpf": "12345678901"
}

Campos da Requisição:

CampoTipoObrigatórioDescrição
estabelecimentostring✅ SimCódigo do estabelecimento lojista
identificadorstring✅ SimIdentificador do ponto de venda (PDV)
contratostring✅ SimNúmero do contrato a ser cancelado
codigoMaquinastring✅ SimCódigo da máquina/terminal
cpfstring✅ SimCPF do cliente
cartaostring⚠️ Condicional*Número do cartão
tarjastring⚠️ Condicional*Número do cartão (tarja magnética)
voucherstring⚠️ Condicional*Voucher do cartão digital
⚠️ Campos Condicionais

Envie cartao + tarja OU voucher — um dos grupos é obrigatório, mas não é necessário enviar ambos:

  • Cartão físico (tarja magnética): envie cartao e tarja
  • Cartão digital: envie voucher

Exemplos de Requisição:

curl -X POST "https://apihml.credsystem.com.br/venda-loja/api/v1/contrato/cancelamento" \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"estabelecimento": "12345",
"identificador": "PDV01",
"contrato": "456789",
"codigoMaquina": "MAQ001",
"cartao": "1234567890123456",
"tarja": "1234567890123456",
"cpf": "12345678901"
}'

Exemplo de Resposta (200 Success):

{
"StatusCode": 200,
"ReasonPhrase": "OK",
"HttpVersion": "1.1",
"Content": {
"mensagem": "Cancelamento realizado com sucesso",
"status": "CANCELADO",
"dataHora": "2025-12-03T14:30:00.000Z"
}
}
Problemas com este endpoint?

Consulte o 🔧 Guia de Troubleshooting - Cancelamento de Contrato para erros comuns e ações recomendadas.


🔄 Fluxo Completo de Venda

Fluxo 1: Venda com Senha do Cartão

Fluxo 2: Venda com Dados do Cartão sem Senha

Fluxo 3: Venda com Biometria


💡 Dicas e Boas Práticas

✅ Recomendações

  1. Valide os dados antes de enviar - Verifique CPF, valores e códigos localmente antes de fazer a requisição
  2. Armazene o traceId - Use para rastrear problemas com o suporte técnico
  3. Implemente retry com backoff - Em caso de erro 503, tente novamente após alguns segundos
  4. Cache de tokens - Evite gerar novos tokens a cada requisição
  5. Valide pré-autorizações - Sempre consulte o status antes de efetivar
  6. Desfazimento no mesmo dia - Implemente controle para permitir desfazimento apenas no dia da efetivação

❌ Evite

  1. ❌ Não exponha o token JWT no frontend
  2. ❌ Não tente efetivar pré-autorizações manualmente
  3. ❌ Não ignore os códigos de status HTTP
  4. ❌ Não faça polling excessivo no endpoint de status

🆘 Suporte

Contato Técnico

Em Caso de Erro

  1. Anote o traceId retornado no erro
  2. Capture a requisição completa (sem dados sensíveis)
  3. Descreva o comportamento esperado vs. obtido
  4. Envie para o email de suporte com assunto: [API Venda Loja] - Descrição do Problema