1. Online Payments
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. Online Payments

Pagos con tarjeta

La API de Card te permite tokenizar los datos de la tarjeta y procesar pagos de forma segura. Kushki maneja toda la información sensible de la tarjeta: tu servidor solo envía el token.
¡Ten en cuenta!
La generación del token requiere tu Private Key (Private-Merchant-Id). Nunca la expongas en código de cliente o de frontend: llama siempre al endpoint de token desde tu backend.

Flujo de pago#

1
Solicita un token de tarjeta
Llama a POST /card/v1/tokens desde tu backend con los datos de la tarjeta y el monto de la transacción. La respuesta devuelve un token de un solo uso, válido para un único cargo.
{
  "card": {
    "name": "Luis García",
    "number": "5451951574925480",
    "expiryMonth": "08",
    "expiryYear": "28",
    "cvv": "121"
  },
  "totalAmount": 150.00,
  "currency": "PEN"
}
⚠️ Expiración del token: Los tokens expiran en poco tiempo. Úsalos de inmediato: no los guardes para usarlos después.
2
Haz un cargo
Llama a POST /card/v1/charges con el token y el desglose del monto. Incluye contactDetails y, opcionalmente, orderDetails y productDetails para el scoring antifraude.
{
  "token": "f5c64f7ac8ea42d5a58dcdc74de973dc",
  "amount": {
    "subtotalIva": 0,
    "subtotalIva0": 150.00,
    "ice": 0,
    "iva": 0,
    "currency": "PEN"
  },
  "contactDetails": {
    "documentType": "DNI",
    "documentNumber": "12345678",
    "firstName": "Luis",
    "lastName": "García",
    "email": "user@example.com",
    "phoneNumber": "+51912345678"
  }
}
Un cargo exitoso devuelve un ticketNumber y un transactionReference.
💡 OTP en sandbox: Si la tarjeta requiere validación OTP en sandbox, usa 555 tanto para transacciones en PEN como en USD.
3
Procesa la respuesta
Revisa transactionStatus: "APPROVAL" significa que el cargo fue autorizado.
{
  "ticketNumber": "922513792073660814",
  "transactionReference": "6f16659e-b711-4995-a9ae-161aecbd6521"
}
Para la respuesta completa (detalles de la tarjeta, nombre del banco, montos), incluye "fullResponse": "v2" en tu request de cargo.

Monedas#

Perú admite dos monedas:
MonedaCódigo
Sol peruanoPEN
Dólar estadounidenseUSD

Tipos de documento#

ValorDescripción
DNIDocumento Nacional de Identidad 🇵🇪
CECarné de Extranjería 🇵🇪
PASPasaporte 🇵🇪
RUCRegistro Único de Contribuyentes 🇵🇪

Cargos diferidos (cuotas)#

Perú admite pagos diferidos (cuotas). Primero llama al endpoint de opciones de diferido para saber qué planes de cuotas están disponibles para el BIN de la tarjeta del cliente y luego incluye el plan en el request de cargo.

Paso 1 — Consulta los planes disponibles#

GET /card/v1/deferred/{bin}
La respuesta incluye los meses disponibles y monthsOfGrace:
[
  {
    "months": ["2", "3", "4", "5", "6", "7"],
    "monthsOfGrace": [],
    "type": "all"
  }
]

Paso 2 — Envía el cargo#

Modelo agregador
Modelo de adquirencia
Envía months como campo de primer nivel en el body del cargo (no dentro del objeto deferred):
{
  "token": "24e5cc0d47fc4b2ab098bdb7d0b94569",
  "amount": {
    "subtotalIva": 0,
    "subtotalIva0": 300.00,
    "ice": 0,
    "iva": 0,
    "currency": "PEN"
  },
  "months": 3,
  "contactDetails": {
    "documentType": "DNI",
    "documentNumber": "12345678",
    "firstName": "Luis",
    "lastName": "García",
    "email": "user@example.com",
    "phoneNumber": "+51912345678"
  }
}

Flujo de preautorización#

Usa la preautorización para reservar fondos sin capturarlos de inmediato.
1
Autoriza
POST /card/v1/preAuthorization: reserva fondos en la tarjeta. Devuelve un ticketNumber.
2
Reautoriza (opcional)
POST /card/v1/reauthorization: extiende la ventana de la autorización o ajusta el monto reservado. Envía el ticketNumber original.
3
Captura
POST /card/v1/capture: captura el monto reservado (o una parte). Envía el ticketNumber original.
4
Anula (si no vas a capturar)
DELETE /v1/charges/{ticketNumber}: cancela la autorización y libera los fondos reservados.

Anulación y reembolso#

OperaciónEndpointNotas
VoidDELETE /v1/charges/{ticketNumber}Anula una transacción. Admite anulación total y parcial.
RefundDELETE /v1/refund/{ticketNumber}Devuelve los fondos al tarjetahabiente. Admite reembolso total y parcial.
Para una anulación o un reembolso parcial, incluye el objeto amount en el body del request con el monto parcial.

Cargos recurrentes y validación de tarjeta (transactionMode)#

Incluye transactionMode en la solicitud de token para flujos recurrentes o validación de tarjeta con monto cero:
ValorDescripción
initialRecurrenceMarca la primera transacción de una serie recurrente.
subsequentRecurrenceCargos recurrentes posteriores: no se requiere CVV una vez procesado un initialRecurrence.
accountValidationValidación de tarjeta con monto cero. Confirma que la tarjeta es válida sin cobrarla.

Cargo sin token (v2)#

POST /card/v2/charges acepta los datos de la tarjeta directamente en el body del request, sin necesidad de una llamada previa de token. Útil para integraciones servidor a servidor donde ya tienes los datos de la tarjeta.

Webhooks#

Incluye un array webhooks en tu request de cargo o de preautorización para recibir notificaciones en tiempo real:
{
  "webhooks": ["https://yoursite.com/kushki/notify"]
}
Kushki envía un POST a cada URL cuando cambia el estado de la transacción.

3D Secure#

Perú admite dos modos de 3DS:
ModoDescripción
Insecure 3DSKushki maneja el flujo 3DS. Incluye threeDomainSecure con el JWT del paso de autenticación.
Motor 3DS propioOperas tu propio servidor 3DS. Incluye los campos con el resultado de la autenticación en threeDomainSecure. Compatible con Mastercard y Visa.

Network Tokens (BETA)#

Perú admite procesar transacciones con tarjetas tokenizadas por la red (tokens aprovisionados por Visa o Mastercard a través de wallets digitales como Apple Pay).
Para usar esta funcionalidad, envía isNetworkToken: true en tu request de token o de cargo sin token e incluye el objeto networkToken con los metadatos adicionales:
CampoDescripción
deviceTypeTipo de dispositivo que origina la transacción tokenizada
requestorIdID único que la red de tarjetas asigna al solicitante del token
sourceOrigen del token
walletIdIdentificador de la wallet digital: "01" para Apple Pay, "04" para otras wallets
authenticationLevelNivel de autenticación realizado durante el aprovisionamiento del token
mvvMerchant Verification Value de 10 dígitos (solo transacciones Visa)
Incluye también el campo cryptogram en el objeto card cuando el network token traiga un criptograma de la wallet digital o del servicio de tokens del emisor. El valor debe tener entre 20 y 28 caracteres alfanuméricos.
⚠️ BETA: Esta funcionalidad está disponible en Perú. Contacta a tu ejecutivo de cuenta de Kushki antes de habilitarla.

Información del BIN#

GET /card/v1/bin/{bin} y GET /deferred/v2/bin/{bin} devuelven los metadatos de la tarjeta (banco, marca, tipo de tarjeta, país emisor) para un BIN dado. Úsalos para determinar la elegibilidad de diferido y mostrar el logo de la marca en el checkout.

Verificación de cuenta#

Para verificar una tarjeta sin cobrarla, solicita un token con totalAmount: 0. El flujo de token ejecuta una validación con monto cero contra la tarjeta.

Autenticación#


Uso de la API#

🟢 Producción
🧪 Sandbox (UAT)
https://api.kushkipagos.com/

Endpoints disponibles#

Solicitar un token de tarjeta
Tokeniza los datos de la tarjeta. Devuelve un token de un solo uso para un único cargo.
Hacer un cargo
Haz un cargo a una tarjeta usando un token. Admite cargos únicos, diferidos, 3DS, webhooks y scoring antifraude.
Cargo sin token (v2)
Envía los datos de la tarjeta y haz el cargo en una sola llamada, sin token previo.
Anular una transacción
Anula una transacción antes de la liquidación. Admite anulación total y parcial.
Reembolsar una transacción
Devuelve los fondos al tarjetahabiente. Admite reembolso total y parcial.
Consultar opciones de diferido
Devuelve los planes de cuotas disponibles para el BIN de una tarjeta. Llámalo antes de enviar un cargo diferido.
Preautorización
Reserva fondos sin capturarlos de inmediato.
Preautorización sin token (v2)
Preautoriza con los datos de la tarjeta directamente, sin paso previo de token.
Reautorizar
Extiende o ajusta una autorización pendiente.
Capturar
Captura un monto autorizado previamente.
Verificación de cuenta
Verifica una tarjeta con una solicitud de token de monto cero.
Validar el OTP
Valida una contraseña de un solo uso para flujos 3DS basados en OTP.
Información del BIN
Obtén los metadatos de la tarjeta (banco, marca, tipo, país) por BIN.
Información del BIN v2
Consulta extendida de BIN, incluida la elegibilidad de diferido.

¿Tienes una sugerencia sobre esta documentación? Escríbenos.
Modified at 2026-09-11 14:39:51
Previous
Notas de versión
Next
Solicitar un token de tarjeta
Built with