🛒 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
- 🔧 Guia de Troubleshooting - Solução deproblemas e erros comuns
- 📖 Especificação OpenAPI — Referência técnica completa (schemas,tipos, exemplos)
🔐 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>
| Propriedade | Valor |
|---|---|
| Sistema | Oracle IDCS |
| Fluxo OAuth2 | Client Credentials |
| Tipo | Servidor para Servidor (sem usuário) |
| Token | Access Token (JWT) |
Tokens inválidos ou expirados retornarão erro 401 Unauthorized.
Veja o Passo 2 — Entender os Sistemas e o Passo 3 — Exemplos em 7 linguagens para gerar seu Bearer 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âmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
cartao | string | header | ⚠️ Condicional* | Número do cartão do cliente |
cpf | string | header | ⚠️ Condicional* | CPF do cliente a ser consultado |
estabelecimento | integer | query | ✅ Sim | Código numérico da ESTABELECIMENTO que está realizando a consulta |
valorCompra | number | query | ✅ Sim | Valor da compra a ser validado |
isInfoPlanos | boolean | query | ❌ Não | Quando 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) |
Envie cartao OU cpf — um deles é obrigatório, mas não é necessário enviar ambos.
Exemplos de Requisição:
- cURL
- JavaScript
- Python
- Java
- C#
- PHP
- Go
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"
const response = await fetch(
"https://apihml.credsystem.com.br/venda-loja/api/v1/limite-situacao?estabelecimento=12345&valorCompra=150.00&isInfoPlanos=true",
{
headers: {
Authorization: "Bearer SEU_TOKEN_JWT",
cartao: "1234567890123456",
cpf: "12345678901",
},
},
);
const data = await response.json();
console.log("✅ Limite disponível:", data.limiteDisponivel);
import requests
response = requests.get(
'https://apihml.credsystem.com.br/venda-loja/api/v1/limite-situacao',
params={'estabelecimento': '12345', 'valorCompra': 150.00, 'isInfoPlanos': True},
headers={'Authorization': 'Bearer SEU_TOKEN_JWT', 'cartao': '1234567890123456', 'cpf': '12345678901'},
timeout=15
)
response.raise_for_status()
print('✅ Limite disponível:', response.json().get('limiteDisponivel'))
import java.net.URI;
import java.net.http.*;
public class ConsultarLimiteSituacao {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://apihml.credsystem.com.br/venda-loja/api/v1/limite-situacao?estabelecimento=12345&valorCompra=150.00&isInfoPlanos=true"))
.header("Authorization", "Bearer SEU_TOKEN_JWT")
.header("cartao", "1234567890123456")
.header("cpf", "12345678901")
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System.Net.Http;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_JWT");
client.DefaultRequestHeaders.Add("cartao", "1234567890123456");
client.DefaultRequestHeaders.Add("cpf", "12345678901");
var response = await client.GetAsync(
"https://apihml.credsystem.com.br/venda-loja/api/v1/limite-situacao?estabelecimento=12345&valorCompra=150.00&isInfoPlanos=true");
Console.WriteLine(await response.Content.ReadAsStringAsync());
<?php
$ch = curl_init('https://apihml.credsystem.com.br/venda-loja/api/v1/limite-situacao?estabelecimento=12345&valorCompra=150.00&isInfoPlanos=true');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer SEU_TOKEN_JWT',
'cartao: 1234567890123456',
'cpf: 12345678901',
],
]);
echo curl_exec($ch);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest(http.MethodGet,
"https://apihml.credsystem.com.br/venda-loja/api/v1/limite-situacao", nil)
q := req.URL.Query()
q.Set("estabelecimento", "12345")
q.Set("valorCompra", "150.00")
q.Set("isInfoPlanos", "true")
req.URL.RawQuery = q.Encode()
req.Header.Set("Authorization", "Bearer SEU_TOKEN_JWT")
req.Header.Set("cartao", "1234567890123456")
req.Header.Set("cpf", "12345678901")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(string(b))
}
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"
}
Se deseja realizar uma Desconto de primeira compra, utilize o campo dataAtivacao:
- ✅ Campo
dataAtivacaopresente: Cartão já foi ativado anteriormente - ❌ Campo
dataAtivacaoausente ou nulo: Cartão não foi ativado ainda
Situações especiais:
- Se a
situacaoCartaoforDESBLOQUEADOouBLOQUEADOpelo motivo deEmissã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ção | Pode Comprar? | Descrição |
|---|---|---|
DESBLOQUEADO | ✅ Sim | Cartão ativo e funcionando normalmente |
BLOQUEADO | ✅ Sim | Cartão bloqueado por emissão — pode comprar na primeira compra |
BLOQUEADO | ❌ Não | Cartão bloqueado temporariamente (verifique dscmotivo para o motivo específico) |
CANCELADO | ❌ Não | Cartão cancelado definitivamente |
Consulte o limite antes de exibir as opções de parcelamento. Assim você mostra apenas as parcelas que o cliente pode realmente utilizar.
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
- JavaScript
- Python
- Java
- C#
- PHP
- Go
curl -X GET "https://apihml.credsystem.com.br/venda-loja/api/v1/working-key" \
-H "Authorization: Bearer SEU_TOKEN_JWT"
const response = await fetch(
"https://apihml.credsystem.com.br/venda-loja/api/v1/working-key",
{ headers: { Authorization: "Bearer SEU_TOKEN_JWT" } },
);
const data = await response.json();
console.log("🔑 Working Key:", data.workingKey);
import requests
response = requests.get(
'https://apihml.credsystem.com.br/venda-loja/api/v1/working-key',
headers={'Authorization': 'Bearer SEU_TOKEN_JWT'},
timeout=15
)
response.raise_for_status()
print('🔑 Working Key:', response.json().get('workingKey'))
import java.net.URI;
import java.net.http.*;
public class ObterWorkingKey {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://apihml.credsystem.com.br/venda-loja/api/v1/working-key"))
.header("Authorization", "Bearer SEU_TOKEN_JWT")
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System.Net.Http;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_JWT");
var response = await client.GetAsync(
"https://apihml.credsystem.com.br/venda-loja/api/v1/working-key");
Console.WriteLine(await response.Content.ReadAsStringAsync());
<?php
$ch = curl_init('https://apihml.credsystem.com.br/venda-loja/api/v1/working-key');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer SEU_TOKEN_JWT'],
]);
echo curl_exec($ch);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest(http.MethodGet,
"https://apihml.credsystem.com.br/venda-loja/api/v1/working-key", nil)
req.Header.Set("Authorization", "Bearer SEU_TOKEN_JWT")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(string(b))
}
Exemplo de Resposta (200 Success):
{
"workingKey": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6",
"algoritmo": "AES-256",
"dataExpiracao": "2026-04-15T23:59:59.000Z"
}
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.
Armazene a working key de forma segura. Nunca a exponha em logs, respostas de API públicas ou interfaces de usuário.
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:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
estabelecimento | string | ✅ Sim | Código do estabelecimento lojista |
identificador | string | ✅ Sim | Identificador do ponto de venda (PDV) |
codigoMaquina | string | ✅ Sim | Código da máquina/terminal |
usuario | string | ✅ Sim | Usuário que está realizando a venda |
nsu | string | ✅ Sim | Número Sequencial Único da transação (12 dígitos) |
cartao.tarja | string | ⚠️ Condicional* | Número do cartão (tarja magnética) |
cartao.voucher | string | ⚠️ Condicional* | Voucher do cartão digital |
cartao.senhaCriptografada | string | ⚠️ Condicional* | Senha criptografada com a working key |
cartao.cvv2 | string | ⚠️ Condicional* | Código de segurança do cartão |
venda.valor | number | ✅ Sim | Valor total da venda (formato decimal) |
venda.quantidadeParcelas | integer | ✅ Sim | Quantidade de parcelas (1 para à vista) |
venda.tipoParcelamento | string | ✅ Sim | Tipo de parcelamento: ESTABELECIMENTO ou ADMINISTRADORA |
venda.codigoPlano | string | ✅ Sim | Código do plano de parcelamento |
msgId | string | ✅ Sim | Identificador único para rastreamento de log (formato UUID) |
- Se usar
tarja: EnviesenhaCriptografada+cvv2(obrigatórios) - Se usar
voucher: Envie apenascvv2(obrigatório) - Você deve enviar
tarjaOUvoucher— um deles é obrigatório, mas não ambos.
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
- JavaScript
- Python
- Java
- C#
- PHP
- Go
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"
}'
const response = await fetch(
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes",
{
method: "POST",
headers: {
Authorization: "Bearer SEU_TOKEN_JWT",
"Content-Type": "application/json",
},
body: JSON.stringify({
estabelecimento: "12345",
identificador: "PDV01",
codigoMaquina: "MAQ001",
usuario: "vendedor01",
nsu: "123456789012",
cartao: {
tarja: "1234567890123456",
cvv2: "123",
senhaCriptografada: "abc123xyz456",
},
venda: {
valor: 150.00,
quantidadeParcelas: 3,
tipoParcelamento: "ESTABELECIMENTO",
codigoPlano: "PLANO01",
},
msgId: "c1c96252-6fa3-46a9-b3de-bc29ebff8865",
}),
},
);
const data = await response.json();
console.log("✅ Pré-autorização:", data.Content.preAutorizacao);
import requests
response = requests.post(
'https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes',
json={
'estabelecimento': '12345', 'identificador': 'PDV01', 'codigoMaquina': 'MAQ001',
'usuario': 'vendedor01', 'nsu': '123456789012',
'cartao': {'tarja': '1234567890123456', 'cvv2': '123', 'senhaCriptografada': 'abc123xyz456'},
'venda': {'valor': 150.00, 'quantidadeParcelas': 3, 'tipoParcelamento': 'ESTABELECIMENTO', 'codigoPlano': 'PLANO01'},
'msgId': 'c1c96252-6fa3-46a9-b3de-bc29ebff8865'
},
headers={'Authorization': 'Bearer SEU_TOKEN_JWT'},
timeout=15
)
response.raise_for_status()
print('✅ Pré-autorização:', response.json().get('Content', {}).get('preAutorizacao'))
import java.net.URI;
import java.net.http.*;
public class CriarPreAutorizacaoCartao {
public static void main(String[] args) throws Exception {
String body = "{\"estabelecimento\":\"12345\",\"identificador\":\"PDV01\",\"codigoMaquina\":\"MAQ001\",\"usuario\":\"vendedor01\",\"nsu\":\"123456789012\",\"cartao\":{\"tarja\":\"1234567890123456\",\"cvv2\":\"123\",\"senhaCriptografada\":\"abc123xyz456\"},\"venda\":{\"valor\":150.00,\"quantidadeParcelas\":3,\"tipoParcelamento\":\"ESTABELECIMENTO\",\"codigoPlano\":\"PLANO01\"},\"msgId\":\"c1c96252-6fa3-46a9-b3de-bc29ebff8865\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes"))
.header("Authorization", "Bearer SEU_TOKEN_JWT")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System.Net.Http;
using System.Text;
using System.Text.Json;
var payload = new {
estabelecimento = "12345", identificador = "PDV01", codigoMaquina = "MAQ001",
usuario = "vendedor01", nsu = "123456789012",
cartao = new { tarja = "1234567890123456", cvv2 = "123", senhaCriptografada = "abc123xyz456" },
venda = new { valor = 150.00, quantidadeParcelas = 3, tipoParcelamento = "ESTABELECIMENTO", codigoPlano = "PLANO01" },
msgId = "c1c96252-6fa3-46a9-b3de-bc29ebff8865"
};
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_JWT");
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.PostAsync(
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes", content);
Console.WriteLine(await response.Content.ReadAsStringAsync());
<?php
$payload = [
'estabelecimento' => '12345', 'identificador' => 'PDV01', 'codigoMaquina' => 'MAQ001',
'usuario' => 'vendedor01', 'nsu' => '123456789012',
'cartao' => ['tarja' => '1234567890123456', 'cvv2' => '123', 'senhaCriptografada' => 'abc123xyz456'],
'venda' => ['valor' => 150.00, 'quantidadeParcelas' => 3, 'tipoParcelamento' => 'ESTABELECIMENTO', 'codigoPlano' => 'PLANO01'],
'msgId' => 'c1c96252-6fa3-46a9-b3de-bc29ebff8865'
];
$ch = curl_init('https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => ['Authorization: Bearer SEU_TOKEN_JWT', 'Content-Type: application/json'],
]);
echo curl_exec($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
body := []byte(`{"estabelecimento":"12345","identificador":"PDV01","codigoMaquina":"MAQ001","usuario":"vendedor01","nsu":"123456789012","cartao":{"tarja":"1234567890123456","cvv2":"123","senhaCriptografada":"abc123xyz456"},"venda":{"valor":150.00,"quantidadeParcelas":3,"tipoParcelamento":"ESTABELECIMENTO","codigoPlano":"PLANO01"},"msgId":"c1c96252-6fa3-46a9-b3de-bc29ebff8865"}`)
req, _ := http.NewRequest(http.MethodPost,
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes",
bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer SEU_TOKEN_JWT")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(string(b))
}
Exemplo de Resposta (200 Success):
{
"preAutorizacao": 789012,
"mensagem": "Pré-autorização criada com sucesso",
"status": "APROVADO"
}
Guarde o número da preAutorizacao — você precisará dele para capturar (confirmar) a venda.
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:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cpf | string | ✅ Sim | CPF do cliente |
estabelecimento | string | ✅ Sim | Código do estabelecimento lojista |
nsu | string | ✅ Sim | Número Sequencial Único da transação (12 dígitos) |
codigoMaquina | string | ✅ Sim | Código da máquina/terminal |
venda.valor | number | ✅ Sim | Valor total da venda (formato decimal) |
venda.quantidadeParcelas | integer | ✅ Sim | Quantidade de parcelas (1 para à vista) |
venda.tipoParcelamento | string | ✅ Sim | Tipo de parcelamento: ESTABELECIMENTO ou ADMINISTRADORA |
venda.numeroPedido | string | ✅ Sim | Número do pedido para referência |
venda.codigoPlano | string | ✅ Sim | Código do plano de parcelamento |
identificador | string | ✅ Sim | Identificador do ponto de venda (PDV) |
Exemplos de Requisição:
- cURL
- JavaScript
- Python
- Java
- C#
- PHP
- Go
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"
}'
const response = await fetch(
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/biometria",
{
method: "POST",
headers: {
Authorization: "Bearer SEU_TOKEN_JWT",
"Content-Type": "application/json",
},
body: JSON.stringify({
cpf: "12345678901",
estabelecimento: "12345",
nsu: "123456789012",
codigoMaquina: "MAQ001",
venda: {
valor: 150.00,
quantidadeParcelas: 3,
tipoParcelamento: "ESTABELECIMENTO",
numeroPedido: "PED-2025-001",
codigoPlano: "PLANO01",
},
identificador: "PDV01",
}),
},
);
const data = await response.json();
console.log("✅ URL Biometria (WebView):", data.Content.urlBiometria);
console.log("✅ URL QR Code (celular):", data.Content.urlQrCode);
import requests
response = requests.post(
'https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/biometria',
json={
'cpf': '12345678901', 'estabelecimento': '12345', 'nsu': '123456789012',
'codigoMaquina': 'MAQ001',
'venda': {'valor': 150.00, 'quantidadeParcelas': 3, 'tipoParcelamento': 'ESTABELECIMENTO', 'numeroPedido': 'PED-2025-001', 'codigoPlano': 'PLANO01'},
'identificador': 'PDV01'
},
headers={'Authorization': 'Bearer SEU_TOKEN_JWT'},
timeout=15
)
response.raise_for_status()
content = response.json().get('Content', {})
print('✅ URL Biometria (WebView):', content.get('urlBiometria'))
print('✅ URL QR Code (celular):', content.get('urlQrCode'))
import java.net.URI;
import java.net.http.*;
public class CriarPreAutorizacaoBiometria {
public static void main(String[] args) throws Exception {
String body = "{\"cpf\":\"12345678901\",\"estabelecimento\":\"12345\",\"nsu\":\"123456789012\",\"codigoMaquina\":\"MAQ001\",\"venda\":{\"valor\":150.00,\"quantidadeParcelas\":3,\"tipoParcelamento\":\"ESTABELECIMENTO\",\"numeroPedido\":\"PED-2025-001\",\"codigoPlano\":\"PLANO01\"},\"identificador\":\"PDV01\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/biometria"))
.header("Authorization", "Bearer SEU_TOKEN_JWT")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System.Net.Http;
using System.Text;
using System.Text.Json;
var payload = new {
cpf = "12345678901", estabelecimento = "12345", nsu = "123456789012", codigoMaquina = "MAQ001",
venda = new { valor = 150.00, quantidadeParcelas = 3, tipoParcelamento = "ESTABELECIMENTO", numeroPedido = "PED-2025-001", codigoPlano = "PLANO01" },
identificador = "PDV01"
};
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_JWT");
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.PostAsync(
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/biometria", content);
Console.WriteLine(await response.Content.ReadAsStringAsync());
<?php
$payload = [
'cpf' => '12345678901', 'estabelecimento' => '12345', 'nsu' => '123456789012',
'codigoMaquina' => 'MAQ001',
'venda' => ['valor' => 150.00, 'quantidadeParcelas' => 3, 'tipoParcelamento' => 'ESTABELECIMENTO', 'numeroPedido' => 'PED-2025-001', 'codigoPlano' => 'PLANO01'],
'identificador' => 'PDV01'
];
$ch = curl_init('https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/biometria');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => ['Authorization: Bearer SEU_TOKEN_JWT', 'Content-Type: application/json'],
]);
echo curl_exec($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
body := []byte(`{"cpf":"12345678901","estabelecimento":"12345","nsu":"123456789012","codigoMaquina":"MAQ001","venda":{"valor":150.00,"quantidadeParcelas":3,"tipoParcelamento":"ESTABELECIMENTO","numeroPedido":"PED-2025-001","codigoPlano":"PLANO01"},"identificador":"PDV01"}`)
req, _ := http.NewRequest(http.MethodPost,
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/biometria",
bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer SEU_TOKEN_JWT")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(string(b))
}
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"
}
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
- 🔒 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
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
- JavaScript
- Python
- Java
- C#
- PHP
- Go
curl -X GET "https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/sonda/789012" \
-H "Authorization: Bearer SEU_TOKEN_JWT"
const response = await fetch(
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/sonda/789012",
{ headers: { Authorization: "Bearer SEU_TOKEN_JWT" } },
);
const data = await response.json();
console.log("✅ Status:", data.Content.status);
import requests
response = requests.get(
'https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/sonda/789012',
headers={'Authorization': 'Bearer SEU_TOKEN_JWT'},
timeout=15
)
response.raise_for_status()
print('✅ Status:', response.json().get('Content', {}).get('status'))
import java.net.URI;
import java.net.http.*;
public class ConsultarSonda {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/sonda/789012"))
.header("Authorization", "Bearer SEU_TOKEN_JWT")
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System.Net.Http;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_JWT");
var response = await client.GetAsync(
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/sonda/789012");
Console.WriteLine(await response.Content.ReadAsStringAsync());
<?php
$ch = curl_init('https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/sonda/789012');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer SEU_TOKEN_JWT'],
]);
echo curl_exec($ch);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest(http.MethodGet,
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/sonda/789012", nil)
req.Header.Set("Authorization", "Bearer SEU_TOKEN_JWT")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(string(b))
}
Exemplo de Resposta (200 Success):
{
"preAutorizacao": 789012,
"status": "APROVADO",
"valor": 200,
"dataHora": "2026-04-13T23:54:45.686Z"
}
Possíveis Situações:
| Situação | Descrição | Próximo Passo |
|---|---|---|
PENDENTE_CAPTURA | Pré-autorização aprovada, aguardando captura | Capturar a venda |
CAPTURADO | Venda já capturada (confirmada) | Venda concluída |
CANCELADO | Pré-autorização cancelada | Criar nova pré-autorização |
NEGADO | Pré-autorização negada | Verificar limite/dados do cartão |
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:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
estabelecimento | string | ✅ Sim | Código do estabelecimento lojista |
preAutorizacao | integer | ✅ Sim | Número da pré-autorização a ser capturada |
numeroPedido | string | ✅ Sim | Número do pedido para referência |
valor | number | ✅ Sim | Valor a ser capturado (deve ser igual ou menor que o valor pré-autorizado) |
Exemplos de Requisição:
- cURL
- JavaScript
- Python
- Java
- C#
- PHP
- Go
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
}'
const response = await fetch(
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/captura",
{
method: "POST",
headers: {
Authorization: "Bearer SEU_TOKEN_JWT",
"Content-Type": "application/json",
},
body: JSON.stringify({
estabelecimento: "12345",
preAutorizacao: 789012,
numeroPedido: "PED-2025-001",
valor: 150.00,
}),
},
);
const data = await response.json();
console.log("✅ Contrato:", data.Content.numeroContrato);
import requests
response = requests.post(
'https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/captura',
json={'estabelecimento': '12345', 'preAutorizacao': 789012, 'numeroPedido': 'PED-2025-001', 'valor': 150.00},
headers={'Authorization': 'Bearer SEU_TOKEN_JWT'},
timeout=15
)
response.raise_for_status()
print('✅ Contrato:', response.json().get('Content', {}).get('numeroContrato'))
import java.net.URI;
import java.net.http.*;
public class CapturarVenda {
public static void main(String[] args) throws Exception {
String body = "{\"estabelecimento\":\"12345\",\"preAutorizacao\":789012,\"numeroPedido\":\"PED-2025-001\",\"valor\":150.00}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/captura"))
.header("Authorization", "Bearer SEU_TOKEN_JWT")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System.Net.Http;
using System.Text;
using System.Text.Json;
var payload = new { estabelecimento = "12345", preAutorizacao = 789012, numeroPedido = "PED-2025-001", valor = 150.00 };
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_JWT");
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.PostAsync(
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/captura", content);
Console.WriteLine(await response.Content.ReadAsStringAsync());
<?php
$ch = curl_init('https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/captura');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode(['estabelecimento' => '12345', 'preAutorizacao' => 789012, 'numeroPedido' => 'PED-2025-001', 'valor' => 150.00]),
CURLOPT_HTTPHEADER => ['Authorization: Bearer SEU_TOKEN_JWT', 'Content-Type: application/json'],
]);
echo curl_exec($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
body := []byte(`{"estabelecimento":"12345","preAutorizacao":789012,"numeroPedido":"PED-2025-001","valor":150.00}`)
req, _ := http.NewRequest(http.MethodPost,
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/captura",
bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer SEU_TOKEN_JWT")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(string(b))
}
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"
}
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.
O cliente foi debitado e a venda foi concluída. Guarde o numeroContrato para cancelamentos futuros.
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
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:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
estabelecimento | string | ✅ Sim | Código do estabelecimento lojista |
valor | number | ✅ Sim | Valor a ser estornado |
nsu | string | ✅ Sim | NSU da transação original (12 dígitos) |
codigoMaquina | string | ✅ Sim | Código da máquina/terminal |
cpf | string | ✅ Sim | CPF do cliente |
cartao | string | ⚠️ Condicional* | Número do cartão |
tarja | string | ⚠️ Condicional* | Número do cartão (tarja magnética) |
voucher | string | ⚠️ Condicional* | Voucher do cartão digital |
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
cartaoetarja - Cartão digital: envie
voucher
Exemplos de Requisição:
- cURL
- JavaScript
- Python
- Java
- C#
- PHP
- Go
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"
}'
const response = await fetch(
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/desfazimento",
{
method: "POST",
headers: {
Authorization: "Bearer SEU_TOKEN_JWT",
"Content-Type": "application/json",
},
body: JSON.stringify({
estabelecimento: "12345",
tarja: "1234567890123456",
valor: 150.00,
nsu: "123456789012",
codigoMaquina: "MAQ001",
cpf: "12345678901",
cartao: "1234567890123456",
}),
},
);
const data = await response.json();
console.log("✅ Status:", data.Content?.status);
import requests
response = requests.post(
'https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/desfazimento',
json={
'estabelecimento': '12345', 'tarja': '1234567890123456', 'valor': 150.00,
'nsu': '123456789012', 'codigoMaquina': 'MAQ001', 'cpf': '12345678901', 'cartao': '1234567890123456'
},
headers={'Authorization': 'Bearer SEU_TOKEN_JWT'},
timeout=15
)
response.raise_for_status()
print('✅ Status:', response.json().get('Content', {}).get('status'))
import java.net.URI;
import java.net.http.*;
public class DesfazimentoVenda {
public static void main(String[] args) throws Exception {
String body = "{\"estabelecimento\":\"12345\",\"tarja\":\"1234567890123456\",\"valor\":150.00,\"nsu\":\"123456789012\",\"codigoMaquina\":\"MAQ001\",\"cpf\":\"12345678901\",\"cartao\":\"1234567890123456\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/desfazimento"))
.header("Authorization", "Bearer SEU_TOKEN_JWT")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System.Net.Http;
using System.Text;
using System.Text.Json;
var payload = new {
estabelecimento = "12345", tarja = "1234567890123456", valor = 150.00,
nsu = "123456789012", codigoMaquina = "MAQ001", cpf = "12345678901", cartao = "1234567890123456"
};
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_JWT");
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.PostAsync(
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/desfazimento", content);
Console.WriteLine(await response.Content.ReadAsStringAsync());
<?php
$ch = curl_init('https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/desfazimento');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'estabelecimento' => '12345', 'tarja' => '1234567890123456', 'valor' => 150.00,
'nsu' => '123456789012', 'codigoMaquina' => 'MAQ001', 'cpf' => '12345678901', 'cartao' => '1234567890123456'
]),
CURLOPT_HTTPHEADER => ['Authorization: Bearer SEU_TOKEN_JWT', 'Content-Type: application/json'],
]);
echo curl_exec($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
body := []byte(`{"estabelecimento":"12345","tarja":"1234567890123456","valor":150.00,"nsu":"123456789012","codigoMaquina":"MAQ001","cpf":"12345678901","cartao":"1234567890123456"}`)
req, _ := http.NewRequest(http.MethodPost,
"https://apihml.credsystem.com.br/venda-loja/api/v1/pre-autorizacoes/desfazimento",
bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer SEU_TOKEN_JWT")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(string(b))
}
Exemplo de Resposta (201 Created):
{
"nsu": "123456789012",
"mensagem": "Venda desfeita com sucesso",
"status": "ESTORNADO",
}
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:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
estabelecimento | string | ✅ Sim | Código do estabelecimento lojista |
identificador | string | ✅ Sim | Identificador do ponto de venda (PDV) |
contrato | string | ✅ Sim | Número do contrato a ser cancelado |
codigoMaquina | string | ✅ Sim | Código da máquina/terminal |
cpf | string | ✅ Sim | CPF do cliente |
cartao | string | ⚠️ Condicional* | Número do cartão |
tarja | string | ⚠️ Condicional* | Número do cartão (tarja magnética) |
voucher | string | ⚠️ Condicional* | Voucher do cartão digital |
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
cartaoetarja - Cartão digital: envie
voucher
Exemplos de Requisição:
- cURL
- JavaScript
- Python
- Java
- C#
- PHP
- Go
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"
}'
const response = await fetch(
"https://apihml.credsystem.com.br/venda-loja/api/v1/contrato/cancelamento",
{
method: "POST",
headers: {
Authorization: "Bearer SEU_TOKEN_JWT",
"Content-Type": "application/json",
},
body: JSON.stringify({
estabelecimento: "12345",
identificador: "PDV01",
contrato: "456789",
codigoMaquina: "MAQ001",
cartao: "1234567890123456",
tarja: "1234567890123456",
cpf: "12345678901",
}),
},
);
const data = await response.json();
console.log("✅ Status:", data.Content.status);
import requests
response = requests.post(
'https://apihml.credsystem.com.br/venda-loja/api/v1/contrato/cancelamento',
json={
'estabelecimento': '12345', 'identificador': 'PDV01', 'contrato': '456789',
'codigoMaquina': 'MAQ001', 'cartao': '1234567890123456', 'tarja': '1234567890123456', 'cpf': '12345678901'
},
headers={'Authorization': 'Bearer SEU_TOKEN_JWT'},
timeout=15
)
response.raise_for_status()
print('✅ Status:', response.json().get('Content', {}).get('status'))
import java.net.URI;
import java.net.http.*;
public class CancelarContrato {
public static void main(String[] args) throws Exception {
String body = "{\"estabelecimento\":\"12345\",\"identificador\":\"PDV01\",\"contrato\":\"456789\",\"codigoMaquina\":\"MAQ001\",\"cartao\":\"1234567890123456\",\"tarja\":\"1234567890123456\",\"cpf\":\"12345678901\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://apihml.credsystem.com.br/venda-loja/api/v1/contrato/cancelamento"))
.header("Authorization", "Bearer SEU_TOKEN_JWT")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System.Net.Http;
using System.Text;
using System.Text.Json;
var payload = new {
estabelecimento = "12345", identificador = "PDV01", contrato = "456789",
codigoMaquina = "MAQ001", cartao = "1234567890123456", tarja = "1234567890123456", cpf = "12345678901"
};
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_JWT");
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.PostAsync(
"https://apihml.credsystem.com.br/venda-loja/api/v1/contrato/cancelamento", content);
Console.WriteLine(await response.Content.ReadAsStringAsync());
<?php
$ch = curl_init('https://apihml.credsystem.com.br/venda-loja/api/v1/contrato/cancelamento');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'estabelecimento' => '12345', 'identificador' => 'PDV01', 'contrato' => '456789',
'codigoMaquina' => 'MAQ001', 'cartao' => '1234567890123456', 'tarja' => '1234567890123456', 'cpf' => '12345678901'
]),
CURLOPT_HTTPHEADER => ['Authorization: Bearer SEU_TOKEN_JWT', 'Content-Type: application/json'],
]);
echo curl_exec($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
body := []byte(`{"estabelecimento":"12345","identificador":"PDV01","contrato":"456789","codigoMaquina":"MAQ001","cartao":"1234567890123456","tarja":"1234567890123456","cpf":"12345678901"}`)
req, _ := http.NewRequest(http.MethodPost,
"https://apihml.credsystem.com.br/venda-loja/api/v1/contrato/cancelamento",
bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer SEU_TOKEN_JWT")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(string(b))
}
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"
}
}
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
- Valide os dados antes de enviar - Verifique CPF, valores e códigos localmente antes de fazer a requisição
- Armazene o traceId - Use para rastrear problemas com o suporte técnico
- Implemente retry com backoff - Em caso de erro 503, tente novamente após alguns segundos
- Cache de tokens - Evite gerar novos tokens a cada requisição
- Valide pré-autorizações - Sempre consulte o status antes de efetivar
- Desfazimento no mesmo dia - Implemente controle para permitir desfazimento apenas no dia da efetivação
❌ Evite
- ❌ Não exponha o token JWT no frontend
- ❌ Não tente efetivar pré-autorizações manualmente
- ❌ Não ignore os códigos de status HTTP
- ❌ Não faça polling excessivo no endpoint de status
🆘 Suporte
Contato Técnico
- Email: suporte.tecnico@credsystem.com.br
- Horário: Segunda a Sexta, 8h às 18h (BRT)
Em Caso de Erro
- Anote o traceId retornado no erro
- Capture a requisição completa (sem dados sensíveis)
- Descreva o comportamento esperado vs. obtido
- Envie para o email de suporte com assunto:
[API Venda Loja] - Descrição do Problema