Skip to main content
Didit Raises $7.5M to Build the Infrastructure for Identity and Fraud
Didit
Back to blog
Blog · May 21, 2026

Automated UBO Identification & Ownership Graphs

Identify ultimate beneficial owners with ownership percentages, resolve nested corporate ownership layers, and map the full control graph of any company — part of a $2.00 KYB session.

By DiditUpdated
automated-ubo-identification-api.png

Every KYB obligation eventually arrives at the same question: who really owns this company? Not the front-line directors, not the holding company on the registry extract — the actual humans whose ownership stakes mean they ultimately control and benefit from the business. Identifying those ultimate beneficial owners (UBOs) is the hardest part of business verification, because ownership rarely runs in a straight line. A company is owned by another company, which is owned by a fund, which is owned by two individuals and a third holding entity in another country. Unwinding that by hand, registry by registry, is slow and error-prone.

Didit's Business Verification API does it automatically. The Key People feature of a KYB session extracts UBOs with their ownership percentages, returns the full cast of shareholders, directors, officers, and representatives, and resolves nested corporate ownership layers so you see who controls the entity at the bottom of the chain. Key People extraction is free as part of a KYB session — the full company verification is $2.00.

This guide walks through how UBO identification works, what the ownership graph contains, and how to integrate it.

Key takeaways

  • Automated UBO extraction. The kyb_key_people feature identifies ultimate beneficial owners with their ownership percentages — no manual registry digging.
  • The full control picture. Beyond UBOs, you get shareholders, directors, officers, and representatives in the same result.
  • Nested ownership resolved. When a company is owned by other companies, Didit resolves the corporate ownership layers to find the humans at the end of the chain.
  • Key People extraction is free as part of a KYB session. The full company verification — registry + UBO + officers + entity AML — is $2.00.
  • Closed-loop, unique to Didit. Each identified UBO can spawn a linked KYC session on the same /v3/ API, so you don't just name the owners — you verify them.
  • Statuses on every feature. kyb_key_people reports NOT_FINISHED, APPROVED, DECLINED, IN_REVIEW, RESUB_REQUESTED, or AWAITING_USER.

What UBO identification does

A UBO is a natural person who ultimately owns or controls a company, typically above a regulatory ownership threshold. The challenge is that ownership is layered: the immediate shareholders of the company you're onboarding are often other legal entities, not people. To find the real beneficial owners you have to walk the ownership tree — company by company, layer by layer — until you reach the individuals.

Didit's kyb_key_people feature does that walk automatically. It returns the people and entities connected to the company, classifies them by role, attaches ownership percentages where they apply, and flags corporate owners so the nested layers are explicit rather than hidden behind a single line item. The result is an ownership graph you can read, not a flat list you have to interpret.

Why it matters

Beneficial-ownership transparency is a cornerstone of modern AML regulation. EU AML directives require obliged entities to identify and verify beneficial owners above the ownership threshold; the US Corporate Transparency Act created a federal beneficial-ownership reporting regime; and FATF Recommendation 24 pushes the same standard globally. Onboarding a company without knowing who is behind it is precisely the gap that shell-company structures exploit.

The operational problem is the layering. A flat shareholder list tells you the company is owned by another company — useful, but not the answer the regulator wants. Resolving that into the actual humans is where most manual KYB processes break down, and where automated ownership-graph resolution earns its place.

Technical details

UBO identification runs inside a KYB session created against the unified /v3/ API.

curl -X POST https://verification.didit.me/v3/session/ \
  -H "x-api-key: $DIDIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workflow_id": "your_kyb_workflow_id",
    "vendor_data": "corp_client_3310",
    "callback": "https://yourapp.com/kyb/callback"
  }'

The kyb_key_people block in the result returns the control graph, with corporate owners flagged so nested layers are explicit:

{
  "kyb_key_people": {
    "status": "APPROVED",
    "ubos": [
      { "name": "Laura Méndez", "ownership_percentage": 60.0, "is_corporate": false },
      { "name": "Northwind Holding GmbH", "ownership_percentage": 40.0, "is_corporate": true,
        "owners": [
          { "name": "Thomas Berger", "ownership_percentage": 100.0, "is_corporate": false }
        ]
      }
    ],
    "directors": [ { "name": "Laura Méndez", "role": "DIRECTOR" } ],
    "officers": [ { "name": "Sven Albrecht", "role": "SECRETARY" } ],
    "representatives": [ { "name": "Laura Méndez", "role": "LEGAL_REPRESENTATIVE" } ]
  }
}

Roles returned. UBOs (with ownership percentage), shareholders, directors, officers, and representatives — plus corporate ownership layers, where a corporate owner carries its own owners until the chain resolves to individuals.

Feature status. kyb_key_people reports NOT_FINISHED, APPROVED, DECLINED, IN_REVIEW, RESUB_REQUESTED, or AWAITING_USER.

Webhooks. Subscribe to data.updated (session_kind: business) to receive the ownership graph as it's enriched, and status.updated to react to feature-status changes.

Price. Key People extraction is free as part of a KYB session. The full company verification is $2.00. Running linked KYC on an identified UBO is billed at standard User Verification rates.

Reading the ownership graph

The graph is built to be walked. Each entry carries a role and, where relevant, an ownership percentage. Individuals are the leaves; corporate owners are branches that carry their own owners. A two-line shareholder list — one person, one company — expands into the real structure: the person, plus everyone behind the company, down to the individuals who ultimately benefit.

This is what separates UBO identification from a shareholder dump. A shareholder list stops at the first layer. An ownership graph keeps resolving until every branch ends in a natural person, so the UBOs you report are the actual humans, not the holding companies in front of them.

Use cases

  • Marketplaces onboarding business sellers identify the owners behind each seller entity before enabling payouts.
  • Fintech and banking platforms opening corporate accounts resolve the full ownership chain to satisfy beneficial-ownership obligations.
  • Lending providers underwriting business borrowers see who ultimately controls the borrower — and therefore who is on the hook.
  • Crypto B2B platforms onboarding counterparty entities map ownership to ensure no sanctioned individual sits behind a corporate veil.

How to integrate with Didit

  1. Build the workflow. In the Business Console, create a KYB workflow with kyb_key_people enabled, and switch on linked KYC for UBOs if you want to verify the identified owners.
  2. Create the session. POST /v3/session/ with your KYB workflow_id and a vendor_data reference for your internal business record.
  3. Handle webhooks. Listen for data.updated and status.updated (session_kind: business) to receive and react to the ownership graph.
  4. Verify the owners. For each UBO, spawn a linked KYC session on the same /v3/ API to confirm the named individual is who they claim to be.

Because it's all on the unified /v3/ API, identifying a UBO and verifying that UBO are one continuous flow — not two disconnected tools and a manual handoff.

Frequently asked questions

How are ultimate beneficial owners identified?

Automatically, by the kyb_key_people feature of a KYB session. It returns UBOs with ownership percentages and resolves nested corporate ownership layers to find the individuals at the end of the chain.

Does it handle companies owned by other companies?

Yes. Corporate owners are flagged and carry their own owners, so Didit resolves the nested layers until ownership reaches natural persons.

What does UBO identification cost?

Key People extraction is free as part of a KYB session. The full company verification — registry, UBO, officers, and entity AML — is $2.00. Linked KYC on a UBO is billed at standard User Verification rates.

What roles does the result include?

UBOs (with ownership percentage), shareholders, directors, officers, and representatives, plus the corporate ownership layers connecting them.

Can I verify the UBOs, not just name them?

Yes. Each identified UBO can spawn a linked KYC session on the same unified /v3/ API — closed-loop verification that's unique to Didit.

Ready to get started?

Read the Business Verification overview in the docs, see how it fits the rest of the platform on the Business Verification product page, and check transparent per-call pricing on the pricing page. When you're ready, start free — 500 free KYC checks every month, and business verification at $2.00 per company.

Infrastructure for identity and fraud.

One API for KYC, KYB, Transaction Monitoring, and Wallet Screening. Integrate in 5 minutes.

Ask an AI to summarise this page
Automated UBO Identification API | Didit