Search PEP, sanctions and adverse media lists
curl --request POST \
--url https://lens-api.tic.io/screening/search \
--header 'Content-Type: application/json-patch+json' \
--header 'x-api-key: <api-key>' \
--data '
{
"subjects": [
{
"reference": "<string>",
"name": "<string>",
"identityNumber": "<string>",
"birthDate": "<string>",
"countries": [
"<string>"
]
}
],
"serviceScope": "<string>",
"nameMatching": "<string>",
"minimumNameMatchScore": 123,
"fuzzyBirthDateMatching": true,
"updatedAfter": "2023-11-07T05:31:56Z",
"minExpires": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://lens-api.tic.io/screening/search"
payload = {
"subjects": [
{
"reference": "<string>",
"name": "<string>",
"identityNumber": "<string>",
"birthDate": "<string>",
"countries": ["<string>"]
}
],
"serviceScope": "<string>",
"nameMatching": "<string>",
"minimumNameMatchScore": 123,
"fuzzyBirthDateMatching": True,
"updatedAfter": "2023-11-07T05:31:56Z",
"minExpires": "2023-11-07T05:31:56Z"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json-patch+json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json-patch+json'},
body: JSON.stringify({
subjects: [
{
reference: '<string>',
name: '<string>',
identityNumber: '<string>',
birthDate: '<string>',
countries: ['<string>']
}
],
serviceScope: '<string>',
nameMatching: '<string>',
minimumNameMatchScore: 123,
fuzzyBirthDateMatching: true,
updatedAfter: '2023-11-07T05:31:56Z',
minExpires: '2023-11-07T05:31:56Z'
})
};
fetch('https://lens-api.tic.io/screening/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://lens-api.tic.io/screening/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'subjects' => [
[
'reference' => '<string>',
'name' => '<string>',
'identityNumber' => '<string>',
'birthDate' => '<string>',
'countries' => [
'<string>'
]
]
],
'serviceScope' => '<string>',
'nameMatching' => '<string>',
'minimumNameMatchScore' => 123,
'fuzzyBirthDateMatching' => true,
'updatedAfter' => '2023-11-07T05:31:56Z',
'minExpires' => '2023-11-07T05:31:56Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json-patch+json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://lens-api.tic.io/screening/search"
payload := strings.NewReader("{\n \"subjects\": [\n {\n \"reference\": \"<string>\",\n \"name\": \"<string>\",\n \"identityNumber\": \"<string>\",\n \"birthDate\": \"<string>\",\n \"countries\": [\n \"<string>\"\n ]\n }\n ],\n \"serviceScope\": \"<string>\",\n \"nameMatching\": \"<string>\",\n \"minimumNameMatchScore\": 123,\n \"fuzzyBirthDateMatching\": true,\n \"updatedAfter\": \"2023-11-07T05:31:56Z\",\n \"minExpires\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json-patch+json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://lens-api.tic.io/screening/search")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json-patch+json")
.body("{\n \"subjects\": [\n {\n \"reference\": \"<string>\",\n \"name\": \"<string>\",\n \"identityNumber\": \"<string>\",\n \"birthDate\": \"<string>\",\n \"countries\": [\n \"<string>\"\n ]\n }\n ],\n \"serviceScope\": \"<string>\",\n \"nameMatching\": \"<string>\",\n \"minimumNameMatchScore\": 123,\n \"fuzzyBirthDateMatching\": true,\n \"updatedAfter\": \"2023-11-07T05:31:56Z\",\n \"minExpires\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://lens-api.tic.io/screening/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json-patch+json'
request.body = "{\n \"subjects\": [\n {\n \"reference\": \"<string>\",\n \"name\": \"<string>\",\n \"identityNumber\": \"<string>\",\n \"birthDate\": \"<string>\",\n \"countries\": [\n \"<string>\"\n ]\n }\n ],\n \"serviceScope\": \"<string>\",\n \"nameMatching\": \"<string>\",\n \"minimumNameMatchScore\": 123,\n \"fuzzyBirthDateMatching\": true,\n \"updatedAfter\": \"2023-11-07T05:31:56Z\",\n \"minExpires\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"requestedAtUtc": "2023-11-07T05:31:56Z",
"source": "<string>",
"order": {
"documentOrderGuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"orderedAtUtc": "2023-11-07T05:31:56Z",
"price": 123,
"currency": "<string>"
},
"summary": {
"subjectCount": 123,
"individualHitCount": 123,
"entityHitCount": 123,
"totalHitCount": 123,
"servicesQueried": [
"<string>"
]
},
"results": [
{
"reference": "<string>",
"name": "<string>",
"identityNumber": "<string>",
"hitCount": 123,
"hits": [
{
"type": "<string>",
"name": "<string>",
"identityNumber": "<string>",
"birthDate": "<string>",
"hitRating": 123,
"hitRatingDescription": "<string>",
"nameMatchScore": 123,
"listType": "<string>",
"listItemDataType": "<string>",
"sourceName": "<string>",
"externalId": "<string>",
"lastUpdatedUtc": "2023-11-07T05:31:56Z",
"tier": 123,
"isProtectedIdentity": true,
"isMale": true,
"title": "<string>",
"comment": "<string>",
"legalForm": "<string>",
"operationalStatus": "<string>",
"countries": [
"<string>"
],
"citizenships": [
"<string>"
],
"aliases": [
"<string>"
],
"externalUrls": [
"<string>"
],
"roles": [
{
"roleType": "<string>",
"roleTypeDescription": "<string>",
"title": "<string>",
"organization": "<string>",
"countryCode": "<string>",
"from": "<string>",
"to": "<string>",
"comment": "<string>"
}
],
"engagements": [
{
"engagementType": "<string>",
"name": "<string>",
"corporateId": "<string>",
"ownershipStake": 123,
"from": "<string>",
"to": "<string>"
}
],
"relationships": [
{
"name": "<string>",
"relationshipType": "<string>",
"title": "<string>",
"comment": "<string>"
}
]
}
]
}
],
"warnings": [
"<string>"
],
"errors": [
"<string>"
]
}Screening
Search PEP, sanctions and adverse media lists
Screens one or more people or organisations by name and/or identity number, without requiring them to exist as a person or company record. Several subjects can be screened in one call and each is returned separately. Every call places a billable order and returns its DocumentOrderGuid, so the screening can be retrieved again later through the orders API.
POST
/
screening
/
search
Search PEP, sanctions and adverse media lists
curl --request POST \
--url https://lens-api.tic.io/screening/search \
--header 'Content-Type: application/json-patch+json' \
--header 'x-api-key: <api-key>' \
--data '
{
"subjects": [
{
"reference": "<string>",
"name": "<string>",
"identityNumber": "<string>",
"birthDate": "<string>",
"countries": [
"<string>"
]
}
],
"serviceScope": "<string>",
"nameMatching": "<string>",
"minimumNameMatchScore": 123,
"fuzzyBirthDateMatching": true,
"updatedAfter": "2023-11-07T05:31:56Z",
"minExpires": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://lens-api.tic.io/screening/search"
payload = {
"subjects": [
{
"reference": "<string>",
"name": "<string>",
"identityNumber": "<string>",
"birthDate": "<string>",
"countries": ["<string>"]
}
],
"serviceScope": "<string>",
"nameMatching": "<string>",
"minimumNameMatchScore": 123,
"fuzzyBirthDateMatching": True,
"updatedAfter": "2023-11-07T05:31:56Z",
"minExpires": "2023-11-07T05:31:56Z"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json-patch+json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json-patch+json'},
body: JSON.stringify({
subjects: [
{
reference: '<string>',
name: '<string>',
identityNumber: '<string>',
birthDate: '<string>',
countries: ['<string>']
}
],
serviceScope: '<string>',
nameMatching: '<string>',
minimumNameMatchScore: 123,
fuzzyBirthDateMatching: true,
updatedAfter: '2023-11-07T05:31:56Z',
minExpires: '2023-11-07T05:31:56Z'
})
};
fetch('https://lens-api.tic.io/screening/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://lens-api.tic.io/screening/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'subjects' => [
[
'reference' => '<string>',
'name' => '<string>',
'identityNumber' => '<string>',
'birthDate' => '<string>',
'countries' => [
'<string>'
]
]
],
'serviceScope' => '<string>',
'nameMatching' => '<string>',
'minimumNameMatchScore' => 123,
'fuzzyBirthDateMatching' => true,
'updatedAfter' => '2023-11-07T05:31:56Z',
'minExpires' => '2023-11-07T05:31:56Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json-patch+json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://lens-api.tic.io/screening/search"
payload := strings.NewReader("{\n \"subjects\": [\n {\n \"reference\": \"<string>\",\n \"name\": \"<string>\",\n \"identityNumber\": \"<string>\",\n \"birthDate\": \"<string>\",\n \"countries\": [\n \"<string>\"\n ]\n }\n ],\n \"serviceScope\": \"<string>\",\n \"nameMatching\": \"<string>\",\n \"minimumNameMatchScore\": 123,\n \"fuzzyBirthDateMatching\": true,\n \"updatedAfter\": \"2023-11-07T05:31:56Z\",\n \"minExpires\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json-patch+json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://lens-api.tic.io/screening/search")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json-patch+json")
.body("{\n \"subjects\": [\n {\n \"reference\": \"<string>\",\n \"name\": \"<string>\",\n \"identityNumber\": \"<string>\",\n \"birthDate\": \"<string>\",\n \"countries\": [\n \"<string>\"\n ]\n }\n ],\n \"serviceScope\": \"<string>\",\n \"nameMatching\": \"<string>\",\n \"minimumNameMatchScore\": 123,\n \"fuzzyBirthDateMatching\": true,\n \"updatedAfter\": \"2023-11-07T05:31:56Z\",\n \"minExpires\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://lens-api.tic.io/screening/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json-patch+json'
request.body = "{\n \"subjects\": [\n {\n \"reference\": \"<string>\",\n \"name\": \"<string>\",\n \"identityNumber\": \"<string>\",\n \"birthDate\": \"<string>\",\n \"countries\": [\n \"<string>\"\n ]\n }\n ],\n \"serviceScope\": \"<string>\",\n \"nameMatching\": \"<string>\",\n \"minimumNameMatchScore\": 123,\n \"fuzzyBirthDateMatching\": true,\n \"updatedAfter\": \"2023-11-07T05:31:56Z\",\n \"minExpires\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"requestedAtUtc": "2023-11-07T05:31:56Z",
"source": "<string>",
"order": {
"documentOrderGuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"orderedAtUtc": "2023-11-07T05:31:56Z",
"price": 123,
"currency": "<string>"
},
"summary": {
"subjectCount": 123,
"individualHitCount": 123,
"entityHitCount": 123,
"totalHitCount": 123,
"servicesQueried": [
"<string>"
]
},
"results": [
{
"reference": "<string>",
"name": "<string>",
"identityNumber": "<string>",
"hitCount": 123,
"hits": [
{
"type": "<string>",
"name": "<string>",
"identityNumber": "<string>",
"birthDate": "<string>",
"hitRating": 123,
"hitRatingDescription": "<string>",
"nameMatchScore": 123,
"listType": "<string>",
"listItemDataType": "<string>",
"sourceName": "<string>",
"externalId": "<string>",
"lastUpdatedUtc": "2023-11-07T05:31:56Z",
"tier": 123,
"isProtectedIdentity": true,
"isMale": true,
"title": "<string>",
"comment": "<string>",
"legalForm": "<string>",
"operationalStatus": "<string>",
"countries": [
"<string>"
],
"citizenships": [
"<string>"
],
"aliases": [
"<string>"
],
"externalUrls": [
"<string>"
],
"roles": [
{
"roleType": "<string>",
"roleTypeDescription": "<string>",
"title": "<string>",
"organization": "<string>",
"countryCode": "<string>",
"from": "<string>",
"to": "<string>",
"comment": "<string>"
}
],
"engagements": [
{
"engagementType": "<string>",
"name": "<string>",
"corporateId": "<string>",
"ownershipStake": 123,
"from": "<string>",
"to": "<string>"
}
],
"relationships": [
{
"name": "<string>",
"relationshipType": "<string>",
"title": "<string>",
"comment": "<string>"
}
]
}
]
}
],
"warnings": [
"<string>"
],
"errors": [
"<string>"
]
}Enterprise+ tier
Screens people and organisations against PEP, sanctions and adverse media lists. Unlike the
screening endpoints on companies
and persons, the subject does
not need to exist as a record in the platform - you supply the name and/or identity number yourself.
The Screening overview explains how matching and hit ratings work,
Results describes every property of a hit, and
Lists covers which lists are screened.
Subjects
Up to 50 subjects can be screened in one call. Each is returned separately, in the order it was submitted, and each needs a name, an identity number, or both.identityNumber- personnummer or samordningsnummer (10 or 12 digits), or organisationsnummer (10 digits). Matched exactly, and a match here outweighs the name.name- a subject carrying both a name and an identity number matches on either one, not both.birthDate-yyyy-MM-dd,yyyy-MMoryyyy. List entries with no known birth date always match, whatever you supply.countries- ISO 3166-1 alpha-3 codes, e.g.["SWE", "NOR"]. Narrowing by country cuts false positives, but can also drop true hits where the list entry has poor country data.reference- your own reference, echoed back on the matching result so you can pair them up. Generated for you if omitted.
Matching
nameMatching defaults to Regular, which matches exact aliases. Phonetic also matches
similar-sounding names - it finds more true hits and considerably more false ones. Phonetic matching
requires minimumNameMatchScore (0.6 to 0.99) to trim the tail; a value between 0.75 and 0.9 is
recommended, and the score is ignored for regular matching.
serviceScope selects which lists to screen against, for example SANCTION or PEP_Edge, or a
comma-separated combination. Leave it empty to use every service enabled for your account.
Test mode
SettestMode to true to run the screening against the test environment. The response has the
same shape, the order is placed free of charge, and hits come from test data rather than the live
lists. See Test mode.
Every live call places a billable order, including calls that return no hits. The response carries
order.documentOrderGuid, which you can use to retrieve the same screening later through the
orders API.Results are not reused between calls - each request screens the lists fresh, so repeating a
search bills again rather than replaying a recent result.Partial failures
A screening can succeed overall while individual subjects fail.warnings reports subjects the
supplier ignored, and errors reports per-subject failures; the rest of the screening still runs.
Check both before treating a subject as clear.Authorizations
Body
application/json-patch+jsonapplication/jsontext/jsonapplication/*+json