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.

URL Base da API

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:

exemplo_integracao
$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:

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

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"
  ]
}

Criar Token de Acesso

Gerencie suas credenciais de acesso à API.

Segurança Importante

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

  1. Acesse o painel de gerenciamento em /keys
  2. Copie seu client_id e client_secret
  3. Armazene as credenciais de forma segura em variáveis de ambiente
  4. 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.

POST /pix/qrcode

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

gerar_qrcode
$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

200 OK
{
  "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.

Liberação de IP Obrigatória

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

POST /pix/payment

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

fazer_pagamento
$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

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

Evento de Pagamento

Webhook enviado automaticamente quando um pagamento PIX é recebido e confirmado.

Importante

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

application/json
{
  "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

webhook_processor
<?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

application/json
{
  "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