1. Card Present Payments (API Raw)
Español
  • English
  • Español
  • Docs de API 🇵🇪
  • Online Payments
    • Errores ISO
    • Errores del API de Kushki
    • Notas de versión
    • Card Payments
      • Solicitar un token de tarjeta
      • Hacer un cargo o cargo diferido
      • Preautorización (sin token)
      • Crear pago (sin token)
      • Anular una transacción
      • Reembolsar una transacción
      • Verificar cuenta
      • Solicitar opciones de diferido
      • Autorizar pagos
      • Reautorizar pagos
      • Capturar un pago autorizado
      • Validar OTP
      • Información de BIN
      • Información de BIN V2
    • One-Click & Scheduled Payments
      • Solicitar un token de cargo recurrente
      • Crear un cargo recurrente
      • Actualizar los datos de la tarjeta del cargo recurrente
      • Hacer un pago One-click
      • Cancelar un cargo recurrente
      • Actualizar un cargo recurrente
      • Agregar un cargo o descuento temporal
      • Autorizar pagos
      • Capturar un pago autorizado
      • Consultar información del cargo recurrente
    • Card Out
      • Obtener token de Card Payout
      • Obtener token de suscripción
      • Push funds
      • Push Funds en suscripciones
      • Consultar estado de la transacción
      • Eliminar suscripción
    • Transfer In
      • Consultar lista de bancos
      • Solicitar un token de Transfer In
      • Iniciar transacción
      • Consultar estado
    • Transfer Out
      • Consultar lista de bancos
      • Consultar lista de bancos V2
      • Solicitar un token de Transfer Out
      • Iniciar transacción
      • Consultar estado
      • Saldo para payouts
    • Cash In
      • Solicitar un token de Cash In
      • Iniciar transacción
      • Estado de la transacción
    • Smartlinks V2
      • Crear un Smartlink
      • Actualizar un Smartlink
      • Consultar un Smartlink
      • Eliminar un Smartlink
    • Analytics
      • Consultar listado de transacciones v2
    • Chargebacks
      • Consultar chargebacks
      • Solicitar exportación de chargebacks
    • Gateway Status
      • Consultar estado del gateway
    • Payment Credentials
      • Crear una credencial
      • Buscar credenciales
      • Búsqueda avanzada
      • Activar o desactivar
      • Eliminar credencial
      • Actualizar credencial
      • Regenerar una credencial
    • Payment Button
      • Crear un Payment Button
    • Platform Status
      • Consultar estado de la plataforma
    • Subscription Transactions
      • Consultar transacciones de suscripción
    • Settlement
      • Consultar liquidación
    • Fraud Report
      • Consultar alertas de fraude
  • Card Present Payments (API Raw)
    • Notas de versión
    • Proceso de intercambio de llaves
    • Datos de prueba
    • Catálogo de errores de Kushki para transacciones POS
    • El objeto Amount
    • One-time Payments
      • Pago único
    • Two-step Payments
      • Autorización y captura
    • Voids & Refunds
      • Reembolsar una transacción
      • Anular y reversar
    • Card information
      • Consultar información de BIN
      • Información de BIN V2
      • Solicitar opciones de diferido
    • Query Transactions
      • Búsqueda de transacciones
    • Webhooks
      • Introducción
      • Buenas prácticas
      • Reembolsos
      • Pagos con tarjeta
      • Revisa tus webhooks
    • Chargebacks
      • Consultar chargebacks
      • Solicitar exportación de chargebacks
    • Fraud Report
      • Consultar alertas de fraude
  • Kushki One
    • Error Catalog
    • Release notes
    • Transaction Examples
    • Webhooks
    • Cloud Services
      • Payment Cloud
        • Sync
          • Charge
          • Authorization (Pre-auth)
          • Capture
          • Re-authorization
          • Post-tip
          • Refund
          • Abort
          • Void
        • Async
          • Charge (Async)
          • Authorization — Pre-auth (Async)
          • Capture (Async)
          • Re-authorization (Async)
          • Post-tip (Async)
          • Void (Async)
        • Search
          • Transaction Search
      • Print Cloud
        • Create Print Job
        • Get Print Job Status
    • Local Services
      • Payment Local
        • Sync
          • Charge
          • Authorization (Pre-auth)
          • Capture
          • Re-authorization
          • Post-tip
          • Void
          • Refund
          • Abort
        • Async
          • Charge (Async)
          • Authorization — Pre-auth (Async)
          • Capture (Async)
          • Re-authorization (Async)
          • Post-tip (Async)
          • Void (Async)
          • Abort (Async)
        • Search
          • Transaction Search — Online
          • Transaction Search — Local
      • Print Local
        • Create Print Job
        • Get Print Job Status
        • Print Job Webhook (inbound — implemented by your POS)
  • Appian - Submerchant Register
    • Release Notes
    • Submerchant Validation in Batch
    • Query submerchant status by requestId/submerchantId
    • Submerchant Document Upload
    • Get submerchantIds
    • Get credentials for submerchants
  • Schemas
    • Shared
      • ErrorResponse
      • BadRequestResponse
      • InvalidBinResponse
      • payment_method
      • payment_submethod
      • messageFields
      • Channel
    • Amount & Taxes
      • Amount-cash-in
      • GetConfigurationRequest
    • Identity & Contact
      • Shipping Address
    • Card & Payments
      • ChargesVoidCardResponse
      • Promotions
      • Submerchant
    • Subscriptions
      • SubscriptionUpdate
      • SubscriptionAdjustmentRequest
      • SubscriptionTransactionsResponse
    • Webhooks
    • Analytics
      • AnalyticsTransactionItem
      • AnalyticsListResponse
    • Settlement
      • SettlementDateRangeRequest
      • SettlementTicketRequest
      • SettlementResponse
    • Chargebacks
      • ChargebackListResponse
      • ChargebackSearchRequest
    • Cash
      • CashChargeInitRequest
      • CashStatusResponse
    • Transfer
      • TransferTokenRequest
      • TransferInitRequest
      • TransferStatusResponse
    • Payouts
      • PayoutsWebhooksItem
    • Smart Link
      • SmartLinkAmount
    • Terminal
      • TerminalContactDetails
      • TerminalCardDetails
      • TerminalPosDetails
      • TransactionSearchRequest
      • TerminalCardData
    • RequestBodies
      • one-and-two-step-payment
    • card-old
    • AmountWithTaxes-old
    • TransactionResponse
    • PrintJobRequest
    • one-and-two-step-payment
    • Card Present (CP)
    • one-and-two-step-payment1
    • Card
    • amount
    • FraudAlertRequest
    • SettlementDateRangeRequest
    • SubscriptionTransactionsResponse
    • Shipping Address
    • transactionType
    • ChargebackItem-old
    • SubscriptionTransaction
    • amount
    • AmountCore-old
    • CommandText-old
    • Language
    • extra_taxes
    • CommandText
    • RawResponse
    • Card Not Present (CNP)
    • Deferred
    • networkToken
    • FraudAlertResponse
    • ErrorResponse400-old
    • Deferred-old
    • SettlementResponse
    • extra_taxes-old
    • ExtraTaxes-old
    • CommandColumns-old
    • card
    • CommandColumns
    • CardData
    • FraudAlertRecord
    • currency
    • currency
    • ErrorResponse
    • webhooksItem
    • orderDetails-old
    • Country
    • ErrorResponse401-old
    • SettlementRecord
    • pos_details-old
    • ColumnItem-old
    • LinkFailure
    • ColumnItem
    • Amount
    • card_details
    • ValidationError
    • documentType
    • ErrorResponse403-old
    • card_details-old
    • TransactionResponse-old
    • CommandDivider-old
    • enc_tlv
    • CommandDivider
    • TransactionEvent
    • extraTaxes
    • extraTaxes-old
    • payment_method
    • ErrorResponse500-old
    • threeDomainSecure
    • enc_tlv
    • RawResponse-old
    • CommandFeed-old
    • CommandFeed
    • TransactionStatus
    • deferred
    • binInfo
    • contact_details-old
    • CardData-old
    • CommandSpace-old
    • CommandSpace
    • ReadingType
    • pos_details
    • Billing-Address-old
    • deferred-old
    • sub_merchant
    • AmountWithTip-old
    • CommandCut-old
    • metadata
    • sub_merchant
    • CommandCut
    • FailureReason
    • contact_details
    • headers
    • metadata
    • LinkFailure-old
    • CommandImage-old
    • CommandImage
    • EventTerminal
    • Amount-old
    • ContactDetails-old
    • SubscriptionUpdate
    • TransactionSearchRequest-old
    • CommandQR-old
    • orderDetails
    • CommandQR
    • EventOperation
    • Subscription
    • payment_submethod
    • citMit
    • SubscriptionAdjustmentRequest
    • CommandBarcode-old
    • Shipping Address
    • CommandBarcode
    • EventAmount
    • messageFields
    • PrinterError-old
    • Billing Address
    • EventExtraTaxes
    • PrintJobAccepted
    • webhooksChargeback
    • Language
    • PrintJobStatus-old
    • PrinterError
    • EventMetadata
    • networkToken-old
    • PrintWebhookPayload-old
    • AmountWithTaxes
    • PrintJobStatus
    • PrintJobStatusRequest
    • threeDomainSecure
    • webhooks
    • AmountCore
    • webhooks
    • product-old
    • headers
    • PrintWebhookPayload
    • ExtraTaxes
    • Metadata
    • webhooksChargeback
    • UnexpectedErrorResponse-old
    • AmountWithTip
    • citMit
    • TransactionSearchBody
    • TransactionSearchOnlineBody
    • network
    • Card-old-old
    • binInfo
    • AmountWithOptionalTip
    • TransactionSearchLocalBody
    • TransactionEvent_2
    • messageFields
    • Promotions-old
    • UnexpectedErrorResponse
    • FailureReason_2
    • transactionType
    • EventTerminal_2
    • EventOperation_2
    • InvalidBinResponse-old
    • EventAmount_2
    • EventExtraTaxes_2
    • EventMetadata_2
    • currency
    • Amount-CL-old
    • SettlementTicketRequest
    • metadata
    • payment_method
    • currency
    • currency
    • Submerchant
    • Shipping Address
    • GetConfigurationRequest-old
    • BadRequestResponse
    • ContactDetails
    • product
    • TransactionEvent_21
    • TransactionStatus2
    • ReadingType3
    • FailureReason_24
    • EventTerminal_25
    • EventOperation_26
    • EventAmount_27
    • EventMetadata_28
    • EventExtraTaxes_29
    • PrintWebhookPayload10
    • TransactionEvent11
    • FailureReason12
    • EventTerminal13
    • EventOperation14
    • EventAmount15
    • EventMetadata16
    • EventExtraTaxes17
HomePerú 🇵🇪
México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴Chile 🇨🇱
HomePerú 🇵🇪
México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴Chile 🇨🇱
  1. Card Present Payments (API Raw)

Webhooks

Kushki envía notificaciones de webhook a tu servidor por cada evento de transacción presencial: cargos, autorizaciones, capturas, anulaciones, reversos y reembolsos. Tu endpoint recibe el payload del evento inmediatamente después de que la terminal confirma la operación.
Configuración
Los webhooks de pagos presenciales se configuran desde la Kushki Console, en Desarrolladores → Webhooks. La configuración de webhooks por API no está soportada para pagos presenciales.

Eventos soportados#

EventoSe dispara cuando
approvedTransactionSe aprueba un cargo, una autorización o una captura
declinedTransactionEl emisor o la red rechaza una transacción
initializedTransactionSe inicializa una autorización en dos pasos
voidTransactionSe completa una anulación o un reverso
refundTransactionSe completa un reembolso

Payload del webhook#

Todos los eventos comparten un envelope común. Los campos transactionType y transactionStatus identifican el evento específico.
{
  "transactionType": "SALE",
  "transactionStatus": "APPROVAL",
  "transactionId": "1234567890abcdef",
  "ticketNumber": "987654321",
  "clientTransactionId": "ae6dd41a-9173-4ec7-8734-3178454ef341",
  "amount": 500.00,
  "currency": "PEN",
  "responseCode": "000",
  "responseText": "APPROVED",
  "approvalCode": "123456",
  "cardType": "credit",
  "paymentBrand": "VISA",
  "maskedCard": "XXXXXXXXXXXX1234",
  "binCard": "411111",
  "isDeferred": false,
  "merchantId": "<your-merchant-id>",
  "created": "2026-01-01T14:32:00.000Z",
  "processorBankName": "BCP",
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2",
  "posDetails": {
    "brand": "SUNMI",
    "model": "P2-EU",
    "serialNumber": "SN71652",
    "terminalId": "TID001"
  }
}

Campos principales#

CampoDescripción
transactionTypeSALE, AUTHORIZATION, CAPTURE, VOID, REVERSE, REFUND
transactionStatusAPPROVAL, DECLINED, INITIALIZED
ticketNumberTicket de la transacción asignado por Kushki; úsalo para la conciliación
clientTransactionIdEl UUID que enviaste en la petición original
transactionReferenceReferencia a nivel de adquirente; obligatoria para anular, capturar y reembolsar
approvalCodeCódigo de aprobación del emisor (presente en transacciones aprobadas)
responseCodeCódigo de respuesta ISO 8583; 000 significa aprobada
posDetails.serialNumberNúmero de serie de la terminal que procesó la transacción

Referencia de tipos de transacción#

Cargo (SALE)#

Se dispara cuando se completa un pago único.
{
  "transactionType": "SALE",
  "transactionStatus": "APPROVAL",
  "amount": 500.00,
  "currency": "PEN",
  "isDeferred": false
}
En cargos diferidos, isDeferred es true y se incluye un objeto deferred:
{
  "transactionType": "SALE",
  "transactionStatus": "APPROVAL",
  "isDeferred": true,
  "deferred": {
    "months": "6",
    "monthlyAmount": 83.33
  }
}

Autorización (AUTHORIZATION)#

Se dispara cuando se realiza una preautorización en dos pasos.
{
  "transactionType": "AUTHORIZATION",
  "transactionStatus": "INITIALIZED",
  "amount": 500.00,
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}

Captura (CAPTURE)#

Se dispara cuando se captura una autorización.
{
  "transactionType": "CAPTURE",
  "transactionStatus": "APPROVAL",
  "amount": 500.00,
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}

Anulación (VOID)#

Se dispara cuando se anula una autorización o un cargo del mismo día.
{
  "transactionType": "VOID",
  "transactionStatus": "APPROVAL",
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}

Reverso (REVERSE)#

Se dispara cuando una transacción se reversa a nivel del adquirente.
{
  "transactionType": "REVERSE",
  "transactionStatus": "APPROVAL",
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}

Reembolso (REFUND)#

Se dispara cuando se reembolsa una transacción liquidada, total o parcialmente.
{
  "transactionType": "REFUND",
  "transactionStatus": "APPROVAL",
  "amount": 250.00,
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}

Verificación de la firma#

Kushki firma cada petición de webhook con una firma HMAC-SHA256. Verifícala antes de procesar el payload para asegurar su autenticidad.

Cabeceras#

CabeceraValor
X-Kushki-SignatureHMAC-SHA256 del body crudo de la petición, codificado en Base64
X-Kushki-TimestampTimestamp Unix en milisegundos del momento en que se envió el evento

Verificación (ejemplo en Node.js)#

WARNING
Verifica siempre la firma antes de confiar en el payload. Rechaza cualquier petición en la que la verificación falle.

Política de reintentos#

Si tu endpoint no devuelve HTTP 2xx dentro de la ventana de timeout, Kushki reintenta la entrega con backoff exponencial:
IntentoEspera
1.er reintento1 minuto
2.º reintento5 minutos
3.er reintento30 minutos
4.º reintento2 horas
5.º reintento8 horas
Después de 5 intentos fallidos el evento se marca como no entregado. Puedes reenviarlo desde Console → Desarrolladores → Webhooks → Event Log.

Buenas prácticas#

PrácticaMotivo
Responde de inmediato con 200Evita timeouts; procesa de forma asíncrona
Guarda el payload crudo antes de procesarloPermite reprocesarlo si el procesamiento falla
Usa ticketNumber como llave de idempotenciaProtege contra entregas duplicadas
Verifica X-Kushki-Signature en cada peticiónRechaza payloads falsificados o alterados
Revisa X-Kushki-TimestampRechaza eventos con más de 5 minutos de antigüedad para prevenir ataques de repetición

Configuración#

Configura tus endpoints de webhook en la Kushki Console:
1.
Ve a Desarrolladores → Webhooks
2.
Haz clic en New Endpoint
3.
Ingresa tu URL HTTPS
4.
Selecciona los eventos de pagos presenciales a los que quieres suscribirte
5.
Copia el Signing Secret y guárdalo de forma segura en tu entorno
INFO
Tu URL de webhook debe ser accesible públicamente por HTTPS. No se aceptan endpoints HTTP.

¿Tienes una sugerencia sobre esta documentación? Contáctanos.
Modified at 2026-09-10 20:09:35
Previous
Búsqueda de transacciones
Next
Introducción
Built with