1. Online Payments
  • API Docs Peru 🇵🇪
  • Online Payments
    • Release Notes
    • Card Payments
      • Request a card token
      • Make a charge or deferred charge
      • Preauthorization (tokenless)
      • Create payment (tokenless)
      • Void a transaction
      • Refund a transaction
      • Verify Account
      • Request deferred options
      • Authorize payments
      • Reauthorize payments
      • Capture an authorized payment
      • Validate OTP
      • Bin Info V2
      • Bin Info
    • One-Click & Scheduled Payments
      • Request a recurring charge token
      • Create a recurring charge
      • Update recurring charge card data
      • Make an One-click payment
      • Cancel a recurring charge
      • Update a recurring charge
      • Add a temporary charge or discount
      • Authorize payments
      • Capture an authorized payment
      • Get recurring charge Info
    • Card Out
      • Get Card Payout Token
      • Get Subscription Token
      • Push funds
      • Push Funds in subscriptions
      • Get transaction status
      • Delete Subscription
    • Transfer In
      • Get Bank List
      • Request a Transfer In token
      • Init Transaction
      • Get Status
    • Transfer Out
      • Get Bank List
      • Get Bank List V2
      • Request a Transfer Out token
      • Init Transaction
      • Get Status
      • Balance for Payouts
    • Cash In
      • Request a cash in token
      • Init Transaction
      • Transaction Status
    • Smartlinks V2
      • Create a Smartlink
      • Update a Smartlink
      • Get a Smartlink
      • Delete a smartlink
    • Analytics
      • Get transactions list v1
      • Get transactions list v2
    • Chargebacks
      • Query chargebacks
      • Request chargeback export
    • Gateway Status
      • Get gateway status
    • Payment Credentials
      • Create a credential
      • Search credentials
      • Advanced search
      • Activate or deactivate
      • Delete credential
      • Update credential
      • Regenerate a credential
    • Payment Button
      • Create a payment button
    • Platform Status
      • Get platform status
    • Subscription Transactions
      • Get subscription transactions
    • Settlement
      • Query settlement
  • Card Present Payments (API Raw)
    • Release notes
    • Key Exchange Process
    • Test data
    • Kushki Error Catalog for POS transactions
    • The Amount Object
    • One-time Payments
      • Single payment
    • Two-step Payments
      • Authorization and capture
    • Voids & Refunds
      • Refund a transaction
      • Void & Reverse
    • Card information
      • Get BIN Info
      • Bin Info V2
      • Request deferred options
      • Balance inquiries
    • Query Transactions
      • Transaction Search
    • Webhooks
      • Introduction
      • Good practices
      • Refunds
      • Card Payments
      • Check your webhooks
  • Kushki One
    • Cloud Services
      • Payment Cloud
        • Charge
        • Authorization (Pre-auth)
        • Capture
        • Re-authorization
        • Post-tip
        • Void
        • Refund
        • Abort
        • Transaction Search
      • Print Cloud
        • Create Print Job
        • Get Print Job Status
    • Local Services
      • Payment Local
        • Charge
        • Authorization (Pre-auth)
        • Capture
        • Re-authorization
        • Post-tip
        • Void
        • Refund
        • Transaction Search — Local
        • Transaction Search — Online
        • Abort
      • Print Local
        • Create Print Job
        • Get Print Job Status
        • Print Job Webhook (inbound — implemented by your POS)
  • Appian - Submerchant Register
    • Submerchant Validation in Batch
    • Query submerchant status by requestId/submerchantId
    • Get submerchantIds
    • Get credentials for submerchants
  • Raíz
  • 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
      • AmountWithTaxes
      • AmountCore
      • AmountWithTip
      • TerminalCardDetails
      • TerminalPosDetails
      • TerminalContactDetails
      • TerminalCardData
      • TransactionResponse
      • LinkFailure
      • TransactionSearchRequest
      • PrintJobRequest
      • PrinterError
      • PrintJobStatus
      • PrintWebhookPayload
    • RequestBodies
      • one-and-two-step-payment
    • currency
    • SettlementDateRangeRequest
    • SubscriptionTransactionsResponse
    • card-old
    • AmountWithTaxes-old
    • Card
    • Shipping Address
    • transactionType
    • ChargebackItem-old
    • SettlementTicketRequest
    • SubscriptionTransaction
    • amount
    • AmountCore-old
    • CommandText-old
    • networkToken
    • Language
    • extra_taxes
    • card_details
    • currency
    • ErrorResponse400-old
    • webhooksItem
    • ErrorResponse
    • SettlementResponse
    • extra_taxes-old
    • ExtraTaxes-old
    • CommandColumns-old
    • currency
    • card
    • orderDetails-old
    • Country
    • ContactDetails-old
    • ErrorResponse401-old
    • SettlementRecord
    • pos_details-old
    • ColumnItem-old
    • Amount
    • amount
    • documentType
    • extraTaxes-old
    • ErrorResponse403-old
    • card_details-old
    • TransactionResponse-old
    • CommandDivider-old
    • extraTaxes
    • enc_tlv
    • payment_method
    • ErrorResponse500-old
    • threeDomainSecure
    • enc_tlv
    • RawResponse-old
    • CommandFeed-old
    • Deferred
    • pos_details
    • deferred
    • binInfo
    • contact_details-old
    • CardData-old
    • CommandSpace-old
    • paymentMethod-old
    • Metadata
    • contact_details
    • Billing-Address-old
    • Deferred-old
    • deferred-old
    • sub_merchant
    • AmountWithTip-old
    • CommandCut-old
    • ContactDetails
    • sub_merchant
    • headers
    • Amount-old
    • metadata
    • LinkFailure-old
    • CommandImage-old
    • metadata
    • SubscriptionUpdate
    • TransactionSearchRequest-old
    • CommandQR-old
    • orderDetails
    • Subscription
    • payment_submethod
    • citMit
    • SubscriptionAdjustmentRequest
    • CommandBarcode-old
    • Shipping Address
    • messageFields
    • PrinterError-old
    • Billing Address
    • webhooksChargeback
    • Language
    • PrintJobStatus-old
    • currency-cash-in-old
    • product
    • webhooks
    • networkToken-old
    • PrintWebhookPayload-old
    • currency-CL-old
    • threeDomainSecure
    • webhooks
    • product-old
    • headers
    • webhooksChargeback
    • UnexpectedErrorResponse-old
    • citMit
    • network
    • Card-old-old
    • Submerchant-old
    • binInfo
    • Shipping-Address-old
    • messageFields
    • Promotions-old
    • UnexpectedErrorResponse
    • transactionType
    • InvalidBinResponse-old
    • GetConfigurationRequest-old
    • BadRequestResponse-old
    • Amount-CL-old
BienvenidaPerú 🇵🇪
México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴Chile 🇨🇱
BienvenidaPerú 🇵🇪
México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴Chile 🇨🇱
  1. Online Payments

Card Payments

The Card API lets you tokenize card data and process payments securely. All sensitive card information is handled by Kushki — your server only sends the token.
Keep in mind!
Token generation requires your Private Key (Private-Merchant-Id). Never expose it in client-side or frontend code — always call the token endpoint from your backend.

Payment flow#

1
Request a card token
Call POST /card/v1/tokens from your backend with the card data and transaction amount. The response returns a one-time token valid for a single charge.
{
  "card": {
    "name": "Luis García",
    "number": "5451951574925480",
    "expiryMonth": "08",
    "expiryYear": "28",
    "cvv": "121"
  },
  "totalAmount": 150.00,
  "currency": "PEN"
}
⚠️ Token expiry: Tokens expire after a short window. Use them immediately — do not store them for later use.
2
Make a charge
Call POST /card/v1/charges with the token and amount breakdown. Include contactDetails and, optionally, orderDetails and productDetails for fraud scoring.
{
  "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"
  }
}
A successful charge returns a ticketNumber and transactionReference.
💡 Sandbox OTP: If the card requires OTP validation in sandbox, use 555 for both PEN and USD transactions.
3
Handle the response
Check transactionStatus — "APPROVAL" means the charge was authorized.
{
  "ticketNumber": "922513792073660814",
  "transactionReference": "6f16659e-b711-4995-a9ae-161aecbd6521"
}
For the full response (card details, bank name, amounts), include "fullResponse": "v2" in your charge request.

Currencies#

Peru supports two currencies:
CurrencyCode
Peruvian SolPEN
US DollarUSD

Document types#

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

Deferred charges (Installments)#

Peru supports deferred payments (cuotas). First call the deferred options endpoint to check which installment plans are available for the customer's card BIN, then include the plan in the charge request.

Step 1 — Check available plans#

GET /card/v1/deferred/{bin}
Response includes available months and monthsOfGrace:
[
  {
    "months": ["2", "3", "4", "5", "6", "7"],
    "monthsOfGrace": [],
    "type": "all"
  }
]

Step 2 — Submit the charge#

Aggregator model
Acquiring model
Send months as a top-level field in the charge body (not inside a deferred object):
{
  "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"
  }
}

Pre-authorization flow#

Use pre-authorization to reserve funds without capturing them immediately.
1
Authorize
POST /card/v1/preAuthorization — Reserves funds on the card. Returns a ticketNumber.
2
Reauthorize (optional)
POST /card/v1/reauthorization — Extends the authorization window or adjusts the reserved amount. Pass the original ticketNumber.
3
Capture
POST /card/v1/capture — Captures the reserved amount (or a partial amount). Pass the original ticketNumber.
4
Void (if not capturing)
DELETE /v1/charges/{ticketNumber} — Cancels the authorization and releases the reserved funds.

Void and Refund#

OperationEndpointNotes
VoidDELETE /v1/charges/{ticketNumber}Cancel a transaction. Supported: total and partial void.
RefundDELETE /v1/refund/{ticketNumber}Return funds to the cardholder. Supported: total and partial refund.
For a partial void or refund, include the amount object in the request body with the partial amount.

Recurring charges and card validation (transactionMode)#

Include transactionMode in the token request for recurring flows or zero-amount card validation:
ValueDescription
initialRecurrenceMarks the first transaction in a recurring series.
subsequentRecurrenceSubsequent recurring charges — CVV is not required once an initialRecurrence has been processed.
accountValidationZero-amount card validation. Confirms the card is valid without charging it.

Tokenless charge (v2)#

POST /card/v2/charges accepts card data directly in the request body — no prior token call required. Useful for server-to-server integrations where you already hold the card data.

Webhooks#

Include a webhooks array in your charge or pre-auth request to receive real-time notifications:
{
  "webhooks": ["https://yoursite.com/kushki/notify"]
}
Kushki sends a POST to each URL when the transaction status changes.

3D Secure#

Peru supports two 3DS modes:
ModeDescription
Insecure 3DSKushki handles the 3DS flow. Include threeDomainSecure with the JWT from the authentication step.
Own 3DS engineYou run your own 3DS server. Include the authentication result fields in threeDomainSecure. Supported for Mastercard and Visa.

Network Tokens (BETA)#

Peru supports processing transactions with network-tokenized cards (tokens provisioned by Visa or Mastercard through digital wallets like Apple Pay).
To use this feature, set isNetworkToken: true in your token or tokenless charge request and include the networkToken object with the additional metadata:
FieldDescription
deviceTypeType of device originating the tokenized transaction
requestorIdUnique ID assigned to the token requestor by the card network
sourceSource of the token
walletIdDigital wallet identifier — "01" for Apple Pay, "04" for other wallets
authenticationLevelAuthentication level performed during token provisioning
mvv10-digit Merchant Verification Value (Visa transactions only)
Also include the cryptogram field on the card object when the network token carries a cryptogram from the digital wallet or issuer token service. The value must be between 20 and 28 alphanumeric characters.
⚠️ BETA: This feature is available in Peru and Chile only. Contact your Kushki account manager before enabling it.

BIN info#

GET /card/v1/bin/{bin} and GET /deferred/v2/bin/{bin} return card metadata (bank, brand, card type, issuing country) for a given BIN. Use this to determine deferred eligibility and display the card brand logo at checkout.

Account verification#

To verify a card without charging it, request a token with totalAmount: 0. The token flow runs a zero-amount validation against the card.

Authentication#


Using the API#

🟢 Production
🧪 Sandbox (UAT)
https://api.kushkipagos.com/

Available Endpoints#

Request a Card Token
Tokenize card data. Returns a one-time token for a single charge.
Make a Charge
Charge a card using a token. Supports single charges, deferred installments, 3DS, webhooks, and fraud scoring.
Tokenless Charge (v2)
Submit card data and charge in a single call — no prior token required.
Void a Transaction
Cancel a transaction before settlement. Supports total and partial void.
Refund a Transaction
Return funds to the cardholder. Supports total and partial refund.
Request Deferred Options
Returns available installment plans for a card BIN. Call before submitting a deferred charge.
Pre-Authorization
Reserve funds without capturing immediately.
Tokenless Pre-Authorization (v2)
Pre-authorize with card data directly — no prior token step.
Reauthorize
Extend or adjust a pending authorization.
Capture
Capture a previously authorized amount.
Account Verification
Verify a card with a zero-amount token request.
Validate OTP
Validate a one-time password for OTP-based 3DS flows.
BIN Info
Get card metadata (bank, brand, type, country) by BIN.
BIN Info v2
Extended BIN lookup including deferred eligibility.

Got a suggestion on this documentation? Contact us.
Modified at 2026-07-11 00:46:24
Previous
Release Notes
Next
Request a card token
Built with