# E-posta adresinden cinsiyet tahmini

> GenderAPI.io V2 ile e-posta adresindeki ad ipuçlarını sorgulayın. Canlı aracı deneyin; veri kümesi ve yapay zekâ seçeneklerini, unknown sonuçlarını ve toplu e-posta işlemlerini öğrenin.

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

Last reviewed: 2026-09-27

## E-posta adresi hangi ipuçlarını sağlayabilir?

Sözdizimi geçerli bir e-posta adresini type: email ile gönderin. GenderAPI.io, @ işaretinden önceki bölümde ad ipucu arar ve yapılandırılmış bir tahmin döndürür. Posta kutusunun varlığını, sahibini veya kişinin cinsiyet kimliğini doğrulamaz.

Veri kümesi eşleştirmesi ad adayları çıkarır ve 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. Birden fazla kayıt eşleşirse kayıt toplamı en yüksek aday seçilir; bu aday, amaçlanan ön ad olmayabilir. Çıkarılan adı kişi kaydına yazmadan önce data.name ve data.match alanlarını inceleyin.

| Örnek girdi | Nasıl yorumlanmalı? |
| --- | --- |
| `alice.smith@example.com` | @ öncesindeki bölüm olası ad adayları sağlar. Eşleşme olabilir; girdinin kendisi hangi adayın seçileceğini garanti etmez. |
| `alice+news@example.com` | Veri kümesi adayları oluşturulurken artı işaretinden sonraki ek kaldırılır. Yapay zekâya bu eki dikkate almaması söylenir, ancak gönderdiğiniz değer iletilir. |
| `support@example.com` | Görev veya departman adresi güvenilir bir kişisel ad ipucu sağlamaz. Ortak posta kutusuna tek bir kişinin cinsiyetini atamayın. |
| `prenses@example.com` | İsteğe bağlı forceToGenderize, veri kümesinde tahmin bulunamazsa rumuzun anlamından tahmin denenmesine izin verir. Bu modda gerçek ad gerekmez. |
| `not-an-email` | Geçersiz sözdizimi, başarıyla tamamlanan unknown yerine doğrulama hatası döndürür. |

## Uygulamanızdan e-posta sorgusu gönderin

Örnek, mevcut API anahtarınızı Bearer başlığında ve açıkça seçilmiş fallback modunda kullanır. Örnek adresi işlemeye yetkili olduğunuz bir girdiyle değiştirin. country alanını yalnızca ilgili bilgiye sahipseniz gönderin; e-posta alan adı kişinin konumunu göstermez. Ülke bilgisi yoksa bu alanı göndermeyin.

GENDERAPI_API_KEY ortam değişkenini ayarlayıp örneği sunucunuzda çalıştırın. POST kullanımı e-posta değerini istek URL’sinin dışında tutar. Canlı sonuç, araçtaki temsili JSON yanıtından farklı olabilir.

Ö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": "email",
  "value": "alice.smith@example.com",
  "country": "US",
  "options": {
    "ai_mode": "fallback"
  }
}'
```

**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": "email",
  "value": "alice.smith@example.com",
  "country": "US",
  "options": {
    "ai_mode": "fallback"
  }
};

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\":\"email\",\"value\":\"alice.smith@example.com\",\"country\":\"US\",\"options\":{\"ai_mode\":\"fallback\"}}")

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":"email","value":"alice.smith@example.com","country":"US","options":{"ai_mode":"fallback"}}', 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\":\"email\",\"value\":\"alice.smith@example.com\",\"country\":\"US\",\"options\":{\"ai_mode\":\"fallback\"}}";
        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\":\"email\",\"value\":\"alice.smith@example.com\",\"country\":\"US\",\"options\":{\"ai_mode\":\"fallback\"}}", 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\":\"email\",\"value\":\"alice.smith@example.com\",\"country\":\"US\",\"options\":{\"ai_mode\":\"fallback\"}}"
    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 e-posta API referansı](https://www.genderapi.io/tr/docs/v2/gender-from-email)

## 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)

## E-posta listesini toplu sorgularla işleyin

POST /api/v2/gender/batch uç noktasına type: email öğeleri içeren bir items dizisi gönderin. Hesap anahtarıyla en fazla 50, IP denemesinde en fazla 10 öğe kabul edilir. Sonucu kaynak satırla eşleştirmek için her öğeye benzersiz bir id verin. Yanıt ayrıca girdi sırasını korur ve index döndürür.

Toplu öğelerde varsayılan mod yalnızca veri kümesidir. Standart yapay zekâ yedeklemesi gereken her öğeye options.ai_mode: fallback ekleyin. Başarıyla tamamlanan iki fallback öğesi, unknown sonuçları dahil toplam 2 kredidir. Bir HTTP isteği, tek tahmin kredisi anlamına gelmez.

HTTP 200 olsa bile her öğeyi kontrol edin. Başarılı ve unknown sonuçlarını saklayın. Yeniden denemeden önce hatanın türünü ve doğrulanmış ücretlendirmeyi inceleyin; yalnızca yeniden denemeye uygun başarısız öğeleri gönderin. Zaman aşımında ücretlendirme sonucunu kontrol etmeden tüm listeyi tekrar göndermeyin.

- [Toplu örnekler, sınırlar ve kısmi hatalar](https://www.genderapi.io/tr/docs/v2/batch)

## 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)

## API e-posta adresinden ön ad çıkarabilir mi?

@ öncesindeki bölüm kullanılabilir ipucu içeriyorsa bir ad adayı dönebilir. Sözcük veya alt metin eşleşmesi yapılabildiğinden data.match alanını inceleyin. Sonuç, posta kutusu sahibinin ön adını kanıtlamaz.

## info@ veya support@ için cinsiyet döner mi?

Ortak görev adresleri genellikle kişisel ad kanıtı sağlamaz. unknown geçerli bir sonuçtur. Yapay zekâ veya rumuz modunu ortak posta kutusunu kullanan kişilerin doğrulaması olarak değerlendirmeyin.

## E-postada tahmin bulunamazsa kredi kullanılır mı?

Evet. Başarıyla tamamlanan standart e-posta sorgusu, fallback ve unknown dahil 1 kredidir. forceToGenderize ile veri kümesinde tahmin bulunursa 1, yapay zekâ kullanılırsa toplam 2 kredi düşülür. Hataların ücretlendirme durumu meta.usage alanında ayrıca belirtilir.

## Yapay zekâya gönderilmeden önce e-postanın alan adı kaldırılır mı?

Böyle bir kaldırma garantisi yoktur. Veri kümesi adayları @ öncesindeki bölümden çıkarılır. Yapay zekâ ise gönderilen değeri alır; alan adını ve artı işaretinden sonraki eki dikkate almaması istenir. İş akışınız gerektiriyorsa yalnızca veri kümesi modunu seçin.
