Azemax Tecnologia Documentação de APIs ← Voltar ao site

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.

Sobre a titularidade das APIs. As APIs Vallis (PIX Cash-in e Boleto) são de propriedade da Vallis — Valecom Soluções Empresariais. A Azemax atua como parceira indicadora, direcionando seus clientes ao banco de indicação Vallis; a tecnologia, as credenciais e a operação dessas APIs permanecem sob responsabilidade da Vallis. A API de Pagamentos Azemax opera sobre a infraestrutura do provedor de pagamentos da Azemax, publicada no domínio 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

https://app.azemax.solutions/api

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)

PRODhttps://api.baas.valecom.net.br
HMLhttps://api-hml.baas.valecom.net.br

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.

HeaderValorDescrição
X-Api-Keysua chave VallisChave de API fornecida pela Vallis. Identifica a credencial e a conta que recebe os créditos.
Content-Typeapplication/jsonObrigatório nas requisições com corpo JSON.
Mantenha a chave apenas no servidor. Nunca a coloque em aplicativos móveis ou páginas web. A chave vale somente para a API à qual foi liberada — outras rotas retornam 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 429 com header Retry-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

AZ
Azemax Pay API · v1.0
Pagamentos com cartão de crédito · OAuth 2.0 · gateway ADIQ · base app.azemax.solutions/api

Integre 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:

CaminhoQuando usarComplexidade
Pagamento diretoConta configurada sem exigência de 3DS (só análise de fraude). Chamada única, servidor-a-servidor.Baixa
Checkout com 3DSConta 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)
💡 Todos os valores monetários são em centavos. Exemplo: R$ 10,00 = 1000.
⚠️ Nunca exponha o 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.

POST/pay-api/oauth/token
Request
{
  "grant_type": "client_credentials",
  "client_id": "pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "client_secret": "sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
200 — Sucesso
{
  "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.

⚠️ Este caminho só funciona se a sua conta estiver configurada sem exigência de 3DS. Se a conta exigir 3DS, a chamada é recusada com payment_error e a mensagem "No 3DS authentication" — nesse caso, use o Checkout com 3DS.
POST/pay-api/payments

Parâmetros

CampoTipoReq.Descrição
amountintegerSimValor em centavos (ex.: 1000 = R$ 10,00). Mínimo 100.
installmentsintegerSimNúmero de parcelas (1 a 12).
soft_descriptorstringNãoPrefixo do nome na fatura (letras/números, sem espaços). O sufixo *PAG é adicionado automaticamente. Se não informado, usa "LOJA".
card.numberstringSimNúmero do cartão (somente dígitos).
card.holder_namestringSimNome do titular em maiúsculas.
card.expiration_monthintegerSimMês de validade (1-12).
card.expiration_yearintegerSimAno de validade (ex.: 30 para 2030).
card.cvvstringSimCódigo de segurança (3 ou 4 dígitos).
customer.namestringSimNome completo do cliente.
customer.documentstringSimCPF (11 dígitos) ou CNPJ (14 dígitos).
customer.emailstringSimE-mail do cliente.
customer.phonestringSimTelefone com DDD (somente números).
customer.addressstringSimEndereço (rua e número).
customer.citystringSimCidade.
customer.statestringSimEstado (UF, 2 letras).
customer.zip_codestringSimCEP (somente dígitos).
metadataobjectNãoDados extras retornados na resposta.
Request
{
  "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" }
}
201 — Aprovado
{
  "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

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

JavaScript
// 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

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.

GET/pay-api/payments/{id}
200 — Sucesso
{
  "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.

POST/pay-api/payments/{id}/refund
200 — Estornado
{
  "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.

🔒 A vantagem sobre o pagamento direto: funciona independente de como a sua conta está configurada, e cobre o cenário em que a análise de fraude decide, caso a caso, que uma transação específica precisa de verificação extra.

Como funciona, em 3 passos

PassoOnde rodaO que faz
1. Criar sessãoSeu backendChama 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 pagarNavegador do compradorSua página carrega o checkout.js e o SDK 3DS, e chama MaquinetaCheckout.pagar(...) passando o session_token.
3. Receber o resultadoNavegador do compradorO 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.

POST/pay-api/checkout/session
CampoTipoReq.Descrição
amountintegerSimValor em centavos. Mínimo 100.
installmentsintegerNãoNúmero de parcelas (padrão: 1).
soft_descriptorstringNãoPrefixo do nome na fatura (mesma regra do pagamento direto).
metadataobjectNãoDados extras retornados após a aprovação.
Request
{
  "amount": 10000,
  "installments": 1,
  "soft_descriptor": "MINHALOJA",
  "metadata": { "order_id": "pedido-123" }
}
200 — Sucesso
{
  "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.

HTML
<!-- 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>
JavaScript
// 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',
    },
  });
}
⚠️ O 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

BandeiraParcelas
Visa1x a 12x
Mastercard1x a 12x
Elo1x a 12x
American Express1x

Códigos de erro

Todos os erros retornam um objeto com error e error_description.

HTTPerrorDescrição
400invalid_requestCampo obrigatório ausente ou inválido.
400unsupported_grant_typegrant_type deve ser client_credentials.
401invalid_clientclient_id ou client_secret inválidos.
401unauthorizedToken inválido ou expirado.
401invalid_sessionsession_token inválido, expirado ou já usado (endpoints de checkout).
402payment_declinedPagamento negado pela operadora.
422payment_errorErro no processamento (dados inválidos, ou 3DS exigido no caminho direto).
429rate_limit_exceededLimite de requisições excedido (100/hora).
500internal_errorErro interno — tente novamente.

Vallis · API PIX Cash-in

V
Propriedade: Vallis — Valecom Soluções Empresariais
API PIX Cash-in (QRCode / Copia e Cola) · v1 · Azemax atua como parceira indicadora

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 cobrancaId ou por referenciaExterna.
Acompanhamento (polling): consulte a cada 5 a 10 segundos durante a tela de pagamento e espace depois. O QRCode não expira — o vencimento deve ser tratado pelo sistema do parceiro.

Criar cobrança

POST/api/v1/external/pix-cashin/charges

Corpo da requisição

CampoTipoObrig.Descrição
valornúmerosimEm reais, maior que zero, até 2 casas decimais. Limite padrão de R$ 50.000,00 por cobrança.
mensagemtextonãoExibida ao pagador. Até 140 caracteres.
referenciaExternatextorecomend.Identificador do parceiro, até 60 caracteres (letras, números e - _ . : /). Reenvio com a mesma referência devolve a mesma cobrança (reenvio: true).
cURL
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

JSON
{
  "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
  }
}
O qrCodeBase64 (imagem PNG) é retornado somente na criação. Para exibir o QRCode novamente, gere-o a partir do campo pixCopiaECola.

Consultar cobrança

GET/api/v1/external/pix-cashin/charges/{cobrancaId}

Retorna os mesmos dados da criação, com status, pagoEm, valorPago e endToEndId preenchidos quando a cobrança é paga.

cURL
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

GET/api/v1/external/pix-cashin/charges

Retorna até 100 cobranças, das mais recentes para as mais antigas. Aceita os filtros abaixo via query string.

FiltroDescrição
referenciaExternaFiltra pela referência do parceiro.
dataInicioFormato AAAA-MM-DD.
dataFimFormato 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": "..." } }

HTTPCódigoSituação
401UNAUTHORIZEDChave ausente, inválida, expirada ou revogada.
403FORBIDDENChave sem acesso à API ou IP não permitido.
429RATE_LIMITEDLimite por minuto excedido.
404NOT_FOUNDCobrança inexistente ou de outra credencial.
409REFERENCE_CONFLICTMesma referenciaExterna com outro valor.
422ACCOUNT_UNAVAILABLEConta vinculada não apta a receber.
422NO_PIX_KEYConta sem chave PIX cadastrada.
400INVALID_VALUE, VALUE_ABOVE_LIMIT, INVALID_MESSAGE, INVALID_REFERENCEDados inválidos.
502PIX_CHARGE_ERRORFalha temporária; repetir com a mesma referenciaExterna.
Tarifas: os recebimentos seguem a tarifação do pacote Vallis contratado. Dúvidas devem ser direcionadas ao contato comercial da Vallis.

Vallis · API de Boleto (BolePix)

V
Propriedade: Vallis — Valecom Soluções Empresariais
API de Boletos (Cobrança) · v1 · Azemax atua como parceira indicadora

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.
A compensação de boleto pode levar até 1 dia útil. No BolePix, o pagamento via PIX é imediato.

Emitir boleto

POST/api/v1/external/boleto/charges

Corpo da requisição

CampoTipoObrig.Descrição
valornúmerosimEm reais, até 2 casas. Limite padrão de R$ 100.000,00.
vencimentodatasimAAAA-MM-DD, entre hoje e 1 ano.
pagador.nometextosimAté 200 caracteres.
pagador.documentotextosimCPF ou CNPJ válido.
pagador.cep, logradouro, numero, bairro, cidade, uftextorecomend.Endereço do pagador.
multaobjetonãoValor ou percentual, com dias após o vencimento (padrão 1).
jurosobjetonãoValor por dia ou percentual ao mês, com dias (padrão 0).
descontoobjetonãoValor ou percentual, com dataLimite (padrão = vencimento).
instrucoes, descricaotextonãoAté 1000 caracteres.
referenciaExternatextorecomend.Até 60 caracteres (letras, números, - _ . : /). Reenvio com a mesma referência devolve o mesmo boleto.
bolePixbooleanonãoPadrão true; anexa QR PIX ao boleto.
Sem referenciaExterna, é possível usar o header Idempotency-Key (até 60 caracteres) para repetir chamadas com segurança.
cURL
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

GET/api/v1/external/boleto/charges/{boletoId}

Consulta um boleto e o status do pagamento.

GET/api/v1/external/boleto/charges

Lista boletos (até 100, mais recentes primeiro), com filtros de referência e período (dataInicio, dataFim em AAAA-MM-DD).

Cancelar boleto

POST/api/v1/external/boleto/charges/{boletoId}/cancel

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": "..." } }

HTTPCódigoSituação
401UNAUTHORIZEDChave ausente, inválida, expirada ou revogada.
403FORBIDDENChave sem acesso à API ou IP não permitido.
429RATE_LIMITEDLimite por minuto excedido.
404NOT_FOUNDCobrança inexistente ou de outra credencial.
409REFERENCE_CONFLICTMesma referenciaExterna com outro valor.
409IN_PROGRESSEmissão ainda em processamento; consultar depois.
409ALREADY_PAIDTentativa de cancelar boleto já pago.
422ACCOUNT_UNAVAILABLEConta vinculada não apta a receber.
422PAYEE_ADDRESS_MISSINGCadastro do titular sem endereço completo; contatar o suporte.
400INVALID_VALUE, VALUE_ABOVE_LIMIT, INVALID_DUEDATE, INVALID_PAYER, INVALID_FINE, INVALID_INTEREST, INVALID_DISCOUNT, INVALID_CHARGES, INVALID_TEXT, INVALID_REFERENCE, INVALID_IDEMPOTENCY_KEYDados inválidos.
422(código do emissor)Banco emissor recusou a operação; a mensagem informa o motivo.
Tarifas: emissão e recebimento seguem o pacote Vallis contratado e são debitados da própria conta. Dúvidas devem ser direcionadas ao contato comercial da Vallis.