Mono Colombia

Reversals and reapplications

Simulate the reverse and reapply reconciliation outcomes on your Bre-B transfers in the sandbox environment

After a transfer settles, the Banco de la República (BanRep) end-of-cycle reconciliation can still adjust it. There are two outcomes:

  • Reverse — an operation that looked successful did not actually settle at the destination (or was returned), so it is reversed. A reversed incoming payment that belongs to a collection is rolled back: its attempt goes from successful to reversed, the collection's paid_amount and counters are recomputed, and the collection may reopen.
  • Reapply — an operation that was marked failed actually settled late, so it is reapplied. A reapplied incoming payment settles the attempt that was finalized as failed: it goes from failed to successful and is credited to the collection.

In production these come from the daily reconciliation file. The sandbox lets you replay either outcome on one of your own transfers so you can verify that your integration handles the resulting webhooks. These endpoints are only available in the sandbox environment.

Prerequisites

You need an existing transfer and its end_to_end_id:

  • To reverse, the transfer must be in a reversible state (successful or reapplied). For a collection, first simulate a successful collection payment.
  • To reapply, the transfer must be in the failed state. For a collection, first simulate a payment with an error so the attempt is finalized as failed.

The end_to_end_id is returned in the collection attempt simulation response and is present in every collection.attempt_* and incoming_transfer.* webhook payload.

Simulating a reversal

Send a POST to reverse the transfer matching the end_to_end_id:

curl -X POST \
  https://breb-participant.sandbox.mono.la/api/v1/sandbox/transfers/{end_to_end_id}/reverse \
  -H "Authorization: Bearer <access_token>"

You receive a 202 Accepted response describing the applied outcome:

{
  "end_to_end_id": "20260527345544001ENT177994036665555",
  "direction": "incoming",
  "state": "reversed",
  "state_reason": "reversed_by_banrep",
  "result": "applied"
}

A few seconds later, the webhooks are delivered to your configured URL. For a reversed incoming payment that belongs to a collection you receive:

  • collection.attempt_reversed — the attempt that was successful is now reversed.
  • collection.updated — the collection's paid_amount, counters and state were recomputed.

Simulating a reapplication

Send a POST to reapply the failed transfer matching the end_to_end_id:

curl -X POST \
  https://breb-participant.sandbox.mono.la/api/v1/sandbox/transfers/{end_to_end_id}/reapply \
  -H "Authorization: Bearer <access_token>"

You receive a 202 Accepted response:

{
  "end_to_end_id": "20260527345544001ENT177994036665555",
  "direction": "incoming",
  "state": "reapplied",
  "state_reason": "reapplied_by_banrep",
  "result": "applied"
}

For a reapplied incoming payment that belongs to a collection you receive:

  • collection.attempt_successful — the attempt that was failed is now successful.
  • collection.updated — the collection's paid_amount, counters and state were recomputed.

See the collection webhooks reference for the full payloads.

Response fields

FieldDescription
end_to_end_idThe transfer the outcome was applied to.
directionincoming (settles a collection) or outgoing.
stateThe resulting transfer state: reversed or reapplied.
state_reasonThe reason recorded for the change.
resultapplied when the transfer transitioned now, or already_applied when it was already in the target state.

Idempotent

Calling reverse on an already-reversed transfer (or reapply on an already-reapplied one) returns 200-style success with "result": "already_applied" and does not emit a new webhook.

Errors

StatusCodeWhen
404transfer_not_foundNo transfer matches the end_to_end_id.
409transfer_invalid_stateThe transfer cannot be reversed/reapplied from its current state.

Expected flow

  1. Create a transfer to act on (e.g. simulate a collection payment).
  2. Take its end_to_end_id from the simulation response or a webhook.
  3. Call the reverse or reapply sandbox endpoint with that end_to_end_id.
  4. The API responds with 202 Accepted and the applied outcome.
  5. After a short delay, the collection.* webhooks are delivered to your configured URL.

On this page