🔐 Autenticação
Todas as requisições à API devem ser autenticadas usando Bearer Token. Gere seu token em Configurações → API.
curl -X GET https://pagonline.net/api/v1/products \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxx" \
-H "Content-Type: application/json"
📦 Produtos
/v1/products
Listar todos os produtos da sua loja.
/v1/products
Criar novo 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
/v1/sales
Listar vendas com filtros por data, status e produto.
/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.createdQuando uma venda é criada
sale.approvedQuando o pagamento é aprovado
sale.refundedQuando há reembolso
product.createdQuando um produto é criado
dispute.openedQuando uma disputa é aberta
{
"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.
$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;
}
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());
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'])
$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