1. Online Payments
English
  • English
  • Español
  • API Docs Peru 🇵🇪
  • Online Payments
    • Release Notes
    • ISO errors
    • Kushki API errors
    • 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 Transfer In configuration
      • 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 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
    • Fraud Report
      • Query fraud alerts
  • 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
    • Query Transactions
      • Transaction Search
    • Webhooks
      • Introduction
      • Good practices
      • Refunds
      • Card Payments
      • Check your webhooks
    • Chargebacks
      • Query Chargebacks
      • Request Chargeback Export
    • Fraud Report
      • Query fraud alerts
  • Kushki One
    • Webhooks
    • Error Catalog
    • Release notes
    • Transaction Examples
    • Cloud Services
      • Payment
        • Sync
          • Charge
          • Authorization (Pre-auth)
          • Capture
          • Re-authorization
          • Post-tip
          • Abort
          • Void
        • Async
          • Charge (Async)
          • Authorization — Pre-auth (Async)
          • Capture (Async)
          • Re-authorization (Async)
          • Post-tip (Async)
          • Void (Async)
        • Search
          • Transaction Search
      • Print
        • Create Print Job
        • Get Print Job Status
      • Diagnostics
        • Connection test
        • Terminal info
    • Local Services
      • Payment
        • Sync
          • Charge
          • Authorization (Pre-auth)
          • Capture
          • Re-authorization
          • Post-tip
          • Void
          • 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
        • Create Print Job
        • Get Print Job Status
        • Print Job Webhook (inbound — implemented by your POS)
      • Diagnostics
        • Connection test
        • Terminal info
  • 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
      • 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
    • SettlementDateRangeRequest
    • SubscriptionTransactionsResponse
    • card-old
    • AmountWithTaxes-old
    • Card
    • PrintJobRequest
    • amount
    • one-and-two-step-payment
    • Card Present (CP)
    • one-and-two-step-payment1
    • FraudAlertRequest
    • TransactionResponse
    • Shipping Address
    • transactionType
    • ChargebackItem-old
    • SubscriptionTransaction
    • amount
    • AmountCore-old
    • CommandText-old
    • Deferred
    • networkToken
    • Language
    • extra_taxes
    • CommandText
    • Card Not Present (CNP)
    • FraudAlertResponse
    • RawResponse
    • currency
    • Amount-cash-in
    • ErrorResponse400-old
    • Deferred-old
    • webhooksItem
    • ErrorResponse
    • SettlementResponse
    • extra_taxes-old
    • ExtraTaxes-old
    • CommandColumns-old
    • currency
    • card
    • CommandColumns
    • FraudAlertRecord
    • CardData
    • orderDetails-old
    • Country
    • ErrorResponse401-old
    • SettlementRecord
    • pos_details-old
    • ColumnItem-old
    • Amount
    • card_details
    • ColumnItem
    • ValidationError
    • LinkFailure
    • documentType
    • extraTaxes-old
    • ErrorResponse403-old
    • card_details-old
    • TransactionResponse-old
    • CommandDivider-old
    • extraTaxes
    • enc_tlv
    • CommandDivider
    • TransactionEvent
    • payment_method
    • ErrorResponse500-old
    • threeDomainSecure
    • enc_tlv
    • RawResponse-old
    • CommandFeed-old
    • deferred
    • CommandFeed
    • TransactionStatus
    • binInfo
    • contact_details-old
    • CardData-old
    • CommandSpace-old
    • pos_details
    • CommandSpace
    • ReadingType
    • Billing-Address-old
    • deferred-old
    • sub_merchant
    • AmountWithTip-old
    • CommandCut-old
    • contact_details
    • metadata
    • sub_merchant
    • CommandCut
    • FailureReason
    • headers
    • Amount-old
    • metadata
    • LinkFailure-old
    • CommandImage-old
    • CommandImage
    • EventTerminal
    • ContactDetails-old
    • TransactionSearchRequest-old
    • CommandQR-old
    • orderDetails
    • Subscription
    • CommandQR
    • SubscriptionUpdate
    • EventOperation
    • payment_submethod
    • citMit
    • SubscriptionAdjustmentRequest
    • CommandBarcode-old
    • Shipping Address
    • CommandBarcode
    • EventAmount
    • messageFields
    • PrinterError-old
    • Billing Address
    • PrintJobAccepted
    • EventExtraTaxes
    • webhooksChargeback
    • Language
    • PrintJobStatus-old
    • PrinterError
    • EventMetadata
    • webhooks
    • networkToken-old
    • PrintWebhookPayload-old
    • threeDomainSecure
    • AmountWithTaxes
    • PrintJobStatus
    • PrintJobStatusRequest
    • webhooks
    • AmountCore
    • product-old
    • headers
    • PrintWebhookPayload
    • ExtraTaxes
    • Metadata
    • webhooksChargeback
    • UnexpectedErrorResponse-old
    • citMit
    • AmountWithTip
    • TransactionSearchOnlineBody
    • TransactionSearchBody
    • Card-old-old
    • binInfo
    • AmountWithOptionalTip
    • TransactionSearchLocalBody
    • messageFields
    • TransactionEvent_2
    • Promotions-old
    • UnexpectedErrorResponse
    • FailureReason_2
    • transactionType
    • EventTerminal_2
    • EventOperation_2
    • InvalidBinResponse-old
    • EventAmount_2
    • EventExtraTaxes_2
    • EventMetadata_2
    • currency
    • Amount-CL-old
    • SettlementTicketRequest
    • metadata
    • network
    • 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
    • TransactionSearchOnlineResponse
    • TransactionSearchLocalResponse
    • TransactionSearchOnlineResponse
    • TransactionSearchLocalResponse
    • TransactionSearchOnlineResponse
    • TransactionSearchLocalResponse
    • TransactionSearchOnlineResponse
    • TransactionSearchLocalResponse
HomePerú 🇵🇪
México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴Chile 🇨🇱
HomePerú 🇵🇪
México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴Chile 🇨🇱
Status
Soporte / Support
English
  • English
  • Español
  1. Online Payments

Cash In

Cash In lets your customers pay in cash at a physical payment network location (e.g., Payvalida). Kushki generates a PIN code that the customer presents at the collection point. Once paid, you receive a webhook notification and can confirm the status via the Transaction Status endpoint.
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.

How it works#

1
Request a Cash In token
Call POST /cash/v1/tokens with the customer's personal details and the total amount. Kushki returns a single-use token that expires in 30 minutes.
{
  "name": "Carlos",
  "lastName": "Ramirez",
  "identification": "12345678",
  "documentType": "DNI",
  "email": "user@example.com",
  "totalAmount": 500,
  "currency": "PEN",
  "description": "Order #1234"
}
Response:
{
  "token": "b209ff69ae02be9bc0e58dee225fd8f5"
}
2
Initialize the transaction
Call POST /cash/v1/charges/init with the token and the amount breakdown. Kushki returns a PIN that the customer uses to pay at the collection point, plus a receipt URL.
{
  "token": "b209ff69ae02be9bc0e58dee225fd8f5",
  "amount": {
    "currency": "PEN",
    "subtotalIva": 0,
    "subtotalIva0": 500,
    "iva": 0,
    "ice": 0
  },
  "expirationDate": "2026-06-10 00:00:00",
  "fullResponse": "v2"
}
Response:
{
  "pin": "7929926379",
  "ticketNumber": "193222411482",
  "transactionReference": "fa3cb92f-f53f-46e8-a9f9-0c40e9ae2df2",
  "pdfUrl": "https://api.kushkipagos.com/cash/v1/charges/193222411482/receipt"
}
Share the pin and pdfUrl (receipt) with your customer. The PIN is valid until expirationDate (default 7 days; maximum 15 days in Peru).
3
Customer pays at the collection point
The customer visits a participating payment network location and pays using the PIN. No action needed on your end — Kushki notifies you via webhook when payment is confirmed.
4
Verify the transaction status
Call GET /cash/v1/status/{ticketNumber} to confirm the final status of the transaction.
{
  "ticketNumber": "2347529752172881",
  "status": "approvedTransaction",
  "totalAmount": 500,
  "currency": "PEN",
  "merchantName": "Mi Comercio Perú",
  "name": "Carlos",
  "lastName": "Ramirez",
  "documentType": "DNI",
  "identification": "12345678",
  "pin": "7929926379"
}

Token request fields#

FieldRequiredDescription
nameYesCustomer's first name.
lastNameYesCustomer's last name.
identificationYesCustomer's document number.
documentTypeYesDNI, CE, PAS, or RUC.
totalAmountYesTotal amount to collect.
currencyYesPEN or USD.
emailNoCustomer's email address.
descriptionNoPayment description.

Init transaction fields#

FieldRequiredDescription
tokenYesOne-time token from the token endpoint.
amountYesAmount object — see Amount breakdown.
expirationDateNoPIN expiry date in YYYY-MM-DD HH:mm:ss (UTC). Must be at least one day after creation. Default: 7 days; max 15 days in Peru.
webhooksNoArray of URLs to notify when the customer pays.
fullResponseNoPass "v2" for full transaction details in the response.
metadataNoCustom key-value pairs for your own tracking.

Amount breakdown#

{
  "currency": "PEN",
  "subtotalIva": 0,
  "subtotalIva0": 500,
  "iva": 0,
  "ice": 0
}
FieldRequiredDescription
currencyYesPEN or USD.
subtotalIvaYesSubtotal subject to VAT. Set to 0 if no taxes apply.
subtotalIva0YesSubtotal not subject to VAT (tax-exempt amount).
ivaYesVAT amount. Set to 0 if no taxes apply.
iceYesICE (Impuesto a Consumos Especiales). Set to 0 if not applicable.

Document types#

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

Webhooks#

Include a webhooks array in your init request to receive a notification when the customer completes payment:
{
  "webhooks": ["https://yoursite.com/kushki/notify"]
}

Sandbox testing#

Use the following identification values to simulate different transaction outcomes:
identificationSimulated outcome
Any valid valueSuccessful transaction
9999999999Initialized (pending payment)
1000000000Declined transaction

Authentication#


Using the API#

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

Available Endpoints#

Request Cash In Token
Generate a one-time token with the customer's details and total amount. Token expires in 30 minutes.
Initialize Transaction
Start the cash transaction. Returns the PIN for the customer to pay at the collection point and a receipt PDF URL.
Get Transaction Status
Check the current status of a cash transaction by ticket number.

Got a suggestion on this documentation? Contact us.
Modified at 2026-08-27 18:33:41
Previous
Balance for Payouts
Next
Request a cash in token
Built with