Pular para o conteúdo

2. Receber por Pix

sequenceDiagram
  participant S as Seu sistema
  participant G as Plataforma
  participant C as Cliente
  S->>G: POST /payments/merchant/transaction/pix
  G-->>S: 201 PENDING + pix.qrcode
  S->>C: mostra QR / copia e cola
  C->>G: paga o Pix
  G-->>S: webhook transaction.paid
  S->>G: GET /payments/merchant/transaction/:subTransactionId (opcional)
  S->>G: POST /payments/transactions/:subTransactionId/refunds (se precisar devolver)
  G-->>S: webhook transaction.refunded

Chave PUBLIC (ou SECRET) com CREATE_PIX_TRANSACTION. O idempotencyKey deve ser o id do pedido no seu sistema: se você reenviar, recebe a mesma cobrança.

Criar cobrança
curl -X POST https://api.gestaotechnology.com/api/payments/merchant/transaction/pix \
-H "X-Api-Key: <PUBLIC_KEY>" -H "Content-Type: application/json" \
-d '{
"amountCents": 15000,
"description": "Pedido #8812",
"idempotencyKey": "pedido-8812",
"customer": {
"name": "Maria Souza",
"email": "[email protected]",
"documentNumber": "12345678909",
"documentType": "CPF"
},
"metadata": { "pedido": "8812" }
}'
201
{
"orderId": "0f6c1a52-8a0e-4f4c-9b8e-5d2b7c1e9a10",
"subTransactionId": "7d3e2b91-4c55-4a8f-b1d2-93f0e6a4c7b2",
"transactionId": "TX-8812",
"providerTransactionId": "psp-55f1c0",
"status": "PENDING",
"amount": { "subtotalCents": 15000, "discountCents": 0, "totalCents": 15000, "currency": "BRL" },
"pix": {
"qrcode": "00020126580014br.gov.bcb.pix…6304A1B2",
"expiresAt": "2026-10-16T13:00:00.000Z"
}
}

Guarde o subTransactionId: é o id que aparece no webhook, na consulta e no reembolso. Mostre pix.qrcode como QR Code e como copia e cola.

Passo 2 — Cliente paga → webhook transaction.paid

Seção intitulada “Passo 2 — Cliente paga → webhook transaction.paid”
POST no seu webhook
{
"event": "transaction.paid",
"occurredAt": "2026-10-15T13:05:12.000Z",
"data": {
"companyId": "c1d2e3f4-0000-4000-8000-000000000001",
"transactionId": "TX-8812",
"subTransactionId": "7d3e2b91-4c55-4a8f-b1d2-93f0e6a4c7b2",
"providerTransactionId": "psp-55f1c0",
"paymentMethod": "PIX",
"integration": "API_DIRECT",
"status": "PAID",
"amount": 15000,
"currency": "BRL"
}
}

Ao receber: valide a assinatura, localize o pedido pelo subTransactionId, marque como pago se ainda não estiver (o evento pode repetir) e responda 200.

Se o webhook não chegou e o cliente diz que pagou, consulte:

Consultar cobrança
curl -s https://api.gestaotechnology.com/api/payments/merchant/transaction/7d3e2b91-4c55-4a8f-b1d2-93f0e6a4c7b2 \
-H "X-Api-Key: <PUBLIC_KEY>"
200
{
"subTransactionId": "7d3e2b91-4c55-4a8f-b1d2-93f0e6a4c7b2",
"transactionId": "TX-8812",
"providerTransactionId": "psp-55f1c0",
"status": "PAID",
"paidAt": "2026-10-15T13:05:11.000Z",
"amount": { "totalCents": 15000, "refundedCents": 0, "currency": "BRL" }
}

Chave SECRET com CREATE_REFUND e header Idempotency-Key (obrigatório). Sem amountCents, devolve todo o disponível.

Reembolso parcial
curl -X POST https://api.gestaotechnology.com/api/payments/transactions/7d3e2b91-4c55-4a8f-b1d2-93f0e6a4c7b2/refunds \
-H "X-Api-Key: <SECRET_KEY>" -H "Content-Type: application/json" \
-H "Idempotency-Key: reembolso-8812-1" \
-d '{ "amountCents": 5000, "reason": "Item fora de estoque" }'
201
{ "refundId": "b8a4f2c6-1e3d-4f5a-9c7b-2d6e8f0a1b3c", "status": "PROCESSING", "amountCents": 5000 }

O resultado chega por webhook:

transaction.refunded
{
"event": "transaction.refunded",
"occurredAt": "2026-10-15T13:20:40.000Z",
"data": {
"companyId": "c1d2e3f4-0000-4000-8000-000000000001",
"refundId": "b8a4f2c6-1e3d-4f5a-9c7b-2d6e8f0a1b3c",
"subTransactionId": "7d3e2b91-4c55-4a8f-b1d2-93f0e6a4c7b2",
"transactionId": "TX-8812",
"refundStatus": "COMPLETED",
"amount": 5000,
"currency": "BRL"
}
}

Consulta a qualquer momento: GET /refunds/b8a4f2c6-1e3d-4f5a-9c7b-2d6e8f0a1b3c. Em reembolso parcial, transactionStatus não vem; em total, vem REFUNDED.

SituaçãoRespostaO que fazer
Campo faltando ou extra no corpo400Corrija o corpo; campos desconhecidos são recusados.
Reenvio com o mesmo idempotencyKey201 com a mesma cobrançaNormal: nada é duplicado.
Reembolso sem Idempotency-Key400Envie o header.
Chave sem o scope403Ajuste os scopes da chave no painel.

Referência: Pagamentos Pix, Reembolsos, Payloads.