Mono Colombia

Collect with a template

Collect from many payers with one static Bre-B key or QR.

This flow collects payments from many payers through one shared address: a multiple-use template issues a static Bre-B key and QR, you display it (on a screen, a poster, an invoice footer) and every transfer to it lands in your subaccount as a payin. There is no per-payment API call: the template is the campaign, and the webhooks are your ledger of who paid what.

Use it for donations, in-store QR payments, recurring club dues, or any collection where you do not need to know in advance which specific payment is coming.

Before you start

You will need:

Sequence overview

Steps

  1. Create the collection template. type: "collection" is the default; make it multiple_use and request the QR:

    {
      "external_id": "campaign-2026-back-to-school",
      "usage_mode": "multiple_use",
      "subaccount_id": "<receiving subaccount>",
      "currency": "COP",
      "reference": "Back to school 2026",
      "minimum_payin_amount": { "amount": 1000000, "currency": "COP" },
      "total_maximum_amount": { "amount": 5000000000, "currency": "COP" },
      "expires_at": "2026-12-31T23:59:59Z",
      "method_params": { "co_breb": { "create_qr": true } }
    }
  2. Wait for payin_template_ready and publish the key and QR wherever payers will see them.

  3. Let the payments flow. Each transfer becomes a payin: payin_created → payin_approved_in_provider → payin_subaccount_credited. The payer's identity arrives in instrument.payer. That is how you know who paid, since nothing identifies payments in advance in this flow.

  4. Watch the campaign milestones. If you set total_minimum_amount, payin_template_minimum_paid announces the goal was reached; payin_template_paid announces the cap (total_maximum_amount) and the template stops accepting payments. Reopen a paid campaign by raising the cap with an update.

  5. Close it down. Let expires_at prune the template, or delete it once paid_amount is settled and nothing is in flight. Either way the key and QR are deregistered and payin_template_discarded confirms it.

Reconciliation in this flow

Payments are anonymous until they arrive, so reconcile by listing payins by template_id and matching on instrument.payer (document) and amount. If you need exact payment-to-order matching, this is the signal to use intents instead.

Next steps

On this page