---
title: "Portugal"
url: "https://developer.incode.com/general-reference/portugal/"
section: "general-reference"
group: "eKYB Reference / eKYB Prefill Coverage"
version: "v1.1"
status: "live"
---
# Portugal

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](/general-reference/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](#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

```json
{
    "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)**

```json
{
    "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)**

```json
{
    "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**

```json
{
    "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`, and `websites` may 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:

```json
{
    "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:

```json
{
    "status": 400,
    "error": "Bad Request",
    "message": "must not be blank",
    "path": "/omni/externalVerification/ekyb-prefill"
}
```
No business match is found for the submitted taxId:
```json
{
    "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](/dashboard-platform-administration/single-session-view/).