Turkey eKYC verification matches submitted individual data against Turkey's official voter register as the source of truth. See the eKYC API Reference for common response semantics that apply across all sources.
Available sources
| Source | API source string | Description |
|---|---|---|
| Turkey Voter Register | TR_VOTER_REGISTER |
Verifies submitted data against Turkey's official voter register. |
Turkey Voter Register
Request parameters
| Parameter | Required | Description |
|---|---|---|
| source | Mandatory | Must be TR_VOTER_REGISTER. |
| country | Mandatory | Must be TR. |
| firstName | Mandatory | First name of the individual. Can be submitted with or without Turkish characters (for example, Daşlı and Dasli both match). |
| surName | Mandatory | Last name of the individual. All surnames in one field (for example, Boztepe Köktürk). Can be submitted with or without Turkish characters. |
| middleName | Optional | Middle name of the individual. Not included in fullNameMatch. |
| dateOfBirth | Optional | Format: yyyy-mm-dd. |
| gender | Optional | Accepted values are M or F. |
| street | Optional | Street, house, and flat number in one field (for example, Atatürk Caddesi No:12 D:3). Can be submitted with or without Turkish characters. |
| city | Optional | Province (il) of the individual's address (for example, İstanbul, İzmir). Provide the province, not the district (ilçe). Sending the province is needed for both cityMatch and streetMatch to match — a district (for example, Fatih, Bayraklı) causes both to fail. |
| idNum | Optional | TC Kimlik No (Turkish national identity number). Format: exactly 11 numeric digits, first digit cannot be 0 (for example, 12345678901). |
Info
Non-Latin input (for example, Arabic or Cyrillic script) is automatically transliterated to Turkish Latin script before the request is sent. Names and street can also be submitted directly in Latin script with or without Turkish characters — both match. See Input transliteration below for details.
Sample request
{
"plugins": ["kyc"],
"source": "TR_VOTER_REGISTER",
"firstName": "Jane",
"middleName": "Example",
"surName": "Doe",
"country": "TR",
"city": "İstanbul",
"street": "Atatürk Caddesi No:1 D:1",
"dateOfBirth": "2000-01-01",
"gender": "F",
"idNum": "12345678901"
}
Response fields
Turkey Voter Register anchors verification on full name plus at least one of: date of birth, TC Kimlik No, or street address. See the eKYC API Reference for common match field definitions and status values.
| Field | Statuses | Description |
|---|---|---|
firstNameMatch |
exact, fuzzy, nomatch |
Matches first name submitted against the value in the source of truth. |
lastNameMatch |
exact, fuzzy, nomatch |
Matches last name submitted against the value in the source of truth. |
middleNameMatch |
exact, fuzzy, nomatch, nodata |
Matches middle name submitted against the value in the source of truth. Shown as a standalone field, not included in fullNameMatch. |
fullNameMatch |
exact, fuzzy, nomatch, nodata |
Composite match derived from firstNameMatch and lastNameMatch only. See below for calculation logic. |
dobMatch |
exact, fuzzy, nomatch, nodata |
Matches date of birth submitted against the value in the source of truth. |
genderMatch |
exact, fuzzy, nomatch, nodata |
Matches gender submitted against the value in the source of truth. |
streetMatch |
exact, fuzzy, nomatch, nodata |
Matches street address submitted against the value in the source of truth. Only streetMatch = exact counts toward a low-risk result; fuzzy does not. |
cityMatch |
exact, fuzzy, nomatch, nodata |
Matches province (il) submitted against the value in the source of truth. |
fullAddressMatch |
exact, fuzzy, nomatch, nodata |
Composite match derived from streetMatch and cityMatch. See below for calculation logic. |
idNumMatch |
exact, fuzzy, nomatch, nodata |
Matches the Turkish national ID number (TC Kimlik No) submitted against the value in the source of truth. |
overallLevel |
low, medium, high |
Overall risk level. See below for calculation logic. |
overallLevel calculation
overallLevel is calculated based on the risk associated with the submitted full name and at least one verified attribute (date of birth, TC Kimlik No, or street address).
- low when
fullNameMatchisexactAND at least one of the following is exact:dobMatch,idNumMatch, orstreetMatch. - high when
fullNameMatchisnomatchOR all of the following arenomatchornodata:streetMatch,dobMatch, andidNumMatch. - medium for all other combinations.
Contact your Incode representative to customize the overallLevel calculation for your use case.
Input transliteration
Non-Latin input (for example, Arabic, Persian, or Cyrillic script) is automatically transliterated to Turkish Latin script before the request is sent to the source of truth. Latin input, including Turkish characters (ç, ğ, ı, İ, ö, ş, ü), is sent exactly as provided.
| Field | Transliteration applied | Rule |
|---|---|---|
firstName |
Only if non-Latin | Written in Turkish Latin script using Turkish name forms where they exist (for example, أحمد → Ahmet, Сергей → Sergey). |
middleName |
Only if non-Latin | Same rules as firstName. |
surName |
Only if non-Latin | Written in Turkish Latin script using Turkish spelling conventions. |
street |
Only if non-Latin | Written in Turkish Latin script; numbers kept exactly as given. Street words translated to Turkish equivalents (for example, شارع → Caddesi). |
city |
Always | Returned as one of Turkey's 81 provinces (il) in its official Turkish spelling. Districts (ilçe) are mapped to their province (for example, Fatih → İstanbul, Bayraklı → İzmir). Non-Latin city input is translated (for example, مرسين → Mersin). |
idNum |
Digits only | Non-Western digits converted to 0–9 (for example, ١٢٣ → 123). Nothing else changes. |
Sample response
{
"kyc": [
{ "key": "firstNameMatch", "status": "exact" },
{ "key": "lastNameMatch", "status": "exact" },
{ "key": "middleNameMatch", "status": "exact" },
{ "key": "fullNameMatch", "status": "exact" },
{ "key": "dobMatch", "status": "exact" },
{ "key": "genderMatch", "status": "exact" },
{ "key": "streetMatch", "status": "exact" },
{ "key": "cityMatch", "status": "exact" },
{ "key": "fullAddressMatch", "status": "exact" },
{ "key": "idNumMatch", "status": "exact" },
{ "key": "overallLevel", "status": "low" }
]
}