Screening results
The data model of a LENS API screening result - subjects, hits, roles, relationships, hit ratings, warnings and errors, with reference values for role types, legal forms and operational status.
A search response has one entry per subject, and each entry carries the list entries that matched it. This page describes every property so hits can be interpreted correctly. Property names are camelCase and properties with a null value are omitted.
Company and person screenings return a compact form with a short line per hit, described in Company and person screening; the full entry of one of their hits has the Hit properties below.
Top level
| Property | Type | Description |
|---|---|---|
screeningId |
guid | The stored screening. See Reviewing hits. |
reused |
boolean | true when the same search ran within the last 24 hours and that result is returned, without a new order. |
requestedAtUtc |
date-time | When the screening was performed. For a reused search, when it first ran. |
source |
string | The engine the screening ran on: trapets or tic. |
testMode |
boolean | true when the screening ran against the test environment. See Test mode. |
order |
Order | The order this screening was placed as. |
summary |
Summary | Counts and the lists that were actually screened. |
results |
array of SubjectResult | One entry per subject, in the order submitted. |
warnings |
array of string | Warnings about individual subjects, if any. Absent when there are none. |
errors |
array of string | Errors for individual subjects, which were not screened. Absent when there are none. |
Order
| Property | Type | Description |
|---|---|---|
documentOrderGuid |
guid | Use this to look the screening up again through the orders API. |
orderedAtUtc |
date-time | When the order was placed. |
price |
number | Price of the screening according to your agreement. 0 in test mode. |
currency |
string | Always SEK. |
Summary
| Property | Type | Description |
|---|---|---|
subjectCount |
integer | Number of subjects in the request. |
individualHitCount |
integer | Number of person entries returned across all subjects. |
entityHitCount |
integer | Number of organisation entries returned across all subjects. |
totalHitCount |
integer | individualHitCount plus entityHitCount. |
servicesQueried |
array of string | The lists that were screened against. Compare this with what you expect; a misspelled serviceScope or a list missing from your account shows up here. |
SubjectResult
| Property | Type | Description |
|---|---|---|
reference |
string | The reference you supplied for the subject. |
subjectId |
integer | The subject in the stored screening. |
name |
string | The name you supplied. |
identityNumber |
string | The identityNumber you supplied. |
notScreenedReason |
string | screeningError when the lists could not be searched for the subject. It was not screened, whatever hitCount says. Absent for a screened subject. |
hitCount |
integer | Number of hits for this subject. |
hits |
array of Hit | The matching list entries, strongest hitRating first. |
Hit
One list entry that matched a subject. A person entry and an organisation entry share the same shape; properties that only apply to one of them are marked.
| Property | Type | Description |
|---|---|---|
type |
string | individual for a person, entity for an organisation. |
hitId |
integer | The hit in the stored screening, for details and decisions. |
isNew |
boolean | true when your team has not seen this entry for the same person or organisation before. |
resolution |
string | The team’s decision on the hit: pending, truePositive, falsePositive, escalated or noMatch, carried over from an earlier screening when there is one. |
name |
string | The name of the list entry. |
identityNumber |
string | Personal identity number of a person or organisation number of an organisation, when the list holds one. Always absent when isProtectedIdentity is true. On the tic engine only the screened subject’s own number, when the entry lists it. |
birthDate |
string | Person only. yyyy-MM-dd, yyyy-MM or yyyy. If the list reports more than one birth date this is a comma-separated list, for example 1957-01-01, 1956-12-31. If the source only has an approximate year, such as “circa 1966”, the list holds every year in a span of plus or minus three years. |
hitRating |
integer | What the entry matched on, 1 to 5. See Hit rating. |
hitRatingDescription |
string | The hit rating in words. |
nameMatchScore |
number | Name similarity between 0 and 1. Only present when minimumNameMatchScore was set; always present on the tic engine. |
listType |
string | The group the list belongs to: SANCTION or PEP. |
listItemDataType |
string | Individual or Entity, as reported by the list. |
sourceName |
string | The list that produced the hit, for example EU_GLOBAL. See Lists. |
externalId |
string | The list’s own identifier for the entry. Stable across screenings and useful for de-duplicating hits over time. |
lastUpdatedUtc |
date-time | When the entry was last updated on the list. |
tier |
integer | Person only. PEP seniority tier where 1 is the most senior. Only populated by the default engine’s global PEP list. |
isProtectedIdentity |
boolean | Person only. The person has a protected identity. The identity number is then never returned. |
isMale |
boolean | Person only. Absent when the sex is not known. |
title |
string | Person only. Title of the person. |
comment |
string | Free-text comment from the list, when there is one. |
legalForm |
string | Organisation only. See Legal forms. |
operationalStatus |
string | Organisation only. See Operational status. |
countries |
array of string | Every country registered to the entry, as ISO 3166-1 alpha-3 codes. Includes citizenship, residence, jurisdiction and registration countries, and countries taken from roles and addresses. |
citizenships |
array of string | Person only. The subset of countries registered as citizenships. |
aliases |
array of string | Every name the entry is known by. For organisations this is usually just the name. |
externalUrls |
array of string | Links to source documents, when the list provides them. |
roles |
array of Role | Person only. Political or public roles. This is what makes a person a PEP. |
engagements |
array of Engagement | Reserved for company engagements such as board positions and ownership. Not populated by the lists today. |
relationships |
array of Relationship | Family members and close associates, mainly on PEP entries. |
Role
A public or political function held by a person. Present on PEP entries.
| Property | Type | Description |
|---|---|---|
roleType |
string | Category of the role. See Role types. |
roleTypeDescription |
string | The role type in words. |
title |
string | Title of the role, for example the position held. |
organization |
string | The organisation the role belongs to, when known. |
countryCode |
string | ISO 3166-1 alpha-3 country the role applies to. Usually absent, since the relevant country is on the entry itself. |
from |
string | Date the role became active, as yyyyMMdd. |
to |
string | Date the role ended, as yyyyMMdd. Absent while the role is active. |
comment |
string | Description of the role. |
Relationship
A connection between the list entry and another person or organisation. relationshipType is what the named person is to the entry: on a PEP, Spouse names the PEP’s spouse. On the tic engine family members and close associates are on the list as persons: a hit for a PEP’s spouse names the PEP under relationships, see Hits with tic.
| Property | Type | Description |
|---|---|---|
name |
string | Name of the related person or organisation. |
relationshipType |
string | Child, ChildsSpouse, CloseAssociate, FamilyMember, Parent, Sibling, Spouse or Other. |
title |
string | The nature of the connection. |
comment |
string | Description of the relationship. |
Engagement
Reserved for a role or ownership in a company. The lists do not populate this data today, so the array is empty or absent.
| Property | Type | Description |
|---|---|---|
engagementType |
string | See Engagement types. |
name |
string | Name of the engagement holder. |
corporateId |
string | Organisation number of the company. |
ownershipStake |
number | Ownership share in percent, for ownership engagements. |
from |
date-time | Date the engagement was registered. |
to |
date-time | Date the engagement ended, if it is no longer active. |
Example response
Two subjects were screened. The first produced one PEP hit, the second produced nothing.
{
"requestedAtUtc": "2026-09-03T09:14:22.318Z",
"testMode": false,
"order": {
"documentOrderGuid": "3f1c9b2e-7d44-4a1b-9c0e-2b6f0a8d5e71",
"orderedAtUtc": "2026-09-03T09:14:22.301Z",
"price": 5.00,
"currency": "SEK"
},
"summary": {
"subjectCount": 2,
"individualHitCount": 1,
"entityHitCount": 0,
"totalHitCount": 1,
"servicesQueried": ["EU_GLOBAL", "UN_CONSOLIDATED", "OFAC", "PEP_Edge"]
},
"results": [
{
"reference": "cust-1001",
"name": "Anna Exempelsson",
"hitCount": 1,
"hits": [
{
"type": "individual",
"name": "Anna Exempelsson",
"birthDate": "1975-04-12",
"hitRating": 4,
"hitRatingDescription": "Träff på namn och födelseår eller födelsedatum",
"listType": "PEP",
"listItemDataType": "Individual",
"sourceName": "PEP_Edge",
"externalId": "SE-113942",
"lastUpdatedUtc": "2026-08-30T02:15:07",
"isMale": false,
"countries": ["SWE"],
"citizenships": ["SWE"],
"aliases": ["Anna Exempelsson", "Anna Maria Exempelsson"],
"roles": [
{
"roleType": "NationalLegislature",
"roleTypeDescription": "Nationalförsamling",
"title": "Riksdagsledamot",
"organization": "National Parliament",
"from": "20220926"
}
],
"relationships": [
{
"name": "Karl Exempelsson",
"relationshipType": "Spouse"
}
]
}
]
},
{
"reference": "cust-1002",
"identityNumber": "5560000000",
"hitCount": 0,
"hits": []
}
]
}Warnings and errors
A 200 OK response can still carry warnings and errors about individual subjects. Both are arrays of strings. Each message starts with the subject’s reference (or its name or identity number if no reference was given) so it can be tied back to a subject.
- Warning - the subject was screened, but part of its data was ignored. An invalid country code such as
SWDproduces a warning and the code is disregarded. - Error - the subject was not screened. The other subjects in the call were. Its result has
notScreenedReasonscreeningError, also when the screening is fetched again.
When no subject could be screened, the call fails with 502 and code screening_failed instead: nothing is stored or billed, and you can try again.
HTTP status codes
| Status | Meaning |
|---|---|
200 OK |
The screening ran. Check warnings and errors. |
400 Bad Request |
The request failed validation. The code property of the problem document is no_subjects, too_many_subjects, subject_not_identifiable, invalid_service_scope (a serviceScope naming only lists that are not screened) or invalid_engine (an engine other than trapets or tic). |
401 Unauthorized |
Missing or invalid API key. |
403 Forbidden |
The API key’s plan does not include screening. |
429 Too Many Requests |
Rate limit exceeded. See Rate limits. |
502 Bad Gateway |
Code screening_failed: the lists could not be searched for any subject. Nothing was stored or billed; try again. |
Reference values
Role types
Values of roleType on a Role. roleTypeDescription carries it in words.
roleType |
Description |
|---|---|
Government |
Government or ministry |
NationalLegislature |
National parliament |
CivilServant |
Senior civil servant |
EmbassyAndConsular |
Diplomatic or consular post |
ArmedForces |
Armed forces |
Judiciary |
Courts and judiciary |
StateCorporation |
State-owned company |
StateAgency |
State agency |
Political |
Political office |
PoliticalParty |
Political party |
Organization |
International or other organisation |
Other |
Other |
Legal forms
Values of legalForm on an organisation hit.
LimitedCompany, PrivateBusinessGovCtrl, ForeignCompany, Bank, SoleProprietorship, GeneralPartnership, Society, Foundation, HousingCompany, StateCountyCompany, ReligiousOrganization, InsuranceCompany, Collaborations
Operational status
Values of operationalStatus on an organisation hit.
Active, InactiveSleeping, UnderLiquidation, Liquidated, UnderBankruptcy, Bankrupt, Dissolved, Merged, Unregistered, Unknown, Dissolving, DissolvingByForce, DissolvedByForce, UnderReconstruction, CompanyDataOutOfDate
Engagement types
Values of engagementType on an Engagement, for when the lists start populating engagements.
Accountant, AssistantStatistician, Associate, Bearer, BeneficialOwner, BoardMember, CEO, Chairman, Commissioner, CompanyStructureOwner, Deputy, DeputyAccountant, DeputyBoardMember, DeputyCEO, DeputyChairman, DeputyCommissioner, DeputyLaymanAccountant, DeputyLiquidator, EmployeeRepresentative, ExternalCEO, ExternalCompanySignatory, ExternalDeputyCEO, GeneralPartner, InsuranceRepresentative, KeyPerson, LaymanAccountant, LiableAccountant, LimitedPartner, Liquidator, Manager, ManagingClerk, NotificationRecipient, NotKnown, Owner, Procurator
Country types
The countries array on a hit merges every country registered to the entry. The underlying registrations are typed as Citizenship, Jurisdiction, Registration, Residential or Other. Only the Citizenship type is broken out separately, as citizenships.
Data not returned
The list entries hold more data than the API returns today. The following is available on the underlying entries but not exposed: postal addresses, additional identity documents such as passport numbers, images, the original list an entry was consolidated from, and for organisations the registered owners, representatives, beneficial owners, industry codes, foundation date and signatory rules. Contact support if your use case needs any of it.