New: our AI Agent is live — 140+ live registry connections, KYB without an integration. Try it →
On this page

Data dictionary

This is a field-level reference for the key objects the Know Your Customer Limited Public API v2 returns. It groups the fields you will read most often into identifiers, the case and status lifecycle, members and ownership, documents, AML, and IDV, with the type, where the field appears, its meaning, and a stability note for each. Read it alongside the Guide for the concepts and the API Reference for the full contract.

The Notes column is the part to read carefully: it flags which fields are stable to depend on, which are optional or nullable, which vary by jurisdiction, and which you should not hard-code against.

Read this first

A case does not report readiness through its status text. The status string can stay "Open" while the numeric statusId climbs through the build. Treat a case as ready when statusId is 3 and the structure is populated (members present, or org-chart nodes present). Do not key readiness off the status text, and do not key it off statusId alone. See Status progression.

Identifiers

These are the identifiers you pass between calls to address a case, a search match, a step, or an ownership link.

FieldWhere it appearsTypeMeaningNotes
caseCommonIdCompany case, individual case, each memberintegerThe unique identifier of a case. Returned when you create a case and used on every later call about it. Each individual member also has its own caseCommonId.Stable. The primary key you carry through a journey. Not optional on a created case.
externalCodeSearch result, create-company requeststringThe registration number the registry assigns to a company. Supply it (with the country) for an exact match when creating a case.Stable per company within a registry. Format varies by jurisdiction, so treat it as an opaque string, do not parse it.
rawnameSearch result, create-company requeststringThe company name exactly as the registry returns it. You pass the rawname from a search result back into case creation.Use the value as returned. Do not reformat or title-case it, the create call matches on the registry form.
codeiso31662Search request, create-company request, memberstringThe ISO 3166-2 country code identifying the jurisdiction, for example GB, SG, or HK. Routes the case to the correct registry.Stable. Note the casing of the key varies across payloads (for example codeiso31662 on requests, codeISO31662 on some member objects), so match the key exactly as documented for each call.
caseStepIdSteps, members, uploaded documents, org-chart nodeintegerThe unique identifier of a step within a case: one unit of verification work (registry fetch, document, AML, and so on).Stable within a case. Use it to read, update, or note a specific step.
caseLinkIdOrg-chart nodeintegerIdentifies the ownership link (the edge) that connects a node to its parent in the org-chart, as distinct from the party itself.Stable within a case. Distinguishes the same party appearing under more than one parent.

Case and status lifecycle

A company case is built asynchronously. You create it, then poll it until it is ready. These fields describe the case and its progress.

FieldWhere it appearsTypeMeaningNotes
statusIdCase common blockinteger (enum)The numeric build status of the case. Progresses through the build to the terminal value 3 (Ready). Observed set: {0, 3, 9, 50, 51, 53, 54, 100, 107}.Poll this, but do not treat readiness as statusId == 3 alone: combine it with a populated structure. See below.
statusCase common blockstring, nullableA human-readable status label.Do NOT use for readiness. The text can remain "Open" while statusId climbs. It is display text, not a control signal.
statusNameCase common blockstring, nullableA display name for the current status.Informational only. Same caution as status: do not key logic off it.
caseDecisionCase common blockstring, nullableThe decision recorded on the case (for example the outcome you set when you close it).Optional, null until you record a decision.
type / typeStringCase common blockinteger (enum) / stringWhether the case is a company case or an individual case (the enum has two values). typeString is the readable form.Stable per case. A case does not change type.
isDeactivatedCase common block, member, stepbooleanMarks a case, member, or step that does not require full verification (for example a minority shareholder below the shareholding threshold). It has still been screened against AML and sanctions lists.Stable. A deactivated step can be activated where full verification is required.
scheduledReviewDate / lastReviewDateCase common blockstring (date-time), nullableThe next scheduled re-review date and the date of the last review, driving ongoing-due-diligence cadence.Optional, null until set.
allUbosIdentifiedCompany case detailsstringWhether every ultimate beneficial owner was identified for the company.A Title-case string, "Yes" or "No", not a boolean. Compare against those exact strings, do not coerce to a boolean.

Status progression

The typical progression, and the meaning of each status:

statusIdStageMeaning
0OpenInitializing. The case has been created and the build has not started.
50ProcessingQueued for build.
51ProcessingFetching the registry record.
53, 54ProcessingBuild sub-steps. A varying subset appears depending on the case.
9ProcessingGoogle search step.
100ProcessingAML checks.
107ProcessingBuilding the structure.
3ReadyTerminal ready state. The case is built.
Do not hard-code the intermediate path

A case moves 0 then 50 then 51 then a varying subset of {53, 54, 9, 100, 107} then 3. Not every case passes through every intermediate status, and the subset differs by jurisdiction and by what the case requires. Do not assume any single intermediate value (for example 100) always appears. A case that does not complete can also end failed or expired rather than reaching 3; handle a terminal non-ready outcome as well as success.

Readiness rule

Ready = statusId is 3 AND the structure is populated: members present (member count greater than zero) or org-chart nodes present (node count greater than zero). This structural check is the reliable readiness test. The status text is not, and statusId on its own is not.

Members and ownership

A company case resolves the parties who own and control the company. They appear both as a flat member list and as a recursive org-chart. These fields describe both.

FieldWhere it appearsTypeMeaningNotes
memberTypeMember (case member)string (enum)Whether the member is an individual or a company. Values are "Individual" and "Company".Stable string enum. Note the object schemas are named IndividualMember and CompanyMember, but the discriminator value on the wire is the memberType string. Branch on the string.
controllingEntitiesAndIndividualsCompany members detailarray of member objectsThe parties that control the company (its controlling entities and individuals). A parallel controllingEntitiesAndIndividualsTitle carries the display label.May be empty for some structures. Iterate defensively.
shareholdersAndBeneficialOwnersCompany members detailarray of shareholder objectsThe shareholders and beneficial owners of the company.Present on a built company case. Can be empty depending on the structure.
roleOrg-chart node, shareholder, officerstring, nullableThe party’s role in the structure. Observed values include "Subject" (the company being verified) and director or shareholder roles.Treat as an open string set, new roles can appear. Note one live value is spelled "Spose" (a spelling of “Spouse”). Match the value as returned, do not assume the corrected spelling.
effectivePercentageOrg-chart nodenumber, nullableThe effective ownership percentage a node holds, after tracing through intermediate companies.May be null when the percentage is not resolvable. Do not assume a number is always present.
sharesOrg-chart node, shareholdernumber, nullableThe raw share count or holding recorded for the party.Optional, nullable. Distinct from effectivePercentage.
registryProcessedCompany memberstring, nullableIndicates whether the member company’s own registry record was processed.A string, not a boolean. Read it as a string value.
isDeactivatedMember, stepbooleanSee the case and status table: a minority or already-cleared party that has been screened but does not need full verification.Stable. Activatable where full verification is required.

Org-chart node

The org-chart is a recursive tree. A root company node carries nested arrays of children, and each child is itself an org-chart node with the same shape, so ownership can run through many levels of holding companies down to the individuals (the UBOs) at the leaves.

FieldWhere it appearsTypeMeaningNotes
nameOrg-chart nodestring, nullableThe party’s name.Present on resolved nodes.
shareholdersOrg-chart nodearray of org-chart nodes, nullableThe node’s shareholders, each a full org-chart node. This is the recursion: a shareholder can itself be a company with its own shareholders.Recurse to find UBOs. May be null or empty at a leaf. Walk the tree, do not read one level.
officers, others, jointShareholderMembersOrg-chart nodearray of org-chart nodes, nullableFurther child collections on a node: officers, other related parties, and joint shareholders.All nullable. Include them when walking the tree if you need the full structure.
caseCommonId, caseStepId, caseLinkIdOrg-chart nodeintegerIdentifiers linking the node back to its case, its step, and its ownership link. See Identifiers.Use caseCommonId to address an individual node as a case in its own right.
Risk color is an integer

Where a case carries risk ratings (client, channel, product, country, and total), each rating’s color is an integer enum, not a string. It is a number in the range 0 to 5. Do not compare it against a string such as "Green", map the integer to your own label.

Documents

A company case retrieves registry documents; an individual case collects identity documents. Uploaded and retrieved documents share a common shape.

FieldWhere it appearsTypeMeaningNotes
categoryDocument, upload resultstring, nullableThe document’s category. Documents fall into two categories: Retrieved by default (collected as part of the case) and Available on demand (obtainable when you request them).Use exactly these two category concepts. Do not label documents “mandatory” versus “non-mandatory”, that is not the model.
nameDocument, upload resultstring, nullableThe document’s name or title.Display text.
linkDocument, upload resultstring, nullableWhere the document can be retrieved. Use it to download the stored document for that case.Address the specific stored document via this link.
dataSourceDocument leaf, memberstring (opaque code)An opaque code identifying where a data point or document originated (for example "HKCR").Treat as an opaque identifier only. It is a code, not a label to display, and not something to build a lookup against beyond noting that the field exists.
caseDocumentIdUpload resultintegerIdentifies the stored document.Stable per stored document.
prevalidationMessagesUpload resultarray of key/value pairs, nullableValidation findings on an uploaded document. Empty for an acceptable document; carries a message such as IdentityDocumentNotRecognized for one that is not.An empty array means no findings. Always check it, do not assume upload implies acceptance.

AML

AML screening (sanctions, PEP, and adverse-media) runs as part of a case. The result is a summary you read on the case, with per-category outcomes.

FieldWhere it appearsTypeMeaningNotes
isCaseAMLPositiveCompany details, shareholder, officer, UBObooleanWhether the party has an AML match that has not been excluded.Stable boolean. A clear party is false.
caseAmlSummaryCompany details, membersummary objectThe AML summary for a case or party. Contains a worldCheckSummary and a lexisNexisCheckSummary.Read the summary rather than assuming a single flag captures everything.
worldCheckSummaryAML summaryobject of per-category valuesPer-category screening outcomes: pep, sanctions, soe, crimes, terrorism, lawEnforcement, regulatoryEnforcement, other, and more.Each category is one of the summary values below. Iterate the categories rather than checking one.
category valueEach category abovestring (enum)The outcome for a category. One of "NA", "NoMatches", "HasMatches", "AllMatchesExcluded"."AllMatchesExcluded" means matches existed but were dismissed as false positives. Treat it distinctly from "NoMatches".

IDV (identity verification)

Identity documents on an individual case are verified through a third-party identity-verification provider (Au10tix) under the hood. The verdict fields below appear at a high level on an individual’s identity result. They are surfaced through the API; the underlying verification is performed by the provider.

FieldWhere it appearsTypeMeaningNotes
triggeredRuleIndividual identity resultstringThe rule that determined the verdict on the submitted identity document (for example the rule that flagged it).Provider-supplied. Treat the value as an opaque label, the rule set can change.
forgeryTestsIndividual identity resultcollectionThe document-forgery tests run against the identity document and their outcomes.Read as a collection of test outcomes, not a single pass or fail.
identityReportIndividual identity resultobjectThe overall identity-verification report for the individual, assembling the provider’s findings.The high-level container for the verdict. Do not depend on a fixed internal shape; read the fields you need defensively.
Sandbox behaviour

In the sandbox, identity verdicts are driven by the sample identity documents you upload, so you can exercise both an accepted document and a rejected one (which returns a prevalidation message such as IdentityDocumentNotRecognized). Sandbox results are for evaluation only and are not for production compliance use.