Wallet for end users
What you'll build
Build a system where each of your end users has their own balance, Account Numbers to receive money, and a movements history.
When to use it
Reach for this pattern when your product holds a balance per end user:
- Neobanks and fintech apps.
- B2B platforms holding client funds.
- Marketplaces or gig platforms where sellers accumulate earnings before cashing out.
Three patterns: pick one
You can model a user wallet on Fintoc in three ways. The patterns are ordered by how much Fintoc tracks for you and whether each user needs Know Your Customer (KYC). Start with the pattern that needs the least per-user setup and still fits your requirements.
Pattern A: one Account Number per user (virtual Account Numbers)
- Structure: one Fintoc
Account(yours) with many Account Numbers, one per user. - Per-user balance: you track it in your own database. Fintoc holds the aggregate.
- KYC: none per user. Only your root
Entityis onboarded.
flowchart LR
S1[Sender for user 1] -->|Incoming transfer| C1[Account Number 1]
S2[Sender for user 2] -->|Incoming transfer| C2[Account Number 2]
C1 --> A[Your Account<br/>single total balance]
C2 --> A
A -.webhook.-> DB[(Your DB<br/>balance_user1 += amount)]
Set up:
- Use your root
Account. - Create one Account Number per user with
metadata.user_id. - On
transfer.inbound.succeeded, credit the user's balance in your database. - For withdrawals, create an outbound
Transferfrom your rootAccountand debit the user's balance in your database.
Good for: wallets where you track each user's balance in your database.
Pattern B: one Account per user under your Entity (sub-accounts)
- Structure: many
Accountobjects, all under yourEntity. Each has its own balance and its own root Account Number. - Per-user balance: Fintoc tracks it at the
Accountlevel. Visible in the Dashboard and statements. - KYC: none per user.
flowchart LR
S1[Sender for user 1] -->|Incoming transfer| C1[Account Number 1]
S2[Sender for user 2] -->|Incoming transfer| C2[Account Number 2]
C1 --> A1[Account: user 1<br/>own balance]
C2 --> A2[Account: user 2<br/>own balance]
A1 -.webhook.-> You[(Your backend)]
A2 -.webhook.-> You
Set up:
POST /v2/accountswith yourEntity's ID. TheAccountis created with a root Account Number.- On
transfer.inbound.succeeded, usedata.account_idto identify the user. - Withdrawals use that
account_idas the source of funds.
Good for: wallets where you want Fintoc to ledger balances per user. Works in Mexico and Chile.
Pattern C: one Account per user under their own Entity
- Structure: many
Entityobjects (one per client), each with one or moreAccountobjects and root Account Numbers. - Per-user balance: Fintoc tracks it at the
Accountlevel. - KYC: required per
Entity, and you run it by API. No Dashboard step.
flowchart LR
P[Your platform] -->|Create + onboard by API| E1[Client A Entity]
P -->|Create + onboard by API| E2[Client B Entity]
E1 -->|on entity.onboarding.approved| A1[One or more Accounts<br/>under Client A]
E2 -->|on entity.onboarding.approved| A2[One or more Accounts<br/>under Client B]
A1 -->|"Mexican payment receipt: Client A name"| O1[Client A bank]
A2 -->|"Mexican payment receipt: Client B name"| O2[Client B bank]
Set up:
- Create the client's
Entityand run its KYC review by API. The Onboard an Entity by API guide walks the full sequence: create theEntity, upload company and shareholder documents, then submit. - Wait for the
entity.onboarding.approvedwebhook, or poll the onboarding, to confirm theEntityis approved. - Create one or more
Accountobjects under thatEntitywithPOST /v2/accountsand theEntity'sentity_id. EachAccounthas its own balance and root Account Number. A single clientEntitycan hold several sub-accounts, as in Pattern B. Outbound transfers from eachAccountshow the client's legal name on the Comprobante Electrónico de Pago, the Mexican payment receipt.
Good for flows where receipts must show the client's legal name, such as a food delivery platform that pays each restaurant under that restaurant's Mexican tax ID (RFC). Use this pattern when you onboard Mexican Entity objects at scale without manual Dashboard steps. For other countries, create the Entity from the Dashboard.
Choosing between them
This table compares the three wallet patterns:
| Capability | Pattern A | Pattern B | Pattern C |
|---|---|---|---|
| Per-user balance ledgered by Fintoc | ❌ | ✅ | ✅ |
| Unique Account Number per user | ✅ | ✅ | ✅ |
| KYC per user | ❌ | ❌ | ✅ |
| Receipts show user's name | ❌ | ❌ | ✅ |