Skip to content

Provinces

Province endpoints expose Turkey's province records and province-scoped child collections.

Base path:

http
/v2/provinces

Endpoints

MethodPathDescription
GET/v2/provincesList provinces
GET/v2/provinces/{provinceId}Get one province by ID
GET/v2/provinces/{provinceId}/districtsList districts in a province
GET/v2/provinces/{provinceId}/municipalitiesList municipalities in a province
GET/v2/provinces/{provinceId}/neighborhoodsList neighborhoods in a province
GET/v2/provinces/{provinceId}/villagesList villages in a province

Province Object

FieldTypeDescription
idintegerProvince ID
namestringProvince name
slugstringURL-safe province name
populationintegerProvince population
area.valuenumberProvince area value
area.unitstringArea unit, always km2
altitude.valuenumberProvince altitude in meters
altitude.unitstringAltitude unit, always m
phoneAreaCodesinteger[]Province phone area codes
isCoastalbooleanWhether the province is coastal
isMetropolitanbooleanWhether the province is metropolitan
region.trstringProvince region in Turkish
region.enstringProvince region in English
coordinates.latitudenumberProvince latitude
coordinates.longitudenumberProvince longitude
stats.districtCountintegerNumber of districts in the province
stats.municipalityCountintegerNumber of municipalities in the province
stats.neighborhoodCountintegerNumber of neighborhoods in the province
stats.villageCountintegerNumber of villages in the province

TIP

Istanbul province has two phone area codes because it spans both sides of the Bosphorus strait, which divides the city into European and Asian parts. The European side uses the 212 area code, while the Asian side uses the 216 area code. All other provinces in Turkey have only one area code. That's why phoneAreaCodes is an array, even though it contains only one element for most provinces.

Example province:

json
{
  "id": 34,
  "name": "İstanbul",
  "slug": "istanbul",
  "population": 15754053,
  "area": {
    "value": 5461,
    "unit": "km2"
  },
  "altitude": {
    "value": 25,
    "unit": "m"
  },
  "phoneAreaCodes": [212, 216],
  "isCoastal": true,
  "isMetropolitan": true,
  "region": {
    "tr": "Marmara",
    "en": "Marmara"
  },
  "coordinates": {
    "latitude": 41.006381,
    "longitude": 28.9758715
  },
  "stats": {
    "districtCount": 39,
    "municipalityCount": 39,
    "neighborhoodCount": 961,
    "villageCount": 0
  }
}

List Provinces

http
GET /v2/provinces

Returns a paginated list of provinces.

Query Parameters

ParameterTypeDefaultDescription
searchstring-Filters by province name
fieldsstring-Comma-separated province fields to include
sortstringidSorts by a: id, -id, name, -name, population, -population
limitinteger100Number of records to return, from 1 to 1000
offsetinteger0Number of records to skip
minPopulationinteger-Minimum population
maxPopulationinteger-Maximum population
minAreanumber-Minimum area in square kilometers
maxAreanumber-Maximum area in square kilometers
minAltitudenumber-Minimum altitude in meters
maxAltitudenumber-Maximum altitude in meters
isCoastalstring-Filters coastal provinces. Allowed values: true, false
isMetropolitanstring-Filters metropolitan provinces. Allowed values: true, false

TIP

isCoastal and isMetropolitan accept string values true and false for ease of use in query parameters. They look like boolean values, but they are sent as strings in the query string.

Allowed Fields

text
id,name,slug,population,area,altitude,phoneAreaCodes,isCoastal,isMetropolitan,region,coordinates,stats

Request

bash
curl "https://api.turkiyeapi.dev/v2/provinces?search=istanbul&fields=id,name,population,area"

Response

json
{
  "data": [
    {
      "id": 34,
      "name": "İstanbul",
      "population": 15754053,
      "area": {
        "value": 5461,
        "unit": "km2"
      }
    }
  ],
  "meta": {
    "count": 1,
    "total": 1,
    "limit": 100,
    "offset": 0,
    "datasetVersion": "2025",
    "lastUpdated": "2026-05-10"
  }
}

Get Province by ID

http
GET /v2/provinces/{provinceId}

Returns one province by numeric province ID.

Path Parameters

ParameterTypeDescription
provinceIdintegerProvince ID

Query Parameters

ParameterTypeDefaultDescription
fieldsstring-Comma-separated province fields to include
includestring-Comma-separated list of related resources to include

Includes

text
districts,municipalities,neighborhoods,villages

Request

bash
curl "https://api.turkiyeapi.dev/v2/provinces/34?include=districts,municipalities"

Response

json
{
  "data": {
    "id": 34,
    "name": "İstanbul",
    "slug": "istanbul",
    "population": 15754053,
    "area": {
      "value": 5461,
      "unit": "km2"
    },
    "altitude": {
      "value": 25,
      "unit": "m"
    },
    "phoneAreaCodes": [212, 216],
    "isCoastal": true,
    "isMetropolitan": true,
    "region": {
      "tr": "Marmara",
      "en": "Marmara"
    },
    "coordinates": {
      "latitude": 41.006381,
      "longitude": 28.9758715
    },
    "stats": {
      "districtCount": 39,
      "municipalityCount": 39,
      "neighborhoodCount": 961,
      "villageCount": 0
    },
    "districts": [],
    "municipalities": []
  },
  "meta": {
    "datasetVersion": "2025",
    "lastUpdated": "2026-05-10"
  }
}

Included resources use their own schemas. The example above shortens nested arrays for readability.

List Districts in a Province

http
GET /v2/provinces/{provinceId}/districts

Returns districts whose provinceId matches the path parameter.

Path Parameters

ParameterTypeDescription
provinceIdintegerProvince ID

Query Parameters

ParameterTypeDefaultDescription
fieldsstring-Comma-separated district fields to include
limitinteger100Number of records to return, from 1 to 1000
offsetinteger0Number of records to skip

Allowed Fields

text
id,name,slug,provinceId,population,area,stats

Request

bash
curl "https://api.turkiyeapi.dev/v2/provinces/34/districts"

List Municipalities in a Province

http
GET /v2/provinces/{provinceId}/municipalities

Returns municipalities whose provinceId matches the path parameter.

Path Parameters

ParameterTypeDescription
provinceIdintegerProvince ID

Query Parameters

ParameterTypeDefaultDescription
fieldsstring-Comma-separated municipality fields to include
limitinteger100Number of records to return, from 1 to 1000
offsetinteger0Number of records to skip

Allowed Fields

text
id,name,slug,type,provinceId,districtId,population,stats

Request

bash
curl "https://api.turkiyeapi.dev/v2/provinces/34/municipalities"

List Neighborhoods in a Province

http
GET /v2/provinces/{provinceId}/neighborhoods

Returns neighborhoods whose provinceId matches the path parameter.

Path Parameters

ParameterTypeDescription
provinceIdintegerProvince ID

Query Parameters

ParameterTypeDefaultDescription
fieldsstring-Comma-separated neighborhood fields to include
limitinteger100Number of records to return, from 1 to 1000
offsetinteger0Number of records to skip

Allowed Fields

text
id,name,slug,provinceId,districtId,municipalityId,population,postalCode

Request

bash
curl "https://api.turkiyeapi.dev/v2/provinces/34/neighborhoods?fields=id,name,population"

List Villages in a Province

http
GET /v2/provinces/{provinceId}/villages

Returns villages whose provinceId matches the path parameter.

Path Parameters

ParameterTypeDescription
provinceIdintegerProvince ID

Query Parameters

ParameterTypeDefaultDescription
fieldsstring-Comma-separated village fields to include
limitinteger100Number of records to return, from 1 to 1000
offsetinteger0Number of records to skip

Allowed Fields

text
id,name,slug,provinceId,districtId,population,postalCode

Request

bash
curl "https://api.turkiyeapi.dev/v2/provinces/34/villages"

Common Errors

StatusCodeWhen it happens
400BAD_REQUESTQuery or path parameter validation fails
400INVALID_FIELDSfields contains an unknown field for the requested resource
400INVALID_INCLUDEinclude contains an unsupported relation
404PROVINCE_NOT_FOUNDThe requested province does not exist
429-Rate limit exceeded
500INTERNAL_SERVER_ERRORUnexpected server error

Error response:

json
{
  "error": {
    "code": "PROVINCE_NOT_FOUND",
    "message": "Province not found.",
    "status": 404
  }
}