# Kullanıcı adı ve rumuzdan cinsiyet tahmini

> GenderAPI.io V2 ile kullanıcı adını sorgulayın. Standart ad eşleştirmesini veya isteğe bağlı rumuz analizini deneyin; 1 ve 2 kredilik işlemleri ayırın, unknown sonuçlarını koruyun.

Canonical HTML: https://www.genderapi.io/tr/determine-gender-from-username

Last reviewed: 2026-09-27

## Ad ipuçları ile rumuzun anlamı farklıdır

Kullanıcı adı veya rumuz için type: username kullanın. Veri kümesi eşleştirmesinde baştaki isteğe bağlı @ kaldırılır. Aday çıkarımı ayraçları ve rakamları işler; sınırlı alt metinleri de deneyebilir. Rumuz modunda sözcük adaylarıyla eşleştirme sürer, ancak bu ek alt metin adayları oluşturulmaz. Mevcut adaylar arasından kayıt toplamı en yüksek olan seçilir; bu, hesap sahibinin gerçek adını kanıtlamaz.

Standart yapay zekâ yedeklemesi tanınabilir bir ön ad arar. forceToGenderize, gerçek ad çıkarılamadığında kişisel rumuzun anlamından tahmin denenmesine de izin verir. Her iki yol unknown döndürebilir. Bir marka, karakter veya ortak hesap tek bir kişiyi temsil etmeyebilir.

| Örnek girdi | Yaklaşım | Kontrol edilecek bilgi |
| --- | --- | --- |
| `@alice.smith` | Önce veri kümesine bakan standart fallback ile başlayın. | Seçilen adı ve eşleştirme yöntemini inceleyin; ilk sözcüğün seçildiğini varsaymayın. |
| `robert89` | Aday çıkarılırken rakamlar kaldırılabilir. | Ad eşleşmesi bir ilişkidir; kimlik doğrulaması değildir. |
| `prenses` | Veri kümesinde tahmin bulunamazsa rumuzdan yapay zekâ tahminini denemek için forceToGenderize kullanın. | name null iken gender dolu olabilir. Yapay zekâ skorunun türü model_reported olur. |
| `team_support` | Görev veya ortak hesapların kişisel olmayabileceğini dikkate alın. | unknown sonucunu koruyun; ortak hesaba bireysel kimlik atamayın. |

## Entegrasyonunuzda rumuz analizini deneyin

Bu örnek rumuz analizini açar. Önce veri kümesine bakılır; cinsiyet tahmini bulunamazsa yapay zekâ rumuzun anlamını kullanabilir. Standart sorgu için forceToGenderize alanını göndermeyin. Tekli sorgularda standart fallback zaten varsayılan olarak açıktır.

TR ülke bağlamı yalnızca bu örnek için verilmiştir. Uygulamanızdaki ilgili ülke bilgisini kullanın ve data.match.scope alanını inceleyin. Ülke göndermek, ülkeye özel kaydın kullanılmasını garanti etmez; uyruk veya ikamet doğrulamaz.

Örnekleri sunucunuzda çalıştırın. İşlem ortamındaki GENDERAPI_API_KEY değişkenini mevcut anahtarınıza ayarlayın. Tanınmayan anahtar IP denemesine yönlenebildiğinden meta.access.mode değerinin api_key olduğunu doğrulayın.

Yeniden denemeler dahil her tahmin isteği yeni ve ücretlendirilebilir bir işlemdir. Örnekler otomatik yeniden deneme yapmaz. Yeni istekten önce ücretlendirme durumunu kontrol edin.

HTTP 4xx ve 5xx JSON yanıtlarında hata gövdesi korunur ve program sıfırdan farklı çıkış koduyla sonlanır. Yeniden denemeden önce code, action ve meta.usage.billing_status alanlarını kontrol edin.

**cURL**

POSIX kabuğunda cURL 7.76+. Terminalinizde çalıştırın.

```bash
curl --silent --show-error --fail-with-body --max-time 30 \
  --request POST 'https://api.genderapi.io/api/v2/gender' \
  --header "Authorization: Bearer ${GENDERAPI_API_KEY:?Set GENDERAPI_API_KEY}" \
  --header 'Content-Type: application/json' \
  --data '{
  "type": "username",
  "value": "prenses",
  "country": "TR",
  "forceToGenderize": true
}'
```

**JavaScript / Node.js**

Node.js 22+; yerleşik fetch. example.mjs olarak kaydedin ve node example.mjs çalıştırın.

```javascript
// Server-side Node.js. Save as example.mjs.
const apiKey = process.env.GENDERAPI_API_KEY;
if (!apiKey) throw new Error("Set GENDERAPI_API_KEY");
const body = {
  "type": "username",
  "value": "prenses",
  "country": "TR",
  "forceToGenderize": true
};

const response = await fetch("https://api.genderapi.io/api/v2/gender", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify(body),
  signal: AbortSignal.timeout(30_000),
  redirect: "error",
});
const raw = await response.text();
if (!(response.headers.get("content-type") ?? "").includes("json")) {
  throw new Error(`HTTP ${response.status}: expected JSON; request ID ${response.headers.get("x-request-id")}`);
}
const result = JSON.parse(raw); // Also accepts application/problem+json.
if (!response.ok) {
  console.error(`HTTP ${response.status}`, result);
  process.exitCode = 1; // A retry is a new operation; inspect billing first.
} else {
  console.log(JSON.stringify(result, null, 2));
  // For batches, inspect every item: HTTP 200 may contain item errors.
}
```

**Python**

Python 3.10+; standart kütüphane. example.py olarak kaydedin ve python3 example.py çalıştırın.

```python
import json
import os
import sys
import urllib.error
import urllib.request

api_key = os.environ.get("GENDERAPI_API_KEY")
if not api_key:
    raise RuntimeError("Set GENDERAPI_API_KEY")
body = json.loads("{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}")

class NoRedirect(urllib.request.HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

request = urllib.request.Request(
    "https://api.genderapi.io/api/v2/gender",
    method="POST",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": "Bearer " + api_key,
        "Content-Type": "application/json",
    },
)
opener = urllib.request.build_opener(NoRedirect())
try:
    response = opener.open(request, timeout=30)
except urllib.error.HTTPError as error:
    response = error  # Keep the Problem Details body on non-2xx responses.
with response:
    status = response.status
    raw = response.read().decode("utf-8")
    if "json" not in response.headers.get("Content-Type", ""):
        raise RuntimeError(f"HTTP {status}: expected a JSON response")
    result = json.loads(raw)
print(json.dumps(result, indent=2), file=sys.stderr if status >= 300 else sys.stdout)
if not 200 <= status < 300:
    sys.exit(1)  # Inspect code, action and billing before retrying.
# For batches, inspect every item even when HTTP status is 200.
```

**PHP**

cURL uzantılı PHP 8+. example.php olarak kaydedin ve php example.php çalıştırın.

```php
<?php
$apiKey = getenv('GENDERAPI_API_KEY');
if (!$apiKey) {
    throw new RuntimeException('Set GENDERAPI_API_KEY');
}
$body = json_decode('{"type":"username","value":"prenses","country":"TR","forceToGenderize":true}', true, 512, JSON_THROW_ON_ERROR);

$ch = curl_init('https://api.genderapi.io/api/v2/gender');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($body, JSON_THROW_ON_ERROR),
]);
$raw = curl_exec($ch);
if ($raw === false) {
    throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE) ?: '';
curl_close($ch);
if (strpos($contentType, 'json') === false) {
    throw new RuntimeException("HTTP $status: expected a JSON response");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
$output = json_encode($result, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . PHP_EOL;
if ($status < 200 || $status >= 300) {
    fwrite(STDERR, $output); // Preserve the Problem Details body.
    exit(1);
}
echo $output;
// For batches, inspect every item; HTTP 200 can contain item errors.
```

**Java**

Java 17+; standart HTTP istemcisi. GenderApiExample.java olarak kaydedin ve java GenderApiExample.java çalıştırın.

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

public class GenderApiExample {
    private static String requiredEnv(String name) {
        String value = System.getenv(name);
        if (value == null || value.isBlank()) throw new IllegalStateException("Set " + name);
        return value;
    }

    public static void main(String[] args) throws Exception {
        String apiKey = requiredEnv("GENDERAPI_API_KEY");
        String body = "{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}";
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .followRedirects(HttpClient.Redirect.NEVER)
            .build();
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.genderapi.io/api/v2/gender"))
            .timeout(Duration.ofSeconds(30))
            .header("Authorization", "Bearer " + apiKey)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8))
            .build();
        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
        if (!response.headers().firstValue("content-type").orElse("").contains("json")) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": expected JSON");
        }
        // JSON text; parse with your application's JSON library when integrating.
        if (response.statusCode() < 200 || response.statusCode() >= 300) {
            System.err.println(response.body()); // Includes Problem Details.
            System.exit(1);
        }
        System.out.println(response.body());
        // For batches, inspect each item's data or error, including on HTTP 200.
    }
}
```

**C# / .NET**

.NET 8+ konsol uygulaması. Konsol projesinde Program.cs olarak kullanın, ardından dotnet run çalıştırın.

```csharp
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

string RequiredEnv(string name) =>
    !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(name))
        ? Environment.GetEnvironmentVariable(name)!
        : throw new InvalidOperationException($"Set {name}");

var apiKey = RequiredEnv("GENDERAPI_API_KEY");
using var handler = new HttpClientHandler { AllowAutoRedirect = false };
using var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.genderapi.io/api/v2/gender");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
request.Content = new StringContent("{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}", Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var raw = await response.Content.ReadAsStringAsync();
if (!(response.Content.Headers.ContentType?.MediaType?.Contains("json") ?? false))
    throw new InvalidOperationException($"HTTP {(int)response.StatusCode}: expected JSON");
using var result = JsonDocument.Parse(raw);
if (!response.IsSuccessStatusCode)
{
    Console.Error.WriteLine(result.RootElement); // Preserve Problem Details.
    Environment.ExitCode = 1;
}
else
{
    Console.WriteLine(result.RootElement);
    // For batches, inspect every item even on HTTP 200.
}
```

**Go**

Go 1.22+; standart kütüphane. main.go olarak kaydedin ve go run main.go çalıştırın.

```go
package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "os"
    "strings"
    "time"
)

func requiredEnv(name string) string {
    value := os.Getenv(name)
    if value == "" { panic("Set " + name) }
    return value
}

func run() error {
    apiKey := requiredEnv("GENDERAPI_API_KEY")
    body := "{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}"
    request, err := http.NewRequest("POST", "https://api.genderapi.io/api/v2/gender", strings.NewReader(body))
    if err != nil { return err }
    request.Header.Set("Authorization", "Bearer " + apiKey)
    request.Header.Set("Content-Type", "application/json")
    client := &http.Client{
        Timeout: 30 * time.Second,
        CheckRedirect: func(req *http.Request, via []*http.Request) error {
            return http.ErrUseLastResponse
        },
    }
    response, err := client.Do(request)
    if err != nil { return err }
    defer response.Body.Close()
    raw, err := io.ReadAll(response.Body)
    if err != nil { return err }
    if !strings.Contains(response.Header.Get("Content-Type"), "json") || !json.Valid(raw) {
        return fmt.Errorf("HTTP %d: expected a JSON response", response.StatusCode)
    }
    if response.StatusCode < 200 || response.StatusCode >= 300 {
        return fmt.Errorf("HTTP %d: %s", response.StatusCode, raw)
    }
    fmt.Println(string(raw))
    // For batches, inspect every item even on HTTP 200.
    return nil
}

func main() {
    if err := run(); err != nil {
        fmt.Fprintln(os.Stderr, err) // Keep Problem Details for error handling.
        os.Exit(1)
    }
}
```

- [V2 kullanıcı adı API referansı](https://www.genderapi.io/tr/docs/v2/gender-from-username)

## Tahmini dayandığı bilgilerle birlikte değerlendirin

API’nin çıkardığı ilişki, kişinin kendi belirttiği cinsiyet değildir. Özgün girdiyi, yanıttaki kanıtları ve kişinin verdiği bilgileri ayrı saklayın. Tahmin bulunamaması geçerli bir sonuçtur; uygulamanızda bunu zorunlu bir cinsiyet kategorisine dönüştürmeyin.

| Alan | Nasıl kullanılmalı? |
| --- | --- |
| `data.gender / data.result_status` | male veya female değerini yalnızca identified sonucunda kullanın. unknown sonucunda gerçek JSON null değerini koruyun. |
| `data.name / data.match` | Dönen adı ve seçilen adayı inceleyin. Alt metin eşleşmesi, girdinin o ön ada sahip bir kişiye ait olduğunu kanıtlamaz. |
| `data.confidence / data.confidence_kind` | Güven skoru 0–1 aralığında veya null olur. observed_frequency kayıtlı sayımlardan, model_reported yapay zekânın bildirdiği skordan gelir. Eşikleri her tür için ayrı değerlendirin. |
| `data.source / data.sample_count` | dataset, ai ve none kaynaklarını ayırın. Yapay zekâ sonucunda kayıtlı örnek sayısı yoktur. Örnek sayısı, ölçülmüş doğruluk oranı değildir. |
| `meta.access.mode` | Hesap entegrasyonunda api_key değerini doğrulayın. Anahtar eksik veya tanınmıyorsa ortak IP denemesi kullanılabilir. |
| `meta.usage` | charged_credits ve billing_status alanlarını okuyun. Başarıyla tamamlanan unknown sonucu ücretlidir. Yanıtın ulaşmaması, işlemin ücretsiz olduğunu göstermez. |

- [Yanıt alanları ve tahmin bulunamayan sonuçlar](https://www.genderapi.io/tr/docs/v2/responses)
- [Doğruluk ve güven skoru](https://www.genderapi.io/tr/accuracy-methodology)
- [Veri kaynakları ve tarihli veri kümesi profili](https://www.genderapi.io/tr/data-provenance)

## Yapay zekânın ne zaman kullanılacağını seçin

forceToGenderize; isim, e-posta ve kullanıcı adı girdilerinde isteğe bağlıdır. Açıkken ai_mode alanını göndermeyin veya fallback kullanın. off ve always ile birlikte kullanılması 422 hatası verir. İsteğe başlamak için pozitif bakiye yeterlidir; son ücret bakiyeyi sıfırın altına düşürebilir.

Rumuz analizinde name: null iken cinsiyet tahmini dönebilir. Sonuç unknown da olabilir. Standart yedekleme veya rumuz analizi, doğru ya da dolu bir sonuç garantisi vermez.

| İstek seçeneği | Davranış | Tamamlanan sorgunun maliyeti |
| --- | --- | --- |
| options.ai_mode: off | Yalnızca veri kümesini sorgular. | unknown dahil 1 kredi |
| options.ai_mode: fallback | Önce veri kümesini, cinsiyet tahmini bulunamazsa standart yapay zekâyı kullanır. Tekli sorguların varsayılanıdır. | Yapay zekâ yedeklemesi dahil toplam 1 kredi |
| options.ai_mode: always | Doğrudan yapay zekâya sorar. | 2 kredi |
| forceToGenderize: true | Önce veri kümesine bakar; tahmin bulunamazsa gerçek ön ad içermeyen kişisel rumuzların anlamını da yapay zekâyla yorumlayabilir. | Veri kümesinde tahmin bulunursa 1, yapay zekâ kullanılırsa toplam 2 kredi |

- [Yapay zekâ modları ve rumuz analizi](https://www.genderapi.io/tr/docs/v2/ai-options)
- [Krediler ve kullanım](https://www.genderapi.io/tr/docs/v2/credits-and-usage)

## Liste işlerken her kullanıcı adının sonucunu koruyun

Kullanıcı adı listeleri veya isim, e-posta ve kullanıcı adı karışımları için POST /api/v2/gender/batch kullanın. Sınır, hesap anahtarıyla 50, IP denemesinde 10 öğedir. Her öğenin country ve yapay zekâ seçenekleri ayrıdır. İsteğe bağlı id değerleri aynı toplu istekte benzersiz olmalıdır.

Toplu sorgularda varsayılan mod yalnızca veri kümesidir. Standart yapay zekâ için ilgili öğede fallback, rumuz analizi için forceToGenderize açın. Her sonuçtaki data veya error alanını inceleyin; kaynak satırı id veya index ile takip edin. Başarıyla tamamlanan unknown öğeleri de ücretlidir.

- [Toplu sorgu ve kısmi hatalar](https://www.genderapi.io/tr/docs/v2/batch)
- [Hatalar, ulaşmayan yanıtlar ve yeniden deneme](https://www.genderapi.io/tr/docs/v2/errors-and-retries)

## Gönderdiğiniz verinin nasıl işlendiğini bilin

Canlı araç, girdiğiniz değeri yalnızca sorguyu gönderdiğinizde GenderAPI.io’ya iletir. Yapay zekâ devreye girerse gönderilen type, value ve ülke bağlamı yapılandırılmış tahmin servisine iletilir. Entegrasyonunuzda yalnızca veri kümesini kullanmak için forceToGenderize olmadan options.ai_mode: off gönderin.

Yayımlanmış veri işleme koşulları Gizlilik Politikası, Veri İşleme Anlaşması ve alt işleyiciler listesinde açıklanır. Tahmin, girdiden çıkarılan bir ilişkidir; kişinin kendi verdiği bilgiye öncelik tanıyın. Sonucu bir kişi hakkında önemli kararların dayanağı olarak kullanmayın.

- [Gizlilik Politikası](https://www.genderapi.io/tr/privacy-policy)
- [Veri İşleme Anlaşması](https://www.genderapi.io/tr/data-processing-agreement)
- [Alt işleyiciler](https://www.genderapi.io/tr/subprocessors)

## Kullanıcı adında gerçek bir ön ad bulunması gerekir mi?

Standart yapay zekâ tahmini kullanılabilir bir ön ad gerektirir. forceToGenderize ile veri kümesinde tahmin bulunamazsa rumuzun anlamından da tahmin denenebilir. Bu mod gerçek ön ad gerektirmez ve name: null dönebilir.

## forceToGenderize mutlaka cinsiyet döndürür mü?

Hayır. Rumuz analizine izin verir, ancak sonuç yine unknown olabilir. Gerçek JSON null değerini koruyun; result_status ve reason alanlarını kontrol edin.

## API sosyal medya profilini inceler mi?

Bu uç nokta gönderdiğiniz değeri analiz eder. Hesap sahibini doğrulamak için profil, paylaşım veya fotoğraf indirmez.

## forceToGenderize isim ve e-postada da kullanılabilir mi?

Evet. name, email ve username girdilerinde isteğe bağlıdır. Önce veri kümesine, tahmin bulunamazsa rumuzları yorumlayabilen yapay zekâya başvurur. Veri kümesinde tahmin bulunursa 1, yapay zekâ kullanılırsa toplam 2 kredi düşülür.
