# Signicat data verification documentation > Welcome to the Signicat developer documentation, your gateway to unlocking the future of digital identity solutions. This file contains all documentation content in a single document following the llmstxt.org standard. ## API overview for Data Verification API # API overview This overview of the API covers key information to help you understand the API, and its endpoints. The Data Verification API returns normalised data from carefully-selected sources, making it easy for you to interpret and use the responses regardless of the source. You can find the full list of endpoints in the [Data Verification API reference](/apis/data-verification/). :::tip Coverage For an overview of all data sources and countries available by endpoint, visit the [Coverage](/docs/data-verification/coverage.mdx) page. ::: ## Endpoints for natural persons ### Account holder The [Account holder endpoint](pathname:///apis/data-verification/#tag/Persons/operation/Person_VerifyAccountNumber_GET) allows you to verify if a specific bank account exists and if the name of its owner matches the name you provide. Depending on the source, either IBAN or account number can be provided as input. ### Basic information The [Basic endpoint](pathname:///apis/data-verification/#tag/Persons/operation/Person_GetBasic_GET) contains basic information about a person like name, address (specifying multiple types of address if registered in the data sources, such as postal, permanent, foreign), date of birth (including place of birth), citizenship (multiple citizenship, if any), and nationality. ### Finance The [Finance endpoint](pathname:///apis/data-verification/#tag/Persons/operation/Person_GetFinance_GET) can be used to retrieve financial information about a person. For example, their credit score and information about their income and wealth. ### Identity verification The [Identity verification endpoint](pathname:///apis/data-verification/#tag/Persons/operation/Person_VerifyAddress_GET) can be used to verify a natural person's identity and address information. The endpoint returns a value (`identified`, `partiallyIdentified`, `notIdentified`) to confirm whether a given person's identity and address attributes provided in the API request match the data found in the registries. Use this endpoint to perform checks for data consistency that include checking the given address and identity attributes, such as the combination of name, surname and residential address, against the available data sources. For example, you can use this endpoint if you already know someone's address and need to perform enhanced due diligence to verify the person and address authenticity. ### Screening The [Screening endpoint](pathname:///apis/data-verification/#tag/Persons/operation/PersonGlobal_Screening_GET) provides information about whether the person in question is: - a PEP (politically exposed person) - on a sanction list - on an adverse media list #### PEP A politically exposed person is someone who has a prominent public function and, thus, presents a higher risk of involvement in, for example, bribery or corruption. Family members or close associates of such people are also considered PEPs. It is important to be aware of the PEP status of one's customers in order to apply any precautions that may be necessary. Signicat covers the following standard PEP lists: - The Acuris C6 global PEP list - PEP Edge (detailed coverage of Nordic PEPs, where [Trapets](https://www.trapets.com/) is the editor) #### Sanction lists Sanction lists are created by one or more countries or public bodies to apply commercial or financial penalties to individuals, groups, or entire countries. For example, the EU has sanctions that involve freezing the funds and economic resources of specific natural persons and organisations. To observe these restrictions properly, it is important to check that your customers are not included in any sanction lists. Signicat covers the following standard sanction lists: - EU Consolidated list of persons, groups, and entities subject to EU financial sanctions. - UN consolidated - OFAC Specially Designated Nationals - HM Treasury - consolidated list of financial sanctions Optionally, local national sanction lists can be enabled on request. ### Search With the [Search endpoint](pathname:///apis/data-verification/#tag/Persons/operation/PersonGlobal_Search_GET), you can search for a person's ID number using several parameters, such as name and date of birth. :::warning Beta This endpoint is in beta. Its functionality is subject to change without prior notice. ::: ## Endpoints for organisations ### Account holder (org) The [Account holder endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/Organization_VerifyAccountNumber_GET) allows you to verify if a specific bank account exists and if the name of its owner matches the company name you provide. Depending on the data source, you can make a request with either: - IBAN - Account number The usage of query parameters in this endpoint varies based on the source and country where you want to verify an IBAN or an account number. The following table shows how to use the query parameters: :::CustomTable{columnWidths="25% 75%"} | Parameters | Description | | --------------- | ------------------ | | `accountNumber` | The account number or IBAN number that you want to verify. This is a required parameter. | | `idList` | The company ID, branch ID and VAT number of the organisation, that you want to verify together with the IBAN number. This parameter is specific to **Surepay** data source. Available values per country: Netherlands: `NL_KVK`, `NL_KVK_BRANCH`, `EU_VAT`France: `FR_SIREN`, `FR_SIRET`Italy: `EU_VAT`. For Italy, sending the `EU_VAT` number for IBAN validation is mandatory.UK: `UK_CRN` The `idList` format is: `, ` (e.g `NL_KVK, 012345678`). | | `idType` | The type of `accountNumber` that is being validated. If not specified, `IBAN` is used by default. This is specific to Surepay data source. | | `name` | Name of the organisation to verify. | | `country` | The country code (ISO 3166-1 format) under consideration for IBAN verification. For example, to verify an IBAN from Netherland, then use country code `NL`. This parameter determines the country used in the `idList` parameter. This is a required parameter. | ::: **Example** The following API request example can be used to verify an IBAN together with the name of an organisation (`name`), KVK number (`NL_KVK`), KVK branch number (`NL_KVK`) and VAT number (`EU_VAT`). ```bash https://api.signicat.com/info/lookup/countries/NL/organizations/accountnumber/NL72ABCD1236548754/verify? &name=We care 4 U &idType=IBAN &idList=NL_KVK, 01234565 &idList=NL_KVK_BRANCH, 012345698124 &idList=EU_VAT, NL1245658 ``` **Parameters overview** Example of idList parameter :::tip Add a parameter To verify any additional parameter (together with the IBAN), you must specify the parameters in the _query string_ of the URL in your API request. For example, `https://api.signicat.com/info/lookup/countries/NL/organizations/accountnumber//verify?name=&idType=IBAN&idList=`. ::: ### Basic information (org) The [Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/Organization_GetBasicOrganizationInfo_GET) provides standard information about an organisation like trade name, address, organisation type, legal status, and industry sector. ### Ownership (org) The [Ownership endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/Organization_GetOwnership_GET) provides information about the owners of an organisation. Owners of an organisation can be natural persons or other organisations. ### UBO (org) The [UBO endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/Organization_GetUbo_GET) provides information about the Ultimate Beneficiary Owner (UBO) of an organisation. UBO is a term used to describe the natural person who is the ultimate effective owner of an organisation, even if that person is not a direct owner of that organisation. For example, imagine a case where the company you need more information about is owned by another company, which is owned by a natural person. This UBO wouldn't appear in the ownership attribute, since they are not a direct owner of the company. Establishing the UBO can be challenging, especially when ownership is distributed over different countries or passes through countries like Liechtenstein or Bermuda. As defined by the [4th EU AML directive](https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32015L0849&from=EN), a UBO is any natural person who, directly or indirectly: - holds at least 25% plus one share of the share capital, or - exercises at least 25% of the voting rights, or - is the beneficiary of at least 25% of the legal entity's capital Note that this definition has been simplified and you should review the directive if you want to know more. Also, note that each country may define even lower thresholds, according to which a natural person can be considered a UBO, so it is always important to review the domestic laws applicable. #### Key terms (org) This section summarises some terms related to UBO that are used in the Data Verification API. - **Direct ownership**: This is the simplest ownership model. A person or entity is considered a direct owner of an organisation if they do not own it through another entity. - **Indirect ownership**: A person or entity is considered an indirect owner of an organisation if they own an entity that, in turn, owns the organisation we are interested in. For instance, if John owns (or partially owns) Company A, and Company A is a direct owner of Company Z, that makes John an indirect owner of Company Z as well. Indirect ownership can have one or multiple paths: extending our example above, if John also owns a second company, Company B, and this entity is a part-owner of Company Z, that makes John the indirect owner of Company Z through two different paths. This will also affect how the indirect ownership percentage is calculated. - **Integrated ownership**: The sum of direct and indirect ownership a person or other entity has in a specific company (source: [T-rank](https://docs.trank.no/white_papers/t-rank_white_paper_indirect.pdf)) - **Voting rights**: Rights granted to a person or entity in connection with how many shares they own in an organisation. There typically is a direct correlation between shares owned and voting rights: if John owns 20% of the shares of Company A, his vote is worth 20%. However, note that voting rights can be restricted or expanded by using different types of shares (_share classes_). For example, one could define share classes which only give the right to receive financial returns on the investment, but without the right to vote at the shareholders' assembly. - **Voting power**: A part-owner of an organisation can have more or less voting power based on how much they can impact a vote in different scenarios. Voting power is not directly correlated to shares owned (when those shares give the right to vote at the shareholders' assembly). For example, consider an organisation with three shareholders, two of which hold 49.5% of the shares each, with the third one, Natalie, holding only 1% of the shares. In any voting scenario in which the other two shareholders don't agree, Natalie will always sway the vote, which gives her a voting power of 50%. #### Related links (org) The following links might be useful if you want to learn more about how different ownership models are calculated: - [Exploring integrated ownership: direct, indirect and multiple-path](https://www.bvdinfo.com/en-gb/blog/compliance-and-financial-crime/exploring-integrated-ownership-direct-indirect-and-multiple-path), by Bureau Van Dijk. - [Integrated Ownership Calculation](https://docs.trank.no/white_papers/t-rank_white_paper_indirect.pdf) (pdf), by T-rank. ### Roles (org) The [Roles endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/Organization_GetRoles_GET) provides the personal details of natural persons who have a registered role within an organisation, such as board members and daily management. In addition, this step returns information about external third-party service providers, such as accountancy and bookkeeping firms. ### Authorisations (org) The [Authorisations endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/Organization_GetAuthorization_GET) tells you about persons or organisations ("signees") who have been authorised to act on behalf of the organisation on a certain matter ("mandate"). We identify two different types of authorisation: - Signing rights, covering people with authorisation to sign and to act on behalf of the business in **all** matters. - Power of procuration, people with the authorisation to sign and to act on behalf of the business in specific, **limited** matters. For both types of authorisation, we try to generate all possible combinations of required persons to achieve a certain mandate. This makes it easy for you to do automatic checks on mandates. You could for example automatically check the validity of a signed document by checking the signees with the list we provide (for the applicable mandate). If we cannot establish the possible combinations of persons (for a specific mandate), we will inform you about the mandates of individual signees. **Special cases** For Swedish organisations with business type _Aktiebolag_ (limited company), if the company only consists of one board member and one deputy board member - this is the minimum requirement for a limited company - the only board member has the right to sign himself for the company. Visit the [Swedish Companies Registration Office (Bolagsverket)](https://bolagsverket.se/foretag/aktiebolag/startaaktiebolag/firmateckningiaktiebolag.519.html) website for more details. ### Screening (org) The [Screening endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/OrganizationGlobal_Screening_GET) tells you if the organisation is mentioned on any sanction lists. Sanction lists are created by one or more countries to apply commercial or financial penalties to individuals, groups, or entire countries. For example, the EU has sanctions that involve freezing the funds and economic resources of specific natural persons and organisations. To observe these restrictions properly, it is important to check that your customers are not included in any sanction lists. ### Finance (org) The [Finance endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/Organization_GetFinance_GET) allows you to retrieve some financial information about an organisation. This includes information such as their credit rating and yearly profit/turnover figures. ### Search (org) With the [Search endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/OrganizationGlobal_Search_GET), you can search for an organisation by name in cases when the organisation number is not available. The response returns all organisations (together with the address details) that match the name sent in the request. ### About the ID parameter in organisation endpoints Most organisation endpoints in the Data Verification API have two required path parameters: - `country` - `id` These parameters serve to narrow down the organisation that you want to obtain information about. There is only one way to use the `country` parameter (by entering an ISO 3166-1 country code), but several in the case of `id`. There are three different types of IDs that can be used to identify an organisation: - `organization`: the ID of the organisation as stated in the relevant national registry. This is the default option. Not always unique. - `tax`: the tax ID of the organisation as stated in the relevant tax registry. For example, EIN in the US. - `external`: the ID assigned to the organisation by the source that provides organisational information. Always unique. You can specify which type of ID you want to use in your request with the `idType` query parameter. In some cases, you can skip this and let the API use the default option (`organization`). You can use the default option if the organisation is registered in a country where organisation numbers are unique, such as Norway or Sweden. In countries where organisation numbers are not unique, like the US or Germany, you could get multiple hits when you try to use the organisation number. If this happens, we suggest using the tax ID or external ID as an alternative. An example of an external ID is the DUNS number (assigned by Dun & Bradstreet) or the BvD ID (assigned by Bureau van Dijk). #### How to look up organisations using a tax or external ID If you can't use an organisational ID, you can find out a company's tax ID or external ID with the Search endpoint of the Data Verification API. Therefore, there are two main steps: 1. Use the [Search endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/OrganizationGlobal_Search_GET) to find the company you are interested in. Extract the `externalId` or `taxNumber` from the response. 2. Use the extracted ID on any of the other organisation endpoints to find the information you want. What follows is an example of how to find the ultimate beneficial owners of a fictional German company called "Nunstück GmbH". Note that all information used here is fictional. 1. Use the [Search endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/OrganizationGlobal_Search_GET) to find the company you are interested in. It helps to use several parameters to refine your search. For our example, we enter `Nunstück` as the `name` and `DE` in `countries`. If you know the organisation number, it helps to use it here (in the `id` parameter). Even though it isn't unique, using it together with the name increases the likelihood of getting a single result in the response. 2. Review the API response. If there are several results, identify the company you're interested in based on the `data` of each result. 3. Find Nunstück's `taxNumber` or `externalId` in the `data` array of the response. For this example, we use the external ID. 4. Use the [Ultimate beneficial owners endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/Organization_GetUbo_GET) to find out the information you need. Enter `DE` as the `country`, the external ID obtained in the previous step as the `id`, and `external` as the `idType`. The response will contain information about the ultimate beneficial owners of Nunstück GmbH. The images below show two examples of how to use the `idType` parameter: Example query parameters with source set to bvd and idType set to external Example query parameters with source set to bvd and idType set to tax --- ## Code examples for Data Verification # Code examples This page guides you through the steps to build a simple application to integrate with the Signicat Data Verification API using .NET 8.0. The code examples show how to set up a minimal ASP.NET Core project to fetch basic information about persons and organisations from the API using token-based authentication. Here are the steps that you will follow: 1. Connect to the Data verification API 2. Prepare your development environment 3. Authenticate to the Data Verification API 4. Call the Organisation and Person Basic endpoints with test data 5. Review the API response You can extend the code examples in this guide to cover other scenarios by using the sources documented on the [Data sources](/docs/data-verification/data-sources/) pages. ## Connect to the Data Verification API Before you can start making requests to this API, you need to learn how to connect to it. To do this, follow steps 1-3 in the **Connect to Signicat APIs** [Quick start guide](/docs/dashboard/connect-to-signicat-apis/quick-start-guide.mdx). :::note What permissions are required? Ensure that you set the following permissions for your API client: - **Data Verification for natural persons** to connect to data sources about natural persons. - **Data Verification for organisations** to connect to data sources about organisations. ::: Then, return here and continue with the next steps of this guide. ## Prepare your development environment Before you begin, ensure that you have the following tools installed in your development machine: - [.NET SDK 8.0](https://dotnet.microsoft.com/download/dotnet/8.0) You will need the .NET CLI to run this example, read more about it at [https://learn.microsoft.com/en-us/dotnet/core/tools/](https://learn.microsoft.com/en-us/dotnet/core/tools/). ## Clone and configure the project ### Clone the code Clone the repository to your local machine using the following command: ```bash git clone https://github.com/signicat/sample-data-verification ``` Or, download the code compressed in a zip file: * [**Download full code example**](https://github.com/signicat/sample-data-verification/archive/refs/heads/main.zip) The full code example includes all the files you need to run the sample application. :::details Preview application code ```dotnet // Create a new WebApplication var builder = WebApplication.CreateBuilder(args); // Configure in-memory settings for TokenService var inMemorySettings = new List> { new("TokenServiceConfig:GrantType", "client_credentials"), new("TokenServiceConfig:Scope", "signicat-api"), new("TokenServiceConfig:ClientId", ""), new("TokenServiceConfig:ClientSecret", "") }; // Build configuration from in-memory settings var configuration = new ConfigurationBuilder() .AddInMemoryCollection(inMemorySettings) .Build(); // Configure TokenServiceConfig using the built configuration builder.Services.Configure( configuration.GetSection("TokenServiceConfig")); // Configure HttpClient for TokenService builder.Services.AddHttpClient("TokenService", httpclient => { httpclient.BaseAddress = new Uri("https://api.signicat.com/auth/open/"); }); // Add TokenService as a singleton service builder.Services.AddSingleton(); // Configure HttpClient for DataVerificationApiService builder.Services.AddHttpClient("DataVerificationApiService", httpclient => { httpclient.BaseAddress = new Uri("https://api.signicat.com/info/lookup/"); }); // Add DataVerificationApiService as a singleton service builder.Services.AddSingleton(); // Build the application var app = builder.Build(); // Set up a simple root route app.MapGet("/", () => "Signicat Data Verification Sample App."); // Set up routes for person and organization information var person = app.MapGroup("/person"); person.MapGet("/basic/{country}/{source}/{id}", GetPersonBasic); var organization = app.MapGroup("/organization"); organization.MapGet("/basic/{country}/{source}/{id}", GetOrganizationBasic); // Run the application app.Run(); // Handler for getting basic person information static async Task GetPersonBasic(string country, string source, string id, DataVerificationApiService dataVerificationApiService) { var response = await dataVerificationApiService.GetPersonBasic(country, source, id); return TypedResults.Ok(response); } // Handler for getting basic organization information static async Task GetOrganizationBasic(string country, string source, string id, DataVerificationApiService dataVerificationApiService) { var response = await dataVerificationApiService.GetOrganizationBasic(country, source, id); return TypedResults.Ok(response); } ``` ```dotnet // DataVerificationApiService class to handle API requests for person and organization information public class DataVerificationApiService(IHttpClientFactory httpClientFactory, TokenService tokenService) { // Get basic person information from the API public async Task GetPersonBasic(string country, string source, string id) { return await MakeRequest($"countries/{country}/persons?identityNumber={id}&source={source}"); } // Get basic organization information from the API public async Task GetOrganizationBasic(string country, string source, string id) { return await MakeRequest($"countries/{country}/organizations/{id}?source={source}"); } // Helper method to make an authenticated API request private async Task MakeRequest(string url) { var httpClient = httpClientFactory.CreateClient("DataVerificationApiService"); // Get an authentication token from the TokenService TokenResponse? token; try { token = await tokenService.GetToken(); if (token == null) return "Something went wrong fetching the authentication token"; } catch (Exception ex) { return ex.Message; } // Set the authorization header with the access token httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token.AccessToken); // Make the API request var httpResponseMessage = await httpClient.GetAsync(url); // Handle the API response if (!httpResponseMessage.IsSuccessStatusCode) { if (httpResponseMessage.StatusCode == System.Net.HttpStatusCode.NotFound) return "The entity you tried to look up was not found at the source."; else return httpResponseMessage.StatusCode + ", " + httpResponseMessage.ReasonPhrase; } // Read and return the response content var responseContent = await httpResponseMessage.Content.ReadAsStringAsync(); return responseContent; } } ``` ```dotnet using System.Text.Json.Serialization; // TokenResponse class representing the token response public class TokenResponse { [JsonPropertyName("access_token")] public string? AccessToken { get; set; } } ``` ```dotnet using Microsoft.Extensions.Options; // TokenService class to handle authentication token requests public class TokenService(IHttpClientFactory httpClientFactory, IOptions configuration) { private readonly TokenServiceConfig _configuration = configuration.Value; // Get an authentication token from the token service public async Task GetToken() { var httpClient = httpClientFactory.CreateClient("TokenService"); // Prepare the request content with client credentials var requestContent = new List> { new("grant_type", _configuration.GrantType), new("scope", _configuration.Scope), new("client_id", _configuration.ClientId), new("client_secret", _configuration.ClientSecret) }; // Make the token request var httpResponseMessage = await httpClient.PostAsync("connect/token", new FormUrlEncodedContent(requestContent)); // Handle the token response if (!httpResponseMessage.IsSuccessStatusCode) throw new Exception(httpResponseMessage.StatusCode.ToString()); // Read and deserialize the token response var responseContent = await httpResponseMessage.Content.ReadAsStringAsync(); return System.Text.Json.JsonSerializer.Deserialize(responseContent); } } ``` ```dotnet // TokenServiceConfig class representing configuration properties public class TokenServiceConfig { public string? GrantType { get; set; } public string? Scope { get; set; } public string? ClientId { get; set; } public string? ClientSecret { get; set; } } ``` ::: :::note Limitations of the code example The code used in this sample application is meant to be easy to understand and may not follow best practices. Make sure your code adheres to coding and security standards, when preparing your applications for production. ::: ### Configure the credentials To make requests to the API endpoints, the application first needs to authenticate to the Signicat authorisation server using your API client credentials. Edit the API client credentials, the client ID and the client secret, in the `Program.cs` file. Replace `` and `` with the values of your API Client. ```dotnet {5-6} // Configure settings for TokenService var inMemorySettings = new List> { new("TokenServiceConfig:GrantType", "client_credentials"), new("TokenServiceConfig:Scope", "signicat-api"), new("TokenServiceConfig:ClientId", ""), new("TokenServiceConfig:ClientSecret", "") }; ``` ## Authenticate to the API To make requests to the API, you first need to obtain an access token. To do this, you need to call the `https://api.signicat.com/auth/open/connect/token` address with your client credentials in the request content. Then, the authorisation server provides your application with a token that can be used to interact with the API. The `TokenService` class handles the request to the Signicat API authorisation server, as shown below: ```dotnet // TokenService class to handle authentication token requests public class TokenService { private readonly IHttpClientFactory _httpClientFactory; private readonly TokenServiceConfig _configuration; public TokenService(IHttpClientFactory httpClientFactory, IOptions configuration) { _httpClientFactory = httpClientFactory; _configuration = configuration.Value; } // Get an authentication token from the token service public async Task GetToken() { var httpClient = _httpClientFactory.CreateClient("TokenService"); // Prepare the request content with client credentials var requestContent = new List> { new("grant_type", _configuration.GrantType), new("scope", _configuration.Scope), new("client_id", _configuration.ClientId), new("client_secret", _configuration.ClientSecret) }; // Make the token request var httpResponseMessage = await httpClient.PostAsync("connect/token", new FormUrlEncodedContent(requestContent)); // Handle the token response if (!httpResponseMessage.IsSuccessStatusCode) throw new Exception(httpResponseMessage.StatusCode.ToString()); // Read and deserialize the token response var responseContent = await httpResponseMessage.Content.ReadAsStringAsync(); return System.Text.Json.JsonSerializer.Deserialize(responseContent); } } ``` The Signicat API authorisation server validates your client credentials and returns an access token that grants your application access to the Data Verification API. ### Run the application To run the application locally on your machine: 1. Open a terminal and go to the `src` folder. 2. Enter the `dotnet run` command. :::note Checkpoint Now that you have configured the credentials and run your application, verify that: - Navigating to `http://localhost:7650` in your browser, you can view the "Signicat Data Verification Sample App." text. ::: ## Retrieve data about an organisation When calling the [Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) of the Data Verification API, you can retrieve basic information about an organisation, such as name, address and contact. In the API request, you need to specify: - Organisation ID - Country code - Data source :::warning Data sources Note that specifying a data source is optional when you use the Data Verification API outside the scope of this guide. By default, the API selects the best source available in your portfolio in the Dashboard. Learn more about data sources in the [Data sources](/docs/data-verification/data-sources/) page. ::: ### Build the API request With the sample application running in the background, you can perform an API request using your browser. When you navigate to a specific URL path, the application: - Makes a call to the API - Retrieves the data - Displays the response as a string You can build your URL path using the following URL structure: ```http http://localhost:7650/organization/basic/{country}/{source}/{id} ``` **Example** For example, you can look up information about Signicat in the Brønnøysundregistrene (business registry in Norway) using the [Basic organisation endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) in the background. To do this, use the following values: :::CustomTable{columnWidths="33% 33% 33%"} | Country code | Organisation ID | Data source | | ------------ | --------------- | ----------- | | `no` | `989584022` | `no-brreg` | ::: and build the URL like: ```http http://localhost:7650/organization/basic/no/no-brreg/989584022 ``` :::note Checkpoint Now, verify that: - Navigating to `http://localhost:7650/organization/basic/no/no-brreg/989584022` in your browser you can view the response from the API. ::: ### Advanced code analysis In this section, you can find additional details to help you understand how the application code works. :::details Click to expand The application builds the URL routes with the following code: ```dotnet title="src/Program.cs" ... var organization = app.MapGroup("/organization"); organization.MapGet("/basic/{country}/{source}/{id}", GetOrganizationBasic); ... ``` When you navigate to the organisation URL, the `GetOrganizationBasic` handler is called: ```dotnet title="src/Program.cs" ... // Handler for getting basic organization information static async Task GetOrganizationBasic(string country, string source, string id, DataVerificationApiService dataVerificationApiService) { var response = await dataVerificationApiService.GetOrganizationBasic(country, source, id); return TypedResults.Ok(response); } ... ``` This triggers the `DataVerificationApiService` class, which contains the `GetOrganizationBasic` method: ```dotnet title="src/DataVerificationApiService.cs" // DataVerificationApiService class to handle API requests for person and organization information public class DataVerificationApiService(IHttpClientFactory httpClientFactory, TokenService tokenService) { ... // Get basic organization information from the API public async Task GetOrganizationBasic(string country, string source, string id) { return await MakeRequest($"countries/{country}/organizations/{id}?source={source}"); } ... } ``` The method receives the values `country`, `source`, `id` from the URL route and formats them into a request to the Data Verification API [Basic organisation endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo), using the following structure: ```http https://api.signicat.com/info/lookup/countries/{country}/organizations/{id}?source={source} ``` The complete cURL request with an access token would look like this: ```sh curl -X GET https://api.signicat.com/info/lookup/countries/no/organizations/989584022?source=no-brreg -H "Accept: application/json" -H "Authorization: Bearer {token}" ``` ::: ## Retrieve data about a person To retrieve basic information about a person, you can use the Data Verification API [Persons Basic endpoint](pathname:///apis/data-verification/#tag/Persons/operation/Person_GetBasic_GET). Using the application, you can get this information using the URL route: ``` http://localhost:7650/person/basic/{country}/{source}/{id} ``` Substitute the `{country}`, `{source}`, and `{id}` variables with actual values. **Example** For example, you can use synthetic data provided by Tenor test data for the Norge Folkeregisteret (Norway National Registry): :::CustomTable{columnWidths="33% 33% 33%"} | Country code | Identity number | Data source | | ------------ | --------------- | ----------- | | `no` | `13917099981` | `no-freg` | ::: :::note Checkpoint Now, verify that by navigating to `http://localhost:7650/person/basic/no/no-freg/13917099981` in your browser, you can view the response from the API. ::: ## Next steps Learn more about the Data Verification API to extend your application and integrate with more endpoints: * [**Data Verification API**](/apis/data-verification/): Retrieve information about natural persons or organisations * [**API overview**](/docs/data-verification/api-overview): Learn about the features of the Data Verification API --- ## Person and Organisation Look-Up Coverage for Data Verification # Coverage for Data Verification When performing data enrichment and verification, it is important to understand what kind of information you can retrieve from the registries and what use cases are available in a specific country. The tables on this page show the current coverage details for organisations and natural persons. You can explore data grouped by country and data source. ## Coverage overview The columns in the tables below show what endpoints return data by country. To learn more about the endpoints, visit the [API overview](/docs/data-verification/api-overview.mdx) documentation. ### Natural persons ### Organisations ## Data sources Data sources are mappings to retrieve data from a specific registry or provider. You can learn more about this in the [Data sources](/docs/data-verification/data-sources/) documentation. ### Natural persons ### Organisation --- ## How it works When you make an API call to the Data Verification API, the information you are requesting is retrieved from an official registry (data source), normalised and returned to you according to the format specified in the endpoint you used. You can specify which data source to retrieve data from by passing the name of the source as a query parameter in the request. In this page you can find information about what data sources are available, how to add data sources to your account and how to control which data source to use in an API request. ## Adding data sources in the Dashboard To add, configure and remove data sources in the Signicat Dashboard, navigate to **Products** > [**Data Verification**](https://dashboard.signicat.com/data-verification/list). Here, you can view which data sources are active and which ones need additional configuration before you can start using them. You can also search which data sources are available in your account and filter by attribute or use case. Data sources in the Signicat Dashboard ## Testing with the API In a sandbox account, you get access to a selection of data sources that return test data. You can use these sources to test your application and retrieve test data to validate your flows. When testing the Data Verification API, you may want to submit requests using test data for a specific endpoint, country and data source. This can help you understand how the API works and define validation rules in your application. :::tip Production account To use any data source in a production account, you first need to purchase the data source. You can purchase a new data source in the [Signicat Marketplace](https://dashboard.signicat.com/store-front/marketplace). If you are an existing customer, reach out to your account manager to add new sources to your agreement. ::: ## How to specify a data source in an API request When you make an API call to the Data Verification API, the information you are requesting is retrieved from an official registry (data source), normalised and returned to you according to the format specified in the endpoint. By default, Signicat selects the most appropriate data source based on the product availability in your portfolio to ensure that you receive a correct response. In cases where multiple sources apply to your use case, Signicat chooses the most suitable source. To retrieve data from a specific data source, you must specify the data source as a query parameter in your request. To learn how to specify a data source, see the [Controlling the data source](#controlling-the-data-source) section below. ### Using the default data source The default data source depends on the country and the attribute (endpoint) you query. For example, when requesting basic information about an organisation based in Norway, such as Signicat, you would use the [Organisation > Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) like this: ``` GET https://api.signicat.com/info/lookup/countries/NO/organizations/989584022 ``` where `NO` is the country code and `989584022` is Signicat's `organizationNumber`. In this case, the Data Verification API retrieves the data from Brønnøysundregistrene, the registry of businesses in Norway (data source code is `no-brreg`). This is the default data source because it matches the following conditions: - Registry for organisations - Registry for Norway - Registry for basic information To view what data source was used in a response, inspect the `metadata` field in the API response: ```json {8} { "name": "SIGNICAT AS", ... "organizationNumber": "989584022", ... "metadata": { "sources": [ "no-brreg" ], "urls": [ "https://data.brreg.no/enhetsregisteret/api/enheter/989584022" ], ... } } ``` ### Controlling the data source You can control the data source where to retrieve data from. To do so, you must specify the `source` as a query parameter in the API request. :::warning Important conditions Note that when specifying a data source in your request, the following must be true: - The data source must be active in your account. - The data source must be supported by the attribute/endpoint. - The data source must apply to the country. If your request does not meet any of these conditions, the request fails and you receive an error message in the response. ::: For example, to query basic information about Signicat, as shown in the example above, you could specify a global registry such as Creditsafe in the [Organisation > Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) like this:: ``` GET https://api.signicat.com/info/lookup/countries/NO/organizations/989584022?source=creditsafe ``` The response would look like this: ```json {10} { "name": "SIGNICAT AS", ... "organizationNumber": "989584022", ... ... ... "metadata": { "sources": [ "creditsafe" ], "urls": [ "https://connect.sandbox.creditsafe.com/v1/companies/NO-0-NO00977839?template=basic" ], "lastChanged": "2023-11-09T02:47:49.000Z", ... } } ``` :::tip How data could vary across data sources Responses from different data sources may return different data. This is because each registry provides information in a different way. ::: Visit the [Data sources](/docs/data-verification/data-sources/) to view what data sources are supported by the Data Verification API. --- ## Data sources for Data Verification # Data sources Connect to a broad set of identity data sources for individuals (B2C) and businesses (B2B). Verify name, address, financial data and PEP/sanction list status plus business roles, ownership, authorisations UBOs and more. ## Natural persons ## Organisations --- ## Asiakastieto Finland Asiakastieto is an information provider in Finland. This data source offers data on company ownership, financial aspects and credit ratings. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Finland | | Type of data | Organisation | | Endpoints | Ownership, Roles | | Query parameter | `fi-asiakastieto` | ::: --- ## Bisnode Finland Bisnode Finland provides business and credit information on Finnish companies. This data source helps assess risk and confirm company identity. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Finland | | Type of data | Organisation | | Endpoints | Ultimate beneficial owners, Roles, Authorization | | Query parameter | `fi-bisnode` | ::: --- ## Bisnode Norway Bisnode Norway provides detailed information on companies registered in Norway, including ownership, financial data and credit scores. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Norway | | Type of data | Organisation | | Endpoints | Ownership, Ultimate beneficial owners, Roles | | Query parameter | `no-bisnode` | ::: --- ## Bolagsverket Sweden The [Bolagsverket](https://www.bolagsverket.se/) is the official business register in Sweden. It is a centralised and publicly accessible register that contains information about companies, partnerships, sole proprietorships, economic associations and other legal entities operating in Sweden. The register serves as an official record for businesses and is used by entrepreneurs, authorities and the public to verify business details, ensure transparency and facilitate business transactions. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Sweden | | Type of data | Organisation | | Endpoints | Basic, Ultimate beneficial owners, Roles, Authorization | | Query parameter | `se-bolagsverket` | ::: ## Data attributes The Data Verification API provides the following attributes from Bolagsverket: - **Basic** - **Ownership** - **Ultimate Beneficial Owners (UBOs)** - **Roles** - **Authorisation and signatory rights** ## API requests To make an API call to the [Organisation Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) and retrieve data from Bolagsverket, build your API request URL like: ```curl https://api.signicat.com/info/lookup/countries/{country}/organizations/{id}?source={source}&rawJson=true ``` Note the following parameters in the request: - `id`: The company registration number. - `country`: One or more ISO 3166-1 alpha-2 country codes, separated by commas. For example: `se`. - `source`: The data provider or screening source (`se-bolagsverket`). For example, you can look up information about Signicat AB (`id`:`5567615561`) in Sweden (`country`: `se`) by sending this request: ```curl https://api.signicat.com/info/lookup/countries/se/organizations/5567615561?source=se-bolagsverket&rawJson=true ``` :::tip Note The list of parameters shown on this page is not exhaustive. For the full list of query parameters, see the API reference for the relevant endpoint (for example, the [Organisation Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) used in the sample request). ::: ## Test data You can use the following organisation registration numbers (`id`) for testing the data source: :::CustomTable{tableName="Data source test data" columnWidths="50% 50%"} | Company registration number | Company name | |-----------------------------|--------------| | `5567615561` | Signicat AB | | `5560747551` | IKEA of Sweden AB | | `5564377355` | En Bok för Alla Aktiebolag | | `5560117482` | AstraZeneca AB | ::: --- ## Brønnøysundregistrene (BRREG) Norway Brønnøysundregistrene (BRREG) is the Norwegian government agency responsible for managing public registers, including the Norwegian Business Register (Foretaksregisteret), the Register of Legal Entities and other official registries. It is a trusted source for company and organisation data in Norway, providing information on legal entities, ownership, financials and registration details. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Norway | | Type of data | Organisation | | Endpoints | Basic, Roles, Authorization, Finance, Search | | Query parameter | `no-brreg` | ::: ## Data attributes The Data Verification API provides the following attributes from BRREG: - **Basic** - **Ownership** - **Roles** - **Authorisation and signatory rights** - **Search** ## API requests To make an API call to the [Organisation Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) and retrieve data from BRREG, build your API request URL like: ```curl https://api.signicat.com/info/lookup/countries/{country}/organizations/{id}?source={source}&rawJson=true ``` Note the following parameters in the request: - `id`: The company registration number. - `country`: One or more ISO 3166-1 alpha-2 country codes, separated by commas. For example: `se,no`. - `source`: The data provider or screening source (`no-brreg`). For example, you can look up information about Signicat AS (`id`:`989584022`) in Norway (`country`: `no`) by sending this request: ```curl https://api.signicat.com/info/lookup/countries/no/organizations/989584022?source=no-brreg&rawJson=true ``` :::tip Note The list of parameters shown on this page is not exhaustive. For the full list of query parameters, see the API reference for the relevant endpoint (for example, the [Organisation Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) used in the sample request). ::: ### Focus on a branch office Additionally, you may request information about the branch of an organisation by specifying the `idtype=branch`, as a query parameter in the request to the API: ```curl https://api.signicat.com/info/lookup/countries/:country/organizations/:id?source=no-brreg&rawJson=true&idtype=branch ``` ## Test data You can use the following organisation registration numbers (`id`) for testing the data source: :::CustomTable{tableName="Data source test data" columnWidths="50% 50%"} | Company registration number | Company name | |-----------------------------|--------------| | `989584022` | Signicat AS | | `977511402` | Bybanen AS | | `959657769` | Bama International AS | | `910747711` | Orkla ASA | | `889531312` | Signicat AS, AVD Stortingsg Oslo (Branch test data) | ::: --- ## BvD (Bureau van Dijk) BvD (Bureau van Dijk) is a global business data provider. This data source offers company structure, ownership, financial data and risk scores. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Global | | Type of data | Organisation | | Endpoints | Basic, Roles, Finance, Search | | Query parameter | `bvd` | ::: --- ## Bureau van Dijk (via T-Rank) Bureau van Dijk (via T-Rank) provides information about company ownership. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Global | | Type of data | Organisation | | Endpoints | Ownership, Ultimate beneficial owners | | Query parameter | `t-rank-bvd` | ::: --- ## Companies House Companies House is the official register of companies in the UK. This data source provides public data on company formation, directors, filings and ownership. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Great Britain | | Type of data | Organisation | | Endpoints | Basic, Ultimate beneficial owners, Roles, Search | | Query parameter | `companies-house` | ::: --- ## CreditSafe CreditSafe is a global business credit report provider. This data source offers scores and summaries to assess business risk. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Global | | Type of data | Organisation | | Endpoints | Basic, Roles, Finance, Search | | Query parameter | `creditsafe` | ::: --- ## CVR (Det Centrale Virksomhedsregister) The [Danish Business Authority (Erhvervsstyrelsen)](https://datacvr.virk.dk/data/?language=en-gb) manages the Danish Central Business Register (CVR), known as Det Centrale Virksomhedsregister. CVR is the official government registry for all businesses in Denmark and Greenland and serves as the authoritative source for company data, including legal entities, ownership, financial data and registration details. This source provides data covering all business types except personally owned companies with an annual turnover lower than 50,000 DKK. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Denmark | | Type of data | Organisation | | Endpoints | Basic, Ownership, Ultimate beneficial owners, Roles, Authorization | | Query parameter | `dk-cvr` | ::: ## Data attributes The Data Verification API provides the following attributes from CVR: - **Basic** (e.g. company name, registration date, legal status, industry, address, organisation type) - **Ownership** (e.g. beneficial owners, founders) - **Ultimate Beneficial Owners (UBOs)** (e.g. ultimate beneficial owners) - **Roles** (e.g. board members, managers, audit firms) - **Authorisation and signatory rights** (e.g. signing combination, where available) ## API requests To make an API call to the [Organisation Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) and retrieve data from CVR, build your API request URL like: ```curl https://api.signicat.com/info/lookup/countries/{country}/organizations/{id}?source={source}&rawJson=true ``` Note the following parameters in the request: - `id`: The company registration number. - `country`: One or more ISO 3166-1 alpha-2 country codes, separated by commas. For example: `dk`. - `source`: The data provider or screening source (`dk-cvr`). For example, you can look up information about Novo Nordisk (`id`:`24256790`) in Denmark (`country`: `dk`) by sending this request: ```curl https://api.signicat.com/info/lookup/countries/dk/organizations/24256790?source=dk-cvr&rawJson=true ``` :::tip Note The list of parameters shown on this page is not exhaustive. For the full list of query parameters, see the API reference for the relevant endpoint (for example, the [Organisation Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) used in the sample request). ::: ## Test data You can use the following organisation registration numbers (`id`) for testing the data source: :::CustomTable{tableName="Data source test data" columnWidths="50% 50%"} | Company registration number | Company name | Notes | |------------|------------------------|---------------------------------| | `36887613` | Legoland ApS | | | `50574911` | IKEA A/S | | | `36074906` | Creditsafe Denmark ApS | | | `43556541` | (r)Evolution ApS | | | `30946537` | DenFriePresse Danmark | No signers identified | | `24256790` | Novo Nordisk | No signers identified | ::: --- ## Data.be KBO Belgium Data.be KBO Belgium provides Belgian company information from the official KBO register. This data source includes ownership, legal status and roles. Learn more at [https://data.be/en](https://data.be/en). ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Belgium | | Type of data | Organisation | | Endpoints | Basic, Roles | | Query parameter | `be-databe` | ::: --- ## Dun & Bradstreet (formerly Bisnode) Dun & Bradstreet (formerly Bisnode) covers company data across multiple countries. This data source is useful for international business checks and credit reports. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Denmark, Finland, Norway, Sweden | | Type of data | Organisation | | Endpoints | Basic, Finance | | Query parameter | `bisnode` | ::: --- ## GLEIF The Global Legal Entity Identifier Foundation manages the LEI system, which links legal entities with unique identifiers worldwide. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Global | | Type of data | Organisation | | Endpoints | Basic, Search | | Query parameter | `gleif` | ::: --- ## Data sources for organisations --- ## KAR (Konto og Adresseringsregister) KAR (Konto og Adresseringsregister) is a Norwegian registry that links businesses and bank accounts. This data source is useful for verifying payment details and preventing fraud. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Norway | | Type of data | Organisation | | Endpoints | Account Holder Verification | | Query parameter | `kar` | ::: --- ## KvK API Netherlands The Handelsregister (Trade Register) of the Netherlands provides verified company information used for KYB checks. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Netherlands | | Type of data | Organisation | | Endpoints | Basic, Search | | Query parameter | `kvk` | ::: --- ## KvK HR Netherlands The [Dutch Chamber of Commerce](https://www.kvk.nl/english/) provides current company data, including legal status and directors. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Netherlands | | Type of data | Organisation | | Endpoints | Basic, Ultimate beneficial owners, Roles, Authorization | | Query parameter | `kvk-dataservice` | ::: --- ## OpenCorporates OpenCorporates offers company data from official global public registers. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Global | | Type of data | Organisation | | Endpoints | Search | | Query parameter | `opencorporates` | ::: --- ## OpenRegisters (Kausate) OpenRegisters (Kausate) provides data and documents for organisations in Germany through the German Handelsregister (trade registers). This data source allows you to retrieve real-time current and chronological entity information, shareholder lists, articles of association and structured information on a company. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|-----------------------------------| | Geographical coverage | Germany | | Type of data | Organisation | | Endpoints | Search, Basic, Roles, Documents | | Query parameter | `open-registers` | ::: ## Data attributes The Data Verification API provides the following attributes from OpenRegisters (Kausate): - **Search** - **Basic** - **Roles** - **Documents** The following documents are supported for retrieval: - Basic current entity information (*Aktuelle Daten*): `basic` - Shareholder lists (*Gesellschafterlisten*): `shareholder` - Articles of Association (*Gesellschaftsvertrag/Satzung*): `registration` - Chronological Register Information (*Chronologische Übersicht*): `historical` - Structured Information (*Strukturierte Informationen*): `registerextract` ## API requests The following endpoints are supported through the OpenRegisters (Kausate) integration: :::CustomTable{columnWidths="25% 40% 35%"} | Endpoint | Input parameters | Notes | |-----------|----------------------------------------------------------------|-------------------------------| | Search | `country ( DE )``name``source` | | | Basic | `country ( DE )``Org Number`/`id``source` | Retrieve the company's `externalId` from the `Search` endpoint and provide it as the `id` when calling this endpoint. | | Roles | `country ( DE )``Org Number`/`id``source` | Retrieve the company's `externalId` from the `Search` endpoint and provide it as the `id` when calling this endpoint. | | Documents | `country ( DE )``documentType``id``name``source` | `name` or `id` can be used with this endpoint.Retrieve the company's `externalId` from the `Search` endpoint and provide it as the `id` when calling this endpoint.If no document type is set in the request, the `basic` document type is returned by default. | ::: :::tip Note Because documents are retrieved in real time, requests may occasionally take longer to complete. In such cases, the `orderId` is cached and the document will be available for download on the next attempt. ::: The following is a sample API request to the [Organisation Documents endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/OrganizationGlobal_Documents_GET): ```curl https://api.signicat.com/info/lookup/organizations/documents?country=DE&documentType=basic&name=volvo &source=open-registers&rawJSON=true ``` :::tip Note The list of parameters shown on this page is not exhaustive. For the full list of query parameters, see the API reference for the relevant endpoint (for example, the [Organisation Documents endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/OrganizationGlobal_Documents_GET) used in the sample request). ::: --- ## PRH Finland The Finnish Patent and Registration Office (PRH) and the Finnish Tax Administration are jointly the registrars of the Business and Corporate Information System (YTJ). The types of business registered in PRH can be found at [https://www.prh.fi/en/companiesandorganisations/tilastot/lkm.html](https://www.prh.fi/en/companiesandorganisations/tilastot/lkm.html). ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Finland | | Type of data | Organisation | | Endpoints | Basic, Search | | Query parameter | `fi-prh` | ::: ## Data attributes The Data Verification API provides the following attributes from PRH: - **Basic** - **Search** ## API requests To make an API call to the [Organisation Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) and retrieve data from PRH, build your API request URL like: ```curl https://api.signicat.com/info/lookup/countries/{country}/organizations/{id}?source={source}&rawJson=true ``` Note the following parameters in the request: - `id`: The company registration number. - `country`: One or more ISO 3166-1 alpha-2 country codes, separated by commas. For example: `fi`. - `source`: The data provider or screening source (`fi-prh`). For example, you can look up information about Nokia Networks Oy (`id`:`0101120-3`) in Finland (`country`: `fi`) by sending this request: ```curl https://api.signicat.com/info/lookup/countries/fi/organizations/0101120-3?source=fi-prh&rawJson=true ``` :::tip Note The list of parameters shown on this page is not exhaustive. For the full list of query parameters, see the API reference for the relevant endpoint (for example, the [Organisation Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) used in the sample request). ::: ## Test data You can use the following organisation registration numbers (`id`) for testing the data source: :::CustomTable{tableName="Data source test data" columnWidths="50% 50%"} | Company registration number | Company name | |-----------------------------|--------------| | `0101120-3` | Nokia Networks Oy | | `0103543-2` | Oy Erik Selin Ab | | `0112308-8` | Handelsbanken Finans Abp | | `0109043-1` | Nordea Kiinteistöomistus Oy | ::: --- ## SurePay SurePay verifies if a business name matches a bank account (IBAN). This helps prevent payment fraud by checking account ownership. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | France, Great Britain, Italy, Netherlands | | Type of data | Organisation | | Endpoints | Account Holder Verification | | Query parameter | `surepay` | ::: --- ## TietoEvry (via T-rank) TietoEvry (via T-rank) provides business data, offering insights into company ownership across the Nordics. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Denmark, Finland, Norway, Sweden | | Type of data | Organisation | | Endpoints | Ownership, Ultimate beneficial owners | | Query parameter | `t-rank-evry` | ::: --- ## Trapets [Trapets](https://www.trapets.com/about-us) helps in meeting compliance requirements, reducing risk and supporting customer onboarding, ongoing due diligence (ODD) and enhanced due diligence (EDD) processes. This data provider features screening for organisations against the PEP, sanction and adverse media lists. Trapets is suitable for both one-time and continuous screening of organisations. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Global | | Type of data | Organisation | | Endpoints | Screening | | Query parameter | `trapets` | ::: ## Data attributes The Data Verification API provides the following attributes from Trapets: - **Screening** ## API requests To make an API call to the [Organisation Screening endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/OrganizationGlobal_Screening_GET) and retrieve data from Trapets, build your API request URL like: ```curl https://api.signicat.com/info/lookup/countries/{countries}/organizations/screening?name={name}&listType={listType}&source={source} ``` Note the following parameters in the request: - `country`: One or more ISO 3166-1 alpha-2 country codes, separated by commas. For example: `se,no`. - `source`: The data provider or screening source (`trapets`). - `name`: The name of the organisation to screen. - `listType`: One or more list categories to check against. Supported values: `pep`, `sanction`, `adverseMedia`. Use commas to separate multiple values. For example, you can screen Extra Företag AB for sanctions by sending this request: ```curl https://api.signicat.com/info/lookup/organizations/screening?name=Extra%20F%C3%B6retag%20AB&listType=sanction&source=trapets ``` :::tip Note The list of parameters shown on this page is not exhaustive. For the full list of query parameters, see the API reference for the [Organisation Screening endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/OrganizationGlobal_Screening_GET). ::: ## Matching logic Trapets uses two types of name-matching logic when screening: - **Exact match** (also called Regular) - **Phonetic match** (also called Fuzzy) ### Exact match In an exact match, all name parts in the searched name must be equal to name parts in a single list entry. The order of name parts does not matter. :::note Definition "Equal" means character-by-character identical. ::: If a name part appears more than once in the searched name, then it must also appear the same number of times in the list entry. **Examples** - `John John Andersson` *matches* `John John Andersson` - `John Andersson` *matches* `John John Andersson` - `John John Andersson` (search) *does not match* `John Andersson` (list entry) ### Phonetic match Phonetic matching uses fuzzy logic to find names that sound (phonetically) similar, based on the **Metaphone3** algorithm. The system looks for at least one name part in the searched name that phonetically matches a name part in a list entry. Then, it calculates similarity using the **Levenshtein distance** algorithm, which measures how many edits are needed to change one word into another. Each name part's distance is weighted by its length. This means that differences in longer name parts affect the total score more than shorter ones. :::tip Recommended threshold A similarity score (hit rate) between **0.75** and **0.9** is typically recommended for fuzzy matching. ::: ### Score The **score** represents the confidence level of a match, based on Trapets' internal **Hit Rating** system. :::info How it works - The **Hit Rating** is an integer from 1 to 5. - The **score** is calculated by multiplying the **Hit Rating** by 20 to produce a percentage. For example, 5 x 20 = 100%. ::: #### Examples - A **Hit Rating** of 5 (score 100) means a perfect match, typically when a unique identifier, such as social security number (SSN) or company registration number, is used. - If no SSN is provided and the match is based only on name and country, the **Hit Rating** may be lower (1 or 2) and the total score affected (20% or 40%). ### Hit rating Indicates how relevant this list item is to the query. The higher number, the more accurate the match, with 5 being the most accurate. #### Hit rating breakdown **Natural persons** :::CustomTable{tableName="Persons" columnWidths="50% 50%"} | Input | Hit Rating | |------------------------|------------| | SSN | 5 | | Name + Date of birth\* | 4 | | Name + Country | 2 | | Name only | 1 | ::: \* Date of birth can be provided as full date, `YYYY-MM` or just `YYYY`.
**Organisations** :::CustomTable{tableName="Organisations" columnWidths="50% 50%"} | Input | Hit Rating | |------------------------|------------| | Company registration number | 5 | | Name + Country | 2 | | Name only | 1 | ::: ## Screening Logic The KYC screening engine processes input parameters in order of reliability. The flow differs slightly between PEP and sanctions screening. ### PEP screening When screening for politically exposed persons (PEPs), the engine evaluates the input fields in the following order: 1. **Social Security Number (SSN)** - If an SSN is provided and matched, it is considered a definitive match. All other input (name, country, date of birth) is ignored. - If no match is found, the engine excludes list entries with non-matching SSNs. 2. **Date of birth** - If provided, the engine keeps only entries with matching dates of birth or no dates of birth at all. 3. **Country** - If provided, the engine filters out entries from non-matching countries. 4. **Name** - Finally, the engine performs name matching based on either exact or phonetic logic. ### Sanction screening Sanctions screening follows the same process, with one key difference: - **SSNs** are not used, as sanctions lists do not include SSNs. ## Test data :::CustomTable{tableName="Trapets test data"} | List Type | Name | Country | Birth | SSN | List | |----------------|----------------|-----------|---------|--------|----------| | PEP | Sebastian Bengtsson | Sweden | 1980-05-06 | SE198005067031 | PEP_Edge | | PEP | Hamid Forsberg | Sweden | 1965-03-07 | SE196503070895 | PEP_Edge | | PEP | Johan Svensson | Sweden | 1959-03-08 | SE195903082575 | PEP_Edge | | PEP | Katrine Thorstensen | Norway | 1973-11-11 | NO11117319646 | PEP_Edge | | PEP | James Roslund | Sweden | 1957-01-13 | SE195701136771 | PEP_Edge | | PEP (Relative or Close Associate)| Viola Roslund | Sweden | 1956-05-05 | SE195605050342 | PEP_Edge | | PEP (Relative or Close Associate)| Sofia Rosander | Sweden | 1976-09-13 | SE197609138164 | PEP_Edge | | PEP | John Bradshaw | Great Britain | 1978-10-10 | | ACURIS_PEP | | PEP | Alicia Wade | Great Britain | 1943-01-16 | | ACURIS_PEP | | PEP | Sana Dijkhuizen | Netherlands | 1953 | | ACURIS_PEP | | PEP | Dieter Sommer | Germany | 1936-11-18 | | ACURIS_PEP | | PEP/Sanction | Ritva Katariina Rankkala | Finland | | 061282-178E | PEP_Edge/EU_Global | | PEP/Sanction | Birgitta Birgersson | Finland | | 070874-178T | PEP_Edge/EU_Global | | PEP/Sanction | Risto Reippaala | Finland | | 080496-728M | PEP_Edge/EU_Global | | PEP/Sanction | Tomí Tiikeri | Finland | | 121260-123V | PEP_Edge/EU_Global | | PEP/Sanction | Nille Psa Augestad | Norway | 1982-01-18 | NO18018200283 | PEP_Edge/EU_Global | | PEP/Sanction | Lasse-Steffen Goldheim | Norway | 1977-01-18 | NO18017749532 | PEP_Edge/EU_Global/ OFAC | | Sanction | Assar Lovén | Sweden | 1999-01-27 | | EU_Global | | Sanction | Yharnam Hunters OY | Finland | | 3744105-3 | EU_Global, UN_Consolidated | | Sanction | Boletaria | Finland | | 7058505-9 | EU_Global, UN_Consolidated | | Sanction | Lordran Knights | Finland | | 3505875-5 | EU_Global, UN_Consolidated | | Sanction | Tone Olsen | Norway | 1999-09-02 | | OFAC | | Sanction | Henry Montgomery | USA | 1977-07-09 | | OFAC_CS | | Sanction | The Great Bank of Cebala | Tunisia | | | OFAC_CS | ::: --- ## Aristotle Aristotle provides global identity verification. It checks names, addresses and other details using official records from many countries. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Global | | Type of data | Natural persons | | Endpoints | Identity Verification | | Query parameter | `aristotle` | ::: --- ## CPR Denmark CPR (Det Centrale Personregister; Civil Registration System of Denmark) provides personal details of people living in Denmark, including names, addresses and ID numbers. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Denmark | | Type of data | Natural persons | | Endpoints | Address, Basic | | Query parameter | `dk-cpr` | ::: --- ## Dun & Bradstreet (Consumer Intelligence) Dun & Bradstreet (Consumer Intelligence) provides consumer data with support for searching by phone number, first name, last name and date of birth. This source provides updated Nordic customer data that can help to enrich business systems. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Denmark, Finland, Norway, Sweden | | Type of data | Natural persons | | Endpoints | Identity Verification | | Query parameter | `dnb-ci` | ::: --- ## Dun & Bradstreet (formerly Bisnode)(Persons) Dun & Bradstreet (formerly Bisnode) provides financial information in Europe. This data source allows for verification of an individual's identity and creditworthiness. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Denmark, Finland, Norway, Sweden | | Type of data | Natural persons | | Endpoints | Finance, Basic | | Query parameter | `bisnode` | ::: --- ## DVV Finland The Digital and Population Data Services Agency of Finland provides official data about persons and their addresses in Finland. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Finland | | Type of data | Natural persons | | Endpoints | Address, Basic | | Query parameter | `fi-dvv` | ::: --- ## Experian Infoscore (formerly Arvato) Experian Infoscore (formerly Arvato) provides natural person address verification data in Austria and Germany. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Austria, Germany | | Type of data | Natural persons | | Endpoints | Identity Verification | | Query parameter | `arvato` | ::: --- ## Folkeregisteret Norway Norway's National Population Register provides official personal details like names, birth dates and addresses. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Norway | | Type of data | Natural persons | | Endpoints | Address, Basic, Search | | Query parameter | `no-freg` | ::: --- ## Data sources for natural persons --- ## Infotorg DSF Infotorg DSF provides personal and address information from a Norwegian database. This data source allows for verification of residency and identity details. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Norway | | Type of data | Natural persons | | Endpoints | Address, Basic | | Query parameter | `no-infotorg-dsf` | ::: --- ## KAR (Konto og Adresseringsregister)(Persons) KAR is Norway's account and address register. It provides cross-referenced results about a person's bank accounts and their contact details for secure payments. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Norway | | Type of data | Natural persons | | Endpoints | Account Holder Verification | | Query parameter | `kar` | ::: --- ## KRR (Kontakt- og reservasjonsregisteret) KRR (Kontakt- og reservasjonsregisteret) is the national contact register in Norway. It provides contact information such as email addresses and phone numbers for persons. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Norway | | Type of data | Natural persons | | Endpoints | Contact | | Query parameter | `krr` | ::: --- ## LSEG (formerly GDC (Global Data Consortium) LSEG (formerly GDC (Global Data Consortium)) comprises a worldwide network of local data sources. It helps verify identities of natural persons using trusted records from each country. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Global | | Type of data | Natural persons | | Endpoints | Identity Verification | | Query parameter | `gdc` | ::: --- ## Schufa Schufa provides information about a person's credit history and identity. :::warning REST API migration notice From **2026-11-19**, Signicat will retrieve Schufa Identity Check data through Schufa's REST API instead of its older SOAP API. The Data Verification API endpoints and normalised responses stay unchanged. If your integration uses only normalised response fields, no action is required. **Action required for raw source data**: If your integration maps directly to any source parameters within the `rawJson` field, update your mappings before **2026-11-19** to match the new source response schema and attribute names. From **2026-11-19**, all source response content will be provided in English. The following example shows the updated structure within the `rawJson` field: ```json { "status": "identified", "description": "Indicates a complete match was made with the data source from the input element", "metadata": { "sources": [ "schufa" ], "urls": [ "string" ], "lastChanged": "2019-08-24T14:15:22Z", "rawJson": { "reportId": "1234567890", "match": true, "personData": { "schufaId": "AAA000AAAA9", "identifiedUsingPreviousAddress": false }, "overallAccuracy": 100, "accuracy": { "firstName": 100, "lastName": 100, "dateOfBirth": 100, "streetWithNumber": 100, "postalCode": 100, "city": 100 }, "birthDataCheck": { "match": true, "accuracy": { "placeOfBirth": 100, "birthName": 95 } } }, "isCache": true } } ``` ::: ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Global | | Type of data | Natural persons | | Endpoints | Identity Verification | | Query parameter | `schufa` | ::: --- ## SPAR (Statens Personadressregister) Statens personadressregister (SPAR) is Sweden's national population and address register. It is built on the Swedish Tax Agency's (Skatteverket) civil registration (folkbokföring) data and is distributed to authorised customers under the oversight of the SPAR-nämnden (SPAR Board). This data source provides name, address, personal identity number (personnummer) and civil registration data of natural persons. SPAR is suitable for one-time lookups during onboarding. For continuous change detection on a person's record, use Signicat's Ongoing Monitoring product instead, which also supports SPAR as a source. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Sweden | | Type of data | Natural persons | | Endpoints | Address, Basic | | Query parameter | `se-spar` | ::: ## Data attributes The Data Verification API provides the following attributes from SPAR (`se-spar`): - **Basic:** - Name - Various address types - Date of birth - Date of death - De-registration reason ## Processing and legal basis Signicat authenticates to SPAR's own Personsök service on your behalf using a client certificate. Under Swedish/EU data protection rules, any processing of personal data retrieved from SPAR must comply with the GDPR (Dataskyddsförordningen). It is your responsibility to ensure your use case and data retention practices are covered by your own legal basis for processing. ## Approval process The SPAR approval process is handled by the Signicat Onboarding team, together with the customer. :::tip Note - Disclosure of any data from SPAR requires a written application and a formal decision (*tillstånd*) from Skatteverket. There is no self-service or automatic approval. - Only the data controller (*personuppgiftsansvarig* under the GDPR) for the end use case can hold the permit, although an authorised representative acting under a power of attorney (*fullmakt*) may submit the application on the controller's behalf. - Permits are granted per individual assignment (*uppdrag*), and Skatteverket only processes applications submitted on the current form versions. ::: For access to Personsök (which the service `se-spar` is based on), form SKV 1537 from Skatteverket's [Blanketter för tillstånd](https://www.statenspersonadressregister.se/master/start/vaara-tjaenster/blanketter-foer-tillstaand/) page is required. If an authorised representative submits the application, also include SKV 1546: - SKV 1537 - *Ansökan Ändringsavisering, Nulägesavisering, Personnummersättning och Personsökning* ("Application: Change notification, Current-status notification, Personal-number substitution and Person search"). This is the main application form and covers Personsök access. - SKV 1546 - *Bilaga Ombud* ("Annex: Representative"). Required in addition to SKV 1537 whenever the application is submitted by an authorised representative/agent acting on the end customer's behalf, rather than by the data controller directly. ## API requests To make an API call to the [Person Basic endpoint](pathname:///apis/data-verification/#tag/Persons/operation/Person_GetBasic_GET) and retrieve data from SPAR, build your API request URL like: ```curl https://api.signicat.com/info/lookup/countries/SE/persons?identityNumber=[SSN]&source=se-spar&rawJson=true ``` Note the following parameters in the request: - `country`: ISO 3166-1 alpha-2 country code. Use `SE` for Sweden. - `source`: The data provider to query. Use `se-spar`. - `identityNumber`: The person's Swedish personal identity number (personnummer) or coordination number (samordningsnummer), 10 or 12 digits. - `rawJSON`: When set to `true`, includes the unnormalised source payload alongside the normalised response. ## Known limitations - **Protected identity records**: Persons with *Sekretessmarkering* (protected identity marker) or *SkyddadFolkbokforing* (protected population registration) will have their address and potentially other fields withheld even on an otherwise successful match. - **Field visibility by permission level**: SPAR grants each customer a specific *behörighet* (authorisation) that determines which attributes are returned. Two Signicat customers querying the same person may receive a different subset of fields depending on their account's configured use case (e.g. marketing vs. KYC/AML). - Some of the authorisation is restricted to only public authorities. For example: protected data, citizenship and nationality. - Guardian information for an individual may not be returned or may have restrictions. ## Test data SPAR offers a fictional population register for integration testing. For test person identifiers and test case descriptions in the customer test environment, use [SPAR's test cases for person searches, version 9.1 (2025-09-09)](https://www.statenspersonadressregister.se/media/zl2lun1q/testfall-foer-personsoekning-i-kundtestmiljoen_v91.pdf). You can also contact us by [creating a support ticket](https://dashboard.signicat.com/contact-us/tickets/new) in the Signicat Dashboard if you need any support. --- ## SurePay(Persons) [SurePay](https://surepay.nl/en/) is a lookup service for France, Great Britain, Italy and The Netherlands. This data source allows for identity proofing and checks to establish if a bank account (IBAN) belongs to a specific person. This service can be useful in several scenarios. For example, if a company needs to make regular payments to a bank account, they may want to verify the account during onboarding. Integrating with SurePay helps you prevent fraud and mistakes, while improving the user experience. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | France, Great Britain, Italy, Netherlands | | Type of data | Natural persons | | Endpoints | Account Holder Verification | | Query parameter | `surepay` | ::: --- ## Trapets(Persons) [Trapets](https://www.trapets.com/about-us) helps in meeting compliance requirements, reducing risk and supporting customer onboarding, ongoing due diligence (ODD) and enhanced due diligence (EDD) processes. This data provider features screening for persons against PEP, sanction and adverse media lists. Trapets is suitable for both one-time and continuous screening of natural persons. ## Properties :::CustomTable{tableName="Data source specs" columnWidths="50% 50%"} | Property | Value | |-----------------------|--------| | Geographical coverage | Global | | Type of data | Natural persons | | Endpoints | Screening | | Query parameter | `trapets` | ::: ## Data attributes The Data Verification API provides the following attributes from Trapets: - **Screening** ## API requests To make an API call to the [Persons Screening endpoint](pathname:///apis/data-verification/#tag/Persons/operation/PersonGlobal_Screening_GET) and retrieve data from Trapets, build your API request URL like: ```curl https://api.signicat.com/info/lookup/countries/{countries}/persons/screening?name={name}&listType={listType}&source={source} ``` Note the following parameters in the request: - `country`: One or more ISO 3166-1 alpha-2 country codes, separated by commas. For example: `se,no`. - `source`: The data provider or screening source (`trapets`). - `name`: The name of the person to screen. - `listType`: One or more list categories to check against. Supported values: `pep`, `sanction`, `adverseMedia`. Use commas to separate multiple values. For example, you can screen Katrine Thorstensen for PEP, sanctions and adverse media in Sweden by sending this request: ```curl https://api.signicat.com/info/lookup/persons/screening?countries=se%2Cno&name=Katrine%20Thorstensen&source=trapets&listType=pep%2Csanction%2CadverseMedia&rawJson=true ``` :::tip Note The list of parameters shown on this page is not exhaustive. For the full list of query parameters, see the API reference for the [Persons Screening endpoint](pathname:///apis/data-verification/#tag/Persons/operation/PersonGlobal_Screening_GET). ::: ## Matching logic Trapets uses two types of name-matching logic when screening: - **Exact match** (also called Regular) - **Phonetic match** (also called Fuzzy) ### Exact match In an exact match, all name parts in the searched name must be equal to name parts in a single list entry. The order of name parts does not matter. :::note Definition "Equal" means character-by-character identical. ::: If a name part appears more than once in the searched name, then it must also appear the same number of times in the list entry. **Examples** - `John John Andersson` *matches* `John John Andersson` - `John Andersson` *matches* `John John Andersson` - `John John Andersson` (search) *does not match* `John Andersson` (list entry) ### Phonetic match Phonetic matching uses fuzzy logic to find names that sound (phonetically) similar, based on the **Metaphone3** algorithm. The system looks for at least one name part in the searched name that phonetically matches a name part in a list entry. Then, it calculates similarity using the **Levenshtein distance** algorithm, which measures how many edits are needed to change one word into another. Each name part's distance is weighted by its length. This means that differences in longer name parts affect the total score more than shorter ones. :::tip Recommended threshold A similarity score (hit rate) between **0.75** and **0.9** is typically recommended for fuzzy matching. ::: ### Score The **score** represents the confidence level of a match, based on Trapets' internal **Hit Rating** system. :::info How it works - The **Hit Rating** is an integer from 1 to 5. - The **score** is calculated by multiplying the **Hit Rating** by 20 to produce a percentage. For example, 5 x 20 = 100%. ::: #### Examples - A **Hit Rating** of 5 (score 100) means a perfect match, typically when a unique identifier, such as social security number (SSN) or company registration number, is used. - If no SSN is provided and the match is based only on name and country, the **Hit Rating** may be lower (1 or 2) and the total score affected (20% or 40%). ### Hit rating Indicates how relevant this list item is to the query. The higher number, the more accurate the match, with 5 being the most accurate. #### Hit rating breakdown **Natural persons** :::CustomTable{tableName="Persons" columnWidths="50% 50%"} | Input | Hit Rating | |------------------------|------------| | SSN | 5 | | Name + Date of birth\* | 4 | | Name + Country | 2 | | Name only | 1 | ::: \* Date of birth can be provided as full date, `YYYY-MM` or just `YYYY`.
**Organisations** :::CustomTable{tableName="Organisations" columnWidths="50% 50%"} | Input | Hit Rating | |------------------------|------------| | Company registration number | 5 | | Name + Country | 2 | | Name only | 1 | ::: ## Screening Logic The KYC screening engine processes input parameters in order of reliability. The flow differs slightly between PEP and sanctions screening. ### PEP screening When screening for politically exposed persons (PEPs), the engine evaluates the input fields in the following order: 1. **Social Security Number (SSN)** - If an SSN is provided and matched, it is considered a definitive match. All other input (name, country, date of birth) is ignored. - If no match is found, the engine excludes list entries with non-matching SSNs. 2. **Date of birth** - If provided, the engine keeps only entries with matching dates of birth or no dates of birth at all. 3. **Country** - If provided, the engine filters out entries from non-matching countries. 4. **Name** - Finally, the engine performs name matching based on either exact or phonetic logic. ### Sanction screening Sanctions screening follows the same process, with one key difference: - **SSNs** are not used, as sanctions lists do not include SSNs. ## Test data :::CustomTable{tableName="Trapets test data"} | List Type | Name | Country | Birth | SSN | List | |----------------|----------------|-----------|---------|--------|----------| | PEP | Sebastian Bengtsson | Sweden | 1980-05-06 | SE198005067031 | PEP_Edge | | PEP | Hamid Forsberg | Sweden | 1965-03-07 | SE196503070895 | PEP_Edge | | PEP | Johan Svensson | Sweden | 1959-03-08 | SE195903082575 | PEP_Edge | | PEP | Katrine Thorstensen | Norway | 1973-11-11 | NO11117319646 | PEP_Edge | | PEP | James Roslund | Sweden | 1957-01-13 | SE195701136771 | PEP_Edge | | PEP (Relative or Close Associate)| Viola Roslund | Sweden | 1956-05-05 | SE195605050342 | PEP_Edge | | PEP (Relative or Close Associate)| Sofia Rosander | Sweden | 1976-09-13 | SE197609138164 | PEP_Edge | | PEP | John Bradshaw | Great Britain | 1978-10-10 | | ACURIS_PEP | | PEP | Alicia Wade | Great Britain | 1943-01-16 | | ACURIS_PEP | | PEP | Sana Dijkhuizen | Netherlands | 1953 | | ACURIS_PEP | | PEP | Dieter Sommer | Germany | 1936-11-18 | | ACURIS_PEP | | PEP/Sanction | Ritva Katariina Rankkala | Finland | | 061282-178E | PEP_Edge/EU_Global | | PEP/Sanction | Birgitta Birgersson | Finland | | 070874-178T | PEP_Edge/EU_Global | | PEP/Sanction | Risto Reippaala | Finland | | 080496-728M | PEP_Edge/EU_Global | | PEP/Sanction | Tomí Tiikeri | Finland | | 121260-123V | PEP_Edge/EU_Global | | PEP/Sanction | Nille Psa Augestad | Norway | 1982-01-18 | NO18018200283 | PEP_Edge/EU_Global | | PEP/Sanction | Lasse-Steffen Goldheim | Norway | 1977-01-18 | NO18017749532 | PEP_Edge/EU_Global/ OFAC | | Sanction | Assar Lovén | Sweden | 1999-01-27 | | EU_Global | | Sanction | Yharnam Hunters OY | Finland | | 3744105-3 | EU_Global, UN_Consolidated | | Sanction | Boletaria | Finland | | 7058505-9 | EU_Global, UN_Consolidated | | Sanction | Lordran Knights | Finland | | 3505875-5 | EU_Global, UN_Consolidated | | Sanction | Tone Olsen | Norway | 1999-09-02 | | OFAC | | Sanction | Henry Montgomery | USA | 1977-07-09 | | OFAC_CS | | Sanction | The Great Bank of Cebala | Tunisia | | | OFAC_CS | ::: --- ## Demo of Data Verification # Try the demo Explore the full potential of Data Verification in just a few clicks! You can try out the Data Verification in the [demo page](https://signicat.gitlab.io/info/demo-signicat-person-info/#/), an interface designed to simulate: - API endpoints - Use cases This page contains information to set up and use the Data Verification API demo. ## Connect to the Data Verification API Before you can start making requests to this API, you need to learn how to connect to it. To do this, follow steps 1-3 in the **Connect to Signicat APIs** [Quick start guide](/docs/dashboard/connect-to-signicat-apis/quick-start-guide.mdx). :::note What permissions are required? Ensure that you set the following permissions for your API client: - **Data Verification for natural persons** to connect to data sources about natural persons. - **Data Verification for organisations** to connect to data sources about organisations. ::: ## Get started with the demo To use the demo environment, you need to: 1. On the [demo](https://signicat.gitlab.io/info/demo-signicat-person-info/#/) page, enter your API client credentials. To find your API clients, see the [**API clients**](https://dashboard.signicat.com/api-clients/) page in the Dashboard. 2. Select **Get Token** to authenticate to the Data Verification API. You have now started an authenticated session. Renew your credentials when the session expires. :::tip Ready to go Go ahead and [try out an endpoint](#try-out-an-endpoint) below. ::: ## Try out an endpoint To make your first API request in the demo page: 1. Select **Endpoints** in the top navigation bar. You will view the Organizations, Persons and Sources attributes in the lower half of the page. 2. Select **Organizations** to reveal the available endpoints. 3. Select **Basic** to test the Data Verification API [Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo). 4. Enter organisation test data. For example, to retrieve information about Signicat, use: - Country: `NO` - ID: `989584022` 5. Select **Request** to make the API call and retrieve data about the organisation. Congratulations! You have just made the first request to the Data Verification API. You will now view the response data in a table. You can explore any of the other endpoints available on the demo page. ## Try out a use case The demo page is designed to allow you to explore common use cases by combining multiple features of Data Verification. For example, you can simulate a typical organisation onboarding. To do this in the demo page: 1. Select **Use cases** in the top navigation bar. You will find a selection of use cases in the lower half of the page. 2. Select **Organization Onboarding**. 3. Enter organisation test data. For example, to retrieve information about Signicat, use: - Country: `NO` - ID: `989584022` - Source: optional. 4. Select **Onboard**. In this scenario, we retrieve data from the Basic, Finance and Screening endpoints and organise the results in a table. You can download the result as a PDF. Congratulations! You have just explored one of many scenarios where you can use Data Verification. :::tip Data sources If you want to know more about the data sources supported by the Data Verification API, select the "Search Sources" use case in the demo. To learn more about each data source, go to the [Data sources](/docs/data-verification/data-sources/) documentation. ::: ## Next steps Ready to get started and dive deeper into a code integration? Check out our guides to use the Data Verification API. * [**Quick start guide**](/docs/data-verification/quick-start): Get started with Data Verification * [**Code examples**](/docs/data-verification/code-examples): Dive deep into code examples --- ## Error codes for Data Verification # Error codes When you make a request to the Signicat's Data Verification API and there is an error, you will receive a response with an error message that contains an error code. If you encounter an error and require assistance, you can contact us by [creating a support ticket](https://dashboard.signicat.com/contact-us/tickets/new) in the Signicat Dashboard. The table below shows how to interpret some of the error codes that you might encounter when using the API. :::tip Error object and generic error codes In addition to these product-specific error codes, there are generic error codes which are applicable to all Signicat APIs. To learn about these and how the error object looks, see our generic [Error codes](/docs/dashboard/error-codes.mdx) documentation. ::: :::CustomTable{columnWidths="25% 75%"} | Error code | Description | |:-------------- |:------------- | | 0001 | Unauthorised. | | 0002 | Forbidden. | | 1100 | Requested a country that is not implemented. | | 1101 | Requested one or more sources that are currently unavailable. | | 1102 | Request targeted a resource where the requested dataset is not implemented. | | 1103 | Request targeted a resource where the profile is not implemented. | | 1104 | Requested a country that is not implemented by the provided data source. | | 1105 | Requested a profile that is not implemented by the provided data source. | | 1200 | The request targeted a country that does not exist. | | 1201 | Request targeted strict data sources without specifying anyone. | | 1202 | Request targeted one or more data sources that do not exist. | | 1203 | Request targeted a country that is not available. | | 1204 | Invalid request property combination. | | 1205 | Invalid expansion property. | | 1206 | Invalid query. | | 1207 | Invalid date of birth. | | 1208 | Bad request. | | 1209 | Unprocessable entity. | | 1210 | Invalid paging parameters. | | 1220 | Exceeded max iterations while searching for NACE section code, data source is corrupted. | | 1250 | Country not found. | | 1251 | Subdivisions not found. | | 1252 | Countries not found. | | 1300 | Internal communication error. | | 1301 | The source failed to respond within reasonable time. | | 1302 | Internal communication error. | | 1303 | Invalid argument. | | 1304 | Internal communication error. | | 1305 | The requested resource could not be found. | | 1306 | Internal communication error. | | 1307 | Internal communication error. | | 1308 | Source is temporarily exhausted. | | 1309 | Internal communication error. | | 1310 | Internal communication error. | | 1311 | Internal communication error. | | 1312 | Internal communication error. | | 1313 | Internal communication error. | | 1314 | Source is temporarily unavailable. | | 1315 | Internal communication error. | | 1316 | Internal communication error. | | 1500 | Something went wrong. Please contact us for assistance if the problem persists. | | 1601 | Multiple internal communication errors. | | 1700 | Could not find the specified cursor. | | 1701 | Invalid cursor. | ::: --- ## Data Verification Signicat's Data Verification is an identity verification product that allows you to check and verify customer data against national and commercial data sources, for both natural persons and organisations. With the Data Verification API, you can retrieve information about a customer or perform a one-time verification of their data. For example, you can confirm the address and business name of companies, or screen natural persons for politically exposed person (PEP) status. Data Verification helps you comply with Anti Money Laundering (AML) laws by connecting you to trusted data sources through a single point of integration, thus reducing the costs and challenges of integrating with several sources separately. ## Get started * [**Try the demo**](/docs/data-verification/demo): Data Verification in a few clicks * [**Quick start guide**](/docs/data-verification/quick-start): Get started with Data Verification * [**Code examples**](/docs/data-verification/code-examples): Dive deep into code examples ## Use cases Here are some use case examples to better understand how you can use Data Verification for both persons and organisations: - Gather basic identity information for onboarding. - View finance and credit risk rating information. - Identify the ultimate beneficiary owner (UBO) of an organisation. - Retrieve roles and ownership information of an organisation. - Screen a person or an organisation for politically exposed person (PEP), sanction and adverse media status. - Verify the ownership of bank accounts. - Get the signatory rights of an organisation. - Verify identity information provided by the user. - Enrich end-user and organisation data. - Ensure AML/KYC compliance. ### Customer cases You can read about how our customers are using our solutions in the customer cases: * [**Identity fraud**](https://www.signicat.com/customers/surepay): Our customer SurePay has reduced bank and identity fraud * [**Automating AML**](https://www.signicat.com/customers/usbl): Our customer Usbl has automated AML screening of new board members * [**Wealth management**](https://www.signicat.com/customers/zevoy): Our customer Zevoy has improved AML/KYC checks for expense management ## API The Data Verification API returns normalised data from carefully-selected sources, making it easy for you to interpret and use the responses regardless of the data source. * [**Data Verification API**](/apis/data-verification/): Retrieve information about natural persons or organisations * [**API overview**](/docs/data-verification/api-overview): Learn about the features of the Data Verification API * [**Data sources**](/docs/data-verification/data-sources): Understand the data sources ## Additional resources * [**Use cases**](/docs/data-verification/#use-cases): Find answers to your business needs * [**Coverage overview**](/docs/data-verification/coverage): Explore the product offerings across markets ## Support * [**Release notes**](/docs/data-verification/release-notes): View the release notes for Data Verification * [**Error codes**](/docs/data-verification/error-codes): View the error codes for Data Verification If you have questions, you can contact us by creating a support ticket in the Signicat Dashboard: [**Create support ticket**](https://dashboard.signicat.com/contact-us/tickets/new) --- ## Quick start guide for Data Verification # Quick start guide Learn how to verify information about natural persons or organisations using the Data Verification API. This quick start guide shows you how to: 1. Connect to the Data Verification API. 2. Send requests to the API endpoints using Postman. ## Connect to the Data Verification API Before you can start making requests to this API, you need to learn how to connect to it. To do this, follow steps 1-3 in the **Connect to Signicat APIs** [Quick start guide](/docs/dashboard/connect-to-signicat-apis/quick-start-guide.mdx). :::note What permissions are required? Ensure that you set the following permissions for your API client: - **Data Verification for natural persons** to connect to data sources about natural persons. - **Data Verification for organisations** to connect to data sources about organisations. ::: ## Get started with Postman This guide provides steps for using [Postman](https://www.postman.com/downloads) to make API calls. We have created a Postman collection that lets you try the Data Verification API. Click the button below to get the collection for Postman. [](https://app.getpostman.com/run-collection/20756027-49d27748-2c66-45a9-928a-579b5c4f3084?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D20756027-49d27748-2c66-45a9-928a-579b5c4f3084%26entityType%3Dcollection%26workspaceId%3D3ea7a3cf-7777-4f42-b4e9-88876cfe660d) For more detailed instructions on how to use the collection, refer to the instructions below. ### Import the collection to Postman 1. Download the [Postman collection](https://elements.getpostman.com/redirect?entityId=20756027-49d27748-2c66-45a9-928a-579b5c4f3084&entityType=collection). 2. Open Postman. 3. Click **File** > **Import** and browse to the collection file to import it. 4. Click the name of the collection and edit the following variables: :::CustomTable{columnWidths="25% 50% 25%" minTableSize="900px"} | Variable | Value | Description | | ----------------------- | -------------------------------------------------- | ----------------------------------------------------------- | | **oauth_url** | `https://api.signicat.com/auth/open/connect/token` | The URL where to authenticate with Signicat APIs. | | **oauth_scope** | `signicat-api` | The API client scope you want to work with. | | **oauth_client_id** | Your Client ID | The Client ID obtained when you created the API Client. | | **oauth_client_secret** | Your Client secret | The Client secret obtained when you created the API Client. | | **baseURL** | `https://api.signicat.com/info/lookup` | The base URL for the Data Verification API. | ::: 5. Click **Save**. Postman collection variables ### Get information You can now retrieve information about a natural person or an organisation. The [API reference](/apis/data-verification/) contains information about each of the available endpoints. For example, to query basic information about an organisation, use the [Basic endpoint](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo) like this: 1. Go to the Basic endpoint in the Postman collection. 2. Fill in the path parameters. For example, if you want to retrieve information about Signicat, write `NO` in the **country** row and `989584022` in the **organizationNumber** row. 3. Optional. Fill in the query parameters to extend functionality. For example, you can set `rawJson` to `true` if you want to see the raw JSON output of the response. 4. Click **Send**. For example, the request might look like this: ```curl GET https://api.signicat.com/info/lookup/countries/NO/organizations/989584022 ``` You will receive a response with the data you requested. For example: ```json { "name": "SIGNICAT AS", "names": [ { "name": "SIGNICAT AS", "type": "registered", "start": null, "end": null } ], "organizationNumber": "989584022", "country": { "alpha2": "NO", "alpha3": "NOR", "numeric": "578" }, "businessAddress": null, "addresses": null, "organizationType": { "name": "Aksjeselskap", "code": "AS", "url": "https://data.brreg.no/enhetsregisteret/api/organisasjonsformer" }, "legalStatus": "active", "employees": 132, "industries": [ { "code": "58.29", "description": "Other software publishing", "section": "J", "level": 4 } ], "contact": null, "metadata": { "sources": ["no-brreg"], "urls": ["https://data.brreg.no/enhetsregisteret/api/enheter/989584022"], "lastChanged": null, "rawJson": null } } ``` Note that some data is omitted for brevity. You can find a more elaborate example in the [API reference](pathname:///apis/data-verification/#tag/Organizations/operation/GetBasicOrganizationInfo). ## Data sources If you want to know more about the data sources supported by the Data Verification API, you can get a list by using the [Sources endpoints](pathname:///apis/data-verification/#tag/Sources). To view all the sources available for the organisation endpoints, use the Sources endpoint in the Organizations folder of the Postman collection. ``` GET https://api.signicat.com/info/lookup/sources/organization ``` To view all the sources available for natural persons, use the Sources endpoint in the Persons folder. ``` GET https://api.signicat.com/info/lookup/sources/person ``` The response will contain an updated list of the data sources used in the Data Verification API. :::tip Data sources table Visit the Coverage overview page to view all the data sources supported by the Data Verification API. To learn more about each data source, go to the [Data sources](/docs/data-verification/data-sources/) page. :::