Documentação
Base de produção: https://api.livrepix.com. Envie sua chave no cabeçalho Authorization: Bearer lp_live_.... Nunca coloque a chave no navegador ou em repositórios.
Criar cobrança
POST /api/v1/charges
Authorization: Bearer $LIVREPIX_KEY
Idempotency-Key: pedido_4821
Content-Type: application/json
{
"amount_cents": 2500,
"payer_cpf": "CPF_OU_CNPJ_VALIDO",
"payer_name": "Cliente",
"description": "Créditos",
"external_id": "pedido_4821",
"webhook_url": "https://seuapp.com/webhooks/livrepix"
}amount_cents fica entre 1000 e 600000. Também é aceito amount como decimal. O CPF/CNPJ é obrigatório e fica armazenado somente como hash irreversível mais os quatro últimos dígitos.
Consultar
| Método | Rota | Uso |
|---|---|---|
| GET | /api/v1/charges/{id} | Detalhe de uma cobrança |
| GET | /api/v1/charges?page=1&limit=25 | Lista paginada |
| GET | /api/v1/balance | Saldo líquido no ledger |
Webhooks LivrePix
Eventos enviados: charge.completed, charge.expired e charge.refunded. O endpoint recebe X-Webhook-Timestamp e X-Webhook-Signature. A assinatura hexadecimal é HMAC-SHA256 de timestamp + "." + corpo_bruto.
// Node.js
const expected = crypto
.createHmac('sha256', process.env.LIVREPIX_WEBHOOK_SECRET)
.update(timestamp + '.' + rawBody)
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(expected, 'hex'), Buffer.from(signature, 'hex'))) {
throw new Error('assinatura inválida');
}Responda HTTP 2xx em até 8 segundos. Entregas malsucedidas são repetidas com backoff exponencial. Trate também o seu processamento como idempotente usando o ID da cobrança.
Estados
creating → pending → completed. Uma cobrança pendente também pode virar expired; uma concluída pode virar refunded. O saldo só muda com eventos autenticados.
LivrePix