Modelling Example: BNPL
This document shows how to map a Buy-Now-Pay-Later (BNPL) client onto the platform's Account / Product / Claim model. The client described here ("PagaLuego") is fictional and deliberately configured with the richest possible policy set, so the example exercises every mechanism the model offers: individual instalment claims, claim consolidation, and instalment plans as a collections treatment. A real BNPL client will almost always be a subset of this example — the discovery questions at the end tell you which phases apply.
Guiding principles
- Model what is legally collectible at placement time, not what is elegant. A claim's
amountmust be the enforceable debt at the moment it is placed — never the full product price if part of it has been paid or is not yet due. Overstating debt in dunning communication is a legal/compliance risk. - The Receive Instalment Plan is a collections treatment, not an origination schedule.
Instalment plans (
event.instalmentsPlan.*,event.instalment.*) represent a repayment agreement negotiated on top of debt already in collection (via strategy or landing page). The original BNPL payment schedule is the origination contract — do not model it as a Receive instalment plan. Keep the plan free for its natural role: offering the debtor a way to repay a defaulted claim in parts.
Entity mapping
| BNPL concept | Platform entity |
|---|---|
| Debtor / shopper | Account (one per debtor, groups all their purchases) |
| Purchase / financed order | Product (productReference on each related claim) |
| Missed instalment | Claim (one per overdue instalment, pre-acceleration) |
| Accelerated balance | Claim (one new claim for the enforceable balance) |
| Original payment schedule | Product.meta (context data, no business logic) |
| Negotiated repayment plan | Receive Instalment Plan (collections treatment on the claim) |
Schema support (see the API reference):
Claim.productReference/Claim.product— ties any number of claims to the purchase. This is the grouping mechanism for "all instalments of one order".Claim.repaymentsHistory— optional record of payments made to the client before placement.Product.meta— free-form context (total price, instalment count, purchase date).Claim.meta— free-form context per claim (e.g. which original instalments an accelerated claim replaces).
compoundClaimRefsis internal — not a client-facing consolidation mechanism. It is not exposed in the ClientApi schema. The platform sets it when creating an instalment plan: it creates a synthetic claim representing the plan (externalClaimRef= plan id,amount= plan total,dueDate= last instalment due date,compoundClaimRefs= the source claims' references), and instalment payments are booked against it. The rest of the platform deliberately ignores compound claims: they are excluded from account creation, search, strategy assignment, and account-claims queries. Do not model client-side debt consolidation with it.
Do NOT use
linkGroupIdto group instalments. Linked claims (set_link_claims/cmd.linkClaims.set) are mirrors of the same debt: whenever one claim in a link group changes,cmd.linkedClaims.syncoverwritesamount,totalFees, andfeeson every other claim in the group. It exists for shared-liability scenarios — the same debt reflected on several accounts (co-debtors, guarantors) — where a payment on one must propagate to all. Linking BNPL instalments would make every instalment's amount overwrite the others'.
Fictional client: "PagaLuego"
Assumed policies (chosen to cover the full hybrid case):
- Sells products in 6 monthly instalments, interest-free.
- At the 1st missed instalment, places that instalment in collection but keeps servicing the rest of the credit (the debtor can still pay future instalments to the client directly).
- At the 3rd consecutive missed instalment, exercises the acceleration clause: the entire remaining balance becomes due.
- Charges a fixed late fee per overdue instalment.
Worked example: Maria buys a sofa
Sofa for €900 in 6 instalments of €150. Maria pays the first two, then stops paying.
- Account = Maria.
- Product = the sofa:
productReference: "PL-ORD-4711", withmetaholding the total price, instalment count, and purchase date.
Phase 1 — early arrears (instalments 3 and 4 overdue)
One claim per missed instalment, all grouped by pointing at the same product:
{
"externalClaimRef": "PL-ORD-4711-INST-03",
"amount": 15000, // cents
"currency": "EUR",
"dueDate": "2026-05-01",
"externalDueDate": "2026-05-01",
"productReference": "PL-ORD-4711",
"fees": [
{
/* late fee for this instalment */
},
],
}
// likewise PL-ORD-4711-INST-04, dueDate 2026-06-01
Each instalment keeps its own dueDate, aging, and fees — correct, because each fell due on a
different date. If Maria pays one instalment, that claim resolves individually while the others
stay in collection.
Phase 2 — acceleration (instalment 5 falls due unpaid)
PagaLuego cancels/credits the open instalment claims and places one ordinary claim for the
accelerated balance (instalments 3–6 = €600). Consolidation is a client-side operation —
credit the old claims, create a new one — and the lineage is declared with typed claim
relations (relatedClaims), which keeps the consolidation history queryable through get_account_claims:
{
"externalClaimRef": "PL-ORD-4711-ACCEL",
"amount": 60000, // the enforceable accelerated balance — never the product price
"currency": "EUR",
"dueDate": "2026-07-01", // acceleration date
"externalDueDate": "2026-07-01",
"productReference": "PL-ORD-4711",
"relatedClaims": [
{ "type": "REPLACES", "claimReference": "PL-ORD-4711-INST-03" },
{ "type": "REPLACES", "claimReference": "PL-ORD-4711-INST-04" },
{ "type": "REPLACES", "claimReference": "PL-ORD-4711-INST-05" },
],
}
Payments Maria already made to the client (instalments 1–2) stay on the client's side, or go
into repaymentsHistory if the full history is wanted for context.
Phase 3 — collections treatment
On the consolidated claim, the strategy offers Maria a Receive Instalment Plan (e.g. 4
payments of €150 via the landing page). Internally, the platform creates a compound
claim spanning the source claim(s) — this is where compoundClaimRefs comes into play, managed
entirely by the platform. If Maria misses a plan payment, the plan is invalidated and the full
claim becomes enforceable again — the platform's plan-invalidation semantics mirror the
acceleration clause exactly, now managed inside Receive.
Note: an instalment plan can span multiple source claims. So even in Phase 1 (several open instalment claims, no acceleration), the debtor can be offered a single plan covering all of them — the platform consolidates them for payment purposes via the internal compound claim, without the client having to consolidate anything on their side.
Multiple purchases
If Maria also financed a bicycle, that is a second Product with its own claims, all under the same Account. Account-level strategy decides whether she is contacted once about her total debt or per product.
Discovery questions for a real BNPL client
Each answer switches a phase of this example on or off:
- Is there an acceleration clause, and when is it exercised (first missed instalment, third, at placement)? → No acceleration: Phase 1 only. Accelerates before placement: Phases 2–3 only. Accelerates after placement: full hybrid.
- Does the debtor keep paying future instalments to the client directly while we collect the overdue ones? → If yes, per-instalment claims (Phase 1) are mandatory; a single full-balance claim would overstate the enforceable debt.
- Are late interest/fees calculated per instalment or on the outstanding balance? →
Decides whether
feeslives on the individual instalment claims or on the consolidated one. - Should a debtor with several purchases be treated as one case? → Account-level grouping already handles this at the strategy layer, independent of how the claims are modelled.
See also
- Personal Loan — interest-bearing amortized loan (accrual after placement, principal/interest split, co-signers).
- Recurring Invoices — telco/utility
subscriptions (ledger-managed integration,
ACCOUNT_INVOICEclaims, payment matching). - Debt Buyer — purchased portfolios
(
import_claims,portfolioReference, scores-driven segmentation, settlements). - Revolving Credit — credit cards
(rolling claim via
debit_claims/credit_claims, fraud write-offs). - B2B Invoices — commercial invoices (legal debtors, disputes, promises to pay).
- Secured Auto Loan — secured lending (payment deferrals, restructuring, deficiency balance after repossession).
Related use cases
This example focuses on what to model; the step-by-step mechanics of each API call are covered by the generic use cases:
- Authentication — obtaining the access token every request needs
- Create Claims — the mechanics of placing claims (single and batched)
- Register Payments — crediting claims for payments received on your side
- Consolidate Claims — replacing claims with a consolidated one, with typed relations
- Resolve Claims — closing claims with the correct resolution reason
- Get Account Claims — reading claims (including their relations) back from the platform