Schemas and Reconciliation
Explore virtual account schemas (Per Transaction, Submerchant, User, Omnibus) and learn how to reconcile payments using webhooks, API, and reports with Localpayment.
Virtual accounts can be structured according to different operational schemas. These schemas define the strategy for assigning account details to transactions, submerchants, or users. Understanding these schemas is essential for designing an effective payment infrastructure and implementing the correct reconciliation logic to identify the source and purpose of each incoming payment.
Virtual Account Schemas
A schema defines the relationship between virtual accounts and the entities they represent. Choose a schema based on your business model to determine the optimal payment tracking and reconciliation strategy.
1. Per Transaction
In the Per Transaction schema, you create one unique Virtual Account per transaction. It is used only once, and then deleted.
How it Works
- You create a Virtual Account before initiating a transaction.
- Once the payer transfers the funds, you receive a webhook containing all the information necessary for reconciliation.
- You delete the account after the payment is completed.
Reconciliation
Matching is extremely simple: You reconcile the payment by comparing the Virtual Account number returned in the webhook with the Virtual Account you created for that transaction.
2. Per Submerchant
In this schema, you assign one Virtual Account per submerchant, branch, or business unit. For example, a marketplace could assign one Virtual Account to each seller.
How it works
- Every submerchant receives its own dedicated Virtual Account.
- All incoming payments through that account belong to that specific submerchant.
- To identify individual transactions, you use additional webhook fields.
Reconciliation
You match payments by first identifying the Virtual Account and then confirming the specific transaction using one or more of these fields:
amountpayer.name/payer.lastNamepayer.document.id(when available)payer.email(when available)payer.bank.account.numberdate.creationDateordate.processedDatetrackingobject
This schema is ideal for marketplaces, multi-branch businesses, or any structure where payments must be grouped by entity.
3. Per User
In this schema, each end user receives one permanent Virtual Account that they can reuse over time. This is common in digital wallets where users top up their balance by sending transfers to their assigned account number.
How it works
- A Virtual Account is linked to a user’s profile.
- The user always transfers funds to the same Virtual Account.
- You use additional metadata to reconcile each individual payment.
Reconciliation
Similar to the Per Submerchant schema, reconciliation is done using:
amountpayer.bank.account.numberdate.creationDate/date.processedDatetracking.id/tracking.reference/tracking.concept
This schema is ideal for wallets, digital banks, or any product where a user maintains an ongoing balance.
4. Omnibus
In this schema, you use one single Virtual Account that receives payments from multiple users, submerchants, or transactions.
How it works
- All payers send money to the same Virtual Account.
- You must rely entirely on webhook data to identify individual transactions.
Reconciliation
You use multiple identifiers to determine who sent the payment:
beneficiary.bank.account.number(same for everyone)amountpayer.name/payer.lastNamepayer.document.id(when available)payer.emailpayer.bank.account.numberdate.creationDate/date.processedDatetracking.id/tracking.reference/tracking.concept
This schema is flexible and simple but requires strong reconciliation logic on your side.
Schema Comparison
| Schema | Core Concept | Primary Reconciliation Key | Complementary Reconciliation Data |
|---|---|---|---|
| Per Transaction | A unique, single-use account is created for each transaction and can be deleted after use. | beneficiary.bank.account.number (The unique virtual account number). | externalId, amount, date.creationDate. |
| Per Submerchant | A dedicated account is assigned to a specific submerchant, seller, or branch (e.g., a marketplace seller). | beneficiary.bank.account.number (The submerchant's dedicated account number). | amount, payer.name, payer.lastName, payer.document.id, payer.email, payer.bank.account.number, date.creationDate, tracking object. |
| Per User | A permanent account is assigned to an end-user for recurring use (e.g., a digital wallet for top-ups). | beneficiary.bank.account.number (The user's permanent account number). | amount, payer.bank.account.number, date.creationDate, tracking object. |
| Omnibus (Pooled) | A single master account receives payments from multiple sources for different purposes. | beneficiary.bank.account.number (The shared master account number (used for grouping)). | All payer details are critical: amount, payer.name, payer.lastName, payer.document.id, payer.email, payer.bank.account.number, date.creationDate, tracking object. |
Reconciliation Methods
Once a payment is received, use one of the following methods to match it to your internal records.
Updated 3 days ago
