API
Kimlik doğrulama gerekmez. Tüm uçlar GET ve HEAD kabul eder,
CORS açıktır ve yanıtlar önbelleklenmez.
Uçlar
| Yol | Açıklama |
|---|---|
| / | Tarayıcıda HTML sayfa, curl/wget ile düz metin IP. |
| /json | Tüm veri (JSON). Konum, ASN, bağlantı ve istemci bilgileri. |
| /ip | Sadece IP adresi + satır sonu. Betiklerde en kullanışlısı. |
| /text, /raw, /plain | /ip ile aynı — düz metin IP. |
| /xml | Tüm veri (XML). |
| /csv | Tüm veri, "anahtar,değer" biçiminde CSV. |
| /geo | Yalnızca coğrafi alanlar (JSON). |
| /asn | Yalnızca ASN ve ISP bilgisi. |
| /country | Yalnızca ISO ülke kodu (TR, DE, US ...). |
| /city | Yalnızca şehir adı. |
| /hostname | Yalnızca ters DNS (PTR) kaydı. |
| /headers | İstek başlıkları (JSON). |
| /lookup/{ip} | Belirtilen IP adresini sorgular. ?ip= parametresi de çalışır. |
| /health | Servis ve veritabanı durumu — izleme (monitoring) için. |
| /docs | Bu sayfa. |
Parametreler
| Parametre | Açıklama |
|---|---|
| format=json|text|xml|csv|html | Çıktı biçimini zorlar. Kısa yazımı: f= |
| ip=8.8.8.8 | Başka bir adresi sorgular (/lookup/8.8.8.8 ile aynı). |
| callback=fn | JSONP çıktısı üretir. |
| raw | Düz metin çıktı (format=text kısayolu). |
| headers=1 | /json çıktısına istek başlıklarını ekler. |
Örnekler
# Sadece IP curl -s https://ip.fatihbas.com # Kabuk değişkenine al MYIP=$(curl -s https://ip.fatihbas.com/ip) # Ülke kodu (betiklerde koşul için) curl -s https://ip.fatihbas.com/country # Tüm veri, jq ile süz curl -s https://ip.fatihbas.com/json | jq '.country.code, .asn.organization' # Başka bir adresi sorgula curl -s https://ip.fatihbas.com/lookup/8.8.8.8 | jq . # IPv4 / IPv6 ayrı ayrı zorla curl -s4 https://ip.fatihbas.com/ip curl -s6 https://ip.fatihbas.com/ip # İzleme curl -s https://ip.fatihbas.com/health | jq .status
Yanıt şeması (/json)
{
"ip": "88.230.10.5",
"ip_version": 4,
"scope": "public",
"hostname": "host.example.net",
"network": "88.230.0.0/16",
"continent": { "code": "AS", "name": "Asya" },
"country": { "code": "TR", "name": "Türkiye", "name_en": "Turkey",
"flag": "\u{1F1F9}\u{1F1F7}", "is_in_european_union": false },
"region": { "code": "34", "name": "Istanbul" },
"regions": [ { "code": "34", "name": "Istanbul" } ],
"city": "Istanbul",
"postal_code": "34000",
"location": { "latitude": 41.0138, "longitude": 28.9497,
"accuracy_radius_km": 20, "time_zone": "Europe/Istanbul",
"local_time": "2026-01-01 12:00:00 +03:00",
"map_url": "https://www.openstreetmap.org/?mlat=..." },
"asn": { "number": 15897, "organization": "Vodafone Turkey",
"network": "88.230.0.0/16" },
"isp": null, "organization": null, "connection_type": null, "domain": null,
"privacy": null,
"connection": { "scheme": "https", "tls": true, "protocol": "HTTP/1.1", "port": 51234 },
"client": { "user_agent": "...", "preferred_language": "tr-TR", "do_not_track": false },
"proxy": { "behind_trusted_proxy": true, "detected_via": "X-Forwarded-For",
"remote_addr": "10.0.0.1", "forwarded_chain": ["88.230.10.5", "10.0.0.1"] },
"meta": { "source": "mmdb", "generated_at": "2026-01-01T09:00:00+00:00",
"query_time_ms": 1.4, "version": "1.0.4" }
}
isp, organization, connection_type,
domain ve privacy alanları yalnızca ilgili ticari
GeoIP2 veritabanları kuruluysa dolar.
GeoIP veritabanı
Ülke, şehir ve ASN alanları MaxMind GeoLite2 veritabanlarından okunur. Ücretsizdir, ancak indirmek için bir hesap ve lisans anahtarı gerekir:
# 1) maxmind.com/en/geolite2/signup adresinden ücretsiz hesap açın # 2) Hesap panelinden bir lisans anahtarı üretin # 3) Veritabanlarını indirin: php bin/geoip-update --key=LISANS_ANAHTARINIZ # 4) Haftalık güncelleme için cron: 0 4 * * 3 /usr/bin/php /var/www/whatismyip/bin/geoip-update --key=ANAHTAR --quiet
Veriler yereldeki .mmdb dosyalarından okunur; hiçbir ziyaretçi
IP'si dışarıya gönderilmez.
Hata kodları
| Kod | Anlamı |
|---|---|
| 400 | invalid_ip — sorgulanan değer geçerli bir IP değil. |
| 403 | lookup_disabled — yapılandırmada kapatılmış. |
| 405 | GET/HEAD dışında bir yöntem kullanıldı. |
| 429 | rate_limited — Retry-After başlığına bakın. |
| 503 | /health: GeoIP veritabanı yok. |