Documentação de APIs Azemax
Guia técnico de integração para parceiros. Reúne a API de Pagamentos Azemax e as APIs Vallis (PIX Cash-in e Boleto/BolePix) disponibilizadas aos clientes que a Azemax direciona ao banco de indicação.
azemax.solutions.
Ambientes e URLs base
Cada família de API possui seus próprios ambientes. Use sempre o ambiente de homologação para testes antes de ir para produção.
Pagamentos Azemax
Todas as rotas de pagamento usam este endereço como base — ex.: https://app.azemax.solutions/api/pay-api/payments. HTTPS obrigatório.
APIs Vallis (PIX Cash-in e Boleto)
Autenticação e segurança
As APIs Vallis utilizam autenticação por chave de API no cabeçalho da requisição. A chave é gerada e enviada pela Vallis por e-mail.
| Header | Valor | Descrição |
|---|---|---|
X-Api-Key | sua chave Vallis | Chave de API fornecida pela Vallis. Identifica a credencial e a conta que recebe os créditos. |
Content-Type | application/json | Obrigatório nas requisições com corpo JSON. |
403.
Regras e limites
- As APIs só geram cobranças que creditam a conta vinculada à credencial. Não há saque, consulta de saldo ou extrato.
- Restrição por IP recomendada: requisições de IPs fora da lista autorizada recebem
403. - Limite de uso: 120 requisições por minuto por credencial. Acima disso, resposta
429com headerRetry-After: 60. - Cada credencial consulta apenas as cobranças que ela mesma criou.
- Em caso de suspeita de vazamento, a Vallis pode revogar a chave e emitir uma nova.
Azemax Pay API — Pagamentos com Cartão
app.azemax.solutions/apiIntegre pagamentos com cartão de crédito diretamente no seu sistema. Existem dois caminhos, e a escolha depende de como a sua conta está configurada:
| Caminho | Quando usar | Complexidade |
|---|---|---|
| Pagamento direto | Conta configurada sem exigência de 3DS (só análise de fraude). Chamada única, servidor-a-servidor. | Baixa |
| Checkout com 3DS | Conta exige 3DS, ou você quer a garantia contra chargeback que o 3DS oferece. Funciona em qualquer configuração. | Média (script pronto, você só integra) |
1000.client_secret no frontend. Ele só deve ser usado no backend — inclusive para criar sessões de checkout.Autenticação
A API utiliza OAuth 2.0 Client Credentials. O token expira em 30 minutos e deve ser enviado no header Authorization: Bearer {token} em todas as requisições.
{
"grant_type": "client_credentials",
"client_id": "pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"client_secret": "sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
{
"access_token": "86faff9660605f01731f0f103...",
"token_type": "Bearer",
"expires_in": 1800,
"scope": "payments"
}
Processar pagamento (direto)
Processa um pagamento com cartão de crédito numa única chamada, direto do seu backend. Retorna o ID do pagamento, que deve ser armazenado para consultas e estornos futuros.
payment_error e a mensagem "No 3DS authentication" — nesse caso, use o Checkout com 3DS.Parâmetros
| Campo | Tipo | Req. | Descrição |
|---|---|---|---|
amount | integer | Sim | Valor em centavos (ex.: 1000 = R$ 10,00). Mínimo 100. |
installments | integer | Sim | Número de parcelas (1 a 12). |
soft_descriptor | string | Não | Prefixo do nome na fatura (letras/números, sem espaços). O sufixo *PAG é adicionado automaticamente. Se não informado, usa "LOJA". |
card.number | string | Sim | Número do cartão (somente dígitos). |
card.holder_name | string | Sim | Nome do titular em maiúsculas. |
card.expiration_month | integer | Sim | Mês de validade (1-12). |
card.expiration_year | integer | Sim | Ano de validade (ex.: 30 para 2030). |
card.cvv | string | Sim | Código de segurança (3 ou 4 dígitos). |
customer.name | string | Sim | Nome completo do cliente. |
customer.document | string | Sim | CPF (11 dígitos) ou CNPJ (14 dígitos). |
customer.email | string | Sim | E-mail do cliente. |
customer.phone | string | Sim | Telefone com DDD (somente números). |
customer.address | string | Sim | Endereço (rua e número). |
customer.city | string | Sim | Cidade. |
customer.state | string | Sim | Estado (UF, 2 letras). |
customer.zip_code | string | Sim | CEP (somente dígitos). |
metadata | object | Não | Dados extras retornados na resposta. |
{
"amount": 10000,
"installments": 1,
"soft_descriptor": "MINHALOJA",
"card": {
"number": "4111111111111111",
"holder_name": "JOAO DA SILVA",
"expiration_month": 12,
"expiration_year": 30,
"cvv": "123"
},
"customer": {
"name": "João da Silva",
"document": "02216583359",
"email": "joao@email.com",
"phone": "85999999999",
"address": "Rua das Flores, 123",
"city": "Fortaleza",
"state": "CE",
"zip_code": "60000000"
},
"metadata": { "order_id": "pedido-123" }
}
{
"id": "0200693422080202551400044100154500000000000",
"status": "approved",
"amount": 10000,
"installments": 1,
"brand": "VISA",
"authorization": "646035",
"order_number": "APIeb18e75435",
"metadata": { "order_id": "pedido-123" },
"created_at": "2026-08-02T02:55:15+00:00"
}
Exemplo — cURL
# 1. Obter token
curl -X POST https://app.azemax.solutions/api/pay-api/oauth/token \
-H "Content-Type: application/json" \
-d '{"grant_type":"client_credentials","client_id":"pk_live_xxx","client_secret":"sk_live_xxx"}'
# 2. Processar pagamento (usar o access_token recebido acima)
curl -X POST https://app.azemax.solutions/api/pay-api/payments \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-d '{ "amount": 10000, "installments": 1, "card": { ... }, "customer": { ... } }'
Exemplo — Node.js
// 1. Obter token
const authRes = await fetch('https://app.azemax.solutions/api/pay-api/oauth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
grant_type: 'client_credentials',
client_id: 'pk_live_xxx',
client_secret: 'sk_live_xxx',
}),
});
const { access_token } = await authRes.json();
// 2. Processar pagamento
const res = await fetch('https://app.azemax.solutions/api/pay-api/payments', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${access_token}`,
},
body: JSON.stringify({
amount: 10000,
installments: 1,
card: { number: '4111111111111111', holder_name: 'JOAO DA SILVA', expiration_month: 12, expiration_year: 30, cvv: '123' },
customer: { name: 'João da Silva', document: '02216583359', email: 'joao@email.com', phone: '85999999999', address: 'Rua das Flores, 123', city: 'Fortaleza', state: 'CE', zip_code: '60000000' },
}),
});
const pagamento = await res.json();
console.log('ID:', pagamento.id);
Exemplo — PHP
// 1. Obter token
$ch = curl_init('https://app.azemax.solutions/api/pay-api/oauth/token');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'grant_type' => 'client_credentials',
'client_id' => 'pk_live_xxx',
'client_secret' => 'sk_live_xxx',
]),
]);
$token = json_decode(curl_exec($ch), true)['access_token'];
// 2. Processar pagamento
$ch = curl_init('https://app.azemax.solutions/api/pay-api/payments');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'Authorization: Bearer ' . $token],
CURLOPT_POSTFIELDS => json_encode([
'amount' => 10000, 'installments' => 1,
'card' => ['number' => '4111111111111111', 'holder_name' => 'JOAO DA SILVA', 'expiration_month' => 12, 'expiration_year' => 30, 'cvv' => '123'],
'customer' => ['name' => 'João da Silva', 'document' => '02216583359', 'email' => 'joao@email.com', 'phone' => '85999999999', 'address' => 'Rua das Flores, 123', 'city' => 'Fortaleza', 'state' => 'CE', 'zip_code' => '60000000'],
]),
]);
$pagamento = json_decode(curl_exec($ch), true);
echo 'ID: ' . $pagamento['id'];
Consultar pagamento
Consulta o status de um pagamento pelo ID retornado no processamento.
{
"id": "0200693422080202551400044100154500000000000",
"status": "approved",
"status_detail": "Captura - Sucesso",
"amount": 10000,
"authorization": "646035",
"created_at": "2026-08-02T02:55:15+00:00"
}
Valores de status
approved aprovado e capturado. declined negado pela operadora. cancelled cancelado. refunded estornado. pending aguardando processamento.
Estornar pagamento
Realiza o estorno total de um pagamento aprovado — funciona tanto para pagamentos feitos pelo caminho direto quanto pelo checkout com 3DS.
{
"id": "0200693422080202551400044100154500000000000",
"status": "refunded",
"refunded_at": "2026-08-02T03:10:00+00:00"
}
Checkout com 3DS
Este caminho embute um pequeno script (checkout.js) diretamente no seu site. Ele cuida da tokenização do cartão e, quando necessário, do desafio de autenticação 3DS (senha, app do banco, SMS) — sem que você precise lidar com esses detalhes.
Como funciona, em 3 passos
| Passo | Onde roda | O que faz |
|---|---|---|
| 1. Criar sessão | Seu backend | Chama POST /pay-api/checkout/session com client_id/client_secret (nunca no navegador) e recebe um session_token de uso único, válido por 15 minutos. |
| 2. Coletar cartão e pagar | Navegador do comprador | Sua página carrega o checkout.js e o SDK 3DS, e chama MaquinetaCheckout.pagar(...) passando o session_token. |
| 3. Receber o resultado | Navegador do comprador | O checkout.js retorna o resultado via onSuccess/onError — aprovado, negado, ou erro. |
Criar sessão de checkout
Chamada feita pelo seu backend — é aqui, e só aqui, que o client_secret é usado neste fluxo. O session_token retornado é seguro para expor no navegador do comprador: ele só serve para esta sessão específica, expira em 15 minutos, e não tem poder de gerar cobrança sozinho.
| Campo | Tipo | Req. | Descrição |
|---|---|---|---|
amount | integer | Sim | Valor em centavos. Mínimo 100. |
installments | integer | Não | Número de parcelas (padrão: 1). |
soft_descriptor | string | Não | Prefixo do nome na fatura (mesma regra do pagamento direto). |
metadata | object | Não | Dados extras retornados após a aprovação. |
{
"amount": 10000,
"installments": 1,
"soft_descriptor": "MINHALOJA",
"metadata": { "order_id": "pedido-123" }
}
{
"session_token": "cs_a1b2c3d4...",
"expires_in": 900
}
Embed no seu site
Inclua os dois scripts abaixo na página onde o comprador vai digitar os dados do cartão. Eles são hospedados pela Azemax e atualizados automaticamente — não é necessário baixar nem copiar arquivos.
<!-- Scripts (nesta ordem) -->
<script src="https://app.azemax.solutions/pag/assets/js/adiq-3ds-package-1.2.0-min.js"></script>
<script src="https://app.azemax.solutions/pag/assets/js/checkout.js"></script>
<!-- Um campo de input real é obrigatório para o número do cartão -->
<input type="text" id="numeroCartao">
<input type="text" id="titular">
<input type="text" id="validade" placeholder="MM/AA">
<input type="text" id="cvv">
<button onclick="pagar()">Pagar</button>
// session_token vem do SEU backend (endpoint que você mesmo cria,
// que por sua vez chama o POST /pay-api/checkout/session)
const sessionToken = await obterSessionTokenDoBackend();
MaquinetaCheckout.init({
sessionToken: sessionToken,
baseUrl: 'https://app.azemax.solutions/api',
onSuccess: (resultado) => {
console.log('Aprovado!', resultado.id);
},
onError: (erro) => {
console.log('Erro:', erro.error_description);
},
});
async function pagar() {
await MaquinetaCheckout.pagar({
cardInputId: 'numeroCartao',
numero: document.getElementById('numeroCartao').value,
titular: document.getElementById('titular').value,
validade: document.getElementById('validade').value,
cvv: document.getElementById('cvv').value,
customer: {
name: 'João da Silva',
document: '02216583359',
email: 'joao@email.com',
phone: '85999999999',
address: 'Rua das Flores, 123',
city: 'Fortaleza',
state: 'CE',
zip_code: '60000000',
},
});
}
checkout.js pode, durante o pagamento, abrir uma tela de autenticação do banco do comprador (senha, app ou SMS). Esse processo pode levar alguns minutos — não recarregue nem feche a página enquanto onSuccess/onError não forem chamados.Bandeiras aceitas
| Bandeira | Parcelas |
|---|---|
| Visa | 1x a 12x |
| Mastercard | 1x a 12x |
| Elo | 1x a 12x |
| American Express | 1x |
Códigos de erro
Todos os erros retornam um objeto com error e error_description.
| HTTP | error | Descrição |
|---|---|---|
| 400 | invalid_request | Campo obrigatório ausente ou inválido. |
| 400 | unsupported_grant_type | grant_type deve ser client_credentials. |
| 401 | invalid_client | client_id ou client_secret inválidos. |
| 401 | unauthorized | Token inválido ou expirado. |
| 401 | invalid_session | session_token inválido, expirado ou já usado (endpoints de checkout). |
| 402 | payment_declined | Pagamento negado pela operadora. |
| 422 | payment_error | Erro no processamento (dados inválidos, ou 3DS exigido no caminho direto). |
| 429 | rate_limit_exceeded | Limite de requisições excedido (100/hora). |
| 500 | internal_error | Erro interno — tente novamente. |
Vallis · API PIX Cash-in
Gera cobranças PIX (QRCode e Copia e Cola) que creditam diretamente na conta Vallis vinculada à credencial.
Fluxo de uso
- Crie a cobrança informando o valor.
- Exiba o QRCode ou o código Copia e Cola ao cliente.
- O cliente paga por qualquer banco; a cobrança passa para
Paid. - Acompanhe o status por
cobrancaIdou porreferenciaExterna.
Criar cobrança
Corpo da requisição
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
valor | número | sim | Em reais, maior que zero, até 2 casas decimais. Limite padrão de R$ 50.000,00 por cobrança. |
mensagem | texto | não | Exibida ao pagador. Até 140 caracteres. |
referenciaExterna | texto | recomend. | Identificador do parceiro, até 60 caracteres (letras, números e - _ . : /). Reenvio com a mesma referência devolve a mesma cobrança (reenvio: true). |
curl -X POST https://api.baas.valecom.net.br/api/v1/external/pix-cashin/charges \
-H "X-Api-Key: SUA_CHAVE_VALLIS" \
-H "Content-Type: application/json" \
-d '{
"valor": 150.00,
"mensagem": "Pagamento do pedido #1234",
"referenciaExterna": "pedido-1234"
}'
Resposta 200
{
"data": {
"cobrancaId": "chg_0a1b2c3d",
"txId": "E1234567890",
"status": "Pending",
"valor": 150.00,
"mensagem": "Pagamento do pedido #1234",
"referenciaExterna": "pedido-1234",
"pixCopiaECola": "00020126...6304ABCD",
"qrCodeBase64": "iVBORw0KGgoAAAANSUhEUgAA...",
"criadaEm": "2026-11-01T11:30:00Z",
"pagoEm": null,
"valorPago": null,
"endToEndId": null,
"reenvio": false
}
}
qrCodeBase64 (imagem PNG) é retornado somente na criação. Para exibir o QRCode novamente, gere-o a partir do campo pixCopiaECola.Consultar cobrança
Retorna os mesmos dados da criação, com status, pagoEm, valorPago e endToEndId preenchidos quando a cobrança é paga.
curl https://api.baas.valecom.net.br/api/v1/external/pix-cashin/charges/chg_0a1b2c3d \
-H "X-Api-Key: SUA_CHAVE_VALLIS"
Listar cobranças
Retorna até 100 cobranças, das mais recentes para as mais antigas. Aceita os filtros abaixo via query string.
| Filtro | Descrição |
|---|---|
referenciaExterna | Filtra pela referência do parceiro. |
dataInicio | Formato AAAA-MM-DD. |
dataFim | Formato AAAA-MM-DD (inclusiva). |
Status da cobrança
Pending aguardando pagamento.
Paid pagamento recebido e creditado (pagoEm, valorPago e endToEndId preenchidos).
Códigos de erro
Formato: { "error": { "code": "...", "message": "..." } }
| HTTP | Código | Situação |
|---|---|---|
| 401 | UNAUTHORIZED | Chave ausente, inválida, expirada ou revogada. |
| 403 | FORBIDDEN | Chave sem acesso à API ou IP não permitido. |
| 429 | RATE_LIMITED | Limite por minuto excedido. |
| 404 | NOT_FOUND | Cobrança inexistente ou de outra credencial. |
| 409 | REFERENCE_CONFLICT | Mesma referenciaExterna com outro valor. |
| 422 | ACCOUNT_UNAVAILABLE | Conta vinculada não apta a receber. |
| 422 | NO_PIX_KEY | Conta sem chave PIX cadastrada. |
| 400 | INVALID_VALUE, VALUE_ABOVE_LIMIT, INVALID_MESSAGE, INVALID_REFERENCE | Dados inválidos. |
| 502 | PIX_CHARGE_ERROR | Falha temporária; repetir com a mesma referenciaExterna. |
Vallis · API de Boleto (BolePix)
Emite boletos de cobrança com QR PIX anexado (BolePix) quando a conta tem chave PIX. Os valores são creditados na conta Vallis vinculada à credencial.
Fluxo de uso
- Emita o boleto com valor, vencimento e dados do pagador.
- Envie o boleto ao pagador (linha digitável, código de barras ou PDF).
- Após a compensação, o crédito entra na conta e o boleto vira
Paid. - Acompanhe o status e, se não pago, cancele quando necessário.
Emitir boleto
Corpo da requisição
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
valor | número | sim | Em reais, até 2 casas. Limite padrão de R$ 100.000,00. |
vencimento | data | sim | AAAA-MM-DD, entre hoje e 1 ano. |
pagador.nome | texto | sim | Até 200 caracteres. |
pagador.documento | texto | sim | CPF ou CNPJ válido. |
pagador.cep, logradouro, numero, bairro, cidade, uf | texto | recomend. | Endereço do pagador. |
multa | objeto | não | Valor ou percentual, com dias após o vencimento (padrão 1). |
juros | objeto | não | Valor por dia ou percentual ao mês, com dias (padrão 0). |
desconto | objeto | não | Valor ou percentual, com dataLimite (padrão = vencimento). |
instrucoes, descricao | texto | não | Até 1000 caracteres. |
referenciaExterna | texto | recomend. | Até 60 caracteres (letras, números, - _ . : /). Reenvio com a mesma referência devolve o mesmo boleto. |
bolePix | booleano | não | Padrão true; anexa QR PIX ao boleto. |
referenciaExterna, é possível usar o header Idempotency-Key (até 60 caracteres) para repetir chamadas com segurança.curl -X POST https://api.baas.valecom.net.br/api/v1/external/boleto/charges \
-H "X-Api-Key: SUA_CHAVE_VALLIS" \
-H "Content-Type: application/json" \
-d '{
"valor": 250.00,
"vencimento": "2026-12-05",
"pagador": {
"nome": "João da Silva",
"documento": "123.456.789-09",
"cep": "56300-000",
"logradouro": "Rua das Flores",
"numero": "100",
"bairro": "Centro",
"cidade": "Petrolina",
"uf": "PE"
},
"referenciaExterna": "fatura-2026-001",
"bolePix": true
}'
Campos da resposta
boletoId, status, valor, vencimento, pagador (nome e documento), linhaDigitavel, codigoBarras, pdf, referenciaExterna, criadoEm, pagoEm, reenvio.
Consultar / Listar
Consulta um boleto e o status do pagamento.
Lista boletos (até 100, mais recentes primeiro), com filtros de referência e período (dataInicio, dataFim em AAAA-MM-DD).
Cancelar boleto
Cancela um boleto ainda não pago. Um boleto já pago retorna o erro ALREADY_PAID.
Status do boleto
Registered emitido, em aberto. Overdue vencido e não pago (ainda pagável com encargos até a baixa). Paid pago e creditado. Cancelled cancelado.
Códigos de erro
Formato: { "error": { "code": "...", "message": "..." } }
| HTTP | Código | Situação |
|---|---|---|
| 401 | UNAUTHORIZED | Chave ausente, inválida, expirada ou revogada. |
| 403 | FORBIDDEN | Chave sem acesso à API ou IP não permitido. |
| 429 | RATE_LIMITED | Limite por minuto excedido. |
| 404 | NOT_FOUND | Cobrança inexistente ou de outra credencial. |
| 409 | REFERENCE_CONFLICT | Mesma referenciaExterna com outro valor. |
| 409 | IN_PROGRESS | Emissão ainda em processamento; consultar depois. |
| 409 | ALREADY_PAID | Tentativa de cancelar boleto já pago. |
| 422 | ACCOUNT_UNAVAILABLE | Conta vinculada não apta a receber. |
| 422 | PAYEE_ADDRESS_MISSING | Cadastro do titular sem endereço completo; contatar o suporte. |
| 400 | INVALID_VALUE, VALUE_ABOVE_LIMIT, INVALID_DUEDATE, INVALID_PAYER, INVALID_FINE, INVALID_INTEREST, INVALID_DISCOUNT, INVALID_CHARGES, INVALID_TEXT, INVALID_REFERENCE, INVALID_IDEMPOTENCY_KEY | Dados inválidos. |
| 422 | (código do emissor) | Banco emissor recusou a operação; a mensagem informa o motivo. |