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: Bearer ng_live_xxxxxxxxxxxx
X-Api-Key: ng_live_xxxxxxxxxxxx
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
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 anzeigenhttps://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
}
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"
}
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"
}
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.
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.
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.
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.
Gleiche Familienname-zuerst-Behandlung wie bei Chinesisch, mit häufigen koreanischen Familiennamen.
Hiragana und Katakana werden korrekt gelesen (ひろし → Hiroshi).
Russische, ukrainische, bulgarische und serbische Namen transliterieren direkt.
Hindi-, Marathi- und Nepali-Namen. Der inhärente Endvokal wird beachtet (राहुल → Rahul, nicht "Rahula").
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 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. |
ai_consent_required |
422 | askToAI sendet den Namen an einen externen KI-Anbieter, dem dieses Konto nicht zugestimmt hat. Siehe das Feld "ai" für den Anbieter und aktiviere KI-Abfragen in deinen Dashboard-Einstellungen. |
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