desenvolvedores

API & webhooks

Integre a Pag Online com seus sistemas via API REST. Documentação completa, SDKs e exemplos prontos.

REST API v1 Webhooks em tempo real SDKs oficiais 99,9% uptime

🔐 Autenticação

Todas as requisições à API devem ser autenticadas usando Bearer Token. Gere seu token em Configurações → API.

Exemplo de requisição
curl -X GET https://pagonline.net/api/v1/products \
  -H "Authorization: Bearer sk_live_xxxxxxxxxxxxx" \
  -H "Content-Type: application/json"
💡 Importante: nunca compartilhe seu token em repositórios públicos. Use variáveis de ambiente.

📦 Produtos

GET /v1/products

Listar todos os produtos da sua loja.

POST /v1/products

Criar novo produto.

Criar produto
curl -X POST https://pagonline.net/api/v1/products \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "nome": "Ebook CapCut Pro",
    "descricao": "Guia completo em PDF",
    "preco": 27.90,
    "tipo": "ebook",
    "ativo": true,
    "emoji": "📘",
    "cor": "#1877F2"
  }'

Resposta (201 Created)

{
  "id": 1234,
  "nome": "Ebook CapCut Pro",
  "preco": 27.90,
  "slug": "ebook-capcut-pro",
  "url": "https://pagonline.net/@minhaloja/ebook-capcut-pro",
  "criado_em": "2026-01-15T10:30:00Z"
}

💰 Vendas

GET /v1/sales

Listar vendas com filtros por data, status e produto.

GET /v1/sales/{id}

Detalhes de uma venda específica.

curl https://pagonline.net/api/v1/sales?status=aprovada&from=2026-01-01 \
  -H "Authorization: Bearer sk_live_xxx"

🪝 Webhooks

Receba notificações em tempo real quando eventos acontecem na sua loja.

Configuração

Vá em Configurações → Webhooks e adicione a URL do seu endpoint. Assine apenas os eventos que precisa.

Eventos disponíveis

sale.created

Quando uma venda é criada

sale.approved

Quando o pagamento é aprovado

sale.refunded

Quando há reembolso

product.created

Quando um produto é criado

dispute.opened

Quando uma disputa é aberta

Payload de exemplo (sale.approved)
{
  "event": "sale.approved",
  "timestamp": "2026-01-15T14:32:11Z",
  "data": {
    "id": 9876,
    "produto_id": 1234,
    "valor": 27.90,
    "comprador_email": "cliente@email.com",
    "metodo": "pix"
  }
}

📚 Exemplos prontos

Ainda não publicamos pacotes oficiais nos gerenciadores. A API é REST com JSON, então qualquer cliente HTTP funciona. Abaixo, o essencial em cada linguagem.

PHP — listar produtos
$ch = curl_init('https://pagonline.net/api/v1/products?limit=10');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('PAGONLINE_TOKEN')],
]);
$r = json_decode(curl_exec($ch), true);
foreach ($r['data'] as $p) {
    echo $p['nome'] . ' - R$ ' . $p['preco'] . PHP_EOL;
}
Node.js — criar produto
const r = await fetch('https://pagonline.net/api/v1/products', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.PAGONLINE_TOKEN}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ nome: 'Ebook CapCut Pro', preco: 27.90, tipo: 'ebook' })
});
console.log(await r.json());
Python — vendas aprovadas do mês
import os, requests

r = requests.get(
    'https://pagonline.net/api/v1/sales',
    params={'status': 'aprovada', 'from': '2026-01-01'},
    headers={'Authorization': f"Bearer {os.environ['PAGONLINE_TOKEN']}"},
)
for v in r.json()['data']:
    print(v['codigo'], v['valor'], v['comprador']['email'])
PHP — validando a assinatura do webhook
$payload = file_get_contents('php://input');
$header  = $_SERVER['HTTP_X_PAGONLINE_SIGNATURE'] ?? '';
parse_str(str_replace(',', '&', $header), $sig);   // t=...&v1=...

$esperado = hash_hmac('sha256', $sig['t'] . '.' . $payload, WEBHOOK_SECRET);

// hash_equals evita ataque de temporizacao — nunca use ==
if (!hash_equals($esperado, $sig['v1'] ?? '')) {
    http_response_code(401);
    exit;
}
// rejeita eventos antigos (protege contra replay)
if (abs(time() - (int) $sig['t']) > 300) { http_response_code(401); exit; }

$evento = json_decode($payload, true);

// responda 200 rapido e processe depois, em fila
http_response_code(200);
processar($evento);   // use $evento['id'] para ignorar duplicatas