Começando
Aqui você irá encontrar toda a documentação relacionada a API. Abaixo segue algumas orientações gerais sobre a utilização dos nossos serviços.
https://divpag.com/v3/
Autenticação
Em todas as requisições é necessário passar um token de acesso no header da request. Veja nessa documentação como gerar as credenciais e esse token de acesso.
Geração das credenciais de produção
Para gerar o token de acesso é necessário ter em mãos suas credenciais ( client_id / client_secret ). Para obter as credenciais de produção, acesse o menu API→Credenciais em /keys
Obtendo suas credenciais de acesso ao sandbox
Para obter suas credenciais, basta solicitá-las ao nosso time de suporte através do seu gerente.
Exemplo de Integração
Veja abaixo exemplos de como realizar uma requisição para gerar um QR Code PIX:
$ch = curl_init('https://divpag.com/v3/pix/qrcode');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'client_id' => getenv('DIVPAG_CLIENT_ID'),
'client_secret' => getenv('DIVPAG_CLIENT_SECRET'),
'nome' => 'João Silva',
'cpf' => '12345678901',
'valor' => 100.00,
'descricao' => 'Pagamento de serviço',
'urlnoty' => 'https://seusite.com/webhook.php'
])
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($response, true);
if ($httpCode === 200 && isset($data['qrcode'])) {
echo "QR Code gerado com sucesso!";
echo "QR Code: " . $data['qrcode'];
} else {
echo "Erro: " . ($data['message'] ?? 'Desconhecido');
}
import os
import requests
url = 'https://divpag.com/v3/pix/qrcode'
payload = {
'client_id': os.getenv('DIVPAG_CLIENT_ID'),
'client_secret': os.getenv('DIVPAG_CLIENT_SECRET'),
'nome': 'João Silva',
'cpf': '12345678901',
'valor': 100.00,
'descricao': 'Pagamento de serviço',
'urlnoty': 'https://seusite.com/webhook.py'
}
response = requests.post(url, data=payload)
data = response.json()
if response.status_code == 200 and 'qrcode' in data:
print("QR Code gerado com sucesso!")
print(f"QR Code: {data['qrcode']}")
else:
print(f"Erro: {data.get('message', 'Desconhecido')}")
require 'net/http'
require 'json'
uri = URI('https://divpag.com/v3/pix/qrcode')
params = {
client_id: ENV['DIVPAG_CLIENT_ID'],
client_secret: ENV['DIVPAG_CLIENT_SECRET'],
nome: 'João Silva',
cpf: '12345678901',
valor: 100.00,
descricao: 'Pagamento de serviço',
urlnoty: 'https://seusite.com/webhook.rb'
}
response = Net::HTTP.post_form(uri, params)
data = JSON.parse(response.body)
if response.code == '200' && data['qrcode']
puts "QR Code gerado com sucesso!"
puts "QR Code: #{data['qrcode']}"
else
puts "Erro: #{data['message'] || 'Desconhecido'}"
end
const axios = require('axios');
const payload = {
client_id: process.env.DIVPAG_CLIENT_ID,
client_secret: process.env.DIVPAG_CLIENT_SECRET,
nome: 'João Silva',
cpf: '12345678901',
valor: 100.00,
descricao: 'Pagamento de serviço',
urlnoty: 'https://seusite.com/webhook.js'
};
axios.post('https://divpag.com/v3/pix/qrcode', payload)
.then(response => {
console.log("QR Code gerado com sucesso!");
console.log(`QR Code: ${response.data.qrcode}`);
})
.catch(error => {
console.error(`Erro: ${error.response?.data?.message || 'Desconhecido'}`);
});
Próximos Passos
Agora que você já sabe como começar, explore os endpoints disponíveis:
- Gerar QRCode PIX - Crie QR Codes para recebimento
- Fazer um pagamento - Realize transferências PIX
- Webhooks - Configure notificações automáticas
Respostas HTTP
A API utiliza códigos de status HTTP padrão para indicar o sucesso ou falha de uma requisição.
Códigos de Sucesso
| Código | Descrição |
|---|---|
200 |
OK - A requisição foi processada com sucesso |
201 |
Created - O recurso foi criado com sucesso |
Códigos de Erro
| Código | Descrição |
|---|---|
400 |
Bad Request - Parâmetros inválidos ou ausentes |
401 |
Unauthorized - Credenciais de autenticação inválidas |
403 |
Forbidden - IP não autorizado ou acesso negado |
500 |
Internal Server Error - Erro interno do servidor |
Exemplo de Resposta de Erro
{
"statusCode": 400,
"message": "CPF inválido ou parâmetros obrigatórios ausentes",
"errors": [
"O campo 'valor' é obrigatório",
"CPF deve conter apenas números"
]
}
Criar Token de Acesso
Gerencie suas credenciais de acesso à API.
Nunca exponha seu client_secret em código client-side (JavaScript do navegador, aplicativos mobile, etc). Use apenas em requisições server-side.
Obtendo Credenciais
- Acesse o painel de gerenciamento em /keys
- Copie seu
client_ideclient_secret - Armazene as credenciais de forma segura em variáveis de ambiente
- Use as credenciais em todas as requisições à API
Parâmetros de Autenticação
| Parâmetro | Tipo | Descrição |
|---|---|---|
client_id |
string | Identificador único do cliente na API |
client_secret |
string | Chave secreta para autenticação (mantenha privada) |
Gerar QRCode
Cria um QR Code PIX para recebimento de pagamentos.
Parâmetros da Requisição
| Parâmetro | Tipo | Descrição |
|---|---|---|
client_id |
string | Seu client ID (obrigatório) |
client_secret |
string | Sua chave secreta (obrigatório) |
nome |
string | Nome completo do pagador (obrigatório) |
cpf |
string | CPF do pagador - apenas números (obrigatório) |
valor |
float | Valor em reais - formato decimal (obrigatório) |
descricao |
string | Descrição do pagamento (obrigatório) |
urlnoty |
string | URL para receber notificações webhook (obrigatório) |
Exemplo de Requisição
$ch = curl_init('https://divpag.com/v3/pix/qrcode');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'client_id' => getenv('DIVPAG_CLIENT_ID'),
'client_secret' => getenv('DIVPAG_CLIENT_SECRET'),
'nome' => 'João Silva Santos',
'cpf' => '12345678901',
'valor' => 150.99,
'descricao' => 'Pagamento de serviço premium',
'urlnoty' => 'https://seusite.com/webhook/divpag'
])
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($response, true);
if ($httpCode === 200 && isset($data['qrcode'])) {
echo "QR Code: " . $data['qrcode'] . PHP_EOL;
echo "Transaction ID: " . $data['transactionId'] . PHP_EOL;
echo "External ID: " . $data['external_id'] . PHP_EOL;
echo "Status: " . $data['status'];
} else {
echo "Erro: " . ($data['message'] ?? 'Erro desconhecido');
}
import os
import requests
url = 'https://divpag.com/v3/pix/qrcode'
payload = {
'client_id': os.getenv('DIVPAG_CLIENT_ID'),
'client_secret': os.getenv('DIVPAG_CLIENT_SECRET'),
'nome': 'João Silva Santos',
'cpf': '12345678901',
'valor': 150.99,
'descricao': 'Pagamento de serviço premium',
'urlnoty': 'https://seusite.com/webhook/divpag'
}
response = requests.post(url, data=payload)
data = response.json()
if response.status_code == 200 and 'qrcode' in data:
print(f"QR Code: {data['qrcode']}")
print(f"Transaction ID: {data['transactionId']}")
print(f"External ID: {data['external_id']}")
print(f"Status: {data['status']}")
else:
print(f"Erro: {data.get('message', 'Erro desconhecido')}")
require 'net/http'
require 'json'
uri = URI('https://divpag.com/v3/pix/qrcode')
params = {
client_id: ENV['DIVPAG_CLIENT_ID'],
client_secret: ENV['DIVPAG_CLIENT_SECRET'],
nome: 'João Silva Santos',
cpf: '12345678901',
valor: 150.99,
descricao: 'Pagamento de serviço premium',
urlnoty: 'https://seusite.com/webhook/divpag'
}
response = Net::HTTP.post_form(uri, params)
data = JSON.parse(response.body)
if response.code == '200' && data['qrcode']
puts "QR Code: #{data['qrcode']}"
puts "Transaction ID: #{data['transactionId']}"
puts "External ID: #{data['external_id']}"
puts "Status: #{data['status']}"
else
puts "Erro: #{data['message'] || 'Erro desconhecido'}"
end
const axios = require('axios');
const payload = {
client_id: process.env.DIVPAG_CLIENT_ID,
client_secret: process.env.DIVPAG_CLIENT_SECRET,
nome: 'João Silva Santos',
cpf: '12345678901',
valor: 150.99,
descricao: 'Pagamento de serviço premium',
urlnoty: 'https://seusite.com/webhook/divpag'
};
axios.post('https://divpag.com/v3/pix/qrcode', payload)
.then(response => {
console.log(`QR Code: ${response.data.qrcode}`);
console.log(`Transaction ID: ${response.data.transactionId}`);
console.log(`External ID: ${response.data.external_id}`);
console.log(`Status: ${response.data.status}`);
})
.catch(error => {
console.error(`Erro: ${error.response?.data?.message || 'Erro desconhecido'}`);
});
Resposta de Sucesso
{
"transactionId": "4392d1d7e408d3cec04fm1zf3gv7vkq1",
"status": "PENDING",
"amount": 150.99,
"qrcode": "00020126850014br.gov.bcb.pix...",
"external_id": "68a945c086377"
}
Fazer um pagamento
Realiza transferências PIX para chaves PIX de terceiros.
Para realizar transferências PIX via API, é OBRIGATÓRIO fazer a liberação do endereço IP do servidor de onde serão feitas as requisições. Sem a liberação do IP, todas as requisições de transferência serão bloqueadas automaticamente.
Descubra o IP do seu servidor em: /meuip
Adicione o IP na whitelist em: /keys
Parâmetros da Requisição
| Parâmetro | Tipo | Descrição |
|---|---|---|
client_id |
string | Seu client ID (obrigatório) |
client_secret |
string | Sua chave secreta (obrigatório) |
nome |
string | Nome do remetente (obrigatório) |
cpf |
string | CPF do remetente - apenas números (obrigatório) |
valor |
float | Valor da transferência em reais (obrigatório) |
chave_pix |
string | Chave PIX do destinatário (obrigatório) |
urlnoty |
string | URL para notificações webhook (obrigatório) |
Exemplo de Requisição
$ch = curl_init('https://divpag.com/v3/pix/payment');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'client_id' => getenv('DIVPAG_CLIENT_ID'),
'client_secret' => getenv('DIVPAG_CLIENT_SECRET'),
'nome' => 'Maria Silva',
'cpf' => '98765432100',
'valor' => 250.75,
'chave_pix' => '11970142332',
'urlnoty' => 'https://seusite.com/webhook/divpag'
])
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($response, true);
if ($httpCode === 200 && isset($data[0]['statusCode'])) {
if ($data[0]['statusCode'] == 200) {
echo "Transferência iniciada com sucesso!" . PHP_EOL;
echo "Transaction ID: " . $data[0]['transactionId'];
} else {
echo "Erro: " . $data[0]['message'];
}
} else {
echo "Erro: " . ($data['message'] ?? 'Erro desconhecido');
}
import os
import requests
url = 'https://divpag.com/v3/pix/payment'
payload = {
'client_id': os.getenv('DIVPAG_CLIENT_ID'),
'client_secret': os.getenv('DIVPAG_CLIENT_SECRET'),
'nome': 'Maria Silva',
'cpf': '98765432100',
'valor': 250.75,
'chave_pix': '11970142332',
'urlnoty': 'https://seusite.com/webhook/divpag'
}
response = requests.post(url, data=payload)
data = response.json()
if response.status_code == 200 and data[0]['statusCode'] == 200:
print("Transferência iniciada com sucesso!")
print(f"Transaction ID: {data[0]['transactionId']}")
else:
print(f"Erro: {data.get('message', 'Erro desconhecido')}")
require 'net/http'
require 'json'
uri = URI('https://divpag.com/v3/pix/payment')
params = {
client_id: ENV['DIVPAG_CLIENT_ID'],
client_secret: ENV['DIVPAG_CLIENT_SECRET'],
nome: 'Maria Silva',
cpf: '98765432100',
valor: 250.75,
chave_pix: '11970142332',
urlnoty: 'https://seusite.com/webhook/divpag'
}
response = Net::HTTP.post_form(uri, params)
data = JSON.parse(response.body)
if response.code == '200' && data[0]['statusCode'] == 200
puts "Transferência iniciada com sucesso!"
puts "Transaction ID: #{data[0]['transactionId']}"
else
puts "Erro: #{data['message'] || 'Erro desconhecido'}"
end
const axios = require('axios');
const payload = {
client_id: process.env.DIVPAG_CLIENT_ID,
client_secret: process.env.DIVPAG_CLIENT_SECRET,
nome: 'Maria Silva',
cpf: '98765432100',
valor: 250.75,
chave_pix: '11970142332',
urlnoty: 'https://seusite.com/webhook/divpag'
};
axios.post('https://divpag.com/v3/pix/payment', payload)
.then(response => {
if (response.data[0].statusCode === 200) {
console.log("Transferência iniciada com sucesso!");
console.log(`Transaction ID: ${response.data[0].transactionId}`);
} else {
console.error(`Erro: ${response.data[0].message}`);
}
})
.catch(error => {
console.error(`Erro: ${error.response?.data?.message || 'Erro desconhecido'}`);
});
Resposta de Sucesso
[{
"statusCode": 200,
"message": "Transferência PIX processada com sucesso",
"transactionId": "798176179"
}]
Evento de Pagamento
Webhook enviado automaticamente quando um pagamento PIX é recebido e confirmado.
Seu endpoint de webhook deve retornar HTTP 200 para confirmar o recebimento da notificação. Qualquer outro código HTTP fará a API reenviar a notificação.
Payload do Webhook
{
"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": "Divpag Pagamentos LTDA",
"taxId": "59.667.922/0001-08"
}
}
Processamento do Webhook
<?php
// Receber dados do webhook
$input = file_get_contents('php://input');
$data = json_decode($input, true);
if (!$data) {
http_response_code(400);
die('Invalid JSON');
}
// Log para auditoria
file_put_contents('webhook.log',
date('Y-m-d H:i:s') . " - " . $input . PHP_EOL,
FILE_APPEND
);
// Processar pagamento recebido
if ($data['transactionType'] === 'RECEIVEPIX' && $data['status'] === 'PAID') {
$transactionId = $data['transactionId'];
$amount = $data['amount'];
$externalId = $data['external_id'];
// Sua lógica de negócio aqui
// Exemplo: liberar produto/serviço ao cliente
liberarProduto($externalId, $amount);
// Confirmar recebimento
http_response_code(200);
echo "OK";
} else {
// Recebeu mas não processou
http_response_code(200);
echo "Received";
}
?>
from flask import Flask, request
import json
from datetime import datetime
app = Flask(__name__)
@app.route('/webhook/divpag', methods=['POST'])
def webhook():
data = request.get_json()
if not data:
return 'Invalid JSON', 400
# Log para auditoria
with open('webhook.log', 'a') as f:
f.write(f"{datetime.now()} - {json.dumps(data)}\n")
# Processar pagamento recebido
if data.get('transactionType') == 'RECEIVEPIX' and data.get('status') == 'PAID':
transaction_id = data['transactionId']
amount = data['amount']
external_id = data['external_id']
# Sua lógica de negócio aqui
liberar_produto(external_id, amount)
return 'OK', 200
return 'Received', 200
if __name__ == '__main__':
app.run()
require 'sinatra'
require 'json'
post '/webhook/divpag' do
request.body.rewind
data = JSON.parse(request.body.read)
return [400, 'Invalid JSON'] unless data
# Log para auditoria
File.open('webhook.log', 'a') do |f|
f.puts "#{Time.now} - #{data.to_json}"
end
# Processar pagamento recebido
if data['transactionType'] == 'RECEIVEPIX' && data['status'] == 'PAID'
transaction_id = data['transactionId']
amount = data['amount']
external_id = data['external_id']
# Sua lógica de negócio aqui
liberar_produto(external_id, amount)
status 200
'OK'
else
status 200
'Received'
end
end
const express = require('express');
const fs = require('fs');
const app = express();
app.use(express.json());
app.post('/webhook/divpag', (req, res) => {
const data = req.body;
if (!data) {
return res.status(400).send('Invalid JSON');
}
// Log para auditoria
fs.appendFileSync('webhook.log',
`${new Date().toISOString()} - ${JSON.stringify(data)}\n`
);
// Processar pagamento recebido
if (data.transactionType === 'RECEIVEPIX' && data.status === 'PAID') {
const { transactionId, amount, external_id } = data;
// Sua lógica de negócio aqui
liberarProduto(external_id, amount);
return res.status(200).send('OK');
}
res.status(200).send('Received');
});
app.listen(3000, () => {
console.log('Webhook listener running on port 3000');
});
Evento de Transferência
Webhook enviado automaticamente quando uma transferência PIX é concluída.
Payload do Webhook
{
"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"
}
}
Status Codes Possíveis
| Status ID | Descrição |
|---|---|
1 |
Transferência concluída com sucesso |
2 |
Transferência em processamento |
3 |
Transferência falhou |