1. Online Payments
English
  • English
  • Español
  • API Docs Colombia 🇨🇴
  • Online Payments
    • Release Notes
    • Kushki API errors
    • ISO errors
    • Card Payments
      • Request a card token
      • Make a charge or deferred charge
      • Create payment (tokenless)
      • Void a transaction
      • Refund a transaction
      • Request deferred options
      • Authorize payments
      • Preauthorization (tokenless)
      • Reauthorize payments
      • Capture an authorized payment
      • Verify Account
      • Validate OTP
      • Bin Info
      • BIN info V2
    • One-Click & Scheduled Payments
      • Request a recurring charge token
      • Create a recurring charge
      • Make an One-click payment
      • Update recurring charge card data
      • Cancel a recurring charge
      • Update a recurring charge
      • Add a temporary charge or discount
      • Authorize payments
      • Capture an authorized payment
      • Get recurring charge Info
    • Chargebacks
      • Query Chargebacks
      • Request Chargeback Export
    • Transfer in
      • Get Transfer In configuration
      • Get Bank List
      • Request a Transfer In token
      • Init Transaction
      • Get Status
      • Cancel Transaction
    • 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
      • Delete a cash in transaction
      • Update a cash in transaction
    • Cash-out
      • Request a cash out token
      • Init Transaction
      • Transaction Status
      • Update a cash out transaction
      • Delete a cash out transaction
    • Smartlinks-v2
      • Create a Smartlink
      • Get a Smartlink
      • Update a Smartlink
      • Delete a smartlink
    • Analytics
      • Get transactions list v2
    • Gateway-status
      • Get gateway status
      • Get platform status
    • Payment Credentials
      • Create a credential
      • Search credentials
      • Advanced search
      • Delete credential
      • Regenerate a credential
      • Activate or deactivate
      • Update credential
    • Payment Button
      • Create a payment button
    • Settlement
      • Query settlement
    • Subscription Transactions
      • Get subscription transactions
    • Fraud Report
      • Query fraud alerts
  • Kushki One
    • Release notes
    • Transaction Examples
    • Webhooks
    • Error Catalog
    • Cloud 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)
        • Search
          • Transaction Search
      • Print
        • Create Print Job
        • Get Print Job Status
      • Diagnostics
        • Terminal info
        • Connection test
    • 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
        • Terminal info
        • Connection test
  • API Raw Card Present Payments
    • Release Notes
    • Error Catalog
    • The Amount Object
    • Key Exchange Process
    • Test data
    • One-time Payments
      • Single payment
    • Two-step Payments
      • Authorization and capture
    • Card Information
      • Get BIN Info
      • BIN info V2
      • Request deferred options
    • Voids & Refunds
      • Void & Reverse
      • Refund a transaction
    • Query Transactions
      • Transaction Search
    • Webhooks
      • Introduction
      • Good Practices
      • Webhooks-Card Payments
      • Webhooks-Refunds
      • Check your webhooks
    • Chargebacks
      • Query Chargebacks
      • Request Chargeback Export
    • Fraud Report
      • Query fraud alerts
  • Appian - Submerchant Register
    • Release Notes
    • Submerchant Validation in Batch
    • Query submerchant status by requestId/submerchantId
    • Get submerchantIds
    • Get credentials for submerchants
  • Schemas
    • RequestBodies
      • one-and-two-step-payment
    • SubscriptionTransactionsResponse
    • Card
    • Channel
    • Amount-cash-in
    • ChargebackListResponse
    • SettlementDateRangeRequest
    • PrintJobRequest
    • card
    • amount
    • one-and-two-step-payment-3
    • Card Present (CP)
    • one-and-two-step-payment-3
    • FraudAlertRequest
    • TransactionResponse
    • SubscriptionTransaction
    • networkToken
    • ChargebackItem
    • SettlementRecord
    • CommandText
    • Card Not Present (CNP)
    • FraudAlertResponse
    • RawResponse
    • ErrorResponse
    • currency
    • Deferred
    • webhooksItem
    • ErrorResponse400
    • SettlementResponse
    • CommandColumns
    • extra_taxes
    • FraudAlertRecord
    • CardData
    • Amount
    • ErrorResponse401
    • ColumnItem
    • pos_details
    • ValidationError
    • LinkFailure
    • extraTaxes
    • ErrorResponse403
    • CommandDivider
    • card_details
    • enc_tlv
    • TransactionEvent
    • Country
    • payment_method
    • ErrorResponse500
    • CommandFeed
    • deferred
    • TransactionStatus
    • CommandSpace
    • contact_details
    • ReadingType
    • ContactDetails
    • CommandCut
    • sub_merchant
    • FailureReason
    • documentType
    • Subscription
    • CommandImage
    • metadata
    • EventTerminal
    • orderDetails
    • Language
    • TransactionSearchRequest
    • CommandQR
    • EventOperation
    • Shipping Address
    • payment_submethod
    • CommandBarcode
    • EventAmount
    • Billing-Address
    • PrintJobAccepted
    • EventExtraTaxes
    • SubscriptionUpdate
    • PrinterError
    • EventMetadata
    • threeDomainSecure
    • SubscriptionAdjustmentRequest
    • AmountWithTaxes
    • PrintJobStatus
    • PrintJobStatusRequest
    • product
    • webhooks
    • AmountCore
    • headers
    • ExtraTaxes
    • PrintWebhookPayload
    • Metadata
    • webhooksChargeback
    • citMit
    • AmountWithTip
    • TransactionSearchOnlineBody
    • TransactionSearchBody
    • binInfo
    • AmountWithOptionalTip
    • TransactionSearchLocalBody
    • messageFields
    • TransactionEvent_2
    • UnexpectedErrorResponse
    • FailureReason_2
    • transactionType
    • ExternalReferenceId
    • EventTerminal_2
    • ExternalSubscriptionId
    • EventOperation_2
    • EventAmount_2
    • EventExtraTaxes_2
    • EventMetadata_2
    • SettlementTicketRequest
    • network
    • ErrorResponse
    • TransactionEvent_23
    • TransactionStatus4
    • ReadingType5
    • FailureReason_26
    • EventTerminal_27
    • EventOperation_28
    • EventAmount_29
    • EventMetadata_210
    • EventExtraTaxes_211
    • PrintWebhookPayload12
    • TransactionEvent13
    • FailureReason14
    • EventTerminal15
    • EventOperation16
    • EventAmount17
    • EventMetadata18
    • EventExtraTaxes19
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 Colombia it runs on processors, PSE (bank redirect) and Bre-B (real-time QR), through the same endpoints under /transfer/v1. Every integration starts by asking which processors the merchant has.
Availability
The available processors and the integration type depend on the merchant's affiliation and risk policies.

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)PSE
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
Cancel TransactionPATCH /transfer/v1/cancel/{token}PrivateCancels a transaction while it has no final statusBre-B

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 PSE. An entry with supportedFlows is a processor with payment flows (Bre-B). 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 (PSE) or qr (Bre-B).
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 PSE process. Bre-B requires a direct API integration, where the token is requested from your backend.

Processors at a glance#

Processors with payment flows, like Bre-B, are also referred to as APM (alternative payment methods).
PSEBre-B
Identified byconfig entry without supportedFlowsconfig entry with supportedFlows
Token requestbankId, callbackUrl, userType, documentType, documentNumber, email, plus amount and currency. No processor object.amount, currency and processor: { name, flowType }, copied verbatim from config. The rest are optional; bankId does not apply.
Bank listRequiredNot used
init responseredirectUrlqr
Customer experienceRedirected to PSE and then to their bankScans a QR in their banking app
ValidityToken: 30 minutes, single-useQR: 10 minutes
CancellationNot availableAvailable while there is no final status
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 processorPSEContinues; the response includes redirectUrl.
With Bre-B processorBre-BContinues; the response includes qr.
With processorAnother processor422 E046
Without processorBre-B422 E046
With Bre-B processorBre-B without keys configured404 E049

Processor details#

PSE
Bre-B (Beta)
Token request fields
FieldRequiredDescription
bankIdYesBank code selected from the Bank List.
amountYesObject with subtotalIva, subtotalIva0 and iva. See Amount object below.
currencyYesAlways COP.
callbackUrlYesURL where the customer lands after paying at the bank.
userTypeYes0 = natural person · 1 = company.
documentTypeYesCC, NIT, CE, TI or PP.
documentNumberYesCustomer's document number.
emailYesCustomer's email.
Tokens expire in 30 minutes and are single-use. If the transaction fails or the token expires, request a new one.
documentTypeDocument
CCCédula de Ciudadanía
NITNúmero de Identificación Tributaria
CECédula de Extranjería
TITarjeta de Identidad
PPPassport
Init response fields
The redirectUrl is single-use: redirect the customer right after receiving it.
FieldDescription
redirectUrlSingle-use URL to redirect the customer to PSE.
trazabilityCodeAlso called CUS: unique PSE payment reference code.
bankIdCode of the bank selected for the transaction.
bankNameName of the bank selected for the transaction.
transactionReferenceUnique reference of the transaction.
The status response also includes the trazabilityCode (CUS), which you can use to reconcile the transaction with PSE records.

Statuses#

Confirm the final result with Get Status, using the original token as a path parameter. The webhook and the statuses are the same for every processor.
StatusMeaning
initializedTransactionThe transaction was created but not completed.
approvedTransactionThe transfer was authorized.
declinedTransactionThe transfer was rejected.

Amount Object#

The amount object is required in the Token request. Use the following structure depending on whether the transaction has taxes:
With IVA taxes
Without taxes (IVA 0)
With extra taxes
{
  "amount": {
    "subtotalIva": 100000,
    "subtotalIva0": 0,
    "iva": 10000
  }
}
Set subtotalIva to the taxable base amount and iva to the tax value. Set subtotalIva0 to 0. All amounts in COP.

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"
      ]
    }
  ]
}

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.
Bre-BPOST /transfer/v1/tokens400—The body does not meet the contract: missing required field, 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.
Bre-BPOST /transfer/v1/init404E049The merchant has no Bre-B processor configured (missing keys).Verify the processor configuration with Kushki.
Bre-BPATCH /transfer/v1/cancel/{token}400T023The transaction already reached a final status.No action: it cannot be cancelled.
AllAny401—Missing or invalid credential.Check Public-Merchant-Id or Private-Merchant-Id, depending on the endpoint.

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
Request Chargeback Export
Next
Get Transfer In configuration
Built with