Skip to main content

Colombia - PayIn (v2)

If you still call POST /api/v1/payin, that endpoint is deprecated. Use POST /api/v2/payin for all new integrations.
The PayIn v2 API (POST /api/v2/payin) creates deposit transactions and returns the experience that matches each payment_method. You choose the flow with the fields you send โ€” no separate B2B configuration is required.

Quick Reference


Payment experiences

Each method resolves to one of three execution modes:

Methods in Colombia


Request parameters

Required fields

Customer data

PSE-only fields (direct experience)

Send both fields inside customer_data to receive the PSE redirect URL in payment_information instead of the generic checkout link:

Optional fields

EFECTY minimum amount: 10,000 COP.

Response structure

Every successful PayIn returns the same envelope. The fields inside data depend on the execution mode (Checkout, Direct, or Hybrid).
All timestamps are in UTC. Both data.date (transaction creation) and payment_information.expiration_date (when present) use the format YYYY-MM-DD HH:MM:SS in UTC. Convert to the customerโ€™s local timezone in your UI if needed.

Envelope (always present)

data object โ€” common fields

Checkout (hosted only)

Use when you only need a link. Response includes ticket, date, payment_url, and transaction. payment_information is not included. Applies to: ALL_METHODS, CARD, PSE (without bank + person_type).

Direct (your UI)

Use when you render the payment step yourself. Response includes ticket, date, payment_information, and transaction. No payment_url. Applies to: PSE with customer_data.bank + customer_data.person_type.

Hybrid (hosted + instructions)

Use for cash, keys, QR, or transfer methods. Response includes both payment_url and payment_information. Show instructions immediately in your app and keep the hosted page as fallback. Applies to: EFECTY, BREB, BREB_QR.

Examples by payment method

Each example below shows the data block for that method. All timestamps are UTC.

PSE โ€” Checkout (hosted bank selection)

Mode: Checkout ยท You get: payment_url only (no payment_information). Omit bank and person_type. Redirect the customer to data.payment_url (path payments/main).

PSE โ€” Direct (your UI, PSE redirect URL)

Mode: Direct ยท You get: payment_information only (no payment_url). Include bank and person_type in customer_data. Use GET /api/v1/pse/banks for bank codes. Open payment_information.payment_url in the browser or WebView โ€” it is the PSE redirect URL, not the TumiPay hosted page.

EFECTY โ€” Hybrid

Mode: Hybrid ยท You get: payment_url + payment_information. Minimum amount 10,000 COP. Hosted page: efecty-confirmation. Show reference and convenio so the customer can pay at an Efecty location. expiration_date is in UTC (default 720 minutes unless expiration_time is sent).

BREB โ€” Hybrid

Mode: Hybrid ยท You get: payment_url + payment_information. Use payment_method: "BREB". Hosted page: breb-payment. Display key_value so the customer can send the transfer from their bank app. Default validity: 15 minutes (expiration_time overrides). expiration_date is in UTC.

BREB_QR โ€” Hybrid

Mode: Hybrid ยท You get: payment_url + payment_information. Use payment_method: "BREB_QR". Hosted page: breb-qr-payment. Render qr_code (base64 image) in your UI or redirect to payment_url. Default validity: 15 minutes. expiration_date is in UTC.

ALL_METHODS โ€” Checkout

Mode: Checkout ยท You get: payment_url only (no payment_information). Customer chooses the payment method on the TumiPay hosted page (payments/main).

CARD โ€” Checkout

Mode: Checkout ยท You get: payment_url only (no payment_information). Redirect the customer to the secure card form on the hosted page (payments/main). Final status arrives via webhook (ipn_url).