Skip to content

Bre-B transaction

Provision a reusable Bre-B Llave, then process online Bre-B payouts using pay by bank.

Overview

Bre-B deposits don't use a standard transaction initiation request. Instead, you provision a reusable Bre-B Llave once per shopper, display the brebKey from that response to the shopper as the destination they should pay to, and the shopper transfers funds from their own banking app. PXP creates the deposit when the processor notifies it, and sends you the breb-transaction-order-executed webhook as your first and authoritative notice of the deposit.

You can submit a Bre-B payout in these ways:

  • Payout (withdrawal), new Llave: Create a pay-by-bank transaction with apmProvider set to Breb and intent set to Payout, and supply bankAccountNumber with the provisioned Llave (including the @ prefix). Capture fundingData.payByBank.gatewayTokenId from the response to reuse the destination later.
  • Payout (withdrawal), stored Llave: Create a payout and supply gatewaytokenid from an earlier accepted payout instead of resending the Llave.

Bre-B supports COP only. Provision and payout requests use Colombian shopper identity details (country / countryCode CO in the examples below). Treat merchant webhooks as the authoritative final outcome. There's no hosted redirect step for Bre-B, and Bre-B doesn't support alias updates. Learn more about webhooks.

Provision a Bre-B Llave

POST
/v1/transaction-contexts

Use the following request to provision a reusable Bre-B Llave for a shopper. The call creates no transaction. Set apmProvider to Breb.

{
  "merchant": "MERCHANT-1",
  "site": "SITE-1",
  "apmProvider": "Breb",
  "shopperId": "Shopper_CO_01",
  "userName": "juan.perez",
  "email": "juan.perez@example.com",
  "firstName": "Juan",
  "lastName": "Perez",
  "country": "CO",
  "documentType": "IdentityDocument",
  "documentNumber": "1234567890"
}
ParameterDescription
merchant
string (≤ 20 characters)
required
Your unique merchant identifier, as assigned by PXP.
site
string (≤ 20 characters)
required
Your unique site identifier, as assigned by PXP.
apmProvider
string
required
The APM provider for this provision request. For Bre-B, this must be Breb.
shopperId
string
required
Your unique identifier for this shopper.
userName
string (3-50 characters)
required
The shopper's username for Bre-B provision.
email
string (email, 3-50 characters)
required
The shopper's email address.
firstName
string (3-50 characters)
required
The shopper's first name.
lastName
string (3-50 characters)
required
The shopper's last name.
country
string (2 characters)
required
The shopper's country, in ISO 3166-1 alpha-2 format. For Bre-B, use CO.
documentType
string
required
The shopper identity document type.

Possible values:
  • IdentityDocument
  • Passport
  • TaxIdNumber
  • ForeignResidentCard
  • CivilRegisterId.
documentNumber
string
required
The shopper identity document number. It must match Colombia format rules for the chosen documentType:
  • IdentityDocument and TaxIdNumber: 1-10 digits
  • ForeignResidentCard: 6-7 digits
  • Passport: 1-12 alphanumeric
  • CivilRegisterId: 10 digits

Response example

If your request is successful, you'll receive a 200 response with status set to Success. Show the brebKey to the shopper. isEligibleForWithdrawal is always returned: it's false immediately after provision and becomes true after a successful pay-in. On failure, status is Error and stateData carries the mapped fault detail. brebKey and provisionedAt are omitted when they don't apply.

{
  "transactionContextId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "brebKey": "@pxpshopper01",
  "provisionedAt": "2026-08-28T12:00:00Z",
  "isEligibleForWithdrawal": false,
  "status": "Success"
}

After you display the Llave, don't call any API when the shopper deposits. Wait for the breb-transaction-order-executed webhook, which creates and confirms the deposit. Deposit notifications may have a null merchantTransactionId because there was no merchant create call. Learn more about webhooks.

Initiate a Bre-B payout

POST
/v1/transactions

Request examples

Use the following request to start a Bre-B withdrawal when you supply the destination Llave for the first time. Capture fundingData.payByBank.gatewayTokenId from the response so you can reuse the same destination later.

{
  "merchant": "MERCHANT-1",
  "site": "SITE-1",
  "merchantTransactionId": "BREB-PAYOUT-001",
  "merchantTransactionDate": "2026-08-28T12:00:00Z",
  "transactionMethod": {
    "intent": "Payout",
    "entryType": "Ecom",
    "fundingType": "PayByBank"
  },
  "fundingData": {
    "payByBank": {
      "apmProvider": "Breb",
      "bankAccountNumber": "@pxpshopper01"
    }
  },
  "amounts": {
    "transaction": 100.00,
    "currencyCode": "COP"
  },
  "shopper": {
    "id": "Shopper_CO_01",
    "firstName": "Juan",
    "lastName": "Perez",
    "email": "juan.perez@example.com",
    "countryCode": "CO",
    "documentType": "IdentityDocument",
    "documentNumber": "1234567890"
  }
}
ParameterDescription
merchant
string (≤ 20 characters)
required
Your unique merchant identifier, as assigned by PXP.
site
string (≤ 20 characters)
required
Your unique site identifier, as assigned by PXP.
merchantTransactionId
string (≤ 50 characters)
required
A unique identifier for this transaction.
merchantTransactionDate
date-time
required
The date and time when the transaction happened, in ISO 8601 format.
transactionMethod
object
required
Details about the transaction method.
transactionMethod.entryType
string
required
The entry type. For e-commerce Bre-B transactions, this is always Ecom.
transactionMethod.fundingType
string
required
The funding type. For Bre-B, this is always PayByBank.
transactionMethod.intent
string
required
The payment intent. For a Bre-B withdrawal, set this to Payout. Purchase create isn't supported for Bre-B on this endpoint. Learn more about intents.
amounts
object
required
Details about the transaction amount.
amounts.transaction
number
The transaction amount. The numbers after the decimal will be zero padded if they are less than the expected currencyCode exponent. For example, GBP 1.1 = GBP 1.10, EUR 1 = EUR 1.00, or BHD 1.3 = 1.300. The transaction will be rejected if numbers after the decimal are greater than the expected currencyCode exponent (e.g., GBP 1.234), or if a decimal is supplied when the currencyCode exponent does not require it (e.g., JPY 1.0).
amounts.currencyCode
string (1-3 characters)
required
The currency code associated with the transaction, in ISO 4217 format. For Bre-B, this must be COP.
fundingData
object
required
Details about the payment method used for the transaction. For Bre-B, use the Pay by bank funding shape only.
fundingData.payByBank
object
required
Pay by bank funding details for Bre-B.
fundingData.payByBank.apmProvider
string
required
The APM provider. For Bre-B, this must be Breb.
fundingData.payByBank.bankAccountNumber
string (6-21 characters)
required
The destination Bre-B Llave, including the @ prefix. Required when gatewaytokenid isn't supplied. Typically the brebKey returned when you provision a Bre-B transaction context.
shopper
object
required
Details about the shopper receiving the payout. Include id, email, firstName, lastName, countryCode, documentType, and documentNumber.
shopper.countryCode
string (2 characters)
required
The shopper's country, in ISO 3166-1 alpha-2 format. For Bre-B, use CO.
shopper.documentType
string
required
The shopper identity document type.

Possible values:
  • IdentityDocument
  • Passport
  • TaxIdNumber
  • ForeignResidentCard
  • CivilRegisterId
shopper.documentNumber
string
required
The shopper identity document number. It must match Colombia format rules for the chosen documentType.

Response example

If your request is successful, you'll receive a 200 response. For a successful Bre-B payout initiation, expect a Pending state with no redirectUrl, plus fundingData.payByBank.paymentId and fundingData.payByBank.gatewayTokenId.

The final outcome is delivered by a Bre-B merchant webhook (e.g., breb-transaction-order-executed). See Webhooks below.

Always use the systemTransactionId for later PXP API calls against the same transaction. Provider payment identifiers are for reconciliation and support only.

{
  "state": "Pending",
  "systemTransactionId": "1ed768bb-e88a-4636-91ae-67927ccbb02b",
  "merchantTransactionId": "BREB-PAYOUT-001",
  "fundingData": {
    "payByBank": {
      "apmProvider": "Breb",
      "paymentId": "7c1d8e32-4a6b-4f9c-b2d3-1e2f3a4b5c6d",
      "gatewayTokenId": "b6e2f1a4-c3d8-4f7a-b1e9-d2c3f4a5b6c7"
    }
  }
}

Bre-B deposits support a full refund only. Refund against the pay-in systemTransactionId with operation set to Refund, fundingType set to PayByBank, and apmProvider set to Breb. See our standalone Refund guide for the request shape and response.

Webhooks

Treat Bre-B merchant webhooks as the authoritative final outcome for deposits, payouts, and refunds. Don't treat the transaction initiation response alone as settlement for a payout.

Use transactionMethod.intent to tell deposits (Purchase) and payouts (Payout) apart when they share the same event code. For deposits, breb-transaction-order-executed is your first notice of the transaction, so merchantTransactionId may be null. Correlate deposits by using systemTransactionId and the shopper's Bre-B context.

The following event codes apply to Bre-B:

Event code StateDescription
breb-transaction-order-executedAuthorisedA Bre-B deposit or payout has reached a successful terminal state. For deposits, this is the first notice of the transaction.
breb-transaction-order-declinedRefusedA Bre-B payout was declined.
breb-transaction-order-expiredExpiredA Bre-B payout expired.
breb-transaction-order-failedRefusedA Bre-B payout failed.
breb-transaction-order-refundedRefundedA Bre-B refund was confirmed.
breb-transaction-order-rejectedRejectedA Bre-B payout was rejected.
breb-transaction-order-cross-entryRefusedA Bre-B payout was refused because of a cross-entry outcome.

Examples

A successful Bre-B deposit (Purchase) or payout (Payout) uses breb-transaction-order-executed with state Authorised.

Deposit (first notice of the pay-in; merchantTransactionId may be null):

{ "eventDate": "2026-08-28T12:00:00.0000000Z", "eventCategory": "transaction", "eventOwner": { "merchantGroup": "merchant-group-1", "merchant": "MERCHANT-1", "site": "SITE-1" }, "eventData": { "eventCode": "breb-transaction-order-executed", "state": "Authorised", "stateData": { "code": "APM003", "message": "Payment authorised" }, "amounts": { "transaction": 100, "currencyCode": "COP" }, "merchant": "MERCHANT-1", "site": "SITE-1", "transactionMethod": { "intent": "Purchase", "entryType": "Ecom", "fundingType": "PayByBank" }, "fundingData": { "payByBank": {} }, "providerResponse": { "provider": "Breb", "providerTransactionStatus": "Authorised", "providerResponseCode": "EXECUTED", "providerResponseMessage": "Payment authorised" }, "merchantTransactionId": null, "systemTransactionId": "1ed768bb-e88a-4636-91ae-67927ccbb02b" } }

Payout:

{ "eventDate": "2026-08-28T12:05:00.0000000Z", "eventCategory": "transaction", "eventOwner": { "merchantGroup": "merchant-group-1", "merchant": "MERCHANT-1", "site": "SITE-1" }, "eventData": { "eventCode": "breb-transaction-order-executed", "state": "Authorised", "stateData": { "code": "APM003", "message": "Payment authorised" }, "amounts": { "transaction": 100, "currencyCode": "COP" }, "merchant": "MERCHANT-1", "site": "SITE-1", "transactionMethod": { "intent": "Payout", "entryType": "Ecom", "fundingType": "PayByBank" }, "fundingData": { "payByBank": {} }, "providerResponse": { "provider": "Breb", "providerTransactionStatus": "Authorised", "providerResponseCode": "EXECUTED", "providerResponseMessage": "Payment authorised" }, "merchantTransactionId": "BREB-PAYOUT-001", "systemTransactionId": "1ed768bb-e88a-4636-91ae-67927ccbb02b" } }

To learn how to set up and process webhooks, see Manage webhooks.