eKYB Prefill in Portugal leverages Portugal's source of truth to automatically retrieve and populate business information based on a company's NIF, including the business name, entity type, registration status, registration date, credit rating, and other corporate details, without requiring manual input from the user.
Source
| Country | Source | Description |
|---|---|---|
| Portugal | PT_KYB_PREFILL |
Returns matching Portuguese business details from Portugal's source of truth for pre-fill. |
Direct API approach
For general integration notes and shared response semantics, see the eKYB Prefill API Reference.
All module configurations and user data can be forwarded directly in the request for performing a Prefill lookup. This overrides existing configuration and data collected about the user.
Endpoint
POST /omni/externalVerification/ekyb-prefill
Request parameters
| Parameter | Required | Description |
|---|---|---|
plugins |
Mandatory | String array. Must be ["ekyb-prefill"]. Specifies the Prefill flow. |
source |
Mandatory | String. Must be PT_KYB_PREFILL. Identifies the Prefill source. |
country |
Mandatory | String. Two-letter Alpha-2 country code. Must be PT. |
taxId |
Mandatory | String. NIF (Número de Identificação Fiscal). See Tax ID formats for details. |
businessName |
Optional | String. Registered business name, used to verify the match against the source of truth. |
address |
Optional | String. Business address, used to verify the match against the source of truth. |
Tax ID formats
The NIF (Número de Identificação Fiscal) is the Portuguese tax identifier. It serves as both the company registration number and the VAT number — no separate VAT identifier exists for Portugal. Requests with an invalid format return a 400 error.
| Entity Type | Format |
|---|---|
| NIF | 9 numeric digits (e.g. 123456789) |
Sample request
{
"plugins": ["ekyb-prefill"],
"source": "PT_KYB_PREFILL",
"country": "PT",
"taxId": "123456789",
"businessName": "",
"address": ""
}
Sample response
The Prefill response returns business data retrieved directly from the source of truth. Passthrough fields are returned as-is from the source, without fuzzy matching or verification scoring. Match fields (nameMatch, addressMatch) are only returned when the corresponding input (businessName, address) was submitted. Field availability varies by entity type and size — see the notes under each example below.
Example 1 — large public company (no group structure)
{
"kyb-prefill": [
{
"tin": "123456789",
"vatNo": "123456789",
"name": "SAMPLE ENERGY SA",
"nameMatch": "Verified",
"address": "Av. Sample, nº 12, 1000-000, LISBOA, LISBOA",
"city": "LISBOA",
"postalCode": "1000-000",
"entityType": "Joint Stock Company",
"registrationStatus": "Active",
"registrationDate": "1991-01-22T00:00:00Z",
"creditRating": "A",
"creditRatingDescription": "Very Low Risk",
"industryDesc": "Activities of corporate headquarters",
"activityDesc": "Activities of corporate headquarters",
"turnover": { "currency": "EUR", "value": 326830000 },
"employeeCount": "617",
"websites": ["http://www.sampleenergy.example"],
"shareholders": [
{ "name": "EXAMPLE CAPITAL INC", "percentSharesHeld": 8.35 },
{ "name": "SAMPLE HOLDINGS GROUP", "percentSharesHeld": 22.2 }
],
"directors": [
{ "name": "MARIA SAMPLE SILVA", "positionName": "Board of Director's President" }
]
}
]
}
(ultimateParent/immediateParent omitted — this entity sits at the top of its own group.)
Example 2 — small company with a parent (no directors)
{
"kyb-prefill": [
{
"tin": "987654321",
"vatNo": "987654321",
"name": "SAMPLE DREAM FACTORY LDA",
"nameMatch": "Verified",
"address": "Rua Sample, nº 41, 4000-000, VALONGO, PORTO",
"city": "VALONGO",
"postalCode": "4000-000",
"entityType": "Private Limited Company",
"registrationStatus": "Active",
"registrationDate": "2009-07-16T00:00:00Z",
"creditRating": "A",
"creditRatingDescription": "Very Low Risk",
"industryDesc": "Web search portal activities",
"activityDesc": "Web search portal activities",
"turnover": { "currency": "EUR", "value": 227214 },
"employeeCount": "2",
"websites": ["http://www.sampledreamfactory.example"],
"shareholders": [
{ "name": "EXAMPLE EVENTOS LDA", "percentSharesHeld": 5 },
{ "name": "SAMPLE NETWORK LDA", "percentSharesHeld": 71 },
{ "name": "EXAMPLE HOLDING LDA", "percentSharesHeld": 24 }
],
"ultimateParent": { "name": "SAMPLE NETWORK LDA", "country": "PT" },
"immediateParent": { "name": "SAMPLE NETWORK LDA", "country": "PT" },
"otherAddresses": [
{ "otherAddress": "Rua Sample, nº 41 4000-000" },
{ "otherAddress": "RUA EXAMPLE JUNQUEIRO, 495, 1º, SALA E 4100-000" }
]
}
]
}
Example 3 — small, single-owner company
{
"kyb-prefill": [
{
"tin": "456789123",
"vatNo": "456789123",
"name": "SAMPLE INOVACAO AMBIENTAL LDA",
"nameMatch": "Verified",
"creditRating": "A",
"creditRatingDescription": "Very Low Risk",
"industryDesc": "Other physical and natural science research and development",
"activityDesc": "Other physical and natural science research and development",
"turnover": { "currency": "EUR", "value": 449780 },
"employeeCount": "5",
"websites": ["http://www.sampleinovamb.example"],
"shareholders": [
{ "name": "SAMPLE INVESTIMENTOS SGPS SA", "percentSharesHeld": 100 }
],
"directors": [
{ "name": "JOAO SAMPLE ROQUE", "positionName": "Manager" }
]
}
]
}
Info Field availability differs across companies, regardless of entity type or size.
directors,shareholders,ultimateParent,immediateParent,city,postalCode,otherAddresses, andwebsitesmay all be absent for a given company — this is expected and does not indicate an error.
Response fields
| Key | Value | Description |
|---|---|---|
tin |
NIF | Company registration number, as returned from the source of truth. |
vatNo |
NIF | The VAT registration number. Identical to tin for Portugal, since the NIF serves both purposes. |
name |
Business name | The registered legal name of the business as returned from the source of truth. |
nameMatch |
Verified, Approximate Match, Unverified | Match result comparing the submitted businessName against the registered name. Only returned when businessName is submitted. |
address |
Address | The registered business address as returned from the source of truth. |
addressMatch |
Verified, Approximate Match, Unverified | Match result comparing the submitted address against the registered address. Only returned when address is submitted. |
city |
City | The city associated with the registered business address, when available. |
postalCode |
Postal code | The postal code associated with the registered business address, when available. |
entityType |
Entity type | The legal entity type of the business (e.g. Joint Stock Company, Private Limited Company). Defaults to "Unknown" when not available. |
registrationStatus |
Active, Expired, Unknown, Not Found | Current registration status of the business. Defaults to "Unknown" when not available. |
registrationDate |
Date | The date the business was registered. May not be available for all entities. |
creditRating |
Rating value (e.g. A, C) | The business's credit rating, as returned from the source of truth. Defaults to "Unknown" when not available. |
creditRatingDescription |
Description (e.g. Very Low Risk) | Human-readable description of the credit rating. Defaults to "Unknown" when not available. |
industryDesc |
Industry description | Description of the business's main activity. |
activityDesc |
Activity description | Description of the business's principal activity. Identical to industryDesc for Portugal. |
turnover |
{currency, value} object |
The business's latest reported turnover figure. |
employeeCount |
Number (as string) | Latest reported number of employees, if available. |
websites |
Array of strings | Websites associated with the business, if available. |
otherAddresses |
Array of {otherAddress} |
Addresses associated with the business other than the main registered address, if any. No type label is provided in the source data for Portugal. |
shareholders |
Array of {name, percentSharesHeld} |
Shareholder information, if available. |
directors |
Array of {name, positionName} |
Directors associated with the business, if available. |
ultimateParent |
{name, country} |
The business's ultimate parent company, if the business is a subsidiary. Absent when the entity sits at the top of its own group. |
immediateParent |
{name, country} |
The business's immediate parent company, if the business is a subsidiary. Absent when the entity sits at the top of its own group. |
Error responses
For standard HTTP response codes, see the API Error Response page. Portugal Prefill returns the following country-specific 400 errors.
taxId is missing, empty, or not a 9-digit NIF:
{
"status": 400,
"error": "Bad Request",
"message": "taxId must be a valid Portuguese NIF: 9 numeric digits",
"path": "/omni/externalVerification/ekyb-prefill"
}
Any mandatory field (plugins, source, country, or taxId) is missing:
{
"status": 400,
"error": "Bad Request",
"message": "must not be blank",
"path": "/omni/externalVerification/ekyb-prefill"
}
No business match is found for the submitted taxId:
{
"timestamp": 1782851583695,
"status": 200,
"message": "No business found matching the provided tax ID.",
"path": "/omni/externalVerification/ekyb-prefill"
}`
Single Session Dashboard results
Prefill results are available on the Business tab in single Session view.