SStratum APIs

For AML officers · layered ownership exposure

UBO walk + corporate sanctions screening

Sanctioned individuals don't usually appear as direct counterparties; they appear as PSC owners of layered corporate structures. A KYB workflow that screens the corporate name alone misses the exposure. LSAG-2025 §B explicitly wants the screening to walk to UBO level + flag any sanctioned individual at >=25% effective stake. The CH-watch + sanctions-screening composition does both: walks the PSC tree to depth 5, computes UBOs at >=25%, screens each + the corporate name + returns a per-UBO sanctions-hit rollup.

The LSAG-2025 §B requirement

LSAG-2025 §B sets the baseline for the regulated firm's beneficial-ownership exposure check. The screening must walk to >=25% effective ownership + flag any individual on the OFSI / UN / EU sanctions lists OR the OpenSanctions PEP catalogue OR the adverse-media collection. The 25% threshold mirrors MLR-2017 reg 5(1)(a); control-natures (right-to-appoint-and-remove-directors etc) qualify regardless of share % per reg 5(1)(c). Failing to evidence the walk is the most common LSAG-2025 inspection finding.

How the API handles it

POST /v1/ch/companies/{number}/psc-tree?screen=true returns the full PSC tree (depth 5) with a per-UBO sanctions-hit rollup. Each UBO carries `uboScreening: {sanctionsHits, pepHits, pepMaxTier, adverseMediaHits}` so the AML officer's decision-support UI can render a green/amber/red badge directly. Walks handle cycles + non-UK leaves cleanly. For very layered structures (5+ levels), the partial walk surfaces what we resolved + flags the unresolved chain for manual review.

Cost at AML team scale

Per-check cost: £0.99 at 100-pack. A team running 200-500 KYB onboardings per month + ongoing monitoring: ~£200-500/month at 100-pack; £120-300/month at 1000-pack. The full letting-agent suite endpoint or conveyancer-pack endpoint already bundles this for those workflows. Pro tier (£14.95-£39.95) carries SLA + named-contact + on-demand deep refresh against OpenSanctions Match API for incident-response.

Frequently asked

How is effective stake computed through chains?

Lower-bound aggregation: 75% × 75% = 56.25%. The walker tracks every path from root to leaf + computes the multiplied stake. Control-natures qualify regardless of share % per MLR-2017 reg 5(1)(c).

What does the UBO screening rollup include?

Per UBO: sanctionsHits (count), pepHits (count), pepMaxTier (HIGH/MEDIUM/LOW/null), adverseMediaHits (count). The AML decision-support UI renders red on any sanctions hit OR HIGH PEP, amber on MEDIUM PEP or adverse-media ≥ 1, green otherwise.

How do you handle complex non-UK structures?

The walker stops at non-UK leaves + flags unresolved-walk: true. For matters where the non-UK chain matters, supplement with native-jurisdiction registry data + run sanctions screening on the named non-UK entity directly via /v1/sanctions/screen.

Cycle detection?

Per-walk path Set + CYCLE_MARKER stamping. Cycle nodes are flagged but resolvable branches still yield UBOs — partial-resolution is reported with the cycle flag rather than failing the whole walk.

Can I cache the walk?

PSC trees are cached for 30 days per company in the /v1/ch/companies/{number}/psc-tree endpoint. Pass `?fresh=1` to bypass + force a live walk.