Skip to main content
A funding account is a deposit destination in a local currency whose only job is to receive money: every credit converts automatically to USD, your principal balance. It is the default purpose: "fondeo" of a deposit account — create one per corridor and share its instrument (account number, CLABE, alias, IBAN) with your payers. If you need to hold local fiat for payouts instead of converting it, that is Banking: create a second destination with purpose: "banking". Funding converts; Banking retains.

Funding vs Banking

For local fiat corridors (BO/BOB, MX/MXN, AR/ARS), every payin destination carries a purpose that decides where inbound money lands: Destinations created without a purpose keep the historical fondeo behavior. Banking purpose is only supported in BO/BOB/bank_transfer, MX/MXN/bank_transfer and AR/ARS/bank_transfer; everything else is always funding.

Funding by currency

🇦🇷 ARS — Argentine peso

Receive pesos through a dedicated CVU. The CVU is created with the bank alias you choose at creation time (bank_alias is required). Inbound pesos convert automatically to USD, your principal balance. For the full deposit-account contract see payins; to send pesos out, see payouts.

🇧🇴 BOB — Bolivian boliviano

Receive bolivianos through a dedicated bank-transfer account. Inbound BOB converts automatically to USD, your principal balance. To send bolivianos out (bank transfer in BOB or USD, plus QR), see the Bolivia tab in payouts.

🇲🇽 MXN — Mexican peso

Receive pesos through a dedicated CLABE. Inbound MXN converts automatically to USD, your principal balance. For the full deposit-account contract see payins; to send pesos out, see payouts.

🇪🇺 EUR — euro

Receive euros through a funding_usdt virtual IBAN: inbound euros convert automatically to USD, your principal balance. (A banking_eur IBAN instead holds BANK_EUR for SEPA payouts — that is Banking.) Request and read IBANs in Banking; to send euros out, see SEPA Instant payouts.

The funding flow

  1. Discover the corridor (GET /v1/payins/methods) — always read the live catalog before offering a payment option.
  2. Create or repair the deposit account (POST /v1/payins/deposit-accounts) — verified accounts get their first destination automatically; companies can add more on enabled corridors.
  3. Share the instrument — your payer sends an ordinary bank transfer.
  4. Receive the credit — CBPay reconciles the bank credit and emits payin_credited; the net lands in USD, your principal balance.
No announcement step exists in this mode: the payer never fills a POST /v1/payins reference.

1. Discover the available corridors

Always read the live catalog before offering a payment option in your app:
A representative record:
The catalog is the single source of truth. A corridor can exist in the API contract and still be disabled for your organization.

2. Create or repair a deposit account

The platform provisions the initial funding instrument only after the account’s own verification passes: KYC for persons, KYB for companies. Registration alone never creates a funding account. A verified account that is missing its instrument can repair it with the same call:
A 201 response:
Share instrument with your payers as the receiving account. instrument_id is CBPay’s stable identifier; never substitute a UUID for the receiving account. On return, details.alias, details.merchant_nit and details.bank_name are the display fields for the transfer card; missing optional fields are never inferred. Person accounts keep at most one active funding account per country/currency/method. Company accounts can create additional immutable destinations only in enabled corridors; the currently supported additional corridors are MX/MXN/bank_transfer, BO/BOB/bank_transfer, and AR/ARS/bank_transfer. Every destination stays bound to the same CBPay account, and credits match by destination instrument. Verification provisions the first corridor instrument automatically for a verified account. The call above also repairs a missing instrument after verification. Deposit-account display fields are optional and never inferred. This funding flow never creates a user-chosen bank alias; AR/ARS bank aliases are a separate contract in the payins guide. When a company creates an additional BOB destination, each destination must use a new idempotency key:
A new key returns 201 and a new destination. Replaying the same completed key returns 200 with the original instrument and idempotency_hit: true; a concurrent replay of an in-flight one may return 409 idempotency_conflict. When the rail answers missing or ambiguous, the system keeps a reconcilable state instead of retrying silently.

3. List deposit instruments

The list is paged and hides provisioning claims that have not received a real receiving number yet:

4. Receive and reconcile the transfer

This mode never uses POST /v1/payins announcements. The payer transfers BOB to your instrument. Credits confirm push-first from the bank notification, with statement polling kept as an idempotent backstop inside a bounded date window; completed credits deduplicate by bank reference, ACH order number or a deterministic fallback key. Once the credit matches, subscribe to payin_credited and read the final amounts and status from the payin resource:
Standard payin fee and rate rules apply. The public API never exposes bank-rail-specific objects.

Instrument and payer fields on credited pushes

A credited payin stays available through the ordinary list/detail resources. When the credit lands on a dedicated account, reconcile with instrument_id and instrument (account_number, purpose, status) and filter history with ?instrument_id=<uuid>. New credits may also carry payer_source: "bank_event" with the bank-reported payer block. Data the bank does not report is omitted, historical payers are never backfilled, and an existing screening can hold the credit for review.

Statuses

After a timeout, read the list first. Even when the response is lost, the rail may already have accepted the first request.

Errors

FAQ

No. A destination is bound to one CBPay account and one organization. Only share each instrument with that account’s payers.
No. Payers use their own bank transfer flow. CBPay only needs the instrument active and the bank reporting the credit.
No. Corridor instruments are immutable. If the bank reports an anomaly, contact operations instead of creating a substitute blindly.
This corridor is push-first with a polling backstop. Final timing depends on when the bank reports the movement; the webhook fires only after reconciliation.
Choose funding (default) when every deposit should land in USD, your principal balance. Choose Banking with purpose: "banking" when you need to keep BOB, MXN or ARS balances locally for payouts.
Last modified on October 17, 2026