Weiter → Übersicht

REST API Referenz

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

https://namegender.com/api/v1/gender Kostenlos registrieren
llms-full.txt

Markdown für Coding-Assistenten wie Claude Code, Cursor und Copilot. Fügen Sie es in den Chat ein oder geben Sie dem Assistenten den Link.

Schnelleinstieg

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

curl "https://namegender.com/api/v1/gender?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/v1/gender?' . $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/v1/gender?${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/v1/gender",
    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/v1/gender")
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/v1/gender?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

Jede Anfrage trägt Ihren API-Schlüssel in einem Header. Verwenden Sie standardmäßig Authorization: Bearer, oder X-Api-Key, wenn Ihr HTTP-Client den Authorization-Header für etwas anderes reserviert. Ein Schlüssel in der URL wird abgelehnt: URLs landen in Proxy-Logs, Analyse-Tools und im Browser-Verlauf.

Authorization-Header (empfohlen)
Authorization: Bearer ng_live_xxxxxxxxxxxx

Kopieren fehlgeschlagen. Text auswählen und kopieren.

X-Api-Key-Header
X-Api-Key: ng_live_xxxxxxxxxxxx

Kopieren fehlgeschlagen. Text auswählen und kopieren.

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

Dünne Wrapper über der REST API. Sie senden Ihren Schlüssel mit, bauen jede Anfrage auf und wandeln Fehlerantworten in Exceptions um.

JavaScript Quelle
npm install namegender

Kopieren fehlgeschlagen. Text auswählen und kopieren.

Command line Quelle
npm install -g namegender

Kopieren fehlgeschlagen. Text auswählen und kopieren.

composer require namegender/namegender

Kopieren fehlgeschlagen. Text auswählen und kopieren.

Python Quelle
pip install namegender-client

Kopieren fehlgeschlagen. Text auswählen und kopieren.

gem install namegender

Kopieren fehlgeschlagen. Text auswählen und kopieren.

<repository>
  <id>jitpack.io</id>
  <url>https://jitpack.io</url>
</repository>

<dependency>
  <groupId>com.github.anpekesen</groupId>
  <artifactId>namegender-java</artifactId>
  <version>v0.9.0</version>
</dependency>

Kopieren fehlgeschlagen. Text auswählen und kopieren.

C# / .NET Quelle
dotnet add package NameGender --version 0.6.0

Kopieren fehlgeschlagen. Text auswählen und kopieren.

go get github.com/anpekesen/namegender-go@v0.7.0

Kopieren fehlgeschlagen. Text auswählen und kopieren.

remotes::install_github('anpekesen/namegender-r', ref = 'v0.7.0')

Kopieren fehlgeschlagen. Text auswählen und kopieren.

PowerShell Quelle
Install-Module NameGender

Kopieren fehlgeschlagen. Text auswählen und kopieren.

cargo add namegender

Kopieren fehlgeschlagen. Text auswählen und kopieren.

Sie benötigen keine. Die API besteht aus einer Handvoll einfacher JSON-Endpoints; eine Bibliothek spart Ihnen einen Nachmittag, kein Projekt. Falls Ihre Sprache nicht aufgelistet ist, enthält die REST-Referenz Copy-Paste-Beispiele.

Alle anzeigen

KI-Assistenten (MCP)

Nutzen Sie NameGender aus Claude, Cursor und jedem anderen Client, der das Model Context Protocol unterstützt. Fragen Sie den Assistenten zu einer Liste von Namen, und er ruft die API für Sie auf, mit den Belegen neben jeder Antwort.

Claude Code
claude mcp add namegender -e NAMEGENDER_API_KEY=ng_live_... -- npx -y namegender-mcp

Kopieren fehlgeschlagen. Text auswählen und kopieren.

Claude Desktop, Cursor und andere Clients
{
    "mcpServers": {
        "namegender": {
            "command": "npx",
            "args": [
                "-y",
                "namegender-mcp"
            ],
            "env": {
                "NAMEGENDER_API_KEY": "ng_live_..."
            }
        }
    }
}

Kopieren fehlgeschlagen. Text auswählen und kopieren.

Fügen Sie dies in die MCP-Konfigurationsdatei des Clients ein und starten Sie ihn neu.

Tools

gender_from_name
Geschlecht aus einem Vornamen oder vollständigen Namen.
gender_from_email
Liest den Namen in einer E-Mail-Adresse; Funktionsadressen wie info@ ergeben „unbekannt“.
gender_from_username
Liest den Namen in einem Benutzernamen oder Handle.
gender_bulk
Bis zu 100 Werte in einer Anfrage, mit einer Zusammenfassung der Trefferquote.
name_countries
Länder, in denen ein Name erfasst ist. Keine Aussage über die Herkunft.
salutation
Anrede für einen Brief in dessen Sprache; die neutrale Form, wenn das Geschlecht nicht sicher ist.
name_check
Ob ein in ein Formular eingetippter Name echt aussieht, mit den Gründen. Bezeichnet nie einen Namen als gefälscht.
age_from_name
Medianalter und Altersspannen der Menschen mit einem Vornamen in den Vereinigten Staaten, Frankreich und Norwegen.
account_status
Verbleibendes Guthaben und das heutige Freikontingent.

Jede Abfrage verbraucht Guthaben des Kontos, dem der Schlüssel gehört, genau wie ein direkter API-Aufruf. In der offiziellen MCP-Registry als io.github.anpekesen/namegender gelistet. npm-Paket · Quelle

GET · POST https://namegender.com/api/v1/gender
Markdown

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).
locale
optional
string Ein Sprach-Tag wie de-DE oder en_US, etwa die Sprache des Browsers. Seine Region wird zum Land, wenn country nicht gesendet wird. Ein Tag ohne Region (en, de) legt kein Land fest.
ip
optional
string Die IP-Adresse der Endnutzerin oder des Endnutzers. Ihr Land wird verwendet, wenn weder country noch ein locale mit Region gesendet wird. Wird nicht gespeichert. IP geolocation by DB-IP (db-ip.com).
ai_fallback
optional
boolean Hat der Name keinen Eintrag in unseren Daten, wird ein Sprachmodell um eine Schätzung gebeten, statt null zurückzugeben. Funktioniert erst, wenn KI-Abfragen in Ihren Einstellungen aktiviert sind, und kostet eine zusätzliche Gutschrift.
best_guess
optional
boolean Gibt das führende Geschlecht zurück, auch wenn die Belege die Konfidenzschwelle nicht erreichen. Standardmäßig deaktiviert: Eine Antwort nahe 50/50, die eindeutig wirkt, richtet mehr Schaden an als null.
curl "https://namegender.com/api/v1/gender?name=Jordan" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "credits_charged": 1,
  "credits_remaining": 49999,
  "request_id": "req_4b7e0c2d9a1f6358",
  "query": "Jordan",
  "name": "Jordan",
  "first_name": "Jordan",
  "middle_name": null,
  "last_name": null,
  "name_type": "personal",
  "gender": "male",
  "country": null,
  "sample_size": 62240,
  "probability": 84,
  "took_ms": 1,
  "confidence": "high",
  "source": "db",
  "matched_as": null
}
GET · POST https://namegender.com/api/v1/gender/email
Markdown

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).
locale
optional
string Ein Sprach-Tag wie de-DE oder en_US, etwa die Sprache des Browsers. Seine Region wird zum Land, wenn country nicht gesendet wird. Ein Tag ohne Region (en, de) legt kein Land fest.
ip
optional
string Die IP-Adresse der Endnutzerin oder des Endnutzers. Ihr Land wird verwendet, wenn weder country noch ein locale mit Region gesendet wird. Wird nicht gespeichert. IP geolocation by DB-IP (db-ip.com).
ai_fallback
optional
boolean Hat der Name keinen Eintrag in unseren Daten, wird ein Sprachmodell um eine Schätzung gebeten, statt null zurückzugeben. Funktioniert erst, wenn KI-Abfragen in Ihren Einstellungen aktiviert sind, und kostet eine zusätzliche Gutschrift.
best_guess
optional
boolean Gibt das führende Geschlecht zurück, auch wenn die Belege die Konfidenzschwelle nicht erreichen. Standardmäßig deaktiviert: Eine Antwort nahe 50/50, die eindeutig wirkt, richtet mehr Schaden an als null.

best_guess wirkt auf den aus der Adresse gelesenen Vornamen, nicht auf die Adresse selbst. Lässt sich kein Vorname lesen, gibt es nichts zu erzwingen, und gender bleibt null. Beachten Sie: Eine erzwungene Antwort beruht hier auf einer Extraktion, die selbst falsch sein kann.

curl "https://namegender.com/api/v1/gender/email?email=ayse.yilmaz84%40example.com" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "credits_charged": 1,
  "credits_remaining": 49998,
  "query": "ayse.yilmaz84@example.com",
  "name": "Ayse",
  "gender": "female",
  "sample_size": 655,
  "probability": 100,
  "took_ms": 1,
  "confidence": "high",
  "source": "db"
}
GET · POST https://namegender.com/api/v1/gender/username
Markdown

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).
locale
optional
string Ein Sprach-Tag wie de-DE oder en_US, etwa die Sprache des Browsers. Seine Region wird zum Land, wenn country nicht gesendet wird. Ein Tag ohne Region (en, de) legt kein Land fest.
ip
optional
string Die IP-Adresse der Endnutzerin oder des Endnutzers. Ihr Land wird verwendet, wenn weder country noch ein locale mit Region gesendet wird. Wird nicht gespeichert. IP geolocation by DB-IP (db-ip.com).
ai_fallback
optional
boolean Hat der Name keinen Eintrag in unseren Daten, wird ein Sprachmodell um eine Schätzung gebeten, statt null zurückzugeben. Funktioniert erst, wenn KI-Abfragen in Ihren Einstellungen aktiviert sind, und kostet eine zusätzliche Gutschrift.
best_guess
optional
boolean Gibt das führende Geschlecht zurück, auch wenn die Belege die Konfidenzschwelle nicht erreichen. Standardmäßig deaktiviert: Eine Antwort nahe 50/50, die eindeutig wirkt, richtet mehr Schaden an als null.
curl "https://namegender.com/api/v1/gender/username?username=AyseYilmaz84" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "credits_charged": 1,
  "credits_remaining": 49997,
  "query": "AyseYilmaz84",
  "name": "Ayse",
  "gender": "female",
  "sample_size": 655,
  "probability": 100,
  "took_ms": 1,
  "confidence": "high",
  "source": "db"
}
POST https://namegender.com/api/v1/gender/bulk
Markdown

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.
locale
optional
string Sprach-Tag, dessen Region für jedes Element zum Land wird, wenn country nicht gesendet wird.
ip
optional
string IP-Adresse der Endnutzer, deren Land für jedes Element gilt, wenn weder country noch ein locale mit Region gesendet wird. Wird nicht gespeichert. IP geolocation by DB-IP (db-ip.com).
curl -X POST "https://namegender.com/api/v1/gender/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/v1/gender/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['query'], $row['gender'] ?? '?', $row['probability']);
}
const response = await fetch('https://namegender.com/api/v1/gender/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.query, r.gender, r.probability));
import requests

response = requests.post(
    "https://namegender.com/api/v1/gender/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["query"], row["gender"], row["probability"])
{
  "credits_charged": 4,
  "credits_remaining": 49995,
  "request_id": "req_71d0a9e3c5b24f86",
  "took_ms": 2,
  "summary": {
    "total": 4,
    "identified": 4,
    "unknown": 0,
    "match_rate": 100
  },
  "results": [
    { "query": "Ayşe",   "gender": "female", "probability": 100, "sample_size":  655, "confidence": "high", "source": "db" },
    { "query": "Mehmet", "gender": "male",   "probability": 100, "sample_size": 1130, "confidence": "high", "source": "db" },
    { "query": "Priya",  "gender": "female", "probability": 100, "sample_size": 2993, "confidence": "high", "source": "db" },
    { "query": "Wei",    "gender": "male",   "probability":  86, "sample_size":  136, "confidence": "high", "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.

POST GET DELETE https://namegender.com/api/v1/batches
Markdown

Dateiaufträge

Laden Sie eine CSV- oder XLSX-Datei mit bis zu 100 MB und 1.000.000 Zeilen hoch und erhalten Sie sie mit Geschlechtsspalten für jede Zeile zurück. Ein Credit pro Zeile, berechnet nur, wenn der Auftrag abgeschlossen wird.

  1. 1. POST /batches Senden Sie die Datei und name_column. Der Auftrag wird sofort eingereiht.
  2. 2. GET /batches/{id} Lesen Sie den Auftrag, bis status completed oder failed ist. poll_after_seconds gibt an, wie lange zwischen zwei Abfragen zu warten ist.
  3. 3. GET /batches/{id}/result Laden Sie das Ergebnis herunter. Es kommt im hochgeladenen Format zurück.
Parameter Typ Beschreibung
file
erforderlich
file CSV, TSV oder XLSX mit Kopfzeile.
name_column
erforderlich
string Kopfzeile der Spalte mit den Namen, genau wie in der Datei. Erforderlich, außer bei start=false.
country_column
optional
string Kopfzeile einer Spalte mit einem Ländercode pro Zeile.
country
optional
string Standardland für Zeilen ohne Land.
ai_fallback
optional
boolean Für Namen, die nicht im Datensatz sind, ein KI-Modell fragen. Erfordert die KI-Einwilligung in den Einstellungen.
best_guess
optional
boolean Das wahrscheinlichere Geschlecht auch bei schwacher Evidenz zurückgeben.
delete_after_download
optional
boolean Das Ergebnis kann einmal heruntergeladen werden und wird danach gelöscht.
start
optional
boolean false: nur hochladen und prüfen. Standard ist true.
# 1. Upload and start
curl -X POST "https://namegender.com/api/v1/batches" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: 6f1c2e0a-customers-2026-09" \
  -F "file=@customers.csv" \
  -F "name_column=first_name" \
  -F "country_column=country"

# 2. Poll until status is completed or failed
curl "https://namegender.com/api/v1/batches/B-7K2M9QX4TA" \
  -H "Authorization: Bearer YOUR_API_KEY"

# 3. Download the result
curl "https://namegender.com/api/v1/batches/B-7K2M9QX4TA/result" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o customers-gender.csv
import { NameGender } from 'namegender';
import { openAsBlob } from 'node:fs';
import { writeFile } from 'node:fs/promises';

const client = new NameGender(process.env.NAMEGENDER_API_KEY);

const job = await client.batches.create(await openAsBlob('customers.csv'), {
  filename: 'customers.csv',
  name_column: 'first_name',
  country_column: 'country',
});

const done = await client.batches.wait(job.id);
if (done.status === 'failed') throw new Error(done.error.code);

const file = await client.batches.download(done.id);
await writeFile('customers-gender.csv', Buffer.from(await file.arrayBuffer()));
from namegender import NameGender

client = NameGender("YOUR_API_KEY")

job = client.batches.create("customers.csv", name_column="first_name", country_column="country")

done = client.batches.wait(job["id"])
if done["status"] == "failed":
    raise RuntimeError(done["error"]["code"])

client.batches.download(done["id"], "customers-gender.csv")
{
  "id": "B-7K2M9QX4TA",
  "status": "completed",
  "source": "api",
  "file": { "name": "customers.csv", "format": "csv" },
  "columns": { "name": "first_name", "country": "country" },
  "rows": { "total": 200000, "processed": 200000, "identified": 187412 },
  "progress": 100,
  "credits": { "reserved": 200000, "charged": 200000 },
  "summary": { "male": 96120, "female": 91292, "unknown": 12588, "from_llm": 0 },
  "error": null,
  "result": {
    "url": "https://namegender.com/api/v1/batches/B-7K2M9QX4TA/result",
    "format": "csv",
    "expires_at": "2026-10-01T10:04:12Z"
  },
  "poll_after_seconds": null
}

name_column ist zum Starten erforderlich: Eine geratene Spalte, die sich als falsch herausstellt, würde Credits für die falschen Daten verbrauchen. Senden Sie start=false, um zuerst Spalten, eine Vorschau und die Kosten zu sehen, und starten Sie dann den Auftrag.

Senden Sie einen Idempotency-Key-Header. Ein erneuter Versuch mit demselben Schlüssel liefert den ersten Auftrag, statt einen zweiten zu eröffnen.

Bis zu 3 Aufträge können gleichzeitig eingereiht sein oder laufen. Ein nicht gestarteter Auftrag kann abgebrochen werden und sein Credit wird erstattet; ein laufender Auftrag kann nicht gestoppt werden.

POST https://your-server.example/…
Markdown

Webhooks

Fügen Sie im Dashboard unter Webhooks einen Endpunkt hinzu; wir senden ihm einen signierten POST, wenn ein Dateiauftrag abgeschlossen ist oder fehlschlägt, damit Sie nicht abfragen müssen.

Ereignis Typ Beschreibung
batch.completed BatchJob Der Auftrag ist fertig. Der Body enthält den Auftrag genau so, wie GET /batches/{id} ihn liefert.
batch.failed BatchJob Der Auftrag ist fehlgeschlagen und wurde nicht berechnet. Verzweigen Sie nach error.code.
credits.low CreditsAlert Beim aktuellen Verbrauch reichen die Credits höchstens 7 Tage. Stündlich geprüft; Abo-Verlängerungen werden berücksichtigt.
credits.depleted CreditsAlert Das Guthaben ist leer und Anfragen werden mit 402 abgelehnt. Stündlich geprüft.
webhook.test object Wird nur über „Testereignis senden“ im Dashboard und nur an diesen Endpunkt gesendet.
Header Typ Beschreibung
NameGender-Signature
erforderlich
string t=<Unix-Sekunden>,v1=<Hex>. Nach dem Erneuern des Geheimnisses erscheint 24 Stunden lang ein zweites v1.
NameGender-Event-Id
erforderlich
string Die Ereignis-ID. Bei jeder Wiederholung desselben Ereignisses gleich.
NameGender-Delivery-Attempt
erforderlich
integer 1 beim ersten Versuch, bis zu 8.

Jede Anfrage prüfen

v1 ist der HMAC-SHA256 aus Zeitstempel, einem Punkt und dem Roh-Body, mit dem Geheimnis Ihres Endpunkts. Vergleichen Sie in konstanter Zeit, akzeptieren Sie die Anfrage, wenn irgendein v1 passt, und lehnen Sie Zeitstempel ab, die mehr als fünf Minuten von Ihrer Uhr abweichen. Die Client-Bibliotheken erledigen das in einem Aufruf.

Prüfen Sie den Body genau so, wie er ankommt. Ein Framework, das das JSON parst und neu serialisiert, verändert die Bytes, und die Signatur passt nicht mehr.
import express from 'express';
import { webhooks, NameGenderWebhookError } from 'namegender';

const app = express();

// express.raw, not express.json: the signature covers the exact bytes.
app.post('/namegender', express.raw({ type: 'application/json' }), async (req, res) => {
  let event;
  try {
    event = await webhooks.verify(
      req.body,
      req.get('NameGender-Signature'),
      process.env.NAMEGENDER_WEBHOOK_SECRET,
    );
  } catch (error) {
    if (error instanceof NameGenderWebhookError) return res.sendStatus(400);
    throw error;
  }

  res.sendStatus(204);   // answer first, then do the work

  if (event.type === 'batch.completed') {
    const job = event.data.object;   // same object as GET /batches/{id}
  }
});
import os
from flask import Flask, request
from namegender import webhooks, WebhookVerificationError

app = Flask(__name__)

@app.post("/namegender")
def namegender_webhook():
    try:
        event = webhooks.verify(
            request.get_data(),   # raw bytes, not request.json
            request.headers.get("NameGender-Signature"),
            os.environ["NAMEGENDER_WEBHOOK_SECRET"],
        )
    except WebhookVerificationError:
        return "", 400

    if event["type"] == "batch.completed":
        job = event["data"]["object"]   # same object as GET /batches/{id}
    return "", 204
<?php

$body   = file_get_contents('php://input');   // raw body, before json_decode
$header = $_SERVER['HTTP_NAMEGENDER_SIGNATURE'] ?? '';
$secret = getenv('NAMEGENDER_WEBHOOK_SECRET');

parse_str(str_replace(',', '&', $header), $parts);   // t=…&v1=…
preg_match_all('/v1=([0-9a-f]{64})/', $header, $m);

$t = (int) ($parts['t'] ?? 0);
$expected = hash_hmac('sha256', $t . '.' . $body, $secret);
$valid = abs(time() - $t) <= 300
    && array_filter($m[1], fn ($sig) => hash_equals($expected, $sig));

if (! $valid) {
    http_response_code(400);
    exit;
}

http_response_code(204);
$event = json_decode($body, true);
{
  "id": "evt_16f7c01502fda5436e8b7c4e",
  "type": "batch.completed",
  "created_at": "2026-09-24T10:04:12Z",
  "api_version": "v1",
  "data": {
    "object": {
      "id": "B-7K2M9QX4TA",
      "status": "completed",
      "rows": { "total": 200000, "processed": 200000, "identified": 187412 },
      "credits": { "reserved": 200000, "charged": 200000 },
      "result": { "url": "…/api/v1/batches/B-7K2M9QX4TA/result", "format": "csv" }
    }
  }
}
  • Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx und erledigen Sie die Arbeit danach.
  • Alles andere, auch eine Weiterleitung, wird innerhalb von etwa 45 Stunden bis zu 7 Mal wiederholt. Schlägt ein Endpunkt drei Tage lang fehl, wird er abgeschaltet und Sie erhalten eine E-Mail.
  • Eine Wiederholung trägt dieselbe Ereignis-ID, und die Reihenfolge ist nicht garantiert. Deduplizieren Sie über NameGender-Event-Id und lesen Sie den Auftrag per GET, wenn Sie seinen aktuellen Stand brauchen.
  • Beim Erneuern des Geheimnisses im Dashboard signiert das alte noch 24 Stunden mit, sodass Sie Ihren Server ohne verpasste Ereignisse umstellen können.
  • Neue Ereignistypen können hinzukommen. Antworten Sie auf einen Typ, den Sie nicht verarbeiten, mit 2xx und ignorieren Sie ihn.
GET POST https://namegender.com/api/v1/gender/countries
Markdown

Länderverteilung

Gibt die Länder zurück, in denen ein Name registriert ist. Es werden zwei Listen zurückgegeben, die absichtlich nicht zusammengeführt werden: `registrations` zeigt das gemessene Volumen und ist nur zwischen den elf Ländern vergleichbar, die gezählte Namensstatistiken veröffentlichen; `attested_in` zeigt die Präsenz ohne Gewichtung.

Dies ist keine Inferenz zu Herkunftsland oder Ethnie und darf nicht als solche verwendet werden. Gezählte Statistiken existieren nur für elf Länder: die USA, UK, Frankreich, Kanada, Spanien, Irland, Norwegen, Österreich, Israel, Polen und die Schweiz. Eine Abfrage für "Mehmet" ordnet daher die Schweiz und Frankreich mit jeweils etwa 29% an erster Stelle ein, und die Türkei erscheint gar nicht in der Rangliste – die Türkei veröffentlicht keine Zahlen. Die Türkei erscheint jedoch in `attested_in`.
Parameter Typ Beschreibung
name
erforderlich
string Der Name, der nachgeschlagen werden soll.
limit
optional
integer Wie viele gezählte Länder in `registrations` aufgeführt werden sollen. 1–100, Standard 25. Die Anteile werden für die kürzere Liste nicht neu berechnet.
curl "https://namegender.com/api/v1/gender/countries?name=Mehmet" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "credits_charged": 1,
  "credits_remaining": 49994,
  "took_ms": 3,
  "name": "Mehmet",
  "basis": {
    "counted_sources": ["ssa", "ons", "nrs", "nisra", "insee", "statcan", "ine", "cso", "ssb", "statat", "pesel", "bfs"],
    "counted_countries": 8,
    "attested_countries": 16,
    "note": "Shares are calculated only across countries that publish counted name statistics…"
  },
  "registrations": [
    { "country": "CH", "count": 3890, "share": 29.45, "gender": "male", "source": "bfs"    },
    { "country": "FR", "count": 3775, "share": 28.58, "gender": "male", "source": "insee"  },
    { "country": "PL", "count": 1808, "share": 13.69, "gender": "male", "source": "pesel"  }
  ],
  "attested_in": ["AL","AT","AU","BE","CA","CH","ES","FR","GB","KS","MK","NO","PL","SE","TR","US"]
}

Ein Guthaben pro Anfrage. `share` wird über alle Länder mit gezählten Daten berechnet und ergibt daher nur dann 100, wenn `limit` die Liste nicht kürzt; auch `counted_countries` zählt vor der Kürzung. `attested_in` enthält keine Prozentsätze, da es keine Zahlen gibt, aus denen man diese berechnen könnte.

GET POST https://namegender.com/api/v1/salutation
Markdown

Anrede

Macht aus einem Namen eine Anrede, fertig für Brief oder E-Mail, in zehn Sprachen: „Sehr geehrte Frau Dr. Müller,“, „Sayın Ahmet Bey,“, „Madame,“, „山田様“. Die Geschlechtsbestimmung ist enthalten und kostet weiterhin ein Guthaben. Jede Antwort enthält eine formelle, eine informelle und eine neutrale Zeile sowie die Bestandteile der formellen Zeile.

Parameter Typ Beschreibung
name
erforderlich
string Vollständiger Name samt Titeln („Dr. Anna Müller“). Senden Sie diesen oder `first_name` und `last_name`.
first_name, last_name
optional
string Verwenden Sie diese statt `name`, wenn Ihr CRM Namen in getrennten Feldern speichert. Es wird nichts zerlegt.
email
optional
string E-Mail-Adresse, wenn kein Name gesendet wird. Der Name wird aus dem Teil vor dem @ gelesen, ohne Umlaute (Mueller statt Müller); info@ und andere Funktionsadressen erhalten die Anrede für Organisationen.
language
optional
string Sprache der Anrede: en, en-US, en-GB, de, de-AT, de-CH, fr, es, it, pt, pt-PT, pt-BR, nl, tr, pl, ja. Ohne Angabe: die Sprache von `locale`, dann die Hauptsprache des Landes, dann Englisch. Eine nicht unterstützte Sprache ergibt einen Fehler, nie einen stillen Wechsel zu Englisch.
country, locale, ip
optional
string Länderhinweis für die Geschlechtsbestimmung, wie bei den Gender-Endpoints. Bestimmt die Sprache nur, wenn `language` nicht gesendet wird.
gender
optional
string `male`, `female` oder `neutral`, wenn Sie es bereits kennen. Ersetzt die Bestimmung; `neutral` ergibt immer die neutrale Form.
min_probability
optional
integer Mindestwahrscheinlichkeit für eine geschlechtsspezifische Anrede, 50–100. Standard 90.
title
optional
string Akademischer Titel aus einem eigenen Feld, etwa `Dr.` Wird in deutschen und englischen Anreden verwendet.
curl -X POST "https://namegender.com/api/v1/salutation" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Dr. Anna Müller", "language": "de"}'
{
  "credits_charged": 1,
  "credits_remaining": 49993,
  "language": "de",
  "form": "gendered",
  "reason": null,
  "salutation": {
    "formal": "Sehr geehrte Frau Dr. Müller,",
    "informal": "Liebe Anna,",
    "neutral": "Guten Tag Dr. Anna Müller,"
  },
  "parts": { "opening": "Sehr geehrte", "courtesy": "Frau", "academic": "Dr.", "name": "Müller" },
  "gender": "female",
  "gender_source": "lookup",
  "probability": 99,
  "first_name": "Anna",
  "last_name": "Müller",
  "name_type": "personal"
}

Ein falsches Geschlecht ist schlimmer als gar keins. Die geschlechtsspezifische Form wird daher nur verwendet, wenn das Geschlecht mit mindestens `min_probability` bekannt ist und die Sprache den benötigten Namensteil hat. Andernfalls ist `form` gleich `neutral`, und `reason` nennt den Grund. Firmen und Funktionsadressen erhalten `form: organization`. `best_guess` und `ai_fallback` gelten hier nicht.

POST /api/v1/salutation/bulk nimmt bis zu 100 Namen in `names` an, ein Guthaben pro Name, mit denselben Optionen für jeden Namen.

GET POST https://namegender.com/api/v1/name-check
Markdown

Namensprüfung

Sagt, ob ein in ein Anmelde- oder Lead-Formular eingetippter Name wie der Name einer echten Person aussieht, und warum. Erkennt wahlloses Tippen auf der Tastatur („asdf qwerty“), Platzhalter („Test Test“, „John Doe“, „n/a“), fiktive Figuren („Mickey Mouse“), Schimpfwörter sowie Ziffern, Symbole oder E-Mail-Adressen im Namensfeld. Ein Guthaben pro Name.

Dies ist keine Identitätsprüfung, und ein Name wird nie als gefälscht bezeichnet. Nutzen Sie `implausible` und `suspicious`, um einen Datensatz zu markieren oder weitere Angaben zu erfragen, nicht um Menschen automatisch abzuweisen.
Parameter Typ Beschreibung
name
erforderlich
string Der Name so, wie er ins Formular eingegeben wurde. Senden Sie diesen oder `first_name` und `last_name`.
first_name, last_name
optional
string Verwenden Sie diese statt `name`, wenn Ihr Formular getrennte Felder hat.
country, locale, ip
optional
string Länderhinweis, wie bei den Gender-Endpoints. Hilft beim Zerlegen des Namens und beim Abgleich mit den Registerdaten.
curl -X POST "https://namegender.com/api/v1/name-check" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "asdf qwerty"}'
{
  "credits_charged": 1,
  "credits_remaining": 49992,
  "query": "asdf qwerty",
  "assessment": "implausible",
  "score": 0,
  "signals": [
    { "code": "placeholder", "severity": "high", "part": "first_name", "value": "asdf" },
    { "code": "keyboard_pattern", "severity": "high", "part": "first_name", "value": "asdf" },
    { "code": "keyboard_pattern", "severity": "high", "part": "last_name", "value": "qwerty" }
  ],
  "first_name": "Asdf",
  "last_name": "Qwerty",
  "name_type": "personal",
  "evidence": { "first_name_status": "not_found", "first_name_counted_records": 0 }
}

`assessment` ist `implausible` bei einem Signal hoher Schwere (Tastaturmuster, wiederholte Buchstaben, Platzhalter, Schimpfwort, E-Mail oder URL), `suspicious` bei einem mittleren (fiktive Figur, Ziffern, Symbole, Firmenname, keine Vokale, sehr lang) oder zwei niedrigen, sonst `plausible`. `score` reicht von 0 bis 100 für Ihren eigenen Schwellenwert. Ein Vorname aus amtlichen Geburtsregistern erhöht ihn; ein Name, den wir nie gesehen haben, senkt ihn allein nicht. Nachnamen werden nur nach ihrer Form beurteilt: Hinter diesem Endpoint steht kein Nachnamen-Datensatz.

Getestet mit 4.610 echten Vornamen in neun Schriften, allein und mit Nachnamen: Keiner wurde als verdächtig oder unplausibel markiert. Nachnamen wie Null, Test oder Cockburn, zweibuchstabige Namen wie Ng und Einzelnamen bleiben bewusst unbeanstandet.

POST /api/v1/name-check/bulk nimmt bis zu 100 Namen in `names` an, ein Guthaben pro Name, mit einer Zusammenfassung der drei Bewertungen.

GET POST https://namegender.com/api/v1/age
Markdown

Alter aus dem Namen

Wie alt die lebenden Menschen mit einem Vornamen sind: das Medianalter, die mittlere Hälfte (`age_range`) und die mittleren 80% (`age_range_80`). Brittany in den Vereinigten Staaten: Median 36, die Hälfte zwischen 32 und 38. Ein Guthaben pro Name.

Das beschreibt eine Gruppe, keine Person. Bei den meisten Namen umfasst die mittlere Hälfte 10 bis 25 Jahre. Nutzen Sie es für Zielgruppenanalysen, Segmente und Forschung, nie für Entscheidungen über eine einzelne Person: Kreditvergabe, Einstellung, Wohnungsvergabe, Versicherung, Anspruchsprüfung oder Alterskontrolle.
Parameter Typ Beschreibung
name
erforderlich
string Ein Vorname oder ein vollständiger Name; verwendet wird der Vorname.
gender
optional
string `male` oder `female`, um nur die Einträge dieses Geschlechts zu verwenden. Männliche Leslies sind 16 Jahre älter als weibliche.
country, locale, ip
optional
string Länderhinweis, wie bei den Gender-Endpoints. Abgedeckt: US, FR und NO. Ohne Hinweis wird die US-Reihe verwendet und `country_source` ist `default`. Ein anderes Land liefert `reason: country_not_covered` und kostet nichts.
curl "https://namegender.com/api/v1/age?name=Brittany" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "credits_charged": 1,
  "credits_remaining": 49991,
  "request_id": "req_8f2c1a",
  "name": "Brittany",
  "first_name": "Brittany",
  "gender": null,
  "age": 36,
  "age_range": { "low": 32, "high": 38 },
  "age_range_80": { "low": 28, "high": 41 },
  "birth_year": 1990,
  "sample_size": 353775,
  "births": 361434,
  "country": "US",
  "country_source": "default",
  "source": "ssa",
  "series": "1880-2024",
  "reference_year": 2026,
  "reason": null
}

Methode: registrierte Geburten nach Name, Geschlecht und Jahr, jedes Jahr gewichtet mit dem Anteil dieses Geburtsjahrgangs, der noch lebt (Kohortensterbetafeln der SSA). Quellen: SSA-Geburten 1880–2024 (US), INSEE 1900–2025 (Frankreich), SSB 1945–2025 (Norwegen). `reason` ist `not_found` für einen Namen, der nicht in der Reihe steht, und `insufficient_data` bei weniger als 100 lebenden Personen.

Im Ausland Geborene stehen in keiner Reihe, daher wirken unter Eingewanderten verbreitete Namen jünger, als sie sind. Die norwegische Reihe beginnt 1945, früher Geborene fehlen also. Die US-Sterbetafel wird auch für Frankreich und Norwegen verwendet.

POST /api/v1/age/bulk nimmt bis zu 100 Namen in `names` an, ein Guthaben pro Name, in der gesendeten Reihenfolge.

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

Guthaben

Fragen Sie Ihr Guthaben und den Rest des heutigen Freikontingents ab. Dieser Aufruf wird nicht berechnet.

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

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/v1/gender?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/v1/gender?name=%E6%9D%8E%E6%98%8E" -H "Authorization: Bearer KEY"
# -> { "gender": "male", "probability": 92, "source": "db" }

Kopieren fehlgeschlagen. Text auswählen und kopieren.

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
credits_charged integer Wie viel Guthaben für diesen Aufruf abgezogen wurde.
credits_remaining integer Dein verfügbares Guthaben, nachdem dieser Aufruf bezahlt ist: gekauftes Guthaben plus der Rest des heutigen Freikontingents.
query string Die Eingabe genau so, wie du sie gesendet hast, vor jeder Bereinigung.
name string Der Name, den wir tatsächlich abgefragt haben, nach Entfernung von Titeln und Nachnamen.
first_name string Aus der Eingabe ermittelter Vorname. Wird auch zurückgegeben, wenn gender null ist, ohne zusätzliche Kosten.
middle_name string Weitere Vornamen zwischen Vorname und Nachname. Initialen werden weggelassen.
last_name string Nachname, einschließlich Namenszusätzen wie van oder de la. Bei Benutzernamen immer null.
name_type string personal, organization (Acme GmbH) oder role (info@, Kundenservice). Organisationen und Rollen erhalten kein Geschlecht.
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.
country_source string Woher das Land stammt: country, locale, ip oder null, wenn die Antwort weltweit gilt.
sample_size integer Anzahl der erfassten Personen hinter dieser Antwort. 0 bedeutet, dass die Quelle Anteile oder Belege veröffentlicht, keine Anzahl, die wir prüfen können.
probability integer Konfidenz im angegebenen Geschlecht, 50 bis 100. 0, wenn gender null ist.
took_ms integer Zeit, die wir für die Auflösung der Abfrage gebraucht haben, in ganzen Millisekunden. Die Netzwerkzeit auf deiner Seite ist nicht enthalten.

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, script, 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

Der HTTP-Statuscode zeigt dir, dass ein Aufruf fehlgeschlagen ist. Der JSON-Body nennt dann den Grund in error, erklärt ihn in message und liefert eine request_id für den Support sowie einen Link zur passenden Zeile weiter unten. Verzweige immer anhand von error, nie anhand von message: Meldungen werden übersetzt und können umformuliert werden.

Code HTTP Bedeutung
missing_key 401 Es wurde kein API-Schlüssel gesendet. Fügen Sie der Anfrage einen Authorization: Bearer Header oder einen X-Api-Key Header hinzu.
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.
proxy_secret_required 403 Dieser Schlüssel funktioniert nur über seinen API-Marketplace, der jede Anfrage signiert. Verwenden Sie den Schlüssel, der Ihnen dort ausgestellt wurde.
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.
batch_not_found 404 Unter diesem Konto gibt es keinen Dateiauftrag mit dieser ID.
batch_not_startable 409 Dieser Auftrag wurde bereits gestartet oder abgeschlossen.
batch_not_finished 409 Dieser Auftrag ist noch nicht fertig. Prüfen Sie den Status und laden Sie das Ergebnis herunter, sobald er abgeschlossen ist.
batch_in_progress 409 Dieser Auftrag wird gerade verarbeitet und kann jetzt nicht abgebrochen werden. Löschen Sie ihn, sobald er fertig ist.
result_gone 410 Für diesen Auftrag gibt es kein Ergebnis zum Herunterladen. Er ist fehlgeschlagen, wurde abgebrochen, ist abgelaufen oder sein einmalig herunterladbares Ergebnis wurde bereits abgerufen.
too_many_batches 429 Sie haben bereits 100 laufende Dateiaufträge. Warten Sie, bis einer fertig ist, bevor Sie einen neuen starten.
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.
{
  "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"
}

Kopieren fehlgeschlagen. Text auswählen und kopieren.

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.

Leerzeichen und nicht-lateinische Buchstaben in GET-Anfragen

Ein Name wie Ayşe Yılmaz oder 中村 lässt sich nicht so, wie er geschrieben ist, in einer URL übertragen. Prozentkodieren Sie den Wert, wenn Sie mit GET aufrufen, oder senden Sie ihn per POST in einem JSON-Body und sparen Sie sich die Kodierung ganz.

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

Kopieren fehlgeschlagen. Text auswählen und kopieren.