PSE (Colombia)
Localpayment facilitates PSE transactions, offering a seamless integration flow for merchants.
PSE (Pagos Seguros en Línea) is Colombia’s national online bank transfer platform that enables individuals and businesses to make payments directly from their bank accounts in real-time. Supported by ACH Colombia, PSE allows secure payments without the use of cards, offering a reliable, fast, and widely adopted solution across the country.
With Localpayment’s integration, merchants can initiate a payment via PSE, redirect customers to their bank’s portal to authorize the transfer, and automatically receive a webhook notification when the transaction is completed.
The email address provided in the request must be registered with PSE, either as an individual (persona natural) or as a business (persona jurídica). If the email is not registered, the payment process may fail or be rejected.
How It Works
The typical payment flow using PSE is as follows:
The merchant sends a
POST
request to the Create Payin endpoint with payment, merchant, and payer details.Localpayment returns a
redirectUrl
in the response.The merchant redirects the customer to this URL.
The customer is taken directly to their selected bank.
The customer authorizes the payment directly from their bank account.
Localpayment sends a webhook notification once the transaction is completed or cancelled.
Available Banks
PSE supports the following financial institutions:
Standard Flow
PSE (Pagos Seguros en Línea in spanish) is an electronic payment system in Colombia that allows users to conduct financial transactions securely and efficiently over the Internet. It was developed by ACH Colombia.
PSE functions as an intermediary between the user and the bank. When a user wishes to make a transaction, the PSE system redirects them to their bank's website, where they can authorize the transaction. Once authorized, PSE notifies the merchant, and the transaction is completed.
2 Step Flow
The objective of the "Two-Step PSE" process is to redirect the user to a screen to select their financial institution before proceeding to PSE.
To use this flow, the bank code LP-2S-FLOW LP must be used. Upon receiving this bank code, the user will be redirected to a front-end interface to select the financial institution through which the transaction will be conducted. Once the bank code is captured, the payin is confirmed, and the flow is redirected to PSE to complete the transaction.
PSE
POST
https://api.stage.localpayment.com/api/payin
Headers
Authorization*
String
Mandatory. JWT token in format Bearer eyJ0...
. For more information about authentication, please refer to Authentication.
Request Body
Bank*
Object
Mandatory. Party object.Payer account data.
Bank.Code*
String
Mandatory. Bank code, according to Localpayment bank code list. For 2 Step Flow always LP-2S-FLOW
Payer*
Object
Mandatory. Party Object. Information related to the payer.
Payer.name*
String
Mandatory. Individual frist name/ company name.
Payer.type*
String
Mandatory. Possible values: COMPANY or INDIVIDUAL
Payer.lastname*
String
Mandatory for individuals / Ignored for companies.
Document.Type*
String
Mandatory. Document types: NIT,CC,PASS,CE, IT
Document.Id*
String
Mandatory. Identity document Id, Usually numbers or combination of number qand letters
PaymentMethod*
Object
Mandatory. Payment method details
PaymentMethod.type*
String
Mandatory. BankTransfer
Payment.code*
String
Mandatory. Select among the codes available in each country for a payin BankTransfer payment type.
NOTE: payment method code might affect the collection currency in bimonetary countries. For more info, see the side note on currency
field.
Payment.Flow*
String
Mandatory. The payment Method data is collected through an additional form or plugin (REDIRECT). Currently, only REDIRECT flow is allowed.
externalId*
String
Mandatory. An ID that is meaningful to you and your system. It must be unique and alphanumeric, no characters allowed.
amount*
number
Mandatory. Amount to charge to your end user. For COP, use 2 decimal places separated by a dot.
currency*
String
Mandatory. The currency in which the amount is expressed. It could be A) the local currency of the selected country or B) the account's currency. If A), the amount will be charged to the customer's cash payment method. If B) and it differs from the local currency, the amount specified will be credited to your account and Localpayment will perform a Foreign Exchange operation to collect the amount expressed in local currency. In bimonetary countries, paymentMethod.code resolves possible ambiguity: the payment will be executed in the currency of that specific payment method network.
accountnumber*
String
Mandatory. Your Localpayment account number in which the amount will be credited.
comment
String
Optional. A comment related to the transaction. It should be something meaningful to your business.
conceptcode*
String
Mandatory. Choose the suitable concept code from our Concept Code List. Based on our experience, the most usual are 0039 (remittances) and 0040 (corporate payments).
Payer.email
String
Optional
phone*
Object
Mandatory.Party Object. Contact phone number
phone.countrycode*
String
Mandatory
phone.number*
String
Mandatory
address
Object
Optional. Party Object Contact address
address.street
String
Optional
address.number
String
Optional
address.city
String
Optional
adress.state
String
Optional
address.country
String
Optional
address.zipcode
String
Optional
address.comment
String
Optional
merchant*
Object
Mandatory. Party Object
merchant.name
String
Mandatory. Individual first name / company name
merchant.type*
String
Mandatory. Values: COMPANY or INDIVIDUAL
externalId*
String
Mandatory. An Id that is meaningful to you and your system. Must be unique
conceptcode*
String
Mandatory. Choose the suitable concept code from our Concept Code List. Based on our experience, the most usual are 0039 (remittances) and 0040 (corporate payments).
{
"paymentMethod": {
"type": "BankTransfer",
"code": "1936",
"flow": "REDIRECT"
},
"externalId": "2dfaf9e8-25e1-4bbb-aa24-ff36aa89601f",
"country": "COL",
"amount": 10000,
"currency": "COP",
"accountNumber": "170.170.00000011",
"conceptCode": "0003",
"comment": "Add any relevant information related to the transaction",
"merchant": {
"type": "INDIVIDUAL",
"name": "John",
"lastname": "Doe",
"document": {
"type": "NIT",
"id": "2037993831"
},
"email": "[email protected]"
},
"payer": {
"type": "INDIVIDUAL",
"name": "Alicia",
"lastname": "Doe",
"document": {
"type": "CC",
"id": "9012754183"
},
"phone": {
"areaCode": "57",
"countryCode": "57",
"number": "311234567"
},
"email": "[email protected]",
"address": {
"country": "COL",
"number": "",
"state": "BA",
"city": "BA",
"street": "Street 12",
"comment": ""
},
"bank": {
"name": "Bank name",
"code": "1007"
}
},
"bank": {
"name": "John Doe",
"code": "1022"
},
"account": {
"type": "C",
"number": "130123456"
},
"intermediaries": []
}
Redirecting the Customer
The customer should be redirected to the redirectUrl
provided in the response. If a valid bank.code
was included, the customer will land directly on their bank’s login screen.
At this stage, the transaction will remain in the INPROGRESS
status until the payment is completed, manually cancelled, or the transaction expires.


PSE Via Payment Links
PSE is also available through Localpayment’s Payment Links. When a customer selects PSE as the payment method, they will be prompted to enter their personal details and select their bank from the list of supported institutions. Once the bank is selected, the customer will be automatically redirected to their online banking portal to complete the payment.
This integration provides a seamless user experience, allowing merchants to offer PSE payments without requiring a direct API implementation.
For more information, see the Payment Links documentation.

Last updated
Was this helpful?