API v1

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étodoRotaUso
GET/api/v1/charges/{id}Detalhe de uma cobrança
GET/api/v1/charges?page=1&limit=25Lista paginada
GET/api/v1/balanceSaldo 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.