Provision a reusable Bre-B Llave, then process online Bre-B payouts using pay by bank.
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
apmProviderset toBrebandintentset toPayout, and supplybankAccountNumberwith the provisioned Llave (including the@prefix). CapturefundingData.payByBank.gatewayTokenIdfrom the response to reuse the destination later. - Payout (withdrawal), stored Llave: Create a payout and supply
gatewaytokenidfrom 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.
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"
}| Parameter | Description |
|---|---|
merchantstring (≤ 20 characters) required | Your unique merchant identifier, as assigned by PXP. |
sitestring (≤ 20 characters) required | Your unique site identifier, as assigned by PXP. |
apmProviderstring required | The APM provider for this provision request. For Bre-B, this must be Breb. |
shopperIdstring required | Your unique identifier for this shopper. |
userNamestring (3-50 characters) required | The shopper's username for Bre-B provision. |
emailstring (email, 3-50 characters) required | The shopper's email address. |
firstNamestring (3-50 characters) required | The shopper's first name. |
lastNamestring (3-50 characters) required | The shopper's last name. |
countrystring (2 characters) required | The shopper's country, in ISO 3166-1 alpha-2 format. For Bre-B, use CO. |
documentTypestring required | The shopper identity document type. Possible values:
|
documentNumberstring required | The shopper identity document number. It must match Colombia format rules for the chosen documentType:
|
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.
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"
}
}| Parameter | Description |
|---|---|
merchantstring (≤ 20 characters) required | Your unique merchant identifier, as assigned by PXP. |
sitestring (≤ 20 characters) required | Your unique site identifier, as assigned by PXP. |
merchantTransactionIdstring (≤ 50 characters) required | A unique identifier for this transaction. |
merchantTransactionDatedate-time required | The date and time when the transaction happened, in ISO 8601 format. |
transactionMethodobject required | Details about the transaction method. |
transactionMethod.entryTypestring required | The entry type. For e-commerce Bre-B transactions, this is always Ecom. |
transactionMethod.fundingTypestring required | The funding type. For Bre-B, this is always PayByBank. |
transactionMethod.intentstring 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. |
amountsobject required | Details about the transaction amount. |
amounts.transactionnumber | 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.currencyCodestring (1-3 characters) required | The currency code associated with the transaction, in ISO 4217 format. For Bre-B, this must be COP. |
fundingDataobject required | Details about the payment method used for the transaction. For Bre-B, use the Pay by bank funding shape only. |
fundingData.payByBankobject required | Pay by bank funding details for Bre-B. |
fundingData.payByBank.apmProviderstring required | The APM provider. For Bre-B, this must be Breb. |
fundingData.payByBank.bankAccountNumberstring (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. |
shopperobject required | Details about the shopper receiving the payout. Include id, email, firstName, lastName, countryCode, documentType, and documentNumber. |
shopper.countryCodestring (2 characters) required | The shopper's country, in ISO 3166-1 alpha-2 format. For Bre-B, use CO. |
shopper.documentTypestring required | The shopper identity document type. Possible values:
|
shopper.documentNumberstring required | The shopper identity document number. It must match Colombia format rules for the chosen documentType. |
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.
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 | State | Description |
|---|---|---|
breb-transaction-order-executed | Authorised | A Bre-B deposit or payout has reached a successful terminal state. For deposits, this is the first notice of the transaction. |
breb-transaction-order-declined | Refused | A Bre-B payout was declined. |
breb-transaction-order-expired | Expired | A Bre-B payout expired. |
breb-transaction-order-failed | Refused | A Bre-B payout failed. |
breb-transaction-order-refunded | Refunded | A Bre-B refund was confirmed. |
breb-transaction-order-rejected | Rejected | A Bre-B payout was rejected. |
breb-transaction-order-cross-entry | Refused | A Bre-B payout was refused because of a cross-entry outcome. |
To learn how to set up and process webhooks, see Manage webhooks.