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

Transfer In

Transfer In collects payments directly from a customer's bank account, with no card. In Peru it runs on processors, the traditional bank-portal flow and Yape, through the same endpoints under /transfer/v1. Every integration starts by asking which processors the merchant has.

Endpoints#

EndpointMethod and pathCredentialPurposeUsed by
Get Transfer In configurationGET /transfer/v1/configPublicStart here. Lists the processors enabled for the merchant and, when applicable, the supportedFlows of each oneAll
Get Bank ListGET /transfer/v1/bankListPublicSupported banks (code, name)Traditional
Request a Transfer In TokenPOST /transfer/v1/tokensPublicCreates a single-use tokenAll
Init TransactionPOST /transfer/v1/initPrivateStarts the transaction with the tokenAll
Get StatusGET /transfer/v1/status/{token}PrivateFinal status of the transactionAll

Integration flow#

1
Get the processors
Call Get Transfer In configuration with the Public-Merchant-Id credential. processors[] lists the processors enabled for the merchant. This is the starting point of every direct API integration.
2
Choose the processor
An entry without supportedFlows is the traditional processor. An entry with supportedFlows is a processor with payment flows (Yape), and you also choose the flow. If the merchant has several, use the supportedFlows of each entry to decide how to build each token.
3
Request the token
The body depends on the processor; see Processors at a glance below. Tokens are single-use.
4
Init the transaction
Send the token and repeat the same amount. The response depends on the processor: redirectUrl (traditional), or ticketNumber and consentId (Yape), plus deepLink with DEEPLINK.
5
Confirm the final status
Through the webhook or with Get Status.
Kajita and Kushki.js
These tools do not support the processor object: with them there is no processor query and tokenization follows the traditional process. Yape requires a direct API integration, where the token is requested from your backend.

Processors at a glance#

Processors with payment flows, like Yape, are also referred to as APM (alternative payment methods).
TraditionalYape
Identified byconfig entry without supportedFlowsconfig entry with supportedFlows
Token requestamount, currency and callbackUrl required; bankId, userType, documentType, documentNumber, email and paymentDescription optional. No processor object.amount, currency and processor: { name, flowType }, copied verbatim from config; plus phoneNumber in PUSH.
Bank listOptional: without bankId, the customer picks the bank at the bank portalNot used
init responseredirectUrldeepLink (DEEPLINK) or the push confirmation (PUSH), both with ticketNumber and consentId
Customer experienceCompletes the payment at their bank's online portalApproves the payment in the Yape app: direct redirection from mobile (DEEPLINK), or push notification from web or desktop (PUSH)
CurrencyPEN or USDPEN
Integration typesDirect API, Kajita, Kushki.jsDirect API only
AvailabilityGeneralBeta, on merchants with the processor enabled
The token is bound to the processor it was generated with, and Init Transaction validates it:
Generated tokenMerchant's processorResult
Without processorTraditionalContinues; the response includes redirectUrl.
With Yape processorYapeContinues; the response includes ticketNumber and consentId (and deepLink with DEEPLINK).
With processorAnother processor422 E046
Without processorYape422 E046

Processor details#

Traditional
Yape (Beta)
Token request fields
FieldRequiredDescription
bankIdNoCode of the destination bank. If omitted, the customer selects the bank at the bank portal.
amountYesPayment amount breakdown (subtotalIva, subtotalIva0, iva).
currencyYesPEN or USD.
callbackUrlYesURL where the customer returns after the payment, completed or abandoned.
documentTypeNoCustomer's document type.
documentNumberNoCustomer's document number. Required if documentType is provided.
emailNoCustomer's email address.
userTypeNo0 = natural person, 1 = company.
paymentDescriptionNoFree-text description shown to the customer at the bank portal.
{
  "bankId": "1022",
  "amount": { "subtotalIva": 0, "subtotalIva0": 150.00, "iva": 0 },
  "currency": "PEN",
  "callbackUrl": "https://yoursite.com/payment/return",
  "userType": "0",
  "documentType": "DNI",
  "documentNumber": "12345678",
  "email": "user@example.com",
  "paymentDescription": "Order #1234"
}
The init response returns the redirectUrl to send the customer to:
{
  "redirectUrl": "https://api.kushkipagos.com/transfer/v1/agent?token=...",
  "transactionReference": "28e6ac31-0af1-479a-9a6f-1a596bba6aea"
}

Currencies#

CurrencyCode
Peruvian SolPEN
US DollarUSD

Document types#

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

User types#

ValueDescription
0Natural person
1Company

Init request fields#

FieldRequiredDescription
tokenYesToken returned by the token endpoint.
amountYesAmount breakdown including currency. Must match the amount used to tokenize.
expirationDateNoExpiration date and time of the transaction. Peru only.
webhooksNoArray of URLs to notify when the transaction status changes.
fullResponseNo"v2" returns the complete transaction details.
metadataNoCustom key-value pairs for your own tracking.
{
  "token": "V0OzRB100000xhxQB8035251pHLBQsq5",
  "amount": { "subtotalIva": 0, "subtotalIva0": 150.00, "iva": 0, "currency": "PEN" },
  "fullResponse": "v2"
}

Statuses#

Confirm the final result with Get Status (GET /transfer/v1/status/{token}). The webhook and the statuses are the same for every processor.
StatusMeaning
approvedTransactionPayment completed successfully.
declinedTransactionPayment rejected by the bank or by the processor.
initializedTransactionPayment still pending.
expiredTransactionToken or session expired without payment.

Webhooks#

Include a webhooks array in the init request to receive status notifications in real time:
{
  "webhooks": ["https://yoursite.com/kushki/notify"]
}

Errors#

ProcessorEndpointHTTPCodeWhen it happensWhat to do
AllGET /transfer/v1/config500E002Error querying the merchant configuration («Ha ocurrido un error inesperado.»).Retry; contact support if it persists.
YapePOST /transfer/v1/tokens400—The body does not meet the contract: missing required field (including phoneNumber with PUSH), value outside the enum (processor.name, processor.flowType), or extra property inside processor.Fix the body according to config.
AllPOST /transfer/v1/init422E046The token is not compatible with the resolved processor.Regenerate the token for the right processor.
AllAny401—Missing or invalid credential.Check Public-Merchant-Id or Private-Merchant-Id, depending on the endpoint.
Yape-specific rejection codes are not documented yet.

Authentication and environments#

Credentials are sent in a header; each endpoint uses one of them (see the Credential column above):
HeaderCredentialUse
Public-Merchant-IdPublicConfiguration, bank list and tokenization. Safe for backends and, in the traditional flow, for client tools.
Private-Merchant-IdPrivateInit, status and cancellation. Never expose it in frontend code.
🟢 Production
🧪 Sandbox (UAT)
https://api.kushkipagos.com/
Modified at 2026-10-16 20:36:53
Previous
Delete Subscription
Next
Get Transfer In configuration
Built with