⚠️ This step is required in Colombia. Unlike other countries, you must always call this endpoint and present the list to your customer so they can select their bank before proceeding.
code — you will pass it as bankId in the token request.bankId, and a callbackUrl — the URL where the customer will land after completing the payment on the bank side.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.
| Field | Description |
|---|---|
bankId | Bank code selected by the customer from the Bank List. Required in Colombia. |
amount | Object with subtotalIva, subtotalIva0, and iva |
callbackUrl | Redirect URL after bank confirmation |
userType | 0 = Natural Person · 1 = Company |
documentType | CC, NIT, CE, TI, or PP (see below) |
documentNumber | Customer's document number |
email | Customer's email |
currency | Always COP for Colombia |
| Value | Document |
|---|---|
CC | Cédula de Ciudadanía 🇨🇴 |
NIT | Número de Identificación Tributaria 🇨🇴 |
CE | Cédula de Extranjería 🇨🇴 |
TI | Tarjeta de Identidad 🇨🇴 |
PP | Passport 🇨🇴 |
token obtained in the previous step. Kushki validates the token and returns a redirectUrl.redirectUrl is single use — redirect your customer to this URL immediately after receiving it. The customer will be taken to PSE's interface to authorize the transfer with their bank.| Field | Description |
|---|---|
redirectUrl | Single-use URL to redirect the customer to PSE |
trazabilityCode | Also called CUS — unique PSE payment reference code assigned by PSE. |
bankId | Code of the bank selected for the transaction |
bankName | Name of the bank selected for the transaction |
transactionReference | Unique reference for this transaction |
callbackUrl.callbackUrl, call the Get Status endpoint using the original token as a path parameter to confirm the final transaction result.| Status | Meaning |
|---|---|
initializedTransaction | Transaction was created but not yet completed |
approvedTransaction | Transfer authorized — funds are on their way |
declinedTransaction | Transfer was rejected |
trazabilityCode (CUS) which you can use to reconcile the transaction with PSE records.amount object is required in the Token request. Use the following structure depending on whether the transaction has taxes:{
"amount": {
"subtotalIva": 100000,
"subtotalIva0": 0,
"iva": 10000
}
}subtotalIva to the taxable base amount and iva to the tax value. Set subtotalIva0 to 0. All amounts in COP.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"
]
}
]
}