1. Online Payments
English
  • English
  • Español
  • Developer Docs Ecuador 🇪🇨
  • Online Payments
    • Release Notes
    • Kushki API errors
    • Card Payments
      • Request a card token
      • Make a charge or deferred charge
      • Refund a transaction
      • Void a transaction
      • Request deferred options
      • Validate OTP
      • Bin Info V2
      • Bin Info
    • One Click and 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
      • Get recurring charge Info
    • Chargebacks
      • Query chargebacks
      • Request chargeback export
    • Subscription Transactions
      • Get subscription transactions
    • Transfer in
      • Request a Transfer In token
      • Init Transaction
      • Get Status
    • Cash in
      • Request a cash in token
      • Init Transaction
      • Update a cash in transaction
      • Transaction Status
      • Delete a cash in transaction
    • Smartlinks
      • Create a Smartlink
      • Update a Smartlink
      • Get a Smartlink
      • Delete a smartlink
    • Analytics
      • Get transactions list v2
    • Status
      • Get gateway status
      • Get platform status
    • Commissions
      • Get Commission Configuration
    • Payment Credentials
      • Create a credential
      • Search credentials
      • Activate or deactivate
      • Delete credential
      • Update credential
      • Regenerate a credential
      • Advanced search
    • Payment Button
      • Create a payment button
    • Settlement
      • Query settlement
  • Appian - Submerchant Register
    • Release Notes
    • Submerchant Validation in Batch
    • Query submerchant status by requestId/submerchantId
    • Get submerchantIds
    • Get credentials for submerchants
  • Schemas
    • threeDomainSecure
    • webhooks
    • Card-old
    • Channel
    • Amount-cash-in
    • ChargebackListResponse
    • StatusComponent
    • SettlementDateRangeRequest
    • SubscriptionTransactionsResponse
    • Card
    • Card Present (CP)
    • currency
    • networkToken
    • ChargebackItem
    • ErrorResponse
    • SettlementRecord
    • SubscriptionTransaction
    • Card Not Present (CNP)
    • Amount
    • ErrorResponse400
    • SettlementResponse
    • Deferred
    • extraTaxes
    • Country
    • ErrorResponse401
    • Language
    • ErrorResponse403
    • Subscription
    • Metadata
    • payment_method
    • ErrorResponse500
    • ContactDetails
    • orderDetails
    • Shipping Address
    • Billing-Address
    • payment_submethod
    • SubscriptionUpdate
    • SubscriptionAdjustmentRequest
    • documentType
    • threeDomainSecure
    • webhooks
    • headers
    • webhooksChargeback
    • citMit
    • network
    • binInfo
    • messageFields
    • product
    • UnexpectedErrorResponse
    • ExternalReferenceId
    • transactionType
    • SettlementTicketRequest
HomePerú 🇵🇪México 🇲🇽Ecuador 🇪🇨
Colombia 🇨🇴Chile 🇨🇱
HomePerú 🇵🇪México 🇲🇽Ecuador 🇪🇨
Colombia 🇨🇴Chile 🇨🇱
Status
Soporte / Support
English
  • English
  • Español
  1. Online Payments

Transfer in

If your users do not have a credit card or prefer to use the available balance in their bank accounts to make an online purchase, wire transfer is the ideal payment option.
Transfer In allows your customers to pay directly from their bank account — no card required. In Ecuador 🇪🇨 you can offer it through two processors:
ProcessorCustomer experience
Traditional bank transferSecure bank redirect flow. The customer authorizes the transfer in their bank's web portal.
DeUna!Wallet flow. The customer pays from the DeUna! app using a dynamic QR, a deep link, or a reference code.
Keep in mind!
Due to our risk policies, the available payment methods and the integration type may vary once you complete the affiliation. We will tell you how to proceed if this process applies to your merchant.
Processor activation
DeUna! must be enabled as a processor for your merchant from the Kushki Console. This is done by the Kushki team — there is no self-service option and no request parameter to select the processor. Once enabled, the same /transfer/v1/init endpoint starts returning the DeUna! fields.

Payment Flow#

A Transfer In payment in Ecuador consists of 4 sequential steps: tokenization, initialization, customer payment, and status confirmation. The first, second and fourth steps are identical for both processors — only the way the customer completes the payment changes.
Request a Transfer In Token
Your backend calls the token endpoint using your Public Merchant ID. You must include the transaction amount, the customer's document data, and a callbackUrl — the URL where the customer will land after completing the payment.
Token rules: Tokens expire in 30 minutes and are single-use. If the transaction fails or the token expires, you must request a new one.
Required fields for Ecuador:
FieldDescription
amountObject with subtotalIva, subtotalIva0, and iva
callbackUrlRedirect URL after payment confirmation
userType0 = Natural Person · 1 = Company
documentTypeCI, RUC, or PAS (see below)
documentNumberMinimum 6 characters
emailCustomer's email
currencyAlways USD for Ecuador
Document types accepted in Ecuador:
ValueDocument
CICédula de Identidad 🇪🇨
RUCRegistro Único de Contribuyentes 🇪🇨
PASPasaporte 🇪🇨
Note: bankId is not required in Ecuador. You do not need to call the Bank List endpoint for this country.
Init Transaction
Using your Private Merchant ID, call the Init Transaction endpoint with the token obtained in the previous step. Kushki validates the token and returns the data you need to complete the payment.
The response depends on the processor enabled for your merchant:
Traditional bank transfer
DeUna!
FieldDescription
redirectUrlSingle-use URL to redirect the customer to their bank
ticketNumberKushki transaction identifier
transactionReferenceUnique reference for this transaction
details.statusInitial status — always initializedTransaction at this point
The redirectUrl is single use — redirect your customer to this URL immediately after receiving it.
Customer Completes the Payment
Traditional bank transfer
DeUna!
The customer is redirected to their bank's portal and authorizes (or declines) the transfer. This step happens entirely on the bank side — no action is required from your backend.
Once the customer finishes, the bank redirects them back to your callbackUrl.
Get Transaction Status
After the customer lands on your callbackUrl, call the Get Status endpoint using the original token as a path parameter to confirm the final transaction result.
Possible statuses in Ecuador:
StatusMeaning
initializedTransactionTransaction was created but not yet completed
approvedTransactionTransfer authorized — funds are on their way
declinedTransactionTransfer was rejected
Do not rely on the customer returning to your callbackUrl as proof of payment. Always confirm with Get Status or a webhook.

Integrating DeUna!#

Rendering the QR code#

The qr field contains a PNG image encoded in Base64, with the data:image/png;base64, prefix already included. Your site must read the value and render it as an image in your checkout — Kushki does not host the QR image for you.
Do not add the prefix twice
Because qr already carries the data:image/png;base64, prefix, concatenating it again produces an invalid data URI and the image fails silently — you get a blank space with no console error.

Expiration#

ItemLifetime
Transfer In token30 minutes
DeUna! QR, deep link and reference code3 minutes
The DeUna! payment artifacts expire much faster than the token. Generate them at the moment the customer is ready to pay, show a countdown, and call Init Transaction again with a new token if they expire.

Transaction limits#

LimitValue
Minimum amount per transactionUSD 1.00 — not configurable
Maximum per user, per dayUSD 5,000
Maximum per user, per monthUSD 36,000
CurrencyUSD only
DeUna! supports non-recurring card-not-present pay-ins only. It is not available for payouts or for recurring charges.

Availability by integration type#

CapabilityAPI · Kushki JSKajita · SmartLinks
Deep link redirect✅ Yes✅ Yes
Reference code✅ Yes✅ Yes
Dynamic QR✅ Yes❌ Not rendered
DeUna! logo in checkout✅ Your own design❌ Generic transfer text
Traditional transfer + DeUna! in parallel✅ Yes❌ One processor only
Recommendation
To use DeUna! to its full potential — all three experiences, your own branding, and more than one processor at the same time — integrate through the API or Kushki JS.

Merchant ID#

If your merchant also processes traditional bank transfers, DeUna! requires a separate MID. This is what identifies DeUna! transactions in your settlement report.

Amount Object#

The amount object is required in both the Token and Init Transaction steps. Use the following structure depending on whether the transaction has taxes:
With IVA taxes
Without taxes (IVA 0)
With extra taxes
{
  "amount": {
    "subtotalIva": 100.00,
    "subtotalIva0": 0,
    "iva": 12.00
  }
}
Set subtotalIva to the taxable base amount and iva to the tax value. Set subtotalIva0 to 0.

Webhook Notifications#

You can receive real-time transaction notifications by including the webhooks object in your Init Transaction request. This is independent of any webhooks configured in the Kushki Console — both channels will fire simultaneously.
{
  "webhooks": [
    {
      "events": ["approvedTransaction", "declinedTransaction"],
      "headers": [
        { "label": "Authorization", "value": "Bearer your-token" }
      ],
      "urls": [
        "https://merchant.example.com/webhooks/transfer-in"
      ]
    }
  ]
}
If you already have a Webhook configured in the Console, adding the webhooks object in the API request will trigger both channels. They are not mutually exclusive.

Authentication#

Each step uses a different credential:
StepHeaderKey type
Request a TokenPublic-Merchant-IdPublic Key (from Kushki Console → Credentials)
Init TransactionPrivate-Merchant-IdPrivate Key (from Kushki Console → Credentials)
Get StatusPrivate-Merchant-IdPrivate Key
Never expose your Private-Merchant-Id in client-side or frontend code. Token requests using the Public Key can be made from the frontend; all other calls must come from your backend.

Using the API#

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

Available Endpoints#

Request a Transfer In Token
Tokenizes the transaction data. Requires Public Merchant ID. Token is valid for 30 minutes and single-use.
Init Transaction
Initializes the transfer using the token. Returns the redirectUrl and, for DeUna!, the qr and referenceCode.
Get Status
Retrieves the final status of a transaction using the token as a path parameter.

Got a suggestion on this documentation? Contact us.
Modified at 2026-09-01 00:45:35
Previous
Get subscription transactions
Next
Request a Transfer In token
Built with