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

One-Click & Scheduled Payments

One-Click & Scheduled Payments let you register a customer's card as a subscription and charge it later — either automatically on a schedule or manually on demand. The card data is tokenized once and never stored on your servers.
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.

Two charge modes#

ModeHow it works
ScheduledKushki charges the card automatically based on the periodicity you configure (daily, monthly, yearly, etc.)
One-click (on-demand)You trigger each charge manually via POST /subscriptions/v1/card/{subscriptionId}. Use periodicity: "custom" when creating the subscription.

Flow#

1
Request a subscription token
Call POST /subscriptions/v1/card/tokens from your backend with the customer's card data. Returns a one-time token.
{
  "card": {
    "name": "Luis García",
    "number": "4242424242424242",
    "expiryMonth": "08",
    "expiryYear": "28",
    "cvv": "123"
  },
  "currency": "PEN"
}
⚠️ Token expiry: Use the token immediately to create the subscription. Do not store it.
2
Create the subscription
Call POST /subscriptions/v1/card with the token, plan details, and the recurring amount. The response returns a subscriptionId you store on your side.
{
  "token": "gV3ox6100000sAxClU033646vnnJsT83",
  "planName": "Premium",
  "periodicity": "monthly",
  "startDate": "2026-06-01",
  "contactDetails": {
    "documentType": "DNI",
    "documentNumber": "12345678",
    "firstName": "Luis",
    "lastName": "García",
    "email": "user@example.com",
    "phoneNumber": "+51912345678"
  },
  "amount": {
    "subtotalIva": 0,
    "subtotalIva0": 99.90,
    "ice": 0,
    "iva": 0,
    "currency": "PEN"
  }
}
3
Charge the subscription
Scheduled: Kushki charges automatically — no action needed from you.
One-click: Call POST /subscriptions/v1/card/{subscriptionId} whenever you want to charge the customer.
{
  "amount": {
    "subtotalIva": 0,
    "subtotalIva0": 99.90,
    "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. Use "fullResponse": "v2" to get the full approval details.
💡 Sandbox OTP: If OTP validation is triggered in sandbox, use 555 for both PEN and USD.

Periodicities#

ValueFrequency
dailyEvery day
weeklyEvery week
biweeklyEvery two weeks
monthlyOnce a month
threefortnightsEvery three fortnights
bimonthlyEvery two months
quarterlyEvery three months
fourmonthsEvery four months
halfYearlyEvery six months
yearlyOnce a year
customOn-demand — you trigger each charge manually

Document types#

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

Deferred charges on subscriptions#

Peru supports deferred installments on subscription charges. Include the deferred object in the charge request:
Aggregator model
Acquiring model
Send months as a top-level field (not inside deferred):
{
  "amount": {
    "subtotalIva": 0,
    "subtotalIva0": 300.00,
    "iva": 0,
    "ice": 0,
    "currency": "PEN"
  },
  "months": 3,
  "contactDetails": {
    "documentType": "DNI",
    "documentNumber": "12345678",
    "firstName": "Luis",
    "lastName": "García",
    "email": "user@example.com",
    "phoneNumber": "+51912345678"
  }
}

Managing subscriptions#

OperationEndpointDescription
Get infoGET /subscriptions/v1/card/search/{subscriptionId}Retrieve subscription details, card info, and plan configuration
Update cardPUT /subscriptions/v1/card/{subscriptionId}/cardReplace the registered card with a new token
Update planPATCH /subscriptions/v1/card/{subscriptionId}Modify amount, periodicity, or plan name
Add temp chargePUT /subscriptions/v1/card/{subscriptionId}Apply a one-time extra charge or discount on the next billing cycle
CancelDELETE /subscriptions/v1/card/{subscriptionId}Cancel the subscription permanently

Pre-authorization flow#

For subscriptions that require fund reservation before capture:
1
Authorize
POST /subscriptions/v1/card/{subscriptionId}/authorize — Reserves funds without charging. Returns a ticketNumber.
2
Capture
POST /subscriptions/v1/card/{subscriptionId}/capture — Captures the reserved amount. Pass the ticketNumber from the authorization.

Example response (full)#

{
  "details": {
    "amount": {
      "subtotalIva": 0,
      "subtotalIva0": 99.90,
      "ice": 0,
      "iva": 0,
      "currency": "PEN"
    },
    "approvalCode": "000000",
    "approvedTransactionAmount": 99.90,
    "binInfo": {
      "bindCard": "445652",
      "cardCountry": "Peru",
      "lastFourDigits": "9860",
      "type": "credit"
    },
    "merchantName": "Mi Comercio Perú",
    "paymentBrand": "Visa",
    "responseCode": "000",
    "responseText": "Transacción aprobada",
    "transactionStatus": "APPROVAL",
    "transactionType": "SALE",
    "maskedCreditCard": "445652XXXXXX9860"
  },
  "ticketNumber": "028590538321035813"
}

Network Tokens (BETA)#

Peru supports tokenizing subscription cards using network-tokenized cards (tokens provisioned by Visa or Mastercard through digital wallets like Apple Pay).
When requesting a subscription token (POST /subscriptions/v1/card/tokens), set isNetworkToken: true and include the networkToken object:
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)
⚠️ BETA: This feature is available in Peru and Chile only. Contact your Kushki account manager before enabling it.

Authentication#


Using the API#

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

Available Endpoints#

Request a Subscription Token
Tokenize a card for recurring use. Returns a one-time token to create the subscription.
Create a Subscription
Register the card and configure the plan — periodicity, amount, start date, and contact details.
Charge a Subscription
Trigger an on-demand charge against a subscription. Also used for deferred installment charges.
Get Subscription Info
Retrieve the full configuration and card details of an existing subscription.
Update Card
Replace the registered card with a new token — e.g. after card expiry or a failed charge.
Update Subscription
Modify the plan amount, periodicity, or name of an existing subscription.
Add Temporary Charge
Apply a one-time extra charge or discount on the next billing cycle without modifying the base plan.
Cancel Subscription
Permanently cancel a subscription. The customer will not be charged again.
Authorize (Pre-auth)
Reserve funds on the subscription card without capturing immediately.
Capture
Capture a previously authorized amount on a subscription.

Got a suggestion on this documentation? Contact us.
Modified at 2026-07-11 00:21:07
Previous
Bin Info
Next
Request a recurring charge token
Built with