- Where did the funds in this balance come from?
- When you spend $X, which funding sources did it come from?
- How much of Provider A’s funds are still available vs already spent?
How to think about lineage
A normal balance tells you how much money you have. Lineage adds one extra dimension: what that money is made of. Think of a balance as having 2 layers:- The balance total: This is what you already know.
- The composition of the balance: This is a breakdown of that total by tag (e.g.
stripe,paypal,treasury, etc.)
Balance = $150, lineage shows you: Balance = $150 (stripe: $100, paypal: $50).

Example breakdown
Example breakdown
Funds enter the system
Two credits are made into Jack’s balance:
- $100 from
stripe - $50 from
paypal
Funds move between balances
Jack sends $40 to Alice. Based on the allocation strategy, Blnk:
- Selects which tagged funds to spend from
- Records how much of the $40 came from each tag.
- Applies the same tag to the funds received by Alice
- Jack with $60 from Stripe and $50 from PayPal
- Alice with $40 tagged as
Stripe
Funds leave the system
Alice withdraws $20 to payouts.Blnk records that the $20 leaving the system came from Alice’s Stripe-tagged funds. Alice now has $20 remaining from Stripe.
What changes with lineage enabled
Only one thing: Blnk starts recording fund composition automatically.- When you credit a lineage-enabled balance, you attach a tag to that incoming money.
- When you debit the balance, Blnk decides which tagged funds were used and records the breakdown.
- When money moves to another lineage-enabled balance, the tag moves with it. Otherwise, lineage stops at that transfer.
Enable fund lineage
Fund lineage is enabled at the balance level. You need to first ensure that the balances you want to track have lineage enabled.Create a balance with lineage enabled
Blnk requires that the balance has an Allocation strategy defines how Blnk will allocate the funds when you spend from the balance. Supported allocation strategies are:
identity_id set to enable lineage tracking for a balance.Create balance (lineage enabled)
FIFO: Spend oldest tagged funds first. This is the default strategy.LIFO: Spend newest tagged funds first.PROPORTIONAL: Spend proportionally across tags.
Tag incoming funds
To initialize lineage for incoming funds, you must include a lineage provider. To do this, set the This tells Blnk how to classify the incoming funds. No other configuration is needed.Blnk tracks funds by auto-creating internal lineage balances derived from the provider and the destination identity.
meta_data.BLNK_LINEAGE_PROVIDER field to the provider you want to tag the funds with.Tag incoming funds
If you omit
BLNK_LINEAGE_PROVIDER, the transaction is recorded, but that credit will not participate in lineage tracking.Spend funds and see lineage tracked automatically
To spend from a lineage-enabled balance, you create a normal debit transaction. You don’t need to specify a provider on debits.Blnk will:You can then inspect the results using:
- Select which tagged funds to spend from based on the allocation strategy
- Record the provider-level breakdown automatically
- Attach the breakdown to the transaction metadata under
BLNK_FUND_ALLOCATION
Spend from a lineage-enabled balance
GET /transactions/:id/lineage(allocation + shadow transactions)GET /balances/:id/lineage(provider breakdown on a balance)
Optional: Propagate lineage across balances
If the destination balance of a transaction also has
track_fund_lineage: true enabled:- Blnk will propagate lineage automatically
- The destination balance will also have its own shadow balances created automatically if it doesn’t already have them.
How Blnk names internal lineage balances
When lineage is enabled, Blnk creates internal “shadow” and “aggregate” balances using indicator strings derived from the provider and the destination identity:- Provider shadow balance:
@PROVIDER_IDENTITY_IDENTIFIER_lineage - Aggregate balance (all providers):
@IDENTITY_IDENTIFIER_lineage
stripe + identity John Doe (identity_id: "idt_4dd12897-...") becomes:
- Shadow balance:
@stripe_john_doe_idt_4dd1_lineage - Aggregate balance:
@john_doe_idt_4dd1_lineage
Query lineage
Once lineage is enabled, you can query it at two levels:- Balance lineage to see what funds are available and spent per provider.
- Transaction lineage to see how a specific debit was allocated
Get balance lineage
Use this to see the current provider breakdown for a balance.- how much is still available
- how much has already been spent
Response structure
Amounts in lineage responses are returned in minor units (the same scale as
precise_amount), so use your precision to convert for display.Get transaction lineage
Use this to see how a specific transaction was funded.- the fund allocation (how much was taken from each provider)
- any internal shadow transactions created for lineage tracking
Response structure
You do not need to act on shadow transactions. They exist for auditability and tracing.