Funding & settlement
This page covers the money flow around subscriptions and redemptions: where to send wires, how amounts are interpreted, what TreasurySpring does (and does not) check at subscribe time, and how partial funding and redemption payouts work.
Indication.minimum and Indication.maximum are denominated in millions of the indication's currency.
SubscriptionBody.amount (on /subscribe) is denominated in absolute units of the indication's currency.
So a minimum of 1 means £1,000,000. To subscribe at the minimum, please send amount: 1000000 rather than amount: 1.
Validate before subscribing
POST/validate is an optional pre-flight check for a prospective subscription. It takes the same body as /subscribe (entityCode, indicationUid, amount, and optionally maturityAction, subscriptionDate, source) but creates nothing.
It confirms that:
- the indication still exists and is available to this entity,
- it is not restricted for the entity and is enabled for subscription,
- the chosen
subscriptionDateis a valid subscription date for the product, and - the
amountis within the indication's permitted limits (see Amount limits below).
On success it returns the matching indication, including its current pricing. A 4xx response indicates the same request would be rejected by /subscribe, so it's a useful step to surface a clear error in your UI before committing.
Validation reflects pricing and availability at the moment of the call — it is not a quote or a hold. Pricing can still move between /validate and /subscribe; treat the terms on the resulting subscription/holding as authoritative. No Idempotency-Key is required because the call has no side effects.
Wire instructions (settlement instructions / SSIs)
Cash settles into a TreasurySpring-managed omnibus account, one account per currency.
- Payment reference: where possible, please include the entity's
entityCodeas the reference on the wire — it helps TreasurySpring attribute incoming funds to the right entity. - There is one omnibus account per currency (GBP, USD, EUR, etc.); the SSI for each currency is shared by the TreasurySpring account manager during the entity's onboarding.
- A single payment reference is fine across multiple subscriptions for the same entity — the cell and amount are reconciled from the subscription record rather than from the wire itself.
No balance check at subscription time
Submitting POST/subscribe creates a subscription record. It does not:
- Check that the entity has funds available.
- Hold or block any funds.
- Pull funds from anywhere automatically.
The entity needs to arrange the wire to land before the holding's cut-off. If funding does not arrive in time, the subscription lapses — currently TreasurySpring handles this manually rather than returning an automatic error.
If you'd like to detect lapses programmatically today, poll the subscription until either holdingUid is populated (success) or the subscription has been in a non-terminal state past the expected cut-off (likely lapsed; please contact support to confirm).
Late funding auto-rolls forward
If the wire arrives after the requested subscription date's cut-off but the FTF product still has future subscription dates available, TreasurySpring will automatically re-target the subscription to the next available date. The subscription does not error; it simply settles a day (or business day) later than requested.
Treat the subscriptionDate on the resulting holding as the authoritative value — it may not match what you originally sent.
Partial funding (cash-on-hold + wire)
If an entity is holding cash inside a TreasurySpring cell (e.g. from a previous holding that matured to HOLD), that cash can be used to fund a new subscription. Partial funding works in either direction:
- Subscribing for more than the entity's available cell cash → a top-up wire is needed.
- Subscribing for less than the entity's available cell cash → cell cash covers it, with no wire required.
The funding source is selected explicitly when submitting the subscription — there is no default behaviour, and TreasurySpring will not silently combine sources without instruction.
Amount limits
- Below
minimum: the subscription is rejected. This is a hard block. - Above
maximum: not a hard block.enforceMaximumtriggers a manual review — TreasurySpring is often able to accommodate oversize trades at current pricing. We'd suggest your client UI warns above the maximum rather than preventing submission. - The minimum applies per subscription, not per entity per day.
The enforceMinimum and enforceMaximum fields on the indication tell you which rules are active for that product.
Redemption payout
Redemption proceeds settle to a single designated payout account per currency per entity. This is configured during onboarding and is not selectable per subscription.
Schedule:
- Redemption is initiated by the maturity process on
CutOff → Redeemedtransition. - The actual cash arrival in the entity's account follows normal correspondent-banking timelines for the currency (T+0 for GBP via CHAPS in most cases; longer for cross-border USD/EUR).
- The
REDEEMEDevent fires when TreasurySpring books the redemption — not when the cash hits the entity's bank.
Currency conversion
If a holding involves an FX leg (subscribed in one currency, redeemed in another), the FX event is emitted separately as CURRENCY_CONVERTED and as CASH_MOVED for the resulting cash flows. See the Events reference for the field shapes.
Reconciliation checklist
When matching a TreasurySpring holding to an internal cash record, the relevant fields are:
| Field on holding | What it means |
|---|---|
cost | Principal sent / drawn from cell cash at issuance |
value | Current marked value (changes daily for extendables; flat for fixed) |
maturityValue | Expected cash to receive at maturity (after any MVA) |
interest | maturityValue − cost |
issueDate | Date the wire was applied / cell cash drawn |
maturityDate | Date the holding pays out (subject to extension for extendables) |
cutoffDatetime | Last point at which the maturity action can be changed |
For multi-entity sweeps and per-currency aggregates, group by entityCode and currency first, then by obligorExposureCode if you're tracking credit exposure.