Criar Cobrança PIX

O PIX é um método de pagamento instantâneo que permite receber pagamentos em segundos.

Endpoint

POST /v1/charges

Parâmetros

Parâmetro Tipo Obrigatório Descrição
amount integer Sim Valor em centavos (ex: 10000 = R$ 100,00)
currency string Não Moeda (padrão: BRL)
payment_method string Sim Método de pagamento: "pix"
customer object Não Dados do cliente (opcional - name, email, document, phone, address)
customer.address object Não Endereço do cliente (opcional para PIX - street, city, state, zipcode, etc.)
shipping object Não Endereço de entrega (opcional - use quando diferente do endereço de cobrança)
items array Não Itens da transação (name, quantity, unit_price em centavos). Importante: O campo unit_price deve ser maior que zero para cada item. Se todos os itens tiverem unit_price = 0, o sistema distribuirá automaticamente o valor total (amount) entre os itens proporcionalmente.
metadata object Não Metadados customizados (chave-valor)
external_id string Não ID externo para rastreamento
store_id integer Não ID da operação (store) do dashboard. Se não informado, usa a operação padrão do seller (criada automaticamente no cadastro).
product_id integer Não ID do produto do dashboard. Opcional, para associar a cobrança a um produto específico.
pix.expires_in integer Não Segundos até expiração (min: 60, max: 86400, padrão: 1800 = 30min)
pix.description string Não Descrição do pagamento (máx: 255 caracteres)
checkout object Não Configuração de checkout redirect (mode: "redirect", success_url, cancel_url)
callback_url string Não URL para receber notificações pontuais desta cobrança (além dos webhooks configurados no dashboard)

Exemplo de Requisição

curl -X POST https://api.apexpy.com.br/v1/charges \
  -H "Authorization: Bearer YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 10000,
    "currency": "BRL",
    "payment_method": "pix",
    "customer": {
      "name": "João Silva",
      "email": "[email protected]",
      "document": "12345678909",
      "phone": "47999999999",
      "address": {
        "street": "Rua das Flores",
        "number": "123",
        "complement": "Apto 45",
        "neighborhood": "Centro",
        "city": "São Paulo",
        "state": "SP",
        "zipcode": "01234567",
        "country": "BR"
      }
    },
    "items": [
      {
        "name": "Produto Exemplo",
        "quantity": 1,
        "unit_price": 10000  // Em centavos. Deve ser > 0. Se todos os itens tiverem unit_price = 0, o sistema distribui o valor total automaticamente.
      }
    ],
    "metadata": {
      "order_id": "12345",
      "source": "api"
    },
    "store_id": 1,
    "product_id": 5,
    "pix": {
      "expires_in": 1800,
      "description": "Pagamento de exemplo"
    },
    "callback_url": "https://seusite.com.br/webhook/order-12345"
  }'

Exemplo de Resposta

{
  "success": true,
  "data": {
    "id": "ci_123",
    "status": "pending",
    "amount": 10000,
    "currency": "BRL",
    "payment_method": "pix",
    "pix": {
      "txid": "E12345678202511281234567890123456",
      "emv": "00020126580014br.gov.bcb.pix0136123e4567-e12b-12d1-a456-4266554400005204000053039865802BR5913FULANO DE TAL6008BRASILIA62070503***63041D3D",
      "qr_code_image_url": "https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=00020126580014br.gov.bcb.pix...",
      "expires_at": "2025-11-28T21:00:00Z"
    },
    "created_at": "2025-11-28T20:30:00Z"
  }
}

Campos da Resposta PIX

Campo Tipo Descrição
txid string Transaction ID (TXID) retornado pela adquirente. Identificador único da transação PIX no sistema bancário.
emv string Código PIX copia e cola retornado pela adquirente. Este é o código completo que o cliente pode copiar e colar no app do banco para pagar. Sempre presente.
qr_code_image_url string (opcional) URL da imagem do QR Code. Pode vir da adquirente ou ser gerada automaticamente pela ApexPy usando o código EMV. Opcional - você pode gerar o QR Code localmente usando o campo emv.
expires_at string Data e hora de expiração do código PIX (ISO 8601).

Como Usar o Código PIX

Você tem duas opções para exibir o QR Code ao cliente:

Opção 1: Usar a URL da Imagem (se disponível)

Se o campo qr_code_image_url estiver presente na resposta, você pode exibir diretamente:

<img src="{qr_code_image_url}" alt="QR Code PIX" />

Opção 2: Gerar QR Code Localmente (Recomendado)

Use o campo emv para gerar o QR Code no seu frontend usando uma biblioteca JavaScript:

// Exemplo com qrcode.js
import QRCode from 'qrcode';

const qrCodeDataUrl = await QRCode.toDataURL(charge.pix.emv);
// Exibir a imagem gerada

Vantagens de gerar localmente:

Opção 3: Copiar e Colar

O campo emv contém o código completo que pode ser copiado e colado diretamente no app do banco. Sempre forneça esta opção ao cliente.

Status da Cobrança

Consultar Status

GET /v1/charges/{id}

Endereço (Opcional)

Para pagamentos PIX, o endereço é opcional. Se não fornecido, o gateway utiliza um sistema de fallback inteligente para atender requisitos de adquirentes que exigem este campo.

Estrutura do Endereço

{
  "customer": {
    "address": {
      "street": "Rua das Flores",      // Obrigatório se address fornecido
      "number": "123",                  // Opcional
      "complement": "Apto 45",          // Opcional
      "neighborhood": "Centro",         // Opcional
      "city": "São Paulo",              // Obrigatório se address fornecido
      "state": "SP",                    // Obrigatório se address fornecido (2 caracteres)
      "zipcode": "01234567",            // Obrigatório se address fornecido (8 dígitos)
      "country": "BR"                   // Opcional (padrão: "BR")
    }
  }
}

Sistema de Fallback

Quando o endereço não é fornecido, o gateway aplica a seguinte prioridade:

  1. Shipping fornecido: Usa o endereço de entrega (shipping.address)
  2. Endereço do cliente: Usa customer.address
  3. Dados básicos do cliente: Tenta extrair city, state, zipcode do objeto customer
  4. Valores padrão: Utiliza endereço genérico mínimo (São Paulo, SP)

Nota: O sistema garante compatibilidade com todas as adquirentes, mesmo quando o endereço não é fornecido explicitamente.

Split de Pagamento

Você pode dividir o recebimento entre múltiplos sellers usando o campo split na requisição. A taxa de Cash In é calculada uma vez e cobrada do seller principal, enquanto os sellers no split recebem o valor líquido proporcional.

Saiba mais sobre Split de Pagamento →