{
    "slug": "geoip",
    "name": "GeoIP",
    "summary": "İsteği yapanın (ya da verilen IP'nin) ülke, şehir, saat dilimi, para birimi ve ASN bilgisi — ip-api uyumlu yanıt.",
    "description": "MaxMind GeoLite2 (City, Country, ASN) veritabanlarıyla yerel olarak çalışır; dış servise istek atmaz. Cloudflare ve güvenilir proxy zincirinden gerçek istemci IP'sini çözer. Yanıt ip-api.com biçimiyle uyumludur.",
    "version": "2.0.0",
    "status": "stable",
    "updated": "2026-10-07",
    "methods": [
        "GET"
    ],
    "format": "json",
    "auth": "none",
    "tags": [
        "geoip",
        "ip",
        "country",
        "timezone",
        "currency",
        "maxmind"
    ],
    "consumers": [
        "Launcher",
        "Falcon"
    ],
    "endpoint": "https://api.streamember.com/geoip/",
    "docs_html": "https://api.streamember.com/?docs=geoip",
    "docs_markdown": "https://api.streamember.com/geoip/API.md",
    "manifest_json": "https://api.streamember.com/?docs=geoip&format=json",
    "pages": [],
    "examples": [
        {
            "title": "İsteği yapanın konumu",
            "url": "https://api.streamember.com/geoip/"
        },
        {
            "title": "Belirli bir IP (İngilizce adlar)",
            "url": "https://api.streamember.com/geoip/?ip=8.8.8.8&lang=en"
        },
        {
            "title": "Ayrıntılı (proxy zinciri, ağ)",
            "url": "https://api.streamember.com/geoip/?ip=1.1.1.1&debug=1&pretty=1"
        }
    ],
    "body_markdown": "## Genel bakış\n\nParametresiz istek, isteği yapanın IP'sini çözer. Cloudflare IP blokları ve `TRUSTED_PROXIES` ortam değişkenindeki CIDR'lar güvenilir kabul edilir; diğer `X-Forwarded-For` başlıkları yok sayılır.\n\n> [!NOTE]\n> Bu API ip-api.com istemcileriyle uyumlu kalmak için alan adlarında camelCase ve hatalarda `{\"status\": \"fail\", \"message\": …}` biçimini kullanır. Havuz standardındaki `{\"error\": …}` biçiminin bilinçli istisnasıdır.\n\n## Hızlı başlangıç\n\n```text\nGET https://api.streamember.com/geoip/?lang=tr\n```\n\n```json\n{\n  \"query\": \"88.230.10.10\", \"status\": \"success\",\n  \"continent\": \"Europe\", \"continentCode\": \"EU\",\n  \"country\": \"Turkey\", \"countryCode\": \"TR\",\n  \"region\": \"34\", \"regionName\": \"Istanbul\", \"city\": \"Istanbul\", \"district\": \"\", \"zip\": \"34000\",\n  \"lat\": 41.01, \"lng\": 28.95, \"timezone\": \"Europe/Istanbul\", \"offset\": 10800, \"currency\": \"TRY\",\n  \"isp\": \"Turk Telekom\", \"org\": \"Turk Telekom\", \"as\": \"AS9121 Turk Telekom\", \"asname\": \"\",\n  \"mobile\": null, \"proxy\": null, \"hosting\": null\n}\n```\n\n## Parametreler\n\n| Parametre | Tür | Varsayılan | Açıklama |\n|---|---|---|---|\n| `ip` | metin | istemci IP'si | IPv4 ya da IPv6 |\n| `lang` | metin | `tr` | Yer adlarının dili. GeoLite2'de yalnızca `en`, `de`, `es`, `fr`, `ja`, `pt`, `ru`, `zh` adları var; Türkçe dahil diğerleri İngilizce döner. |\n| `debug` | `1` | — | `debug` nesnesi: ağ, proxy zinciri, Cloudflare bilgileri |\n| `dns` | `1` | — | `reverse` alanı (ters DNS) |\n| `pretty` | `1` | — | Girintili JSON |\n\n## Yanıt biçimi\n\nip-api alanları: `query`, `status`, `continent`, `continentCode`, `country`, `countryCode`, `region`, `regionName`, `city`, `district`, `zip`, `lat`, `lng`, `timezone`, `offset` (saniye), `currency`, `isp`, `org`, `as`, `asname`, `mobile`, `proxy`, `hosting`. GeoLite2 mobil/proxy/hosting sınıflandırması vermediği için son üçü `null`'dur.\n\n## Hatalar\n\n| HTTP | Gövde | Ne zaman |\n|---|---|---|\n| 400 | `{\"status\":\"fail\",\"message\":\"Invalid IP address.\"}` | Geçersiz `ip` |\n| 405 | `{\"status\":\"fail\",\"message\":\"Only GET requests are supported.\"}` | GET dışı istek |\n| 500 | `{\"status\":\"fail\",\"message\":…}` | Veritabanı ya da `vendor/` eksik |\n\n## Önbellek ve sınırlar\n\nYanıtlar istemciye özel olduğu için `Cache-Control: no-store` döner. Veritabanları (`GeoLite2-*.mmdb`) MaxMind'dan düzenli güncellenmelidir; `composer install` ile `maxmind-db/reader` kurulur.\n\n## Değişiklik geçmişi\n\n- **2.0.0** — `lang` parametresi (14 dil kodu), API.md.\n"
}