Referenční dokumentace REST API
Několik endpointů, jeden formát odpovědi. Vše níže je živě testováno s vaším účtem.
https://namegender.com/api/v1/gender
Registrovat se zdarma
Markdown pro programovací asistenty, jako jsou Claude Code, Cursor a Copilot. Vložte ho do chatu, nebo asistentovi předejte odkaz.
Rychlý start
Vytvořte klíč na ovládacím panelu a odešlete svůj první požadavek. SDK není nutný.
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
Každý endpoint vrací stejnou strukturu, takže můžete přepínat vstupy bez změny kódu parsování.
Ověřování
Každý požadavek nese váš API klíč v hlavičce. Ve výchozím nastavení použijte Authorization: Bearer, nebo X-Api-Key, pokud váš HTTP klient hlavičku Authorization využívá k něčemu jinému. Klíč umístěný v URL je odmítnut: URL adresy se kopírují do logů proxy, analytických nástrojů a historie prohlížeče.
Authorization: Bearer ng_live_xxxxxxxxxxxx
Kopírování selhalo. Vyberte a zkopírujte text.
X-Api-Key: ng_live_xxxxxxxxxxxx
Kopírování selhalo. Vyberte a zkopírujte text.
Klíč můžete omezit na konkrétní IP adresy z přístrojového panelu.
Klientské knihovny
Tenké obaly kolem REST API. Posílají váš klíč, sestavují každý požadavek a chybové odpovědi převádějí na výjimky.
npm install namegender
Kopírování selhalo. Vyberte a zkopírujte text.
npm install -g namegender
Kopírování selhalo. Vyberte a zkopírujte text.
composer require namegender/namegender
Kopírování selhalo. Vyberte a zkopírujte text.
pip install namegender-client
Kopírování selhalo. Vyberte a zkopírujte text.
gem install namegender
Kopírování selhalo. Vyberte a zkopírujte text.
<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>
Kopírování selhalo. Vyberte a zkopírujte text.
dotnet add package NameGender --version 0.6.0
Kopírování selhalo. Vyberte a zkopírujte text.
go get github.com/anpekesen/namegender-go@v0.7.0
Kopírování selhalo. Vyberte a zkopírujte text.
remotes::install_github('anpekesen/namegender-r', ref = 'v0.7.0')
Kopírování selhalo. Vyberte a zkopírujte text.
Install-Module NameGender
Kopírování selhalo. Vyberte a zkopírujte text.
cargo add namegender
Kopírování selhalo. Vyberte a zkopírujte text.
Nepotřebujete. API tvoří jen hrstka endpointů s prostým JSON; knihovna vám ušetří odpoledne, ne projekt. Není-li váš jazyk v seznamu, má REST reference příklady ke kopírování.
Zobrazit všeAI asistenti (MCP)
Používejte NameGender v aplikacích Claude, Cursor a v jakémkoli dalším klientovi, který podporuje Model Context Protocol. Zeptejte se asistenta na seznam jmen a on za vás zavolá API a u každé odpovědi uvede podklady.
claude mcp add namegender -e NAMEGENDER_API_KEY=ng_live_... -- npx -y namegender-mcp
Kopírování selhalo. Vyberte a zkopírujte text.
{
"mcpServers": {
"namegender": {
"command": "npx",
"args": [
"-y",
"namegender-mcp"
],
"env": {
"NAMEGENDER_API_KEY": "ng_live_..."
}
}
}
}
Kopírování selhalo. Vyberte a zkopírujte text.
Přidejte toto do konfiguračního souboru MCP daného klienta a klienta restartujte.
Nástroje
gender_from_name- Pohlaví z křestního nebo celého jména.
gender_from_email- Přečte jméno v e-mailové adrese; funkční adresy jako info@ vrací neznámý výsledek.
gender_from_username- Přečte jméno v uživatelském jménu nebo přezdívce.
gender_bulk- Až 100 hodnot v jednom požadavku se souhrnem míry shody.
name_countries- Země, ve kterých je jméno zaznamenáno. Nejde o tvrzení o původu.
salutation- Úvodní řádek dopisu v jazyce dopisu; neutrální oslovení, když pohlaví není jisté.
name_check- Zda jméno zadané do formuláře vypadá jako skutečné, i s důvody. Žádné jméno nikdy neoznačí za falešné.
age_from_name- Mediánový věk a věková rozpětí lidí s daným křestním jménem ve Spojených státech, Francii a Norsku.
account_status- Zbývající kredity a dnešní bezplatný limit.
Každé vyhledání čerpá kredity z účtu, kterému klíč patří, přesně jako přímé volání API. Uvedeno v oficiálním registru MCP jako io.github.anpekesen/namegender. Balíček npm · Zdroj
Pohlaví podle jména
Přijímá křestní jméno nebo plné jméno. Tituly, druhá jména a příjmení jsou před vyhledáváním odstraněny, takže "Dr. Ayşe Yılmaz" a "Ayşe" dávají stejný výsledek.
| Parametr | Typ | Popis |
|---|---|---|
name
povinné
|
string
|
Jméno k klasifikaci. Křestní jméno nebo plné jméno. |
country
volitelné
|
string
|
Kód státu ISO 3166-1 alfa-2. Zlepšuje přesnost pro jména, jejichž pohlaví se liší podle regionu, například Andrea (muž v Itálii, žena v Německu). |
locale
volitelné
|
string
|
Jazykový štítek jako de-DE nebo en_US, například jazyk prohlížeče. Jeho region se stane zemí, když se country neodešle. Štítek bez regionu (en, de) zemi nenastaví. |
ip
volitelné
|
string
|
IP adresa koncového uživatele. Její země se použije, když se neodešle country ani locale s regionem. Neukládá se. IP geolocation by DB-IP (db-ip.com). |
ai_fallback
volitelné
|
boolean
|
Pokud jméno v našich datech nemá záznam, požádat jazykový model o odhad místo vrácení null. Funguje jen po zapnutí AI vyhledávání v nastavení a stojí jeden kredit navíc. |
best_guess
volitelné
|
boolean
|
Vrátit převažující pohlaví, i když důkazy nedosahují prahu spolehlivosti. Ve výchozím stavu vypnuto: odpověď blízká 50/50, která vypadá jednoznačně, napáchá víc škody než 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
}
Pohlaví podle e-mailu
Extrahuje osobu z lokální části adresy a poté ji klasifikuje. "ayse.yilmaz84@example.com" se přeloží na Ayşe.
| Parametr | Typ | Popis |
|---|---|---|
email
povinné
|
string
|
E-mailová adresa. Používá se pouze část před @. |
country
volitelné
|
string
|
Kód státu ISO 3166-1 alfa-2. Zlepšuje přesnost pro jména, jejichž pohlaví se liší podle regionu, například Andrea (muž v Itálii, žena v Německu). |
locale
volitelné
|
string
|
Jazykový štítek jako de-DE nebo en_US, například jazyk prohlížeče. Jeho region se stane zemí, když se country neodešle. Štítek bez regionu (en, de) zemi nenastaví. |
ip
volitelné
|
string
|
IP adresa koncového uživatele. Její země se použije, když se neodešle country ani locale s regionem. Neukládá se. IP geolocation by DB-IP (db-ip.com). |
ai_fallback
volitelné
|
boolean
|
Pokud jméno v našich datech nemá záznam, požádat jazykový model o odhad místo vrácení null. Funguje jen po zapnutí AI vyhledávání v nastavení a stojí jeden kredit navíc. |
best_guess
volitelné
|
boolean
|
Vrátit převažující pohlaví, i když důkazy nedosahují prahu spolehlivosti. Ve výchozím stavu vypnuto: odpověď blízká 50/50, která vypadá jednoznačně, napáchá víc škody než null. |
best_guess pracuje s křestním jménem vyčteným z adresy, ne se samotnou adresou. Pokud se křestní jméno vyčíst nedá, není co vynutit a gender zůstane null. Mějte na paměti, že vynucená odpověď zde stojí na extrakci, která sama může být chybná.
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"
}
Pohlaví podle uživatelského jména
Zpracovává camelCase, snake_case, koncové číslice a úvodní znaky @. "AyseYilmaz84" se přeloží na Ayşe.
| Parametr | Typ | Popis |
|---|---|---|
username
povinné
|
string
|
Uživatelské jméno nebo přezdívka. Úvodní @ se ignoruje. |
country
volitelné
|
string
|
Kód státu ISO 3166-1 alfa-2. Zlepšuje přesnost pro jména, jejichž pohlaví se liší podle regionu, například Andrea (muž v Itálii, žena v Německu). |
locale
volitelné
|
string
|
Jazykový štítek jako de-DE nebo en_US, například jazyk prohlížeče. Jeho region se stane zemí, když se country neodešle. Štítek bez regionu (en, de) zemi nenastaví. |
ip
volitelné
|
string
|
IP adresa koncového uživatele. Její země se použije, když se neodešle country ani locale s regionem. Neukládá se. IP geolocation by DB-IP (db-ip.com). |
ai_fallback
volitelné
|
boolean
|
Pokud jméno v našich datech nemá záznam, požádat jazykový model o odhad místo vrácení null. Funguje jen po zapnutí AI vyhledávání v nastavení a stojí jeden kredit navíc. |
best_guess
volitelné
|
boolean
|
Vrátit převažující pohlaví, i když důkazy nedosahují prahu spolehlivosti. Ve výchozím stavu vypnuto: odpověď blízká 50/50, která vypadá jednoznačně, napáchá víc škody než 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"
}
Hromadný požadavek
Odešlete až 100 jmen v jednom požadavku. Použijte to místo smyčky: jeden hromadný hovor na 100 jmen je jednorázová cesta a jednorázové deduplikované vyhledávání.
| Parametr | Typ | Popis |
|---|---|---|
names
povinné
|
string[]
|
Pole jmen. Maximálně 100 položek. |
type
volitelné
|
string
|
Co jsou položky: name, email nebo username. Výchozí hodnota je name. |
country
volitelné
|
string
|
Použito na každou položku v požadavku. |
locale
volitelné
|
string
|
Jazykový štítek, jehož region se stane zemí pro každou položku, když se country neodešle. |
ip
volitelné
|
string
|
IP adresa koncového uživatele, jejíž země platí pro každou položku, když se neodešle country ani locale s regionem. Neukládá se. 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" }
]
}
Výsledky se vrátí ve stejném pořadí, v jakém jste je odeslali. Kredity se účtují podle jména a celý požadavek je odmítnut před jakoukoli prací, pokud vám chybí zůstatek, takže nikdy nedostanete poloupravenu dávku.
Blok souhrnu vám na první pohled řekne míru shody, takže si můžete rozhodnout, zda vstup potřebuje vyčištění před zpracováním zbytku.
Souborové úlohy
Nahrajte soubor CSV nebo XLSX o velikosti až 100 MB a 1 000 000 řádků a získejte ho zpět se sloupci pohlaví přidanými ke každému řádku. Jeden kredit za řádek, účtovaný jen při dokončení úlohy.
-
1.
POST /batchesOdešlete soubor a name_column. Úloha se ihned zařadí do fronty. -
2.
GET /batches/{id}Čtěte úlohu, dokud status není completed nebo failed. poll_after_seconds udává, jak dlouho čekat mezi čteními. -
3.
GET /batches/{id}/resultStáhněte výsledek. Vrátí se ve formátu, který jste nahráli.
| Parametr | Typ | Popis |
|---|---|---|
file
povinné
|
file
|
CSV, TSV nebo XLSX s řádkem záhlaví. |
name_column
povinné
|
string
|
Záhlaví sloupce se jmény přesně jako v souboru. Povinné, pokud není start=false. |
country_column
volitelné
|
string
|
Záhlaví sloupce s kódem země pro každý řádek. |
country
volitelné
|
string
|
Výchozí země pro řádky bez země. |
ai_fallback
volitelné
|
boolean
|
Pro jména mimo datovou sadu se zeptat modelu AI. Vyžaduje souhlas s AI v Nastavení. |
best_guess
volitelné
|
boolean
|
Vrátit pravděpodobnější pohlaví i při slabých důkazech. |
delete_after_download
volitelné
|
boolean
|
Výsledek lze stáhnout jednou, poté je smazán. |
start
volitelné
|
boolean
|
false: pouze nahrát a prohlédnout. Výchozí je 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
}
Ke spuštění je name_column povinné: odhadnutý sloupec, který se ukáže jako chybný, by utratil kredity za špatná data. Pošlete start=false, abyste nejprve viděli sloupce, náhled a cenu, a pak úlohu spusťte.
Posílejte hlavičku Idempotency-Key. Opakovaný pokus se stejným klíčem vrátí první úlohu místo otevření druhé.
Najednou může být ve frontě nebo zpracovávána až 3 úloh. Nespuštěnou úlohu lze zrušit a její kredit se vrátí; zpracovávanou úlohu nelze zastavit.
Webhooky
Přidejte koncový bod v sekci Webhooky v panelu a my mu pošleme podepsaný POST, když souborová úloha skončí nebo selže, takže se nemusíte dotazovat.
| Událost | Typ | Popis |
|---|---|---|
batch.completed
|
BatchJob
|
Úloha skončila. Tělo obsahuje úlohu přesně tak, jak ji vrací GET /batches/{id}. |
batch.failed
|
BatchJob
|
Úloha selhala a nebyla účtována. Větvěte podle error.code. |
credits.low
|
CreditsAlert
|
Při současném tempu vydrží kredity 7 dní nebo méně. Kontroluje se každou hodinu; obnovení předplatného se započítává. |
credits.depleted
|
CreditsAlert
|
Zůstatek je prázdný a požadavky jsou odmítány kódem 402. Kontroluje se každou hodinu. |
webhook.test
|
object
|
Posílá se jen tlačítkem „Odeslat testovací událost“ v panelu a jen na daný koncový bod. |
| Hlavička | Typ | Popis |
|---|---|---|
NameGender-Signature
povinné
|
string
|
t=<unixové sekundy>,v1=<hex>. Po obnovení tajemství je 24 hodin přítomno i druhé v1. |
NameGender-Event-Id
povinné
|
string
|
ID události. Při každém opakování téže události stejné. |
NameGender-Delivery-Attempt
povinné
|
integer
|
1 při prvním pokusu, nejvýše 8. |
Ověřujte každý požadavek
v1 je HMAC-SHA256 z časového razítka, tečky a nezpracovaného těla, s tajemstvím vašeho koncového bodu. Porovnávejte v konstantním čase, přijměte požadavek, pokud sedí kterékoli v1, a odmítněte časové razítko vzdálené od vašich hodin o více než pět minut. Klientské knihovny to vše udělají jedním voláním.
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" }
}
}
}
- Odpovězte libovolným 2xx do 10 sekund a práci udělejte potom.
- Jakákoli jiná odpověď, včetně přesměrování, se opakuje až 7 krát během zhruba 45 hodin. Pokud koncový bod selhává tři dny, vypne se a dostanete e-mail.
- Opakování nese stejné ID a pořadí není zaručeno. Odstraňujte duplikáty podle NameGender-Event-Id a aktuální stav úlohy čtěte přes GET.
- Obnovení tajemství v panelu nechá staré podepisovat ještě 24 hodin, takže server aktualizujete bez ztráty událostí.
- Mohou přibýt nové typy událostí. Na typ, který nezpracováváte, odpovězte 2xx a ignorujte ho.
Rozložení podle zemí
Vrátí země, ve kterých je jméno zaznamenáno. Vrací se dva seznamy, které záměrně nejsou sloučeny: `registrations` je měřený objem, porovnatelný pouze mezi jedenácti zeměmi, které zveřejňují počítanou statistiku jmen, a `attested_in` je přítomnost bez přiřazené váhy.
| Parametr | Typ | Popis |
|---|---|---|
name
povinné
|
string
|
Jméno k vyhledání. |
limit
volitelné
|
integer
|
Kolik počítaných zemí uvést v `registrations`. 1–100, výchozí 25. Podíly se pro kratší seznam nepřepočítávají. |
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"]
}
Jeden kredit za požadavek. `share` se počítá ze všech zemí s počty, takže dává součet 100 jen tehdy, když `limit` seznam nezkrátí; `counted_countries` se také počítá před zkrácením. `attested_in` neobsahuje procenta, protože za těmito záznamy není počet, na základě kterého by se daly vypočítat.
Oslovení
Promění jméno v oslovení připravené do dopisu nebo e-mailu, v deseti jazycích: „Sehr geehrte Frau Dr. Müller,“, „Sayın Ahmet Bey,“, „Madame,“, „山田様“. Určení pohlaví je zahrnuto a stojí stejný jeden kredit. Každá odpověď obsahuje formální, neformální a neutrální řádek a k tomu části formálního řádku.
| Parametr | Typ | Popis |
|---|---|---|
name
povinné
|
string
|
Celé jméno včetně titulů („Dr. Anna Müller“). Pošlete toto, nebo `first_name` a `last_name`. |
first_name, last_name
volitelné
|
string
|
Použijte je místo `name`, když váš CRM ukládá jména do samostatných polí. Nic se nerozkládá. |
email
volitelné
|
string
|
E-mailová adresa, použije se, když není zadáno jméno. Jméno se čte z části před @, bez diakritiky (Mueller, ne Müller); info@ a další funkční adresy dostanou oslovení pro organizace. |
language
volitelné
|
string
|
Jazyk oslovení: en, en-US, en-GB, de, de-AT, de-CH, fr, es, it, pt, pt-PT, pt-BR, nl, tr, pl, ja. Bez něj: jazyk z `locale`, pak hlavní jazyk země, pak angličtina. Nepodporovaný jazyk je chyba, nikdy tiché přepnutí na angličtinu. |
country, locale, ip
volitelné
|
string
|
Nápověda země pro určení pohlaví, stejně jako u endpointů pohlaví. Jazyk určuje jen tehdy, když se `language` neodešle. |
gender
volitelné
|
string
|
`male`, `female` nebo `neutral`, pokud ho už znáte. Nahrazuje určení; `neutral` dá vždy neutrální tvar. |
min_probability
volitelné
|
integer
|
Nejnižší pravděpodobnost pro oslovení podle pohlaví, 50–100. Výchozí 90. |
title
volitelné
|
string
|
Akademický titul uložený v samostatném poli, například `Dr.` Používá se v německých a anglických osloveních. |
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"
}
Špatné pohlaví je horší než žádné, proto se tvar podle pohlaví použije jen tehdy, když je pohlaví známo s pravděpodobností alespoň `min_probability` a jazyk má potřebnou část jména. Jinak je `form` rovno `neutral` a `reason` uvádí důvod. Firmy a funkční adresy dostanou `form: organization`. `best_guess` a `ai_fallback` zde neplatí.
POST /api/v1/salutation/bulk přijme až 100 jmen v `names`, jeden kredit za každé, se stejnými volbami pro každé jméno.
Kontrola jména
Řekne, zda jméno zadané do registračního nebo poptávkového formuláře vypadá jako jméno skutečné osoby, a proč. Zachytí náhodné ťukání do klávesnice („asdf qwerty“), zástupné hodnoty („Test Test“, „John Doe“, „n/a“), smyšlené postavy („Mickey Mouse“), vulgarismy a číslice, symboly nebo e-mailové adresy v poli pro jméno. Jeden kredit za jméno.
| Parametr | Typ | Popis |
|---|---|---|
name
povinné
|
string
|
Jméno tak, jak bylo zadáno do formuláře. Pošlete toto, nebo `first_name` a `last_name`. |
first_name, last_name
volitelné
|
string
|
Použijte je místo `name`, když má váš formulář samostatná pole. |
country, locale, ip
volitelné
|
string
|
Nápověda země, stejně jako u endpointů pohlaví. Pomáhá s rozkladem jména a vyhledáním v záznamech. |
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` je `implausible`, když je přítomen signál vysoké závažnosti (vzor z klávesnice, opakovaná písmena, zástupná hodnota, vulgarismus, e-mail nebo URL), `suspicious` při signálu střední závažnosti (smyšlená postava, číslice, symboly, název firmy, žádné samohlásky, velmi dlouhé) nebo dvou nízkých, a jinak `plausible`. `score` jde od 0 do 100 pro váš vlastní práh. Křestní jméno nalezené v oficiálních matričních záznamech o narození ho zvyšuje; jméno, které jsme nikdy neviděli, ho samo o sobě nesnižuje. Příjmení se posuzují jen podle tvaru: za tímto endpointem není žádná datová sada příjmení.
Otestováno na 4 610 skutečných křestních jménech v devíti písmech, samostatně i s příjmením: žádné nebylo označeno jako podezřelé ani nepravděpodobné. Příjmení jako Null, Test nebo Cockburn, dvoupísmenná jména jako Ng a jednoslovná jména se záměrně nechávají být.
POST /api/v1/name-check/bulk přijme až 100 jmen v `names`, jeden kredit za každé, se souhrnem tří hodnocení.
Věk podle jména
Kolik let mají žijící lidé s daným křestním jménem: mediánový věk, prostřední polovina (`age_range`) a prostředních 80 % (`age_range_80`). Brittany ve Spojených státech: medián 36, polovina mezi 32 a 38. Jeden kredit za jméno.
| Parametr | Typ | Popis |
|---|---|---|
name
povinné
|
string
|
Křestní jméno nebo celé jméno; použije se křestní jméno. |
gender
volitelné
|
string
|
`male` nebo `female`, aby se použily jen záznamy daného pohlaví. Muži jménem Leslie jsou o 16 let starší než ženy jménem Leslie. |
country, locale, ip
volitelné
|
string
|
Nápověda země, stejně jako u endpointů pohlaví. Pokryto: US, FR a NO. Bez nápovědy se použije řada Spojených států a `country_source` je `default`. Jiná země vrátí `reason: country_not_covered` a nic nestojí. |
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
}
Metoda: registrovaná narození podle jména, pohlaví a roku, přičemž každý rok je vážen podílem dané generace, která je stále naživu (generační úmrtnostní tabulky SSA). Zdroje: narození SSA 1880–2024 (US), INSEE 1900–2025 (Francie), SSB 1945–2025 (Norsko). `reason` je `not_found` pro jméno, které v řadě není, a `insufficient_data` při méně než 100 žijících lidech.
Narození v zahraničí nejsou v žádné řadě, takže jména běžná mezi přistěhovalci vypadají mladší, než jsou. Norská řada začíná rokem 1945, takže lidé narození dříve chybějí. Úmrtnostní tabulka Spojených států se používá i pro Francii a Norsko.
POST /api/v1/age/bulk přijme až 100 jmen v `names`, jeden kredit za každé, v pořadí odeslání.
Zůstatek
Zjistěte zůstatek kreditů a kolik zbývá z dnešního bezplatného limitu. Toto volání se neúčtuje.
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
}
Písma mimo latinku
Pošlete jméno v jeho původním písmu a my ho propojíme s referenčními daty. Bez dalšího parametru: automaticky detekujeme písmo a zvolíme vhodnou strategii.
Arabské písmo vynechává krátké samohlásky, takže محمد se transliteruje na "mhmd" zatímco naše data obsahují "muhammed". Porovnáváme podle vzoru konsonantů a zachováváme ženský marker ة, aby se خالد (Khalid) a خالدة (Khalida) lišily. Pokrývá také perská a urdská jména psaná arabským písmem.
Převedeno na pinyin. Příjmení je v čínštině na prvním místě, takže 李明 má příjmení 李 (Li) a křestní jméno 明 (Ming) — před vyhledáním příjmení odstraníme. Jediný znak představuje úplné křestní jméno a je zpracován jako jeden.
Stejné zpracování příjmení na prvním místě jako v čínštině, s použitím běžných korejských příjmení.
Hiragana a katakana se čtou správně (ひろし → Hiroshi).
Ruská, ukrajinská, bulharská a srbská jména se transliterují přímo.
Hindská, maráthská a nepalská jména. Je zpracována inherentní koncová samohláska (राहुल → Rahul, ne "Rahula").
Japonské znaky kanji a čínské znaky se nacházejí ve stejném rozsahu Unicode, takže je nemůžeme rozlišit pouze podle znaků samotných. Vstup Han je čten jako čínština: jméno kanji, které nemáme uloženo doslova, dostane jeho mandarin čtenku, která pro japonské jméno je obvykle špatná (健太 se čte jako "jian tai", ačkoli je jméno Kenta). Jména, která máme uložena, se shodují přesně a jsou správná. Odesílajte japonská jména v kana nebo latinské abecedě, abyste si byli jisti.
Thajština vynechává samohlásky podobně jako arabština a potřebuje vlastní vrstvu porovnávání. Zatím vybudováno není, takže vrací null.
# 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" }
Kopírování selhalo. Vyberte a zkopírujte text.
Pokud nemůžeme překlad skriptu vůbec provést, odpověď je gender: null se source: none. Zkontrolujte pole source: script znamená, že jsme transliterovali, db znamená, že jsme přímo odpovídali znakům, které jste odeslali. Oba mají různou důvěru a my vám ukážeme, který jste dostali.
Pole odpovědi
Stejná across všech endpointech.
| Pole | Typ | Popis |
|---|---|---|
credits_charged
|
integer
|
Kolik kreditů bylo za toto volání odečteno. |
credits_remaining
|
integer
|
Váš využitelný zůstatek po zaplacení tohoto volání: zakoupené kredity plus zbytek dnešního bezplatného limitu. |
query
|
string
|
Vstup přesně tak, jak jste ho odeslali, před jakýmkoli čištěním. |
name
|
string
|
Jméno, které jsme skutečně vyhledali po odstranění titulů a příjmení. |
first_name
|
string
|
Křestní jméno rozpoznané ze vstupu. Vrací se i tehdy, když je gender null, bez dalších nákladů. |
middle_name
|
string
|
Další křestní jména mezi prvním jménem a příjmením. Iniciály se vynechávají. |
last_name
|
string
|
Příjmení včetně předložek jako van nebo de la. U uživatelských jmen vždy null. |
name_type
|
string
|
personal, organization (Acme s.r.o.) nebo role (info@, zákaznický servis). Organizace a role nedostávají pohlaví. |
gender
|
string
|
male, female, nebo null, pokud si nejsme dostatečně jisti. |
country
|
string
|
Země, ze které statistiky pocházejí, nebo null pro globální agregaci. |
country_source
|
string
|
Odkud země pochází: country, locale, ip, nebo null, když je odpověď celosvětová. |
sample_size
|
integer
|
Počet zaznamenaných osob, na kterých odpověď stojí. 0 znamená, že zdroj zveřejňuje poměry nebo doložené výskyty, ne počet, který můžeme ověřit. |
probability
|
integer
|
Spolehlivost uvedeného pohlaví, 50 až 100. 0, pokud je gender null. |
took_ms
|
integer
|
Čas, který nám zabralo vyřízení vyhledávání, v celých milisekundách. Síťový čas na vaší straně není zahrnut. |
Dva atributy, které jiné služby neposkytují
source vám řekne, odkud odpověď pochází: z referenční databáze, z přibližné shody nebo z AI fallbacku. matched_as pojmenovává záznam, na kterou se přibližná shoda vztahuje. Zusammen vám umožňují rozhodovat se o důvěryhodnosti jednoho výsledku místo slepého přijetí.
| Pole | Typ | Popis |
|---|---|---|
source
|
string
|
db, script, fuzzy, llm, nebo none. |
confidence
|
string
|
vysoká, střední, nízká, neověřená nebo neznámá, založeno na vzorku dat. |
matched_as
|
string
|
U přibližné shody záznam databáze, který odpovídal. Jinak null. |
Kódy chyb
Stavový kód HTTP vám řekne, že volání selhalo. Tělo JSON pak uvádí důvod v error, vysvětluje ho v message a obsahuje request_id, které můžete uvést podpoře, a odkaz na odpovídající řádek dokumentace níže. Rozhodujte se podle error, nikdy podle message: zprávy jsou přeložené a mohou být přeformulovány.
| Kód | HTTP | Význam |
|---|---|---|
missing_key |
401 | Nebyl odeslán žádný API klíč. Přidejte do požadavku hlavičku Authorization: Bearer nebo hlavičku X-Api-Key. |
invalid_key |
401 | Tento API klíč není platný. |
revoked_key |
401 | Tento API klíč byl zrušen. |
blocked |
403 | Tento účet byl pozastaven. Kontaktujte podporu. |
email_not_verified |
403 | E-mailová adresa tohoto účtu zatím nebyla potvrzena. Otevřete potvrzovací odkaz, který jsme vám poslali, nebo si vyžádejte nový v přehledu. |
ip_not_allowed |
403 | Požadavky z této IP adresy nejsou pro tento klíč povoleny. |
proxy_secret_required |
403 | Tento klíč funguje pouze přes své tržiště API, které podepisuje každý požadavek. Použijte klíč, který vám byl vydán tam. |
forbidden |
403 | Nemáte povolení provést tuto akci. |
no_credits |
402 | Nemáte více kreditů. Koupit více nebo počkat na reset vaší denní bezplatné kvóty. |
missing_input |
400 | Parametr "name" je povinný. |
invalid_input |
422 | Parametr "name" není platný. |
too_many_items |
422 | V jednom požadavku lze odeslat maximálně 100 položek. |
ai_consent_required |
422 | ai_fallback odesílá jméno třetímu poskytovateli AI, kterého si tento účet nezvolil. Viz pole "ai" pro identifikaci poskytovatele, pak v nastavení dashboardu povolte vyhledávání AI. |
unknown_endpoint |
404 | Na této cestě neexistuje endpoint. Ověřte si adresu podle dokumentace API. |
method_not_allowed |
405 | Tento endpoint nepřijímá požadavky DELETE. |
payload_too_large |
413 | Tělo požadavku je příliš velké. |
rate_limited |
429 | Příliš mnoho požadavků. Zpomalte a zkuste to za chvíli. |
batch_not_found |
404 | V tomto účtu neexistuje žádná souborová úloha s tímto ID. |
batch_not_startable |
409 | Tato úloha již byla spuštěna nebo uzavřena. |
batch_not_finished |
409 | Tato úloha ještě neskončila. Zkontrolujte její stav a po dokončení si stáhněte výsledek. |
batch_in_progress |
409 | Tato úloha se právě zpracovává a nyní ji nelze zrušit. Smažte ji, až skončí. |
result_gone |
410 | Tato úloha nemá žádný výsledek ke stažení. Selhala, byla zrušena, vypršela nebo byl její jednorázový výsledek již stažen. |
too_many_batches |
429 | Již máte spuštěno 100 souborových úloh. Než spustíte další, počkejte, až jedna skončí. |
not_ready |
503 | Databáze jmen se právě obnovuje. Zkuste to za chvíli. |
server_error |
500 | Na naší straně došlo k chybě. Byli jsme informováni. |
{
"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"
}
Kopírování selhalo. Vyberte a zkopírujte text.
Limity požadavků
Normální používání nenarazí na limit. Omezení existuje proto, aby se zabránilo zneužití úniklého klíče, a počítá se na API klíč spíše než na IP adresu, aby několik zákazníků na jednom serveru nekonzumovalo navzájem své příspěvky.
Aktuální limit: 1 200 požadavků za minutu na klíč. Potřebujete více? Zeptejte se a zvýšíme vám limit na vašem účtu.
Každá odpověď obsahuje standardní headery X-RateLimit-Limit a X-RateLimit-Remaining.
Mezery a nelatinková písmena v požadavcích GET
Jméno jako Ayşe Yılmaz nebo 中村 nelze v URL poslat tak, jak je napsané. Při volání přes GET hodnotu zakódujte procentovým kódováním, nebo ji pošlete v těle JSON přes POST a kódování úplně vynechte.
Ayşe Yılmaz -> Ay%C5%9Fe%20Y%C4%B1lmaz
محمد -> %D9%85%D8%AD%D9%85%D8%AF
中村 -> %E4%B8%AD%E6%9D%91
Kopírování selhalo. Vyberte a zkopírujte text.