GenderAPI.io V2 · Kullanım rehberi

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.

Son inceleme:

V2 API’yi deneyin

E-posta adresini sorgulayın

Veri kümesi + yapay zekâ

Bir değer gönderin; tahmin bulunamayan sonuçlar ve kredi kullanımı dahil yanıtın tamamını inceleyin.

Her zaman yapay zekâ (varsayılan): unknown dahil 2 kredi. Yedek mod: yapay zekâ yedeklemesi veya unknown sonuç dahil 1 kredi. Kapalı, yalnızca veri kümesi (yapay zekâ yok): tamamlanan her sorgu için unknown dahil 1 kredi. Rumuz analizi açıkken veri kümesinde tahmin bulunursa 1, yapay zekâ kullanılırsa unknown dahil toplam 2 kredi.

Gönderdiğiniz tam e-posta adresi GenderAPI.io’ya iletilir; varsayılan Her zaman yapay zekâ modunda veya yedekleme gerektiğinde yapılandırılmış yapay zekâ servisine de gönderilir, Kapalı modda gönderilmez. Veri işleme ayrıntıları.

Kayıtlı API anahtarı yok. Kredi kaldığı sürece ortak IP denemesi kullanılabilir.

Aşağıdaki yanıt 1 Ekim 2026’da alınmış gerçek bir yanıttır. Canlı sorgu için Sorgula düğmesine basın.

Gerçek V2 yanıtı · 1 Ekim 2026’da alındı
İsimZeynep
CinsiyetKadın
Güven%98
ÜlkeTürkiye (TR)
KaynakYapay zekâ modeli
Kullanılan kredi2

Bu gerçek yanıt 1 Ekim 2026’da alındı; yalnızca hesap bakiyesi değiştirildi. Canlı değerler farklı olabilir. Tahmin, doğrulanmış kimlik bilgisi değildir.

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 girdiNası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.comVeri 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.comGö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-emailGeç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.

Programlama dilinizi seçin. API anahtarınızı ayarlayın, ardından örneği sunucunuzda çalıştırı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.

Çalıştırmadan önce: erişim ve hata yönetimi

Ö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.

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.

Hata ve yeniden deneme rehberi →
cURL
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"
  }
}'

POSIX kabuğunda cURL 7.76+. Terminalinizde çalıştırın. Çalıştırma ortamı dokümantasyonu

JavaScript / Node.js
// 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.
}

Node.js 22+; yerleşik fetch. example.mjs olarak kaydedin ve node example.mjs çalıştırın. Çalıştırma ortamı dokümantasyonu

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.

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

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.

cURL uzantılı PHP 8+. example.php olarak kaydedin ve php example.php çalıştırın. Çalıştırma ortamı dokümantasyonu

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.
    }
}

Java 17+; standart HTTP istemcisi. GenderApiExample.java olarak kaydedin ve java GenderApiExample.java çalıştırın. Çalıştırma ortamı dokümantasyonu

C# / .NET
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.
}

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

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

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

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.

AlanNasıl kullanılmalı?
data.gender / data.result_statusmale veya female değerini yalnızca identified sonucunda kullanın. unknown sonucunda gerçek JSON null değerini koruyun.
data.name / data.matchDö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_kindGü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_countdataset, 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.modeHesap entegrasyonunda api_key değerini doğrulayın. Anahtar eksik veya tanınmıyorsa ortak IP denemesi kullanılabilir.
meta.usagecharged_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.

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ğiDavranışTamamlanan sorgunun maliyeti
options.ai_mode: offYalnı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: alwaysDoğ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

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.

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.

E-posta sorgulama hakkında sorular

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.

Teste devam edin

GenderAPI anahtarınızı kullanın

Aynı IP adresi için paylaşılan 24 saatlik deneme kredileri bittiğinde teste devam etmek için GenderAPI hesabınızdaki API anahtarını girin. Anahtarı kaydetmek sorgu göndermez; hazır olduğunuzda sorguyu yeniden gönderin.

Yalnızca bu tarayıcı sekmesinde saklanır ve sekme kapatıldığında silinir.