Documentação da API

Versão: 1.0.0
Base URL: https://api.avanpay.com.br/api
Suporte: suporte@avanpay.com.br

Visão Geral

A API do AvanPay é um gateway de pagamento completo que permite processar pagamentos via PIX, Boleto e Cartão de Crédito de forma simples e segura.

Características

  • Multi-Adquirente: Suporte a múltiplos providers
  • Idempotência: Operações seguras e sem duplicação
  • Webhooks: Notificações em tempo real
  • Rate Limiting: Proteção contra abuso
  • Documentação Completa: Fácil integração

Autenticação

A API do AvanPay suporta dois métodos de autenticação: JWT Token (Bearer Token) para aplicações web e frontend, e API Keys para integrações server-to-server.

JWT Token (Bearer Token)

O método de autenticação via JWT Token é recomendado para aplicações web e frontend. O token deve ser incluído no header Authorization de todas as requisições autenticadas.

Authorization: Bearer {seu_token_jwt}

Obtenção do Token

Para obter um token JWT, realize uma requisição de autenticação no endpoint /api/auth/login com suas credenciais. O processo consiste em:

  1. Realizar requisição POST para /api/auth/login com email e senha
  2. Receber accessToken e refreshToken na resposta
  3. Utilizar o accessToken no header Authorization de requisições subsequentes
  4. Utilizar o refreshToken para renovar o token quando necessário
POST /api/auth/login

Autentica usuário e retorna tokens JWT para acesso à API.

Request Body

{
  "email": "empresa@exemplo.com",
  "password": "senhaSegura123"
}

Response (200 OK)

{
  "success": true,
  "data": {
    "user": {
      "id": 1,
      "name": "Nome da Empresa",
      "email": "empresa@exemplo.com"
    },
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  }
}

API Keys

O método de autenticação via API Keys é recomendado para integrações server-to-server. As chaves devem ser incluídas nos headers de todas as requisições.

X-API-Public-Key: {sua_public_key}
X-API-Secret-Key: {sua_secret_key}
Atenção: Nunca exponha suas API Keys em código cliente ou repositórios públicos. A chave secreta (Secret Key) é exibida apenas uma vez durante a criação e deve ser armazenada com segurança.

Pagamento PIX

O endpoint de pagamento PIX permite criar transações de pagamento instantâneo via PIX. Os pagamentos PIX são processados em tempo real e oferecem confirmação imediata após a realização do pagamento.

POST /api/payments/pix

Headers

Header Tipo Descrição
Authorization string Token JWT ou API Keys *
Idempotency-Key string Chave única para garantir idempotência (opcional)
Content-Type string application/json *

Request:

POST /api/payments/pix
Authorization: Bearer {token}
Content-Type: application/json

{
  "amount": 10000,
  "sellerExternalRef": "PEDIDO-123",
  "customer": {
    "name": "João Silva",
    "email": "joao@example.com",
    "phone": "11999999999",
    "documentType": "CPF",
    "document": "12345678900"
  },
  "items": [
    {
      "title": "Produto Exemplo",
      "quantity": 1,
      "amount": 10000,
      "tangible": true
    }
  ],
  "postbackUrl": "https://seu-site.com/webhook",
  "metadata": {
    "orderId": "12345",
    "customField": "valor"
  }
}

Parâmetros Comuns

Campo Tipo Obrigatório Descrição
amount integer * Valor em centavos (ex: 10000 = R$ 100,00)
sellerExternalRef string * Referência externa do pedido
customer object * Dados do cliente
customer.name string * Nome completo
customer.email string * E-mail válido
customer.phone string * Telefone (apenas números)
customer.documentType string * CPF ou CNPJ
customer.document string * CPF/CNPJ (apenas números)
items array * Array de itens
items[].title string * Nome do item
items[].quantity integer * Quantidade
items[].amount integer * Valor unitário em centavos
items[].tangible boolean * Se é produto físico
postbackUrl string - URL para receber webhooks
metadata object - Dados adicionais (JSON)
preferredProvider string - Provider preferido (starkpay, witetec)

Response (201 Created):

{
  "success": true,
  "data": {
    "id": "tx_abc123",
    "status": "WAITING_PAYMENT",
    "amount": 10000,
    "pix": {
      "qrcode": "data:image/png;base64,iVBORw0KGgo...",
      "copyPaste": "00020126360014BR.GOV.BCB.PIX...",
      "expirationDate": "2024-12-03T10:00:00Z"
    },
    "createdAt": "2024-12-02T10:00:00Z"
  }
}

Status da Transação

  • WAITING_PAYMENT - Aguardando pagamento pelo cliente
  • PAID - Pagamento confirmado e processado
  • EXPIRED - Prazo de pagamento expirado
  • CANCELLED - Transação cancelada
  • FAILED - Falha no processamento

Pagamento Boleto

O endpoint de pagamento Boleto permite criar transações de pagamento via Boleto Bancário. Os boletos são gerados com código de barras e linha digitável para pagamento em bancos, lotéricas e aplicativos bancários.

POST /api/payments/boleto

Request:

POST /api/payments/boleto
Authorization: Bearer {token}
Content-Type: application/json

{
  "amount": 10000,
  "sellerExternalRef": "PEDIDO-123",
  "customer": {
    "name": "João Silva",
    "email": "joao@example.com",
    "phone": "11999999999",
    "documentType": "CPF",
    "document": "12345678900"
  },
  "items": [
    {
      "title": "Produto Exemplo",
      "quantity": 1,
      "amount": 10000,
      "tangible": true
    }
  ]
}

Response:

{
  "success": true,
  "data": {
    "id": "tx_abc123",
    "status": "WAITING_PAYMENT",
    "amount": 10000,
    "boleto": {
      "barcode": "34191.09008 01234.567890 12345.678901 2 12340000010000",
      "url": "https://seu-boleto.com/12345",
      "expirationDate": "2024-12-05T10:00:00Z"
    }
  }
}

Pagamento Cartão

O endpoint de pagamento Cartão permite processar transações de pagamento via Cartão de Crédito. Suporta pagamentos à vista e parcelados, com validação de segurança e processamento em tempo real.

POST /api/payments/card

Request:

POST /api/payments/card
Authorization: Bearer {token}
Content-Type: application/json

{
  "amount": 10000,
  "installments": 1,
  "sellerExternalRef": "PEDIDO-123",
  "customer": {
    "name": "João Silva",
    "email": "joao@example.com",
    "phone": "11999999999",
    "documentType": "CPF",
    "document": "12345678900"
  },
  "card": {
    "number": "4111111111111111",
    "holderName": "JOAO SILVA",
    "expirationMonth": "12",
    "expirationYear": "2025",
    "cvv": "123"
  },
  "items": [
    {
      "title": "Produto Exemplo",
      "quantity": 1,
      "amount": 10000,
      "tangible": true
    }
  ]
}

Response:

{
  "success": true,
  "data": {
    "id": "tx_abc123",
    "status": "PAID",
    "amount": 10000,
    "card": {
      "last4": "1111",
      "brand": "VISA"
    },
    "paidAt": "2024-12-02T10:00:05Z"
  }
}

Transações

Os endpoints de transações permitem consultar e gerenciar todas as transações realizadas através da API. É possível listar transações com filtros e paginação, além de consultar detalhes de transações específicas.

GET /api/payments/transactions

Lista todas as transações com suporte a filtros e paginação.

Query Parameters

Parâmetro Tipo Descrição
page number Número da página (padrão: 1)
limit number Itens por página (padrão: 20, máximo: 100)
status string Filtrar por status da transação
type string Filtrar por tipo (PIX, BOLETO, CARD)
startDate string Data inicial no formato ISO 8601
endDate string Data final no formato ISO 8601

Consultar Transação

GET /api/payments/transactions/{transactionId}

Response:

{
  "success": true,
  "data": {
    "id": "tx_abc123",
    "status": "PAID",
    "amount": 10000,
    "paymentMethod": "PIX",
    "customer": { ... },
    "items": [ ... ],
    "pix": { ... },
    "createdAt": "2024-12-02T10:00:00Z",
    "paidAt": "2024-12-02T10:05:00Z"
  }
}

Listar Transações

GET /api/payments/transactions?page=1&limit=20&status=PAID

Query Parameters: page, limit, status, type, startDate, endDate

Saldo

O endpoint de saldo permite consultar o saldo disponível, pendente e bloqueado da conta.

GET /api/payments/balance

Response (200 OK)

{
  "success": true,
  "data": {
    "available": 5000.00,
    "pending": 1000.00,
    "blocked": 500.00,
    "currency": "BRL"
  }
}

Saques

O endpoint de saques permite criar solicitações de saque para contas bancárias cadastradas. Os saques são processados conforme a política de liquidação configurada.

Criar Saque

POST /api/payments/cash-out

Request:

POST /api/payments/cash-out
Authorization: Bearer {token}
Content-Type: application/json

{
  "amount": 5000,
  "pixKey": "11999999999",
  "pixKeyType": "PHONE",
  "method": "PIX",
  "sellerExternalRef": "SAQUE-001"
}

Tipos de Chave PIX:

  • CPF: CPF (11 dígitos)
  • CNPJ: CNPJ (14 dígitos)
  • EMAIL: E-mail válido
  • PHONE: Telefone (+5511999999999)
  • EVP: Chave aleatória (UUID)

Response:

{
  "success": true,
  "data": {
    "id": "cashout_abc123",
    "status": "PENDING",
    "amount": 5000,
    "pixKey": "11999999999",
    "pixKeyType": "PHONE",
    "createdAt": "2024-12-02T10:00:00Z"
  }
}

Consultar Saque

GET /api/payments/cash-out/{cashOutId}

Listar Saques

GET /api/payments/cash-out?page=1&limit=20

Webhooks

Os webhooks permitem receber notificações em tempo real sobre eventos de pagamento e transações.

Configurar Webhook

Configure a URL do webhook ao criar o pagamento usando o campo postbackUrl:

{
  "amount": 10000,
  "postbackUrl": "https://seu-site.com/webhook",
  ...
}

Formato do Webhook

{
  "event": "pix.confirmed",
  "eventId": "evt_1234567890",
  "timestamp": "2024-12-02T10:05:00Z",
  "data": {
    "id": "tx_abc123",
    "status": "PAID",
    "amount": 10000,
    "paymentMethod": "PIX",
    "customer": { ... },
    "metadata": { ... }
  },
  "signature": "v1=abc123...",
  "timestamp": "1234567890"
}

Validação de Assinatura

O webhook inclui uma assinatura HMAC-SHA256 para validação:

const crypto = require('crypto');

function validateWebhook(payload, signature, secret, timestamp) {
  const message = `${timestamp}.${JSON.stringify(payload)}`;
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(message)
    .digest('hex');
  
  return `v1=${expectedSignature}` === signature;
}
IMPORTANTE: Sempre responda com status 200 OK em até 5 segundos. Se não responder 200, o webhook será reenviado até 3 vezes.

Eventos de Webhook

Lista completa de eventos disponíveis para configuração de webhooks.

Eventos Enviados

Evento Descrição Quando é Enviado
pix.received PIX criado Quando o QR Code é gerado
pix.confirmed PIX pago Quando o pagamento é confirmado
pix.expired PIX expirado Quando o QR Code expira
pix.cancelled PIX cancelado Quando é cancelado
card.authorized Cartão autorizado Quando a autorização é aprovada
card.paid Cartão pago Quando o pagamento é capturado
card.refused Cartão recusado Quando é recusado
boleto.created Boleto criado Quando o boleto é gerado
boleto.paid Boleto pago Quando é pago
cashout.created Saque criado Quando o saque é solicitado
cashout.completed Saque concluído Quando é processado
cashout.failed Saque falhou Quando falha

Conta Virtual PIX

O endpoint de Conta Virtual PIX permite criar e gerenciar contas virtuais para recebimento de pagamentos PIX. As contas virtuais são úteis para recebimentos recorrentes e integrações específicas.

POST /api/pix/account

Cria uma nova conta virtual PIX para recebimento de pagamentos.

Wallet

O endpoint de Wallet permite gerenciar carteiras digitais e cartões salvos dos clientes. Útil para implementar funcionalidades de pagamento recorrente e armazenamento seguro de dados de cartão.

GET /api/wallets

Lista todas as carteiras associadas à conta.

Segurança

A API do AvanPay implementa diversas camadas de segurança para proteger dados e transações. Esta seção descreve as políticas de segurança, rate limiting e boas práticas recomendadas.

Rate Limiting

A API implementa rate limiting para proteger contra abuso e garantir disponibilidade. Os limites variam conforme o tipo de operação:

Tipo de Operação Limite
API Geral 300 requisições a cada 15 minutos
Operações Financeiras 10 requisições por minuto
Autenticação 5 requisições a cada 15 minutos
Atenção: Ao exceder os limites de rate, a API retornará status HTTP 429 (Too Many Requests). Implemente retry com backoff exponencial para lidar com essas situações.

Valores Mínimos

Os valores mínimos aceitos para cada método de pagamento são:

  • PIX: R$ 5,00 (500 centavos)
  • Boleto: R$ 5,00 (500 centavos)
  • Cartão: R$ 5,00 (500 centavos)

Boas Práticas de Segurança

  • Nunca exponha credenciais de API em código cliente ou repositórios públicos
  • Utilize HTTPS para todas as comunicações com a API
  • Valide sempre a assinatura de webhooks recebidos
  • Implemente idempotência utilizando chaves únicas para operações críticas
  • Mantenha logs de auditoria de todas as operações financeiras
  • Rotacione credenciais de API periodicamente

Códigos de Status

Status de Transação

Status Descrição
WAITING_PAYMENT Aguardando pagamento
PAID Pago com sucesso
REJECTED Recusado
CANCELLED Cancelado
REFUNDED Estornado
EXPIRED Expirado
FAILED Falhou
PENDING Em análise

Status de Saque

Status Descrição
PENDING Aguardando aprovação
APPROVED Aprovado
PROCESSING Em processamento
COMPLETED Concluído
FAILED Falhou
REJECTED Rejeitado
CANCELLED Cancelado

Tratamento de Erros

Códigos HTTP

Código Descrição
200 Sucesso
201 Criado com sucesso
400 Requisição inválida
401 Não autorizado
403 Proibido
404 Não encontrado
429 Rate limit excedido
500 Erro interno do servidor

Formato de Erro

{
  "success": false,
  "message": "Descrição do erro",
  "error": {
    "code": "ERROR_CODE",
    "details": "Detalhes adicionais"
  }
}

Erros Comuns

Código Descrição Solução
UNAUTHORIZED Token inválido ou expirado Renovar token
INVALID_AMOUNT Valor inválido Verificar valor mínimo (R$ 1,00)
INVALID_DOCUMENT CPF/CNPJ inválido Verificar formato
INSUFFICIENT_BALANCE Saldo insuficiente Verificar saldo
RATE_LIMIT_EXCEEDED Muitas requisições Aguardar ou aumentar limite

Exemplos de Integração

Esta seção contém exemplos práticos de integração em diferentes linguagens de programação. Utilize estes exemplos como base para implementar sua integração.

JavaScript / Node.js

const axios = require('axios');

const api = axios.create({
  baseURL: 'https://api.avanpay.com.br/api',
  headers: {
    'Authorization': `Bearer ${process.env.API_TOKEN}`,
    'Content-Type': 'application/json'
  }
});

// Criar pagamento PIX
async function createPixPayment() {
  try {
    const response = await api.post('/payments/pix', {
      amount: 10000,
      sellerExternalRef: 'PEDIDO-123',
      customer: {
        name: 'João Silva',
        email: 'joao@example.com',
        phone: '11999999999',
        documentType: 'CPF',
        document: '12345678900'
      },
      items: [{
        title: 'Produto',
        quantity: 1,
        amount: 10000,
        tangible: true
      }],
      postbackUrl: 'https://seu-site.com/webhook'
    });
    
    console.log('Pagamento criado:', response.data);
    return response.data;
  } catch (error) {
    console.error('Erro:', error.response?.data || error.message);
    throw error;
  }
}

Python

import requests

url = 'https://api.avanpay.com.br/api/payments/pix'
headers = {
    'Authorization': f'Bearer {API_TOKEN}',
    'Content-Type': 'application/json'
}

data = {
    'amount': 10000,
    'sellerExternalRef': 'PEDIDO-123',
    'customer': {
        'name': 'João Silva',
        'email': 'joao@example.com',
        'phone': '11999999999',
        'documentType': 'CPF',
        'document': '12345678900'
    },
    'items': [{
        'title': 'Produto',
        'quantity': 1,
        'amount': 10000,
        'tangible': True
    }]
}

response = requests.post(url, json=data, headers=headers)
if response.status_code == 201:
    print('Pagamento criado:', response.json())
else:
    print('Erro:', response.json())

PHP

<?php

$token = 'seu_token_jwt';
$url = 'https://api.avanpay.com.br/api/payments/pix';

$data = [
    'amount' => 10000,
    'sellerExternalRef' => 'PEDIDO-123',
    'customer' => [
        'name' => 'João Silva',
        'email' => 'joao@example.com',
        'phone' => '11999999999',
        'documentType' => 'CPF',
        'document' => '12345678900'
    ],
    'items' => [[
        'title' => 'Produto',
        'quantity' => 1,
        'amount' => 10000,
        'tangible' => true
    ]]
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $token,
    'Content-Type: application/json'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode === 201) {
    $result = json_decode($response, true);
    echo "Pagamento criado: " . $result['data']['id'];
} else {
    echo "Erro: " . $response;
}
?>

cURL

curl -X POST https://api.avanpay.com.br/api/payments/pix \
  -H "Authorization: Bearer sua_api_key_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 10000,
    "sellerExternalRef": "PEDIDO-123",
    "customer": {
      "name": "João Silva",
      "email": "joao@example.com",
      "phone": "11999999999",
      "documentType": "CPF",
      "document": "12345678900"
    },
    "items": [
      {
        "title": "Produto",
        "quantity": 1,
        "amount": 10000,
        "tangible": true
      }
    ],
    "postbackUrl": "https://seu-site.com/webhook"
  }'

Suporte

  • E-mail: suporte@avanpay.com.br
  • Documentação: https://docs.avanpay.com.br
  • Status: https://status.avanpay.com.br

Última atualização: Dezembro 2024