Documentacao clara para colocar pagamentos no ar
Tudo o que voce precisa para integrar cobrancas Pix, saques e cartao em um unico lugar, com exemplos reais de resposta e validacao segura de webhook.
Tudo o que voce precisa para integrar cobrancas Pix, saques e cartao em um unico lugar, com exemplos reais de resposta e validacao segura de webhook.
Envie sua chave de integracao em x-api-key em todas as chamadas publicas. O corpo deve ser JSON e os valores monetarios seguem o formato documentado em cada rota.
Envie sua chave de integracao em x-api-key em todas as chamadas publicas. O corpo deve ser JSON e os valores monetarios seguem o formato documentado em cada rota.
200 com code: 3DS_REQUIRED significa que a cobranca precisa de confirmacao do comprador. 201 indica criacao com sucesso. 400 cobre payload invalido ou erro de processamento. 401 indica credencial invalida.
Veja exatamente o que chega na sua URL, com assinatura, idempotencia e payloads reais.
Valide X-Koltpay-Signature usando HMAC SHA-256 com o corpo bruto da requisicao. Use X-Koltpay-Idempotency-Key para ignorar entregas duplicadas.
X-Koltpay-Signature: 4a6e53a6b5a5d4d4b31f1b4d0f0c0d2abf3c3f998b8e66741f90b8f5c6cb1234
X-Koltpay-Idempotency-Key: deposit:df8f54f7-7284-4197-b59a-8c494d206404
Content-Type: application/json
const crypto = require('crypto');
function verifySignature(rawBody, signature, signingSecret) {
const expected = crypto
.createHmac('sha256', signingSecret)
.update(rawBody)
.digest('hex');
return signature === expected;
}
Hoje esta documentacao publica cobre o fluxo entregue pelo provedor Pix usado nesta integracao.
{
"event": "deposit",
"paymentId": "0196f5ef-5c86-71ff-8bc9-7d0f00f5c2b4",
"status": "PAID",
"amount": "10.00",
"merchantOrderId": "PIX123ABC"
}
Saques e transferencias Pix sao confirmados pela camada de provedor e entregues para a sua URL com um evento objetivo.
{
"event": "withdrawal",
"withdrawalId": "113598",
"status": "APPROVED",
"amount": "50.00",
"description": "Saque aprovado",
"key_pix": "11999999999"
}
Quando a cobranca por cartao muda de estado, a sua URL recebe eventos de aprovacao, cancelamento e tambem de recusa/falha de cobranca.
{
"event": "payment.confirmed",
"data": {
"transactionId": 113598,
"paymentId": "df8f54f7-7284-4197-b59a-8c494d206404",
"merchantOrderId": "PEDIDO123ABC",
"amount": 10,
"status": "PAID",
"statusCode": 2,
"customer": {
"name": "Joao Silva",
"identity": "12345678909",
"identityType": "CPF"
},
"card": {
"brand": "Master",
"last4": "3754"
},
"threeDS": {
"used": true,
"dataOnly": false,
"eci": "02",
"cavv": "kBOeH3Wy3eMiwwAFQkut/ZhhN4fl",
"xid": null,
"version": "2.2.0",
"referenceId": "766355f0-512d-4eec-b72f-73821039e246"
},
"provider": "bank_processing",
"fee": 0.49,
"netAmount": 9.51,
"capturedAmount": 10,
"cancelledAmount": 0,
"settlementStatus": "PENDING_RELEASE",
"releaseAt": "2026-06-18T12:20:29.000Z",
"settledAt": null,
"receivedDate": "2026-05-18 12:20:29"
}
}
Quando o banco ou o processamento bancario recusa a cobranca, a sua URL recebe um evento `payment.denied` com a mensagem amigavel e os dados essenciais da tentativa.
{
"event": "payment.denied",
"data": {
"transactionId": 113626,
"paymentId": "24f7f861-df85-43ee-99c1-605447f842d7",
"merchantOrderId": "pedid1747466100",
"amount": 50,
"installments": 6,
"status": "DENIED",
"statusCode": 3,
"message": "Pagamento recusado. Normalmente isso acontece por saldo insuficiente, limite indisponivel ou bloqueio temporario do banco. Verifique com seu banco e tente novamente.",
"returnMessage": "Pagamento recusado. Normalmente isso acontece por saldo insuficiente, limite indisponivel ou bloqueio temporario do banco. Verifique com seu banco e tente novamente.",
"customer": {
"name": "Joao Silva",
"identity": "01347898816",
"identityType": "CPF"
},
"card": {
"brand": "Master",
"last4": "3754"
},
"threeDS": {
"used": true,
"dataOnly": false,
"eci": "2",
"cavv": "kBOTapBdfMU9QROIZwu4UJhhuAQP",
"xid": null,
"version": "2.2.0",
"referenceId": "4a3a0a91-276b-4409-a767-1412742f11fb"
},
"acquirer": {
"status": 3,
"returnCode": "51",
"returnMessage": "Autorizacao negada",
"proofOfSale": "018002",
"tid": "28988149835IMTSU6RFE",
"authorizationCode": null,
"eci": "2"
}
}
}
Secao dedicada a cobrancas Pix de entrada e ao evento de confirmacao que a sua aplicacao recebe.
Gera uma cobranca Pix externa com QR Code.
x-api-key + JSON
Hoje esta documentacao publica cobre o fluxo entregue pelo provedor Pix usado nesta integracao.
event: deposit
{
"event": "deposit",
"paymentId": "0196f5ef-5c86-71ff-8bc9-7d0f00f5c2b4",
"status": "PAID",
"amount": "10.00",
"merchantOrderId": "PIX123ABC"
}
Secao dedicada a saques e transferencias Pix, incluindo eventos de aprovacao e falha.
Solicita um saque Pix externo.
x-api-key + JSON
Saques e transferencias Pix sao confirmados pela camada de provedor e entregues para a sua URL com um evento objetivo.
event: withdrawal / withdrawal_approved
{
"event": "withdrawal",
"withdrawalId": "113598",
"status": "APPROVED",
"amount": "50.00",
"description": "Saque aprovado",
"key_pix": "11999999999"
}
Secao dedicada a cobrancas por cartao, autenticacao do comprador, listagem e cancelamento.
Cria uma cobranca por cartao. Abaixo de R$ 5,00, somente R$ 0,20 e liberado para testes; em operacao normal, Ã vista a partir de R$ 5,00 e parcela minima de R$ 5,00 no parcelado.
popupUrl quando a confirmacao do comprador for necessaria
Lista as cobrancas por cartao desta credencial.
lista apenas transacoes desta credencial
Cancela uma cobranca por cartao usando o PaymentId.
cancelamento total ou parcial
Consulta os dados do cancelamento e recupera a URL do comprovante.
retorna os dados do cancelamento e a URL do comprovante
Quando a cobranca por cartao muda de estado, a sua URL recebe eventos de aprovacao, cancelamento e tambem de recusa/falha de cobranca.
event: payment.confirmed / payment.cancelled / payment.denied
const response = await fetch('https://api.koltpay.com/v2/card/charges', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'sk_koltpay_xxx'
},
body: JSON.stringify({
payload: {
MerchantOrderId: 'ORDER-1001',
Customer: {
Name: 'Joao Silva',
Identity: '12345678909',
IdentityType: 'CPF'
},
Payment: {
Type: 'CreditCard',
Amount: 1000,
Installments: 1,
Capture: true,
CreditCard: {
CardNumber: '4111111111111111',
Holder: 'JOAO SILVA',
ExpirationDate: '12/2030',
SecurityCode: '123',
Brand: 'Visa'
}
}
}
})
});
{
"success": true,
"message": "3DS authentication is required for credit card payments.",
"code": "3DS_REQUIRED",
"data": {
"status": "AWAITING_3DS_AUTHENTICATION",
"requiresThreeDS": true,
"popupUrl": "/card/auth/checkout/SESSION_ID",
"comment": "Dai voce utiliza esse URL por iframe na pagina de checkout do seu site. Ele vai carregar um popup aguardando a resposta do banco do cartao, para saber se vai enviar um desafio ou nao."
}
}
{
"event": "payment.denied",
"data": {
"transactionId": 113626,
"paymentId": "24f7f861-df85-43ee-99c1-605447f842d7",
"merchantOrderId": "pedid1747466100",
"amount": 50,
"installments": 6,
"status": "DENIED",
"statusCode": 3,
"message": "Pagamento recusado. Normalmente isso acontece por saldo insuficiente, limite indisponivel ou bloqueio temporario do banco. Verifique com seu banco e tente novamente.",
"returnMessage": "Pagamento recusado. Normalmente isso acontece por saldo insuficiente, limite indisponivel ou bloqueio temporario do banco. Verifique com seu banco e tente novamente.",
"customer": {
"name": "Joao Silva",
"identity": "01347898816",
"identityType": "CPF"
},
"card": {
"brand": "Master",
"last4": "3754"
},
"threeDS": {
"used": true,
"dataOnly": false,
"eci": "2",
"cavv": "kBOTapBdfMU9QROIZwu4UJhhuAQP",
"xid": null,
"version": "2.2.0",
"referenceId": "4a3a0a91-276b-4409-a767-1412742f11fb"
},
"acquirer": {
"status": 3,
"returnCode": "51",
"returnMessage": "Autorizacao negada",
"proofOfSale": "018002",
"tid": "28988149835IMTSU6RFE",
"authorizationCode": null,
"eci": "2"
}
}
}