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) |
items |
array | Não | Itens da transação (name, quantity, unit_price em centavos) |
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. |
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"
},
"items": [
{
"name": "Produto Exemplo",
"quantity": 1,
"unit_price": 10000
}
],
"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:
- Não depende de serviços externos
- Maior controle sobre o tamanho e estilo do QR Code
- Funciona mesmo se a adquirente não fornecer a URL da imagem
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
pending- Aguardando pagamentopaid- Pagoexpired- Expiradofailed- Falhou
Consultar Status
GET /v1/charges/{id}
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.