Adverse Media Screening API
Screen more than 235,000 news sources.
The dilisense API provides you with machine-to-machine access to the dilisense methods for checking individual and entity names against Adverse Media news sources. Our APIs are REST based and as such accept GET requests with the parameters specified in this document. The response is always in JSON format, successes as well as errors. The API calls have to be made via HTTPS requests.
1. Authentication
All API calls to dilisense require an authentication via API key. Specifically we expect the x-api-key value to be set in the header of your API call. If the API key is not valid, the API call will return a 401 HTTP error code.
We will provide you with a private API key, which you can use for integrating with our API. The private API key is only intended for your own use, as we track the number of API calls with this key. The key has to be securely stored on your side to avoid any misuse by unauthorized parties.
2. checkIndividual (GET)
The checkIndividual API method searches for individuals that match certain criteria.
Endpoint
https://api.dilisense.com/v1/media/checkIndividual
Request parameters
search_all
Search string that is screened against Adverse Media news sources. All matches are considered. Cannot be combined with 'names' parameter.
names
Search string that is screened against Adverse Media news sources. Only names of natural persons within the articles are considered. Cannot be combined with 'search_all' parameter.
fetch_articlesoptional
Determines if detailed articles are included in the response. Defaults to false.
start_dateoptional
If set, considers only articles from the start_date until "today". The format is yyyy-mm-dd (inclusive), for example 2023-10-23.
Response
The response provided back is formatted as JSON.
timestampstring
The timestamp of the response (ISO 8601 date time).
total_hitsnumber
The sum of the category-specific hits in news_exposures.
The number of articles per category is limited to 10 by default, so total_hits is normally much larger than the number of articles you receive.
news_exposuresobject
Object with the keys specified in category.
All categories will be returned, even if they contain 0 hits.
Each object within news_exposures contains the following attributes:
category (enumeration)
- political
- regulatory
- terrorism
- financial_crime
- organized_crime
- violent_crime
hits (number)
The number of adverse media hits found in this category.
articles (array)
The array is only present if fetch_articles parameter is set to 'true'.
The number of articles per category is limited to 10 items. The limit can be increased per API key if required.
Each article contains the following attributes:
timestamp (string)
The timestamp of the article (ISO 8601 date time).
language (string)
The ISO 639-1 code of the article language (e.g. en for English).
headline (string)
The headline of the article.
source_link (string)
The link to the source of the article. Some articles might be only accessible with a subscription of the respective media company.
body (string)
The content of the article. Paragraphs are marked with <p></p>.
Example
- curl
- Python
- Java
- Javascript
Request
curl --location --request GET 'https://api.dilisense.com/v1/media/checkIndividual?search_all=Boris%20Johnson' \
--header 'x-api-key: <api_key>'
import requests
url = "https://api.dilisense.com/v1/media/checkIndividual?search_all=Boris Johnson"
payload={}
headers = {
'x-api-key': '<api_key>'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.dilisense.com/v1/media/checkIndividual?search_all=Boris Johnson"))
.header("x-api-key", "<api_key>")
.build();
client.sendAsync(request, BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
var myHeaders = new Headers();
myHeaders.append("x-api-key", "<api_key>");
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
fetch("https://api.dilisense.com/v1/media/checkIndividual?search_all=Boris Johnson", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Response (fetch_articles=false)
{
"timestamp": "2024-12-20T14:17:16.843Z",
"total_hits": 3508683,
"news_exposures": {
"violent_crime": {
"category": "violent_crime",
"hits": 28466
},
"terrorism": {
"category": "terrorism",
"hits": 796691
},
"regulatory": {
"category": "regulatory",
"hits": 984492
},
"financial_crime": {
"category": "financial_crime",
"hits": 26088
},
"political": {
"category": "political",
"hits": 1649400
},
"organized_crime": {
"category": "organized_crime",
"hits": 23546
}
}
}
Response (fetch_articles=true)
{
"timestamp": "2024-11-11T14:22:07.447Z",
"total_hits": 801,
"news_exposures": {
"terrorism": {
"category": "terrorism",
"hits": 801,
"articles": [
{
"timestamp": "2024-11-06T08:02:35Z",
"language": "en",
"headline": "Boris Johnson ‘fired' during live US election coverage for plugging memoir - Evening Standard 1",
"body": "<p> Channel 4 ‘fired' Boris Johnson from US election show for promoting his book, co-host says</p> <p> The Guardian</p> <p> US election 2024 result viewers praise Emily Maitlis for eviscerating Boris Johnson</p> <p> The Independent</p> <p> Boris Johnson ‘fired' from Channel 4's US election coverage</p> <p> The Telegraph</p> <p> Stormy Daniels and Boris Johnson were only the start of a mad night</p> <p> The Times</p>",
"source_link": "https://www.info-flash.com/info-flash/actualites/royaume-uni/93518-united-kingdom/79685542-boris-johnson-fired-during-live-us-election-coverage-for-plugging-memoir-evening-standard.html"
}
]
}
}
}
The data above is test data to illustrate the payload. Any similarity to actual individuals, existing or past, is purely coincidental.
3. checkEntity (GET)
The checkEntity API method searches for entities that match certain criteria.
Endpoint
https://api.dilisense.com/v1/media/checkEntity
Request parameters
search_all
Search string that is screened against Adverse Media news sources. All matches are considered. Cannot be combined with 'names' parameter.
names
Search string that is screened against Adverse Media news sources. Only names of entities within the articles are considered. Cannot be combined with 'search_all' parameter.
fetch_articlesoptional
Determines if detailed articles are included in the response. Defaults to false.
start_dateoptional
If set, considers only articles from the start_date until "today". The format is yyyy-mm-dd (inclusive), for example 2023-10-23.
Response
The response provided back is formatted as JSON.
timestampstring
The timestamp of the response (ISO 8601 date time).
total_hitsnumber
The sum of the category-specific hits in news_exposures.
The number of articles per category is limited to 10 by default, so total_hits is normally much larger than the number of articles you receive.
news_exposuresobject
Object with the keys specified in category.
All categories will be returned, even if they contain 0 hits.
Each object within news_exposures contains the following attributes:
category (enumeration)
- political
- regulatory
- terrorism
- financial_crime
- organized_crime
- violent_crime
hits (number)
The number of adverse media hits found in this category.
articles (array)
The array is only present if fetch_articles parameter is set to 'true'.
The number of articles per category is limited to 10 items. The limit can be increased per API key if required.
Each article contains the following attributes:
timestamp (string)
The timestamp of the article (ISO 8601 date time).
language (string)
The ISO 639-1 code of the article language (e.g. en for English).
headline (string)
The headline of the article.
source_link (string)
The link to the source of the article. Some articles might be only accessible with a subscription of the respective media company.
body (string)
The content of the article. Paragraphs are marked with <p></p>.
Example
- curl
- Python
- Java
- Javascript
Request
curl --location --request GET 'https://api.dilisense.com/v1/media/checkEntity?search_all=Deutsche%20Bank' \
--header 'x-api-key: <api_key>'
import requests
url = "https://api.dilisense.com/v1/media/checkEntity?search_all=Deutsche%20Bank"
payload={}
headers = {
'x-api-key': '<api_key>'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.dilisense.com/v1/media/checkEntity?search_all=Deutsche%20Bank"))
.header("x-api-key", "<api_key>")
.build();
client.sendAsync(request, BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
var myHeaders = new Headers();
myHeaders.append("x-api-key", "<api_key>");
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
fetch("https://api.dilisense.com/v1/media/checkEntity?search_all=Deutsche%20Bank", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Response (fetch_articles=false)
{
"timestamp": "2024-12-20T14:17:16.843Z",
"total_hits": 3508683,
"news_exposures": {
"violent_crime": {
"category": "violent_crime",
"hits": 28466
},
"terrorism": {
"category": "terrorism",
"hits": 796691
},
"regulatory": {
"category": "regulatory",
"hits": 984492
},
"financial_crime": {
"category": "financial_crime",
"hits": 26088
},
"political": {
"category": "political",
"hits": 1649400
},
"organized_crime": {
"category": "organized_crime",
"hits": 23546
}
}
}
Response (fetch_articles=true)
{
"timestamp": "2024-11-11T14:22:07.447Z",
"total_hits": 126046,
"news_exposures": {
"regulatory": {
"category": "regulatory",
"hits": 126046,
"articles": [
{
"timestamp": "2025-04-06T01:10:53Z",
"id": "274534:3705",
"language": "en",
"headline": "Deutsche Bank Fined €23mn by German Regulator: FT",
"body": "<p>This hefty penalty is the second highest on record for BaFin, following a €40 million fine in 2015 over anti-money laundering lapses. The latest fine underscores Deutsche Bank's persistent struggle to overcome its history of regulatory lapses.</p> <p> The bulk of the new fine, €14.8 million, was imposed due to flaws in an internal investigation into mis-selling allegations in Spain. A whistleblower in 2019 flagged issues, leading to an internal probe that revealed Deutsche Bank had pushed risky foreign exchange derivatives to corporate clients. These clients, seeking to hedge currency risks, were sometimes exposed to heavy losses. Fewer than 12 individuals were sanctioned by Deutsche, with most facing penalties for lack of oversight and some for exploiting flawed controls in bad faith.</p> <p> Spain's National Securities Market Commission (CNMV) also fined Deutsche Bank €10 million for alleged serious infringements of Spanish and EU law. The regulator found that Deutsche Bank failed to inform corporate clients properly about the risks associated with the derivatives. Deutsche Bank has announced plans to appeal this fine.</p> <p> BaFin criticized Deutsche Bank for a slow response to the issues. “The company did not make appropriate organisational arrangements to speed up the investigation of the breaches of the law and to implement measures to remedy the situation,” BaFin stated. Deutsche Bank has chosen not to appeal the fine imposed by BaFin.</p> <p> The Financial Times reported in 2023 that Deutsche Bank continued to sell risky foreign exchange derivatives to companies in Spain that had suffered significant losses from such products. This revelation highlights the bank's ongoing struggle to address mis-selling issues effectively.</p> <p> BaFin also fined Deutsche's domestic retail division, Postbank, €4.6 million for failing to record telephone conversations with clients who received investment advice and €3.7 million for delayed processing of customer switching applications. Deutsche Bank stated that the penalty was covered by existing provisions and had no impact on its first-quarter profit. The bank emphasized its full cooperation with BaFin and improvements in processes and controls.</p> <p> The regulatory scrutiny on Deutsche Bank highlights a broader trend in the financial industry: enhanced oversight and compliance requirements. Financial institutions are under increasing pressure to implement robust internal controls and compliance frameworks to prevent mis-selling and other regulatory lapses.</p> <p> As regulatory demands grow, financial institutions are turning to technological innovations to stay compliant. Artificial Intelligence (AI) and machine learning (ML) are being used to monitor transactions, detect anomalies, and ensure adherence to regulations. For instance, AI-driven analytics can help identify patterns of mis-selling and alert banks to potential issues before they escalate.</p> <p> The role of whistleblowers in uncovering misconduct cannot be overstated. The case of Deutsche Bank in Spain underscores the importance of protecting and encouraging whistleblowers. Financial institutions are likely to see an increase in whistleblower programs and protections to foster a culture of transparency and accountability.</p> <p> Q: What was the primary reason for BaFin's latest fine on Deutsche Bank?</p> <p> A: The primary reason was flaws in an internal investigation into mis-selling allegations in Spain, where Deutsche Bank pushed risky foreign exchange derivatives to corporate clients.</p> <p> Q: How has Deutsche Bank responded to the fines?</p> <p> A: Deutsche Bank has stated that it will not appeal the fine imposed by BaFin but will appeal the fine from Spain's CNMV. The bank also emphasized improvements in processes and controls.</p> <p> Q: What are the future trends in financial regulation?</p> <p> A: Future trends include enhanced oversight and compliance, technological innovations in compliance, and increased focus on whistleblower protections.</p> <p> Did you know? Whistleblower protections are becoming a critical component of regulatory compliance. Financial institutions are increasingly implementing programs to encourage and protect whistleblowers.</p> <p> Pro Tips: For financial institutions, investing in AI and ML for compliance can save millions in fines and enhance regulatory adherence. Ensuring robust whistleblower protections can also help uncover issues early and mitigate risks.</p> <p> Ready to dive deeper into the world of financial regulation and compliance? Explore more of our articles on the latest trends and best practices in the financial industry. Subscribe to our newsletter for weekly insights and updates on regulatory developments. Share your thoughts in the comments below!</p>",
"source_link": "https://www.archynetys.com/deutsche-bank-fined-e23mn-by-german-regulator-ft/"
}
]
}
}
}
The data above is test data to illustrate the payload. Any similarity to actual individuals, existing or past, is purely coincidental.
4. search (GET)
The search API method returns the matching articles themselves instead of a category breakdown. It is the endpoint to use when you need every article that matches your query, because the results can be paged through with the cursor parameter.
Endpoint
https://api.dilisense.com/v1/media/search
Request parameters
search_all
Search string that is screened against Adverse Media news sources. All matches are considered. Cannot be combined with 'names' parameter.
names
Search string that is screened against Adverse Media news sources. Only names within the articles are considered. Cannot be combined with 'search_all' parameter.
categoryoptional
If set, considers only articles of the given category. Possible values are
- political
- regulatory
- terrorism
- financial_crime
- organized_crime
- violent_crime
term_filteroptional
Comma-separated list of terms that all have to appear in the body of the article, in addition to the names / search_all matching. An article is only returned if every term is present.
For example term_filter=fraud,money laundering returns only those articles that contain both "fraud" and "money laundering".
start_dateoptional
If set, considers only articles from the start_date until "today". The format is yyyy-mm-dd (inclusive), for example 2023-10-23.
cursoroptional
Pages through all matching articles. Leave the parameter out for the first page. Every response contains a next_cursor value, which has to be passed back as cursor to retrieve the next page. On the last page next_cursor is absent.
The cursor value is opaque and must neither be constructed nor parsed on your side. There is no parameter to change the page size, and total_hits stays constant while you page through the results.