Securities lending playbook
Securities lending — the practice of lending securities to short sellers or other market participants in exchange for collateral — generates a continuous stream of transactions, collateral movements, and recall events that must be reconciled accurately. Falcon Veritas Intelligence (FVI) provides a securities lending playbook that handles the full lifecycle of loan initiation, mark-to-market, collateral substitution, and recall.
Why securities lending is complex
Securities lending involves multiple counterparties and continuous reconciliation:
- Loan initiation — lender and borrower agree on loan terms (security, quantity, fee rate, term).
- Cash or non-cash collateral — borrower posts collateral (typically 102-105% of loan value for cash, 105-110% for non-cash).
- Mark-to-market — daily revaluation of loan and collateral.
- Collateral substitution — borrower can substitute collateral with lender's consent.
- Recall — lender can recall the loaned security, typically with T+1 or T+2 notice.
- Buy-in — if borrower fails to return recalled security, lender can buy in the open market.
FVI's securities lending playbook addresses each of these with purpose-built workflows.
FVI's securities lending architecture
Step-by-step: enabling securities lending reconciliation
-
Connect lending agents. Wire your lending agent(s) (BNY, State Street, Northern Trust, eSec Lending, etc.) to FVI's ingestion pipeline. FVI normalizes lending agent files into the canonical loan record.
-
Configure collateral templates. Set up collateral templates for each borrower, including eligible collateral types, haircuts, and substitution rules. FVI applies the templates to every collateral movement.
-
Enable daily mark-to-market. FVI's daily cron job pulls market prices from your pricing service, revalues each loan and its collateral, and flags any collateral adequacy breaches.
-
Configure recall workflows. Set up recall notice templates with the lender's standard recall period (T+1, T+2, or T+3). FVI's recall module tracks the recall notice, the borrower's response, and the buy-in trigger if the recall is not returned on time.
-
Enable counterparty exposure reporting. FVI aggregates loans by borrower, calculates exposure (loan value × haircut), and produces the daily counterparty exposure report.
-
Configure regulatory reporting. Enable the regulatory reporting module for the relevant jurisdictions (SEC 17a-3/4, FINRA, MAS, FCA, ESMA SFTR).
Mark-to-market
FVI's daily mark-to-market runs at 6pm ET (post-market close):
- Pull loan ledger — retrieve all open loans and their current state.
- Pull market prices — retrieve closing prices for all loaned securities from your pricing service.
- Revalue loans — apply current prices to loan positions to compute current loan value.
- Revalue collateral — apply current prices to collateral positions to compute current collateral value.
- Check adequacy — compare collateral value to required collateral (loan value × required margin).
- Trigger margin calls — if collateral falls below the maintenance margin, trigger a margin call to the borrower.
Recall workflow
Use cases
- Agent lenders — reconcile loans across multiple beneficial owners.
- Principal lenders — reconcile proprietary lending books.
- Borrowers — track loan obligations and collateral obligations.
- Custodians — reconcile securities lending activity for safekeeping clients.
- Hedge funds — track short positions and borrow costs.
Code samples
TypeScript
import { FVI } from '@falconveritas/sdk';
const fvi = new FVI({
baseUrl: 'https://api.falconveritas.com',
bearer: process.env.FVI_JWT!,
tenantId: process.env.FVI_TENANT_ID!,
});
// Get counterparty exposure
const exposure = await fvi.industries.securitiesLending.exposure({
asOf: '2026-08-22',
});
for (const cp of exposure.top_counterparties) {
console.log(`${cp.borrower}: $${cp.exposure.toLocaleString()} (${cp.loan_count} loans)`);
}
Python
from falconveritas import FVI
client = FVI(
bearer=os.environ["FVI_JWT"],
tenant_id=os.environ["FVI_TENANT_ID"],
)
exposure = client.industries.securities_lending.exposure(as_of="2026-08-22")
for cp in exposure.top_counterparties:
print(f"{cp.borrower}: ${cp.exposure:,.0f} ({cp.loan_count} loans)")
Related articles
Last updated: 2026-08-22 · Page owner: Documentation · Source: src/lib/industries/securities-lending/.