TRAPI
← Ana sayfa

API belgeleri

Türkiye il, ilçe, belde, köy, mahalle ve yol kayıtları. API salt okunurdur ve JSON döndürür.

Kaynaklar

VeriListe yoluTek kayıt
İller/api/v1/iller/api/v1/iller/{id}
İlçeler/api/v1/ilceler/api/v1/ilceler/{id}
Beldeler / kasabalar/api/v1/beldeler veya /api/v1/kasabalarAynı yola /{id} ekle
Köyler/api/v1/koylerAynı yola /{id} ekle
Mahalleler/api/v1/mahallelerAynı yola /{id} ekle
Yollar/api/v1/yollar, /api/v1/caddeler, /api/v1/sokaklarAynı yola /{id} ekle

Filtreler

Liste isteklerinde il_id, uygun kaynaklarda ilce_id, yollarda mahalle_id ve tur kullanılabilir. Tüm listelerde q ad araması, limit (1–200, varsayılan 50) ve offset bulunur. Yol türleri: meydan, bulvar, cadde, sokak, kume_evler.

GET /api/v1/iller
GET /api/v1/ilceler?il_id=6
GET /api/v1/mahalleler?ilce_id=1231&q=ataturk
GET /api/v1/koyler?il_id=11
GET /api/v1/caddeler?il_id=6&ilce_id=1231&limit=20

Yanıt biçimi

{
  "items": [ /* kayıtlar */ ],
  "total": 123,
  "limit": 50,
  "offset": 0
}

Kaynak alan adları veri paketindeki snake_case biçimindedir. Yol kayıtlarında road_type eklenir. Veri tarihi ve kayıt sayıları /api/v1/meta adresindedir. Sağlık denetimi: /health.

Sitene il ve ilçe seçimi ekle

Bu örneği kendi HTML sayfana koy. İl seçilince ilçeler API'den yüklenir. API farklı alan adlarından tarayıcı isteklerine açıktır.

<label for="il">İl</label>
<select id="il"><option value="">İl seçin</option></select>
<label for="ilce">İlçe</label>
<select id="ilce" disabled><option value="">Önce il seçin</option></select>
<script>
const api = 'https://trapi.dijitalevrak.com/api/v1';
const il = document.querySelector('#il');
const ilce = document.querySelector('#ilce');

async function listele(kaynak, parametreler = {}) {
  const url = new URL(`${api}/${kaynak}`);
  url.search = new URLSearchParams({ limit: 200, ...parametreler });
  const yanit = await fetch(url);
  if (!yanit.ok) throw new Error(`TRAPI: ${yanit.status}`);
  return (await yanit.json()).items;
}

function secenekEkle(alan, kayit) {
  alan.add(new Option(kayit.name, kayit.id));
}

listele('iller').then(iller => iller.forEach(kayit => secenekEkle(il, kayit)));
il.addEventListener('change', async () => {
  ilce.replaceChildren(new Option('İlçe seçin', ''));
  ilce.disabled = !il.value;
  if (!il.value) return;
  const ilceler = await listele('ilceler', { il_id: il.value });
  ilceler.forEach(kayit => secenekEkle(ilce, kayit));
});
</script>

Mahalleleri getirmek için listele('mahalleler', { ilce_id: ilce.value }) kullan. Büyük listelerde offset ile sonraki sayfaları iste; tek yanıtta en fazla 200 kayıt vardır.

Başka sitelerden erişim ve CORS

API anahtarı gerekmez. PHP, Python veya başka bir sunucudan doğrudan GET isteği yapılabilir. Tarayıcıdan farklı bir alan adına yapılan fetch istekleri için sunucu varsayılan olarak Access-Control-Allow-Origin: * döndürür. Çerez veya oturum bilgisi kullanılmaz.

API sahibi erişimi belirli sitelerle sınırlamak isterse, özel trapi_private/config.php dosyasındaki cors_origins değerini örneğin ['https://ornek-site.com'] olarak değiştirebilir. Bu ayar sunucu tarafı çağrıları sınırlamaz.