API PIX Completa

Integre pagamentos e transferências PIX em sua aplicação com nossa API robusta, rápida e segura. Processamento em tempo real com webhooks automáticos.

Começar Integração

Gerar QRCode PIX

Endpoint Principal

POST https://silverpay.io/v3/pix/qrcode

Parâmetros Obrigatórios

Parâmetro Tipo Descrição Exemplo
client_id string Identificador único do cliente joao_12345
client_secret string Chave secreta para autenticação abc123def456...
nome string Nome completo do pagador João Silva Santos
cpf string CPF apenas números 12345678901
valor float Valor em reais (formato decimal) 150.99
descricao string Descrição do pagamento Pagamento de serviço
urlnoty string URL para receber webhooks https://seusite.com/webhook

Exemplo de Implementação (PHP)

$apiUrl = 'https://silverpay.io/v3/pix/qrcode';

$postData = [
    'client_id' => 'seu_client_id_aqui',
    'client_secret' => 'sua_chave_secreta_aqui',
    'nome' => 'João Silva Santos',
    'cpf' => '12345678901',
    'valor' => 150.99,
    'descricao' => 'Pagamento de serviço premium',
    'urlnoty' => 'https://seusite.com/silverpay_webhook.php'
];

$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/x-www-form-urlencoded',
    'User-Agent: SeuApp/1.0'
]);

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

// Processar resposta
$data = json_decode($response, true);

if($httpCode === 200 && isset($data['qrcode'])) {
    echo "✅ QRCode gerado com sucesso!";
    echo "ID da Transação: " . $data['transactionId'];
    echo "QRCode: " . $data['qrcode'];
    echo "Status: " . $data['status'];
} else {
    echo "❌ Erro: " . ($data['message'] ?? 'Erro desconhecido');
}

Respostas da API

✅ Sucesso (200 OK)

{
    "transactionId": "4392d1d7e408d3cec04fm1zf3gv7vkq1",
    "status": "PENDING",
    "amount": 150.99,
    "qrcode": "00020126850014br.gov.bcb.pix2563pix.silverpay.io/qr/v3/at/6ed39bf2...",
    "external_id": "68a945c086377"
}

❌ Erro de Validação (400 Bad Request)

{
    "statusCode": 400,
    "message": "CPF inválido ou parâmetros obrigatórios ausentes",
    "errors": [
        "O campo 'valor' é obrigatório",
        "CPF deve conter apenas números"
    ]
}

🔒 Erro de Autenticação (401 Unauthorized)

{
    "statusCode": 401,
    "message": "client_id ou client_secret inválidos"
}

Transferência PIX

Endpoint para Transferências

POST https://silverpay.io/v3/pix/payment

Parâmetros Obrigatórios

Parâmetro Tipo Descrição Exemplo
client_id string ID do cliente na API maria_98765
client_secret string Chave secreta do cliente def456ghi789...
nome string Nome do remetente Maria Silva
cpf string CPF do remetente 98765432100
valor float Valor da transferência 250.75
chave_pix string Chave PIX do destinatário 11970142332
urlnoty string URL para notificações https://seusite.com/webhook

Exemplo de Implementação (PHP)

$apiUrl = 'https://silverpay.io/v3/pix/payment';

$postData = [
    'client_id' => 'maria_98765',
    'client_secret' => 'def456ghi789jkl012mno345pqr678stu901vwx234yz567abc890def123',
    'nome' => 'Maria Silva Santos',
    'cpf' => '98765432100',
    'valor' => 250.75,
    'chave_pix' => '11970142332', // Pode ser CPF, telefone, email ou chave aleatória
    'urlnoty' => 'https://seusite.com/silverpay_webhook.php'
];

$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/x-www-form-urlencoded',
    'User-Agent: SeuApp/1.0'
]);

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

// Processar resposta
$data = json_decode($response, true);

if($httpCode === 200 && isset($data[0]['statusCode']) && $data[0]['statusCode'] == 200) {
    echo "✅ Transferência PIX iniciada com sucesso!";
    echo "Mensagem: " . $data[0]['message'];
} else {
    echo "❌ Erro na transferência: " . ($data['message'] ?? 'Erro desconhecido');
}

Respostas da API

✅ Transferência Iniciada (200 OK)

[{
    "statusCode": 200,
    "message": "Transferência PIX processada com sucesso",
    "transactionId": "798176179"
}]

❌ Saldo Insuficiente (400 Bad Request)

{
    "statusCode": 400,
    "message": "Saldo insuficiente para realizar a transferência"
}

❌ Chave PIX Inválida (400 Bad Request)

{
    "statusCode": 400,
    "message": "Chave PIX inválida ou não encontrada"
}

Sistema de Webhooks

🔔 Como Funcionam os Webhooks

Nossa API envia automaticamente notificações para a URL especificada no parâmetro urlnoty sempre que o status de uma transação é alterado. Os webhooks são enviados via POST com Content-Type: application/json.

Webhook: Pagamento PIX Recebido

Enviado quando um pagamento PIX é confirmado e processado com sucesso:

📥 Payload Completo

{
    "transactionType": "RECEIVEPIX",
    "transactionId": "a502e53d7e7d7c8afd0fmenrr80g57h0",
    "external_id": "68a945c086377",
    "amount": 150.99,
    "paymentType": "PIX",
    "status": "PAID",
    "dateApproval": "2025-08-23 04:38:39",
    "creditParty": {
        "name": "João Silva Santos",
        "email": "joao@email.com",
        "taxId": "12345678901"
    },
    "debitParty": {
        "bank": "PIXUP SOLUCOES DE PAGAMENTOS LTDA",
        "taxId": "59.667.922/0001-08"
    }
}

Webhook: Transferência PIX Concluída

Enviado quando uma transferência PIX é processada:

📤 Payload Completo

{
    "transactionType": "PAYMENT",
    "transactionId": "798176179",
    "external_id": "e3ac10e77397a1516b1e273a01d4rxp67",
    "amount": 250.75,
    "paymentType": "PIX",
    "dateApproval": "2025-08-23 15:45:22",
    "statusCode": {
        "statusId": 1,
        "description": "Transferência concluída com sucesso"
    }
}

Exemplo: Processamento do Webhook (PHP)

<?php
// Arquivo: silverpay_webhook.php

// Receber dados do webhook
$input = file_get_contents('php://input');
$data = json_decode($input, true);

// Verificar se os dados foram recebidos corretamente
if (!$data) {
    http_response_code(400);
    die('Dados inválidos');
}

// Log para debug (opcional)
file_put_contents('webhook_log.txt', 
    date('Y-m-d H:i:s') . " - " . $input . PHP_EOL, 
    FILE_APPEND
);

// Processar baseado no tipo de transação
switch ($data['transactionType']) {
    case 'RECEIVEPIX':
        if ($data['status'] === 'PAID') {
            // Pagamento confirmado - liberar produto/serviço
            $transactionId = $data['transactionId'];
            $amount = $data['amount'];
            $external_id = $data['external_id'];
            
            // Sua lógica aqui: atualizar banco, liberar acesso, etc.
            liberarProduto($external_id, $amount);
            
            echo "Pagamento processado: R$ " . number_format($amount, 2, ',', '.');
        }
        break;
        
    case 'PAYMENT':
        if ($data['statusCode']['statusId'] == 1) {
            // Transferência concluída com sucesso
            $transactionId = $data['transactionId'];
            $amount = $data['amount'];
            
            // Sua lógica aqui: atualizar saldo, notificar usuário, etc.
            confirmarTransferencia($transactionId, $amount);
            
            echo "Transferência concluída: R$ " . number_format($amount, 2, ',', '.');
        }
        break;
}

function liberarProduto($external_id, $amount) {
    // Exemplo: conectar ao banco e atualizar status do pedido
    // $pdo = new PDO("mysql:host=localhost;dbname=loja", $user, $pass);
    // $stmt = $pdo->prepare("UPDATE pedidos SET status = 'pago' WHERE external_id = ?");
    // $stmt->execute([$external_id]);
}

function confirmarTransferencia($transactionId, $amount) {
    // Exemplo: atualizar histórico de transferências
    // $pdo = new PDO("mysql:host=localhost;dbname=app", $user, $pass);
    // $stmt = $pdo->prepare("UPDATE transferencias SET status = 'concluida' WHERE transaction_id = ?");
    // $stmt->execute([$transactionId]);
}

// Sempre retornar 200 para confirmar recebimento
http_response_code(200);
echo "OK";
?>

⚠️ Importantes Considerações de Segurança

  • Sempre validar os dados recebidos antes de processar
  • Retornar HTTP 200 para confirmar