POST /money_movements_return)— reembolsar un payin colombiano implica iniciar un nuevo payout con Crear un Movimiento de Dinero (POST /money_movements) que envía los fondos de vuelta al pagador original.breb_credit — generado cuando se reciben fondos a través de una Cobre Key estática.r2p_breb_credit — generado cuando se reciben fondos a través de un Direct Link o Checkout Bre-B (Request to Pay sobre Bre-B). Contiene los mismos campos del remitente más un money_movement_id que referencia el Money Movement r2p_breb originador.breb_credit o r2p_breb_credit.money_movement que creas de vuelta hacia el pagador original. Concretamente, reembolsar requiere:| Acción | Endpoint | Propósito |
|---|---|---|
| Identificar el payin original | Obtener una Transacción / Obtener transacciones de una cuenta | Lee la transacción de crédito que deseas reembolsar y, para Bre-B, extrae los datos del remitente desde su metadata (breb_credit o r2p_breb_credit). |
| Registrar al pagador como contraparte | Crear una Contraparte | Crea una contraparte breb_key, cc, ch o dp apuntando de vuelta al pagador. |
| Enviar el reembolso | Crear un Movimiento de Dinero | Inicia un payout Bre-B, Fast Pay o ACH por el monto del reembolso. |
refund ni una variante geo: col de /money_movements_return. Cualquier intento de llamar al endpoint de devolución para un crédito colombiano no tendrá efecto.source_id debe referenciar un Virtual Balance (Cobre Balance) o una Cuenta Connect con geo igual a col, con saldo suficiente para cubrir el reembolso.amount, la currency (cop) y —para Bre-B— los datos del remitente. El monto de un reembolso nunca debe superar el monto acreditado original.breb_key se envía por Bre-B. Un reembolso hacia una contraparte cc, ch o dp se envía por Fast Pay (si la institución destino lo soporta) o ACH (si no lo soporta).POST /money_movements requiere el header idempotency (string, longitud mínima 9), válido por 24 horas. Usa una clave determinista derivada del id de la transacción original para que los reintentos nunca generen un doble reembolso.metadata. Esto aplica tanto para breb_credit (fondos recibidos a través de una Cobre Key estática) como para r2p_breb_credit (fondos recibidos a través de un Direct Link o Checkout Bre-B). Esta información es todo lo que necesitas para registrar al pagador como contraparte y enviar los fondos de vuelta — sin necesidad de búsqueda externa.breb_credit (payin con Cobre Key estática) luce así:{
"id": "trx_4c5cb9b93c355520646ff2d6b24076",
"type": "breb_credit",
"account_id": "acc_8fB1S8wlaF",
"amount": 100000,
"previous_balance": 0,
"current_balance": 100000,
"currency": "cop",
"credit_debit_type": "credit",
"transaction_date": "2026-06-10T20:11:56Z",
"created_at": "2026-06-10T20:11:56Z",
"metadata": {
"sender_account_number": "78110264",
"sender_account_type": "ch",
"sender_bank_code": "1809",
"sender_id": "1018983923",
"sender_id_type": "cc",
"sender_name": "Juan Pérez",
"key_value": "@COBRECOMERCICB1QB6HQ",
"description": "Payin Bre-B"
}
}r2p_breb_credit (payin con Direct Link o Checkout) contiene los mismos campos del remitente, más un money_movement_id que referencia el Money Movement r2p_breb que generó el crédito:{
"id": "trx_e340b2a53b5e1d64b25cfa27157f53",
"type": "r2p_breb_credit",
"amount": 100000,
"previous_balance": 0,
"current_balance": 100000,
"currency": "cop",
"credit_debit_type": "credit",
"transaction_date": "2026-05-20T20:43:23Z",
"created_at": "2026-05-20T20:43:23Z",
"metadata": {
"sender_account_number": "78110264",
"sender_account_type": "ch",
"sender_bank_code": "1809",
"sender_id": "1018983923",
"sender_id_type": "cc",
"sender_name": "Juan Pérez",
"key_value": "@CBI964MAQ",
"description": "R2P Bre-B",
"money_movement_id": "mm_InLDaOGhcHczoz"
}
}metadata que reutilizarás son idénticos en ambos tipos:| Campo de crédito Bre-B | Significado | Utilizado para |
|---|---|---|
sender_name | Nombre del pagador que envió los fondos | counterparty_fullname |
sender_id | Número de identificación del pagador | counterparty_id_number |
sender_id_type | Tipo de identificación del pagador (ej. cc) | counterparty_id_type |
sender_account_number | Número de cuenta del pagador | account_number |
sender_account_type | Tipo de cuenta del pagador (ch, cc, dp) | type de la contraparte |
sender_bank_code | Código bancario del pagador | beneficiary_institution |
key_valueen ambos tipos de transacción es tu llave receptora (estática parabreb_credit, la llave dinámica parar2p_breb_credit), no la del pagador. Parar2p_breb_credittambién puedes usarmoney_movement_idpara rastrear el reembolso hasta el Money Movement de payin originador.
La ruta de reembolso más rápida es registrar al pagador como contraparte breb_keyy reembolsar por Bre-B. Si no tienes la llave Bre-B del pagador, regístralo en cambio como contrapartecc,chodp(usandosender_account_typecomo eltype) y reembolsa por Fast Pay o ACH — ver Escenario 2.
breb_key:{
"geo": "col",
"type": "breb_key",
"alias": "refund-juan-perez",
"metadata": {
"key_value": "@PAYERKEY123",
"counterparty_email": "juan.perez@example.co",
"counterparty_phone": "+573001112233"
}
}key_value es el único campo de metadata requerido para una contraparte breb_key. La respuesta devuelve un id de contraparte con el prefijo cp_.id de la contraparte como destination_id, tu Cobre Balance como source_id, y el monto acreditado original (o un monto parcial menor) como amount en centavos.{
"amount": 100000,
"source_id": "acc_8fB1S8wlaF",
"destination_id": "cp_TRLlPDNQGZ",
"metadata": {
"description": "Refund trx_4c5cb9b93c"
},
"external_id": "refund_trx_4c5cb9b93c"
}breb_key, el metadata es la variante Bre-B: description es requerido (máximo 40 caracteres) y es solo informativo. Una llamada exitosa devuelve un money_movement con type: breb, geo: col, currency: cop y status.state: initiated.Establece external_idcon un valor derivado de la transacción original para que el reembolso sea rastreable hasta el payin en reportes y conciliaciones.
sender_account_number, sender_bank_code ni sender_name que leer. Para reembolsar, debes obtener la información de cuenta del pagador por tu propio canal (por ejemplo, desde el registro del pedido, soporte al cliente, o solicitándola directamente al pagador) y luego registrarlo como contraparte.counterparty_id_type, counterparty_id_number).beneficiary_institution, del catálogo de Códigos bancarios colombianos).account_number y tipo de cuenta de destino (cc, ch o dp).cc, ch o dp{
"geo": "col",
"type": "cc",
"alias": "refund-order-9931",
"metadata": {
"counterparty_fullname": "Juan Pérez",
"beneficiary_institution": "1007",
"account_number": "051304546110",
"counterparty_id_type": "cc",
"counterparty_id_number": "1018983923"
}
}cc/ch/dp, counterparty_fullname, beneficiary_institution, account_number, counterparty_id_type y counterparty_id_number son todos requeridos.{
"amount": 50000,
"source_id": "acc_8fB1S8wlaF",
"destination_id": "cp_KL1CfGa9iO",
"metadata": {
"description": "Refund order 9931"
},
"external_id": "refund_order_9931"
}cc/ch/dp, el metadata es la variante Fast Pay cuando la institución destino soporta Fast Pay, o la variante ACH cuando no lo soporta. En ambos casos, description es requerido (máximo 40 caracteres). La respuesta devuelve type: fast_pay o type: ach, geo: col, currency: cop.initiated → processing → completed, o failed/rejected). Ver Notificaciones y Suscripciones.breb_debit para reembolsos Bre-B, col_debit para reembolsos Fast Pay/ACH), compensando el crédito original.external_id. Dado que el reembolso es un Money Movement independiente, vincúlalo al payin original a través del external_id que estableciste, y filtra mediante GET /money_movements?external_id=... o en Reports.completed, un Money Movement de reembolso no puede deshacerse a través del API; una corrección sería en sí misma un nuevo Money Movement.