Pokračovat → Přehled

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
llms-full.txt

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 header (doporučeno)
Authorization: Bearer ng_live_xxxxxxxxxxxx

Kopírování selhalo. Vyberte a zkopírujte text.

Hlavička X-Api-Key
X-Api-Key: ng_live_xxxxxxxxxxxx

Kopírování selhalo. Vyberte a zkopírujte text.

Nikdy nevystavujte svůj klíč v kódu na straně klienta. Požadavky z prohlížeče nebo mobilní aplikace by měly procházet vaším vlastním backendem.

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.

JavaScript Zdroj
npm install namegender

Kopírování selhalo. Vyberte a zkopírujte text.

Command line Zdroj
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.

Python Zdroj
pip install namegender-client

Kopírování selhalo. Vyberte a zkopírujte text.

Ruby Zdroj
gem install namegender

Kopírování selhalo. Vyberte a zkopírujte text.

Java Zdroj
<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.

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

PowerShell Zdroj
Install-Module NameGender

Kopírování selhalo. Vyberte a zkopírujte text.

Rust Zdroj
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še

AI 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 Code
claude mcp add namegender -e NAMEGENDER_API_KEY=ng_live_... -- npx -y namegender-mcp

Kopírování selhalo. Vyberte a zkopírujte text.

Claude Desktop, Cursor a další klienti
{
    "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

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

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
}
GET · POST https://namegender.com/api/v1/gender/email
Markdown

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"
}
GET · POST https://namegender.com/api/v1/gender/username
Markdown

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"
}
POST https://namegender.com/api/v1/gender/bulk
Markdown

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.

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

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. 1. POST /batches Odešlete soubor a name_column. Úloha se ihned zařadí do fronty.
  2. 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. 3. GET /batches/{id}/result Stá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.

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

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.

Ověřujte tělo přesně tak, jak přišlo. Framework, který JSON zpracuje a znovu serializuje, změní bajty a podpis nebude sedět.
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.
GET POST https://namegender.com/api/v1/gender/countries
Markdown

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.

Toto není odvozování země původu ani etnicity a nesmí být použito jako takové. Počítané statistiky existují pouze pro jedenáct zemí: USA, Velkou Británii, Francii, Kanadu, Španělsko, Irsko, Norsko, Rakousko, Izrael, Polsko a Švýcarsko. Dotaz na "Mehmet" proto řadí na první místo Švýcarsko a Francii, každou s přibližně 29 %, a Turecko se v žebříčku vůbec neobjevuje — Turecko nezveřejňuje počty. Turecko se objevuje v `attested_in`.
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.

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

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.

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

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.

Nejde o ověření totožnosti a žádné jméno nikdy neoznačí za falešné. Hodnoty `implausible` a `suspicious` používejte k označení záznamu nebo k vyžádání dalších údajů, ne k automatickému odmítání lidí.
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í.

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

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.

Popisuje skupinu, ne člověka. U většiny jmen zabírá prostřední polovina 10 až 25 let. Používejte to pro analýzu publika, segmentaci a výzkum, nikdy k rozhodování o jednom člověku: úvěry, nábor, bydlení, pojištění, posuzování nároků ani ověřování věku.
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í.

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

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.

Podporováno
Arabské písmo

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.

Čínské znaky

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.

Korejština

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

Japonská kana

Hiragana a katakana se čtou správně (ひろし → Hiroshi).

Cyrilice

Ruská, ukrajinská, bulharská a srbská jména se transliterují přímo.

Devanagari

Hindská, maráthská a nepalská jména. Je zpracována inherentní koncová samohláska (राहुल → Rahul, ne "Rahula").

Není podporováno
Japonské kanji

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

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