Collect tax information from individuals and legal entities to comply with international tax regulations, including the Common Reporting Standard (CRS).
Solaris stores this data in tax identification resources:
- Person tax identification: For retail customers, freelancers, and natural persons associated with a business. API Reference
- Business tax identification: For the legal entity of a business customer. API Reference
Tax identification requirements vary by product, branch, and customer type.
Mandatory for: All customer types in all branches.
Action:
- Retail & Freelancers: Collect personal tax information (TIN and tax residency).
- Business (B2B): Collect tax information for:
- The legal entity (Business tax ID).
- All natural persons associated with the business (legal representatives, beneficial owners, authorized persons).
- Germany (DE Branch): You may open the account immediately. However, you must submit tax information within 90 days, or the account will be blocked (
MISSING_TAX_INFORMATION). - Other Branches: You must submit tax information before opening the account.
Retail & Freelancers:
- Mandatory: Only for customers outside Germany (used for credit scoring).
- Optional: For customers in Germany.
Business (B2B):
- Mandatory: For all natural persons associated with the business (e.g., legal representatives, beneficial owners).
- Applies to products like Fronting Loans and Fronting Factoring.
Not Required: If you use Solaris only for KYC identification services, you do not need to collect tax information.
Integrate tax data collection into your onboarding flow.
Display the required tax declarations and consent screens. See Legal and compliance screens for the exact text.
Ensure you collect the correct TIN format for the customer's country of residence.
Each country has its syntax validation rules for the Tax Identification Number (TIN) described as follows:
German TINs have the following charachteristics, which are used for syntax validation:
- 11 numeric digits.
- The first digit can not be 0.
- Within the first 10 digits one digit appears twice.
- All other 8 digits appear only once.
- The last digit is a check digit which is calculated based on the previous 10 digits.
Syntax example:
- First 10 digits: 4895437120
- Check digit: 7
- TIN: 48954371207
French TINs have the following charachteristics, which are used for syntax validation:
- 13 digits (all numeric) C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
- C1 must be 0, 1, 2 or 3
- C11, C12, C13 are check digits calculated as follows:
- Concatenate C1 until C10.
- Get modulo 511 of the the concatenated number.
- Check digit = remainder of modulo 511 (if remainder < 100, C11 = 0; if remainder < 10, C11 & C12 = 0; if remainder = 0, C11, C12 & C13 = 0).
Syntax example:
- C1-C10: 3023217600
- 3023217600 mod 511 = 53
- C11-C13: 053
- TIN: 3023217600053
For customers opening an account in the French branch, please note the following rules:
- If the customer's tax residency is in France, collecting the tax ID is NOT mandatory. However, you should still pass this information to Solaris similar to the below example.
- If the customer's tax residency is NOT in France, collecting the tax ID is mandatory in your frontend flow.
Customer with a tax residency in France
If the customer's tax residency is in France, collecting the tax identification number is not mandatory. However, you need to pass the following information for the customer by calling the POST Create a person tax identification endpoint.
// POST /v1/persons/{person_id}/tax_identifications
{
"country": "FR",
"reason_no_tin": "OTHER",
"reason_description": "Not required since FR resident with tax residency in FR"
}The Italian equivalent of the TIN is the codice fiscale. It is calculated by a legally established algorithm and must be verified by your frontend implementation.
Italian TINs have the following charachteristics, which are used for syntax validation:
- Format "SSSNNNYYMDDZZZZX"
- SSS alphabetical
- NNN alphabetical
- YY numerical, last digits of the birth year
- M is the letter for the month of birth—letters are used in alphabetical order, but only the letters A to E, H, L, M, P, R to T are used (thus, January is A and October is R)
- DD is the day of the month of birth (particularities like leap years are considered, in order to differentiate between genders, 40 is added to the day of birth for women (thus a woman born on May 3 has ...E43...))
- ZZZZ 1. alphabetical, 2-4 numerical
- X alphabetical
- syntax example: SSSNNN31B28X000C
Codice fiscale validation
Please refer to the decree of the Finance Ministry for the source of this algorithm.
Example: RSSMRA99D20F205R
| Position | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Digit | R | S | S | M | R | A | 9 | 9 | D | 2 | 0 | F | 2 | 0 | 5 | R |
To calculate digits 12-15 (Place of birth) correctly, you must use the specific codes defined in our approved lists.
- Italy: Use the
CODICE ERARIOvalue (e.g.,H501) associated with the city in the Comune List. - Foreign Countries: Use the specific country code found in the Country List.
Using values outside these lists will result in an invalid Codice Fiscale that will be rejected during onboarding.
| Position in fiscal code | Meaning of digits | How it is computed |
|---|---|---|
| 1-3 | Last name | Last names composed of multiple parts are always considered as a continuous sequence of characters; For women, this is always the maiden name; If the surname has three or more consonants, then the first, second, and third consonants are used; If the surname has two consonants, then the first and second consonants and first vowel are used; If the surname has one consonant and two vowels, then the first consonant and then the first and second vowels are used; If the surname has one consonant and one vowel, then the first consonant is used, then the first vowel, then "x"; If the surname has only two vowels, then the first and second vowel are used, followed by "x". |
| 4-6 | First name | Last names composed of multiple parts are always considered as a continuous sequence of characters; If the first name has three or more consonants, then the first, second, and third consonants are used; If the first name has two consonants, then the first and second consonants and the first vowel are used; If the first name has one consonant and two vowels, then the first consonant and the first and second vowels are usedd; If the first name has one consonant and one vowel, then the first consonant and first vowel are used, followed by "x"; If the first name has only two vowels, then the first and second vowel are used, followed by "x". |
| 7-8 | Year of birth | Last two digits of the birth year (e.g., for customers born in 1975, these digits would be 75). |
| 9 | Month of birth | The month is assigned a letter based on the rules described in table 4 (e.g., if a person is born in June, this digit would contain the letter H). |
| 10-11 | Day of birth & gender | These two digits are computed based on the gender. For male persons: the digits correspond with the exact date of birth (01 to 31); For female persons: the digits correspond with the exact date of birth + 40, so value is from 41 to 71. E.g., if a female person is born on the 10th day in the month, then these two digits would be 50. The birth month assigned a letter based on the rules described in table 4 (e.g., if a person is born in June, this digit would contain the letter H). |
| 12-15 | Place of birth | These digits consist of one letter and three numbers (The Belfiore Code). Born in Italy: Use the CODICE ERARIO column from the Comune List corresponding to the city of birth.Born outside Italy: Use the country code from the Country List. |
| 16 | Control character | The digits at the even positions are converted to the values listed in Table 1; The digits at the odd positions are converted to the values listed in Table 2; The resulting numbers are summed and divided by 26; Then, this resulting number is converted to the letter that corresponds with its numeric value, as described in Table 3. |
| Duplicates | In the event that the first 15 digits of an existing codice fiscale would be the same for two or more persons, there is a method to avoid creating a duplicate codice fiscale once it has been registered. The first number of the codice fiscale starting from the right is converted to a letter as described in Table 5. E.g., for the second person with same codice fiscale, the first number from the right is converted to a letter; for the third person with the same codice fiscale, the first and second numbers from the right are converted to letters. |
Table 1
| Character | Value | Character | Value | Character | Value | Character | Value |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 9 | 9 | I | 8 | R | 17 |
| 1 | 1 | A | 0 | J | 9 | S | 18 |
| 2 | 2 | B | 1 | K | 10 | T | 19 |
| 3 | 3 | C | 2 | L | 11 | U | 20 |
| 4 | 4 | D | 3 | M | 12 | V | 21 |
| 5 | 5 | E | 4 | N | 13 | W | 22 |
| 6 | 6 | F | 5 | O | 14 | X | 23 |
| 7 | 7 | G | 6 | P | 15 | Y | 24 |
| 8 | 8 | H | 7 | Q | 16 | Z | 25 |
Table 2
| Character | Value | Character | Value | Character | Value | Character | Value |
|---|---|---|---|---|---|---|---|
| 0 | 1 | 9 | 21 | I | 19 | R | 8 |
| 1 | 0 | A | 1 | J | 21 | S | 12 |
| 2 | 5 | B | 0 | K | 2 | T | 14 |
| 3 | 7 | C | 5 | L | 4 | U | 16 |
| 4 | 9 | D | 7 | M | 18 | V | 10 |
| 5 | 13 | E | 9 | N | 20 | W | 22 |
| 6 | 15 | F | 13 | O | 11 | X | 25 |
| 7 | 17 | G | 15 | P | 3 | Y | 24 |
| 8 | 19 | H | 17 | Q | 6 | Z | 23 |
Table 3
| Character | Value | Character | Value | Character | Value | Character | Value |
|---|---|---|---|---|---|---|---|
| 0 | A | 7 | H | 14 | O | 21 | V |
| 1 | B | 8 | I | 15 | P | 22 | W |
| 2 | C | 9 | J | 16 | Q | 23 | X |
| 3 | D | 10 | K | 17 | R | 24 | Y |
| 4 | E | 11 | L | 18 | S | 25 | Z |
| 5 | F | 12 | M | 19 | T | ||
| 6 | G | 13 | N | 20 | U |
Table 4
| Month | Value | Month | Value | Month | Value | Month | Value |
|---|---|---|---|---|---|---|---|
| January | A | April | D | July | L | October | R |
| February | B | May | E | August | M | November | S |
| March | C | June | H | September | P | December | T |
Table 5
| Character | Value | Character | Value | Character | Value | Character | Value |
|---|---|---|---|---|---|---|---|
| 0 | L | 3 | P | 6 | S | 9 | V |
| 1 | M | 4 | Q | 7 | T | ||
| 2 | N | 5 | R | 8 | U |
The Spanish equivalent of a TIN is the NIF (Número de Identificación Fiscal).
- for Spanish citizens, the TIN value is the same as the National ID (DNI - Documento Nacional de Identidad) and contains 8 digits and 1 letter. The format is 00000000-A, where 0 is a digit and A is a checksum letter.
- for non-citizens in Spain, the TIN value is the same as Foreigner ID (NIE - Número de Identidad/Identificación de Extranjero) and contains 7 digits and two letters (1 letter at the beginning and 1 letter at the end). The format is X-0000000-A, where 0 is a digit, A is a checksum letter, and X is a letter generally X but lately also Y.
DNI issuing is regulated under the Royal Decree no. 1553/2005 issued December 23rd. Article 11 states that the DNI document includes the personal national identification number and a checksum letter corresponding to the tax identification number.
Tax identification numbers of adult Spanish citizens can be verified by calculating their checksum letter using the following algorithm:
The number is divided by 23 and the remainder is replaced by a letter determined by the following table:
| REMAINDER | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LETTER | T | R | W | A | G | M | Y | F | P | D | X | B |
| REMAINDER | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| LETTER | N | J | Z | S | Q | V | H | L | C | K | E |
For example, if the DNI number is 12345678, divided by 23 leaves a remainder of 14, therefore the letter is Z: 12345678Z.
Non-citizens in Spain have a NIE (Número de Identidad de Extranjero) which is made up of a letter (X, Y, Z), 7 numbers and a check digit.
To calculate the check digit, each letter is replaced by a number and the same algorithm can be used:
- X → 0
- Y → 1
- Z → 2
Solaris automatically validates the syntax of personal Tax Identification Numbers (TIN) based on the country code during creation.
- Valid: API returns
201 Created. - Invalid: API returns
400 Bad Request.
Validation applies only to Person tax identifications (retail, freelancers). Business tax IDs are not currently validated by syntax.
Example validation error:
{
"errors": [
{
"id": "029f7bc9-a4dc-4512-b3ee-65d2eb089804",
"status": 400,
"code": "invalid_model",
"title": "Invalid Model",
"detail": "number is not a valid person tax identification number for country: ES, for reference please check: https://en.wikipedia.org/wiki/National_identification_number#Spain",
"source": {
"field": "number",
"message": "is not a valid person tax identification number for country: ES, for reference please check: https://en.wikipedia.org/wiki/National_identification_number#Spain"
}
}
]
}