Skip to content

Köyler

Köy endpoint'leri Türkiye'deki köy kayıtlarını sunar.

Temel path:

http
/v2/villages

Endpoint'ler

MethodPathAçıklama
GET/v2/villagesKöyleri listeler
GET/v2/villages/{villageId}ID ile tek köy getirir

Köy Nesnesi

AlanTipAçıklama
idintegerKöy ID'si
namestringKöy adı
slugstringURL uyumlu köy adı
provinceIdintegerBağlı olduğu il ID'si
districtIdintegerBağlı olduğu ilçe ID'si
populationintegerKöy nüfusu
postalCodestringBeş haneli köy posta kodu
postalCodeStatusstringPosta kodu durumu: official veya estimated

TIP

Posta kodları sayısal görünse de postalCode alanı beş haneli string olarak döner. Türkiye'deki bazı posta kodları sıfır ile başlar ve integer olarak saklanırsa baştaki sıfır kaybolur.

Posta Kodu Durumu

Posta kodunun nasıl belirlendiğini anlamak için postalCodeStatus alanını kullanın:

DeğerAnlamı
officialPosta kodu resmi PTT posta kodu verisinde bulunur ve doğrudan bu kaynaktan kullanılır.
estimatedPosta kodu PTT verisinde yoktur. Değer ek kamusal kaynaklardan, yakındaki yerleşimlerden, ilçe düzeyi posta kodu örüntülerinden veya belgelenmiş idari değişikliklerden çıkarılır.

derived yalnızca mahallelerde kullanılır; köylerde kullanılmaz.

Kesin resmi posta kodu verisine ihtiyaç duyan istemciler postalCodeStatus alanını kontrol etmelidir. Yalnızca resmi kullanım için postalCodeStatus değeri official olan kayıtları filtreleyin.

Güncel köy durumu dağılımı:

DurumSayı
official18,162
estimated21
Toplam18,183

Örnek köy:

json
{
  "id": 547,
  "name": "İncebağ",
  "slug": "incebag",
  "provinceId": 2,
  "districtId": 1105,
  "population": 344,
  "postalCode": "02010",
  "postalCodeStatus": "official"
}

Köyleri Listeleme

http
GET /v2/villages

Sayfalanmış köy listesi döndürür.

Sorgu Parametreleri

ParametreTipVarsayılanAçıklama
searchstring-Köy adına göre filtreler
fieldsstring-Döndürülecek köy alanlarının virgülle ayrılmış listesi
sortstringidSıralama değeri: id, -id, name, -name, population, -population
limitinteger100Döndürülecek kayıt sayısı, 1 ile 1000 arası
offsetinteger0Atlanacak kayıt sayısı
minPopulationinteger-Minimum nüfus
maxPopulationinteger-Maksimum nüfus
provinceIdinteger-Bağlı olduğu il ID'sine göre filtreler
districtIdinteger-Bağlı olduğu ilçe ID'sine göre filtreler
postalCodestring-Tam beş haneli posta koduna göre filtreler
postalCodePrefixstring-Bir ile beş hane arasındaki posta kodu prefix'ine göre filtreler
postalCodeStatusstring-Virgülle ayrılmış posta kodu durumu filtresi: official, estimated

minPopulation ve maxPopulation birlikte verildiğinde minPopulation, maxPopulation değerinden küçük veya ona eşit olmalıdır. provinceId ve districtId birlikte kullanıldığında ilçe seçilen ile ait olmalıdır.

İzin Verilen Alanlar

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

İstek

bash
curl "https://api.turkiyeapi.dev/v2/villages?districtId=1105&postalCodePrefix=020&limit=2&fields=id,name,provinceId,population,postalCode"

Yanıt

json
{
  "data": [
    {
      "id": 523,
      "name": "Ahmethoca",
      "provinceId": 2,
      "population": 213
    },
    {
      "id": 524,
      "name": "Alibey",
      "provinceId": 2,
      "population": 94
    }
  ],
  "meta": {
    "count": 2,
    "total": 136,
    "limit": 2,
    "offset": 0,
    "datasetVersion": "2025",
    "lastUpdated": "2026-05-21"
  }
}

ID ile Köy Getirme

http
GET /v2/villages/{villageId}

Sayısal köy ID'si ile tek köy döndürür.

Path Parametreleri

ParametreTipAçıklama
villageIdintegerKöy ID'si

Sorgu Parametreleri

ParametreTipVarsayılanAçıklama
fieldsstring-Döndürülecek köy alanlarının virgülle ayrılmış listesi
includestring-Dahil edilecek ilişkili kaynakların virgülle ayrılmış listesi

Include Değerleri

text
province,district

İstek

bash
curl "https://api.turkiyeapi.dev/v2/villages/547?include=province,district"

Yanıt

json
{
  "data": {
    "id": 547,
    "name": "İncebağ",
    "slug": "incebag",
    "provinceId": 2,
    "districtId": 1105,
    "population": 344,
    "postalCode": "02010",
    "postalCodeStatus": "official",
    "province": {
      "id": 2,
      "name": "Adıyaman",
      "slug": "adiyaman",
      "population": 617821,
      "area": {
        "value": 7337,
        "unit": "km2"
      },
      "altitude": {
        "value": 701,
        "unit": "m"
      },
      "phoneAreaCodes": [416],
      "isCoastal": false,
      "isMetropolitan": false,
      "region": {
        "tr": "Güneydoğu Anadolu",
        "en": "Southeastern Anatolia"
      },
      "coordinates": {
        "latitude": 37.7602985,
        "longitude": 38.2772986
      },
      "stats": {
        "districtCount": 9,
        "municipalityCount": 23,
        "neighborhoodCount": 175,
        "villageCount": 454
      }
    },
    "district": {
      "id": 1105,
      "name": "Merkez",
      "slug": "merkez",
      "provinceId": 2,
      "population": 296876,
      "area": {
        "value": 1814,
        "unit": "km2"
      },
      "stats": {
        "municipalityCount": 3,
        "neighborhoodCount": 49,
        "villageCount": 136
      }
    }
  },
  "meta": {
    "datasetVersion": "2025",
    "lastUpdated": "2026-05-21"
  }
}

Yaygın Hatalar

StatusKodNe zaman oluşur
400BAD_REQUESTSorgu veya path parametresi doğrulaması başarısız olduğunda
400INVALID_RANGE_FILTERminPopulation, maxPopulation değerinden büyük olduğunda
400INVALID_HIERARCHY_FILTERprovinceId ve districtId aynı hiyerarşiyi göstermediğinde
400INVALID_FIELDSfields istenen kaynak için bilinmeyen bir alan içerdiğinde
400INVALID_INCLUDEinclude desteklenmeyen bir ilişki içerdiğinde
404VILLAGE_NOT_FOUNDİstenen köy bulunamadığında
429-Rate limit aşıldığında
500INTERNAL_SERVER_ERRORBeklenmeyen sunucu hatasında

Hata yanıtı:

json
{
  "error": {
    "code": "VILLAGE_NOT_FOUND",
    "message": "Village not found.",
    "status": 404
  }
}