PSE

Learn how to process PSE online bank transfers in Colombia with Bamboo. Accept payments directly from bank accounts using redirection or bank list integration.

PSE is an online bank transfer system in Colombia that allows customers to pay directly from their bank accounts securely. Bamboo supports two payment flows depending on the merchant integration model.


Payment Flow


  1. (Optional – Merchant-managed flow) If the merchant sends the bank code and customer type, Bamboo skips the PSE selection screen and redirects directly to the PSE flow.
  2. The payer accesses the PSE page to confirm their email and identify as a Natural or Legal person.
  3. PSE redirects the payer to their selected bank’s website to log in and authorize the payment.
  4. The bank processes the transaction through the PSE network and displays a payment confirmation screen.
  5. Bamboo redirects the payer to the merchant’s result URL (APPROVED, REJECTED, or PENDING) and sends the final status asynchronously to the configured Webhook URL.
💡

When the merchant does not send the bank code, Bamboo handles the redirection to the PSE interface automatically. If the bank code is included, the customer is taken directly to their selected bank’s login page.


↩️

Redirect Flow for PSE

This payment method uses a Redirect flow. The API response includes an Action and the purchase remains in Pending status until the customer completes the payment in the Internet Banking.


Request parameters

The following parameters are required specifically for this payment method.
Refer to the Purchase operation guide for standard fields and authentication requirements.

Property

Type

Mandatory?

Description

PaymentMethod

string

Yes

Use PSE as the payment method code. Find the value in the table Payment Method

TargetCountryISO

string

Yes

Destination country, must be CO.

CustomerEmail

string

Yes

Customer’s email.

CustomerFirstName

string

Yes

Customer’s first name.

CustomerLastName

string

Yes

Customer’s last name.

CustomerDocumentType

string

Yes

Customer’s document type. See Document types.

CustomerDocumentNumber

string

Yes

Customer’s document number.

CustomerPhoneNumber

string

Yes

Customer’s phone number.

CustomerAddressCountry

string

No

Country ISO code (CO).

CustomerAddressState

string

No

Department or state of residence.

CustomerAddressCity

string

No

City of residence.

CustomerAddressAddressDetail

string

Yes

Street address and number.

CustomerAddressPostalCode

string

No

Postal or ZIP code.

MetaDataInfinancialInstitutionCode

string

Conditional

Bank code from the Bank List Endpoint. If not sent, Bamboo handles bank selection.

MetaDataInpersonType

string

Conditional

Type of person performing the transaction: 1 = Natural Person, 2 = Legal Entity.

MetaDataInidentificationType

string

Conditional

Identification type for the transaction. RegistroCivilDeNacimiento, TarjetaDeIdentidad, CedulaDeCiudadania, TarjetaDeExtranjeria, CedulaDeExtranjeria, Pasaporte, DocumentoDeIdentificacionExtranjero, NIT.

RedirectionUrl_Approved

string

No

URL to redirect when the payment is Approved.

RedirectionUrl_Rejected

string

No

URL to redirect when the payment is Rejected.

RedirectionUrl_Canceled

string

No

URL to redirect when the payment is Canceled.

RedirectionUrl_Pending

string

No

URL to redirect when the payment is Pending.

RedirectionUrl_Notify

string

No

Webhook endpoint to receive asynchronous status updates.

ℹ️

If the financialInstitutionCode is not provided, Bamboo displays the bank list automatically during redirection. The default expiration time for PSE transactions is 21 minutes and cannot be modified.


Request example

To test this endpoint, use the API Reference or the Postman Collection

{
  "PaymentMethod": "PSE",
  "Order": "CO-PSE-001",
  "Amount": 250000,
  "Currency": "COP",
  "Description": "Online purchase via PSE",
  "TargetCountryISO": "CO",
  "Customer": {
    "FirstName": "María",
    "LastName": "López",
    "Email": "[email protected]",
    "DocumentType": "CC.CO",
    "DocumentNumber": "10203040",
    "PhoneNumber": "3001234567",
    "Address": {
      "AddressDetail": "Calle 123 #45-67",
      "City": "Bogotá D.C",
      "State": "Bogota D.C",
      "Country": "CO"
    }
  },
  "MetaDataIn": {
    "financialInstitutionCode": "1051",
    "personType": "1",
    "identificationType": "CedulaDeCiudadania"
  },
  "Redirection": {
    "Url_Approved": "https://merchant.com/checkout/success",
    "Url_Rejected": "https://merchant.com/checkout/failure",
    "Url_Pending": "https://merchant.com/checkout/pending"
  }
}

Response parameters

The API returns the purchase with status PENDING and an Action object that indicates a redirection is required. Depending on the integration flow:

  • If the bank code was included (financialInstitutionCode), the customer is redirected directly to the selected bank.
  • If no bank code was provided, Bamboo displays the PSE selection screen (step 1) where the customer can choose their bank.
PropertyTypeDescription
ActionURLstringURL where the payer is redirected to complete the payment. This can be either the selected bank’s login page or the PSE bank selection interface.
ActionReasonstringReturns REDIRECTION_NEEDED_EXTERNAL_SERVICE to indicate that user action is required on an external site.
StatusstringCurrent purchase status. For PSE payments, it is returned as PENDING until the bank confirms the transaction.
MetadataOutPaymentExpirationDatedateExpiration date and time of the transaction. The default validity is 21 minutes and cannot be changed.
TransactionIdstringUnique identifier of the transaction generated by Bamboo.
PaymentMethodBrandstringReturns PSE. Identifies the payment method used.
PaymentMethodTypestringIndicates the payment method type. For PSE, the value is BankTransfer.
ℹ️

The payer will be redirected to one of the URLs defined in the Redirection object based on the final transaction result (Approved, Rejected, Canceled, or Pending). Bamboo also sends an asynchronous notification to the Webhook URL configured in the request or merchant account.


Example response

{
    "TransactionId": "79632697147789184",
    "Result": "ACTION_REQUIRED",
    "Status": "PENDING",
    "ErrorCode": null,
    "ErrorDescription": null,
    "Created": "2024-08-07T17:51:54.620",
    "AuthorizationDate": null,
    "AuthorizationCode": null,
    "Amount": 100000,
    "Currency": "COP",
    "TaxableAmount": null,
    "Tip": null,
    "Url": "https://api.stage.bamboopayment.com/Purchase/79632697147789184",
    "MetadataOut":null,
    "Action": {
        "SessionId": "CA_cc155768-74d9-4efd-8e55-42411b4dd3cf",
        "URL": "https://redirect.stage.bamboopayment.com/CA_cc155768-74d9-4efd-8e55-42411b4dd3cf",
        "Reason": "REDIRECTION_NEEDED_EXTERNAL_SERVICE"
    },
     "PaymentMethod": {
        "Brand": "PseAvanza",
        "CardOwner": null,
        "Bin": null,
        "IssuerBank": null,
        "Type": "BankTransfer",
        "Expiration": null,
        "Last4": null
    }
}



Bank List Endpoint

Merchants can retrieve the list of available banks for PSE payments using this endpoint. The result includes each bank’s code and name, which must be used in the MetaDataInfinancialInstitutionCode field when the merchant handles bank selection manually.

EnvironmentURL
Staginghttps://pse.stage.bamboopayment.com/api/Bank/GetBanks
Productionhttps://pse.prod.bamboopayment.com/api/Bank/GetBanks

Response parameters

PropertyTypeDescription
bankCodestringBank identification code used in the MetaDataIn.financialInstitutionCode field.
bankNamestringOfficial name of the bank.
statusstringIndicates whether the bank is currently available (ACTIVE) or temporarily disabled (INACTIVE).

Example response

{
  "banks": [
    {
      "bankCode": "1051",
      "bankName": "Banco de Bogotá",
      "status": "ACTIVE"
    },
    {
      "bankCode": "1052",
      "bankName": "Bancolombia",
      "status": "ACTIVE"
    },
    {
      "bankCode": "1061",
      "bankName": "Davivienda",
      "status": "ACTIVE"
    }
  ]
}

ℹ️

Use the bankCode value to redirect the payer directly to their selected bank by including it in the MetaDataInfinancialInstitutionCode field of the purchase request.



Discover the API

Once you’re familiar with how to create a purchase, you can test your integration using our API Reference