Weiter → Übersicht

REST API Referenz

Vier Endpoints, eine Antwortstruktur. Alles darunter ist live mit Ihrem Konto verbunden.

https://namegender.com/api Kostenlos registrieren

Schnelleinstieg

Erstellen Sie einen Schlüssel in Ihrem Dashboard und senden Sie Ihre erste Anfrage. Kein SDK erforderlich.

curl "https://namegender.com/api?name=Ay%C5%9Fe&country=TR" \
  -H "Authorization: Bearer YOUR_API_KEY"
<?php

$query = http_build_query(['name' => 'Ayşe', 'country' => 'TR']);

$ch = curl_init('https://namegender.com/api?' . $query);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer YOUR_API_KEY'],
]);

$result = json_decode(curl_exec($ch), true);

echo $result['gender'];       // female
echo $result['probability'];  // 100
const params = new URLSearchParams({ name: 'Ayşe', country: 'TR' });

const response = await fetch(`https://namegender.com/api?${params}`, {
  headers: { Authorization: 'Bearer YOUR_API_KEY' },
});

const result = await response.json();

console.log(result.gender);       // "female"
console.log(result.probability);  // 100
import requests

response = requests.get(
    "https://namegender.com/api",
    params={"name": "Ayşe", "country": "TR"},
    headers={"Authorization": "Bearer YOUR_API_KEY"},
)

result = response.json()
print(result["gender"])       # female
print(result["probability"])  # 100
require "net/http"
require "json"

uri = URI("https://namegender.com/api")
uri.query = URI.encode_www_form(name: "Ayşe", country: "TR")

request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end

puts JSON.parse(response.body)["gender"]   # female
req, _ := http.NewRequest("GET", "https://namegender.com/api?name=Ay%C5%9Fe&country=TR", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")

resp, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var result struct {
    Gender      string `json:"gender"`
    Probability int    `json:"probability"`
}
json.NewDecoder(resp.Body).Decode(&result)

fmt.Println(result.Gender)   // female

Jeder Endpoint gibt die gleiche Struktur zurück, sodass Sie Eingaben wechseln können, ohne Ihren Parse-Code zu ändern.

Authentifizierung

Übergeben Sie Ihren API-Schlüssel auf eine von drei Arten. Der Authorization-Header wird empfohlen: Query-Strings landen in Server-Logs und im Browser-Verlauf.

Authorization-Header (empfohlen)
Authorization: Bearer ng_live_xxxxxxxxxxxx
Benutzerdefinierter Header
X-Api-Key: ng_live_xxxxxxxxxxxx
Query-Parameter
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
Geben Sie Ihren Schlüssel niemals in clientseitigem Code preis. Aufrufe von einem Browser oder einer mobilen App sollten über Ihr eigenes Backend erfolgen.

Sie können einen Schlüssel im Dashboard auf bestimmte IP-Adressen beschränken.

Client-Bibliotheken

Eine API, vier Eingabetypen und Bulk-Tools, die Dateien verarbeiten, bei denen andere Dienste scheitern.

Alle anzeigen
GET · POST https://namegender.com/api

Geschlecht aus Name

Akzeptiert einen Vornamen oder einen vollständigen Namen. Titel, Zweitnamen und Nachnamen werden vor der Suche entfernt, sodass "Dr. Ayşe Yılmaz" und "Ayşe" die gleiche Antwort geben.

Parameter Typ Beschreibung
name
erforderlich
string Der zu klassifizierende Name. Vorname oder vollständiger Name.
country
optional
string ISO-3166-1-Alpha-2-Ländercode. Verbessert die Genauigkeit für Namen, deren Geschlecht je nach Region unterschiedlich ist, wie Andrea (männlich in Italien, weiblich in Deutschland).
askToAI
optional
boolean Verwenden Sie ein Sprachmodell, wenn der Name nicht in der Datenbank vorhanden ist. Kostet eine zusätzliche Gutschrift.
forceToGenderize
optional
boolean Gibt das wahrscheinlichste Geschlecht zurück, auch wenn die Konfidenz unter dem Schwellwert liegt. Standardmäßig deaktiviert, da eine unsichere Antwort, die als sicher dargestellt wird, schlechter ist als gar keine Antwort.
curl "https://namegender.com/api?name=Jordan" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "used_credits": 1,
  "remaining_credits": 49999,
  "expires": null,
  "q": "Jordan",
  "name": "Jordan",
  "gender": "male",
  "country": null,
  "total_names": 62240,
  "probability": 84,
  "confidence": "high",
  "duration": "1ms",
  "source": "db",
  "matched_as": null
}
GET · POST https://namegender.com/api/email

Geschlecht aus E-Mail

Extrahiert die Person aus dem lokalen Teil der Adresse und klassifiziert diese dann. "ayse.yilmaz84@example.com" wird zu Ayşe aufgelöst.

Parameter Typ Beschreibung
email
erforderlich
string Die E-Mail-Adresse. Nur der Teil vor @ wird verwendet.
country
optional
string ISO-3166-1-Alpha-2-Ländercode. Verbessert die Genauigkeit für Namen, deren Geschlecht je nach Region unterschiedlich ist, wie Andrea (männlich in Italien, weiblich in Deutschland).
askToAI
optional
boolean Verwenden Sie ein Sprachmodell, wenn der Name nicht in der Datenbank vorhanden ist. Kostet eine zusätzliche Gutschrift.

forceToGenderize ist hier nicht verfügbar: Der Name wird intern extrahiert, daher verstärkt das Erzwingen eines Ergebnisses bei einer unsicheren Extraktion zwei Vermutungen.

curl "https://namegender.com/api/email?email=ayse.yilmaz84%40example.com" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "q": "ayse.yilmaz84@example.com",
  "name": "Ayse",
  "gender": "female",
  "probability": 95,
  "confidence": "unverified",
  "total_names": 655,
  "duration": "1ms",
  "source": "db"
}
GET · POST https://namegender.com/api/username

Geschlecht aus Benutzername

Verarbeitet camelCase, snake_case, nachfolgende Ziffern und führende @-Zeichen. "AyseYilmaz84" wird zu Ayşe aufgelöst.

Parameter Typ Beschreibung
username
erforderlich
string Der Benutzername oder Handle. Ein führendes @ wird ignoriert.
country
optional
string ISO-3166-1-Alpha-2-Ländercode. Verbessert die Genauigkeit für Namen, deren Geschlecht je nach Region unterschiedlich ist, wie Andrea (männlich in Italien, weiblich in Deutschland).
askToAI
optional
boolean Verwenden Sie ein Sprachmodell, wenn der Name nicht in der Datenbank vorhanden ist. Kostet eine zusätzliche Gutschrift.
forceToGenderize
optional
boolean Gibt das wahrscheinlichste Geschlecht zurück, auch wenn die Konfidenz unter dem Schwellwert liegt. Standardmäßig deaktiviert, da eine unsichere Antwort, die als sicher dargestellt wird, schlechter ist als gar keine Antwort.
curl "https://namegender.com/api/username?username=AyseYilmaz84" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "q": "AyseYilmaz84",
  "name": "Ayse",
  "gender": "female",
  "probability": 95,
  "confidence": "unverified",
  "source": "db"
}
POST https://namegender.com/api/bulk

Bulk-Anfrage

Senden Sie bis zu 100 Namen in einer Anfrage. Verwenden Sie dies statt einer Schleife: Ein Bulk-Aufruf für 100 Namen ist eine einzelne Roundtrip und eine einzelne deduplizierte Suche.

Parameter Typ Beschreibung
names
erforderlich
string[] Array von Namen. Maximum 100 Elemente.
type
optional
string Was die Elemente sind: name, email oder username. Standard ist name.
country
optional
string Anwendung auf alle Elemente in der Anfrage.
curl -X POST "https://namegender.com/api/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"names": ["Ayşe", "Mehmet", "Priya", "Wei"]}'
<?php

$ch = curl_init('https://namegender.com/api/bulk');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'names' => ['Ayşe', 'Mehmet', 'Priya', 'Wei'],
    ]),
]);

$data = json_decode(curl_exec($ch), true);

foreach ($data['results'] as $row) {
    printf("%-8s %-7s %d%%\n", $row['q'], $row['gender'] ?? '?', $row['probability']);
}
const response = await fetch('https://namegender.com/api/bulk', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ names: ['Ayşe', 'Mehmet', 'Priya', 'Wei'] }),
});

const { results, summary } = await response.json();

console.log(summary.match_rate);   // 100
results.forEach(r => console.log(r.q, r.gender, r.probability));
import requests

response = requests.post(
    "https://namegender.com/api/bulk",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"names": ["Ayşe", "Mehmet", "Priya", "Wei"]},
)

data = response.json()
print(data["summary"]["match_rate"])   # 100

for row in data["results"]:
    print(row["q"], row["gender"], row["probability"])
{
  "status": true,
  "used_credits": 4,
  "remaining_credits": 49995,
  "duration": "2ms",
  "summary": {
    "total": 4,
    "identified": 4,
    "unknown": 0,
    "match_rate": 100
  },
  "results": [
    { "q": "Ayşe",   "gender": "female", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
    { "q": "Mehmet", "gender": "male",   "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
    { "q": "Priya",  "gender": "female", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
    { "q": "Wei",    "gender": "male",   "probability": 85, "total_names": 0, "confidence": "unverified", "source": "db" }
  ]
}

Ergebnisse werden in der gleichen Reihenfolge zurückgegeben, in der Sie sie gesendet haben. Guthschriften werden pro Name berechnet, und die gesamte Anfrage wird abgelehnt, bevor eine Arbeit beginnt, wenn Ihr Guthaben nicht ausreichend ist. Sie erhalten daher niemals einen halb verarbeiteten Batch.

Der Summary-Block zeigt Ihnen die Übereinstimmungsquote auf einen Blick, sodass Sie entscheiden können, ob die Eingabe vor der Verarbeitung des Rests bereinigt werden muss.

GET https://namegender.com/api/me

Konto & Kontingent

Überprüfen Sie Ihren verbleibenden Guthaben-Saldo ohne eine Gutschrift auszugeben.

curl "https://namegender.com/api/me" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "email": "you@example.com",
  "remaining_credits": 50099,
  "purchased_credits": 50000,
  "free_today": 99,
  "free_daily_limit": 100,
  "lifetime_requests": 12480,
  "expires": null
}

Nicht-lateinische Schriftsysteme

Senden Sie einen Namen in seiner eigenen Schrift und wir verbinden ihn mit den Referenzdaten. Kein zusätzlicher Parameter erforderlich: Wir erkennen das Schriftsystem und wählen die passende Strategie.

Unterstützt
Arabische Schrift

Arabische Schrift lässt Kurzvokale weg, daher wird محمد zu "mhmd" transliteriert, während unsere Daten "muhammed" enthalten. Wir vergleichen nach dem Konsonantenmuster und bewahren den weiblichen Marker ة, sodass خالد (Khalid) und خالدة (Khalida) unterschieden bleiben. Umfasst auch persische und Urdu-Namen in arabischer Schrift.

Chinesische Zeichen

Konvertiert zu Pinyin. Der Familienname steht im Chinesischen zuerst, daher ist 李明 der Familienname 李 (Li) mit dem Vornamen 明 (Ming) — wir entfernen den Familiennamen vor der Abfrage. Ein einzelnes Zeichen ist ein vollständiger Vorname und wird als solcher behandelt.

Koreanisch

Gleiche Familienname-zuerst-Behandlung wie bei Chinesisch, mit häufigen koreanischen Familiennamen.

Japanische Kana

Hiragana und Katakana werden korrekt gelesen (ひろし → Hiroshi).

Kyrillisch

Russische, ukrainische, bulgarische und serbische Namen transliterieren direkt.

Devanagari

Hindi-, Marathi- und Nepali-Namen. Der inhärente Endvokal wird beachtet (राहुल → Rahul, nicht "Rahula").

Nicht unterstützt
Japanische Kanji

Japanische Kanji und chinesische Zeichen nutzen denselben Unicode-Bereich, daher können wir sie anhand der Zeichen allein nicht unterscheiden. Han-Eingaben werden als Chinesisch gelesen: Ein Kanji-Name, den wir noch nicht wörtlich erfasst haben, erhält seine Mandarin-Lesung, was bei einem japanischen Namen meist falsch ist (健太 wird als "jian tai" gelesen, wenn der Name Kenta ist). Namen, die wir erfasst haben, stimmen genau überein und sind korrekt. Senden Sie japanische Namen in Kana oder Lateinschrift, um sicherzugehen.

Thai

Thai lässt Vokale ähnlich wie Arabisch weg und benötigt eine eigene Abgleichsschicht. Diese ist noch nicht implementiert, daher geben diese null zurück.

# Arap yazısı — ünsüz iskeleti üzerinden eşleşir
curl "https://namegender.com/api?name=%D9%85%D8%AD%D9%85%D8%AF" -H "Authorization: Bearer KEY"
# -> { "gender": "male", "probability": 100, "source": "script", "matched_as": "mahamad" }

# Çince — soyadı ayıklanır, verilen ad sorgulanır
curl "https://namegender.com/api?name=%E6%9D%8E%E6%98%8E" -H "Authorization: Bearer KEY"
# -> { "gender": "male", "probability": 92, "source": "db" }

Wenn wir eine Schrift überhaupt nicht zuordnen können, ist die Antwort gender: null mit source: none. Prüfen Sie das source-Feld: script bedeutet, wir haben transliteriert, db bedeutet, wir haben die Zeichen, die Sie gesendet haben, direkt abgeglichen. Die beiden haben unterschiedliche Konfidenz, und wir zeigen Ihnen, welche Sie erhalten haben.

Antwortfelder

Identisch über alle Endpoints.

Feld Typ Beschreibung
status boolean false, wenn die Anfrage fehlgeschlagen ist. Prüfe das zuerst.
used_credits integer Guthaben, das diese Anfrage verbraucht hat.
remaining_credits integer Guthaben nach dieser Anfrage.
expires null Immer null. Gekauftes Guthaben verfällt nicht.
q string Deine Eingabe, unverändert zurückgegeben.
name string Der Name, den wir tatsächlich abgefragt haben, nach Entfernung von Titeln und Nachnamen.
gender string männlich, weiblich oder null, wenn wir nicht ausreichend sicher sind.
country string Das Land, aus dem die Statistiken stammen, oder null für die globale Zusammenfassung.
total_names integer Auf wie vielen echten Personen diese Antwort basiert. 0 bedeutet, die Quelle gibt Proportionen statt Anzahlen an, nicht dass die Antwort schwach ist.
probability integer Konfidenz im angegebenen Geschlecht, 50 bis 100. 0, wenn gender null ist.
duration string Serverseitige Verarbeitungszeit.

Zwei Felder, die andere Services nicht bieten

source zeigt dir, woher die Antwort stammt: aus der Referenzdatenbank, einem unscharfen Match oder dem KI-Fallback. matched_as benennt den Datensatz, auf den das unscharfe Match traf. Zusammen ermöglichen sie dir zu entscheiden, wie sehr du einem einzelnen Ergebnis vertraust, statt es blind zu akzeptieren.

Feld Typ Beschreibung
source string db, fuzzy, llm oder none.
confidence string hoch, mittel, niedrig, nicht verifiziert oder unbekannt, basierend auf Stichprobenevidenz.
matched_as string Bei einem unscharfen Match der Datenbankeintrag, der passte. Sonst null.

Fehlercodes

Fehler geben einen JSON-Body mit status: false und einem maschinenlesbaren Fehlertext zurück. Vergleiche den Fehler, nicht die Meldung: Meldungen werden übersetzt und können sich ändern.

Code HTTP Bedeutung
missing_key 401 API-Schlüssel fehlt. Übergeben Sie ihn als "key"-Parameter oder als Authorization: Bearer Header.
invalid_key 401 Dieser API-Schlüssel ist ungültig.
revoked_key 401 Dieser API-Schlüssel wurde widerrufen.
blocked 403 Dieses Konto wurde gesperrt. Kontaktieren Sie den Support.
email_not_verified 403 Die E-Mail-Adresse dieses Kontos ist noch nicht bestätigt. Öffnen Sie den Bestätigungslink, den wir Ihnen geschickt haben, oder fordern Sie in Ihrem Dashboard einen neuen an.
ip_not_allowed 403 Anfragen von dieser IP-Adresse sind für diesen Schlüssel nicht zulässig.
forbidden 403 Sie sind nicht berechtigt, diese Aktion auszuführen.
no_credits 402 Ihnen sind die Guthaben ausgegangen. Kaufen Sie mehr oder warten Sie auf den Reset Ihres täglichen kostenlosen Kontingents.
missing_input 400 Der Parameter "name" ist erforderlich.
invalid_input 422 Der Parameter "name" ist ungültig.
too_many_items 422 Maximal 100 Elemente können in einer Anfrage gesendet werden.
unknown_endpoint 404 Es existiert kein Endpoint unter diesem Pfad. Überprüfen Sie die URL in der API-Dokumentation.
method_not_allowed 405 Dieser Endpoint akzeptiert keine DELETE-Anfragen.
payload_too_large 413 Der Request Body ist zu groß.
rate_limited 429 Zu viele Anfragen. Verlangsamen Sie und versuchen Sie es in Kürze erneut.
not_ready 503 Die Namensdatenbank wird neu erstellt. Versuchen Sie es in einem Moment erneut.
server_error 500 Ein Fehler ist auf unserer Seite aufgetreten. Wir wurden benachrichtigt.
{
  "status": false,
  "error": "no_credits",
  "message": "You are out of credits. Buy more or wait for your daily free quota to reset.",
  "request_id": "req_9c1f5b2a7e0d4a13",
  "docs": "https://namegender.com/docs#error-no_credits"
}

Rate Limits

Normale Nutzung erreicht kein Limit. Die Obergrenze verhindert Missbrauch durch einen durchgesickerten Schlüssel und wird pro API-Schlüssel gezählt, nicht pro IP, damit mehrere Kunden auf einem Server die Quote des jeweils anderen nicht verbrauchen.

Aktuelles Limit: 1.200 Anfragen pro Minute pro Schlüssel. Brauchst du mehr? Frag uns, wir erhöhen das Limit für dein Konto.

Jede Antwort enthält die Standard-Header X-RateLimit-Limit und X-RateLimit-Remaining.

Migration von einem anderen Provider

Unsere Antwortfelder und Parameternamen folgen der gängigen Konvention, daher bedeutet ein Wechsel meist eine Zeile zu ändern: die Basis-URL.

- https://api.other-provider.io/api?name=Ayşe&key=KEY
+ https://namegender.com/api?name=Ayşe&key=KEY

askToAI und forceToGenderize behalten ihre ursprüngliche Schreibweise aus genau diesem Grund. Wenn ein Feld, das du benötigst, fehlt, sag uns Bescheid und wir fügen es hinzu.

Kodieren Sie Ihre Eingabe

Namen enthalten Leerzeichen und Nicht-ASCII-Zeichen. URL-kodieren Sie den Wert, bevor Sie ihn in eine Query String einfügen, oder nutzen Sie POST mit einem JSON-Body.

Ayşe Yılmaz  ->  Ay%C5%9Fe%20Y%C4%B1lmaz
محمد          ->  %D9%85%D8%AD%D9%85%D8%AF
中村           ->  %E4%B8%AD%E6%9D%91