जारी रखें → अवलोकन

REST API संदर्भ

कुछ endpoint, एक प्रतिक्रिया रूप। नीचे सब कुछ आपके खाते के विरुद्ध लाइव है।

https://namegender.com/api/v1/gender मुफ्त साइन अप करें
llms-full.txt

Claude Code, Cursor और Copilot जैसे कोडिंग सहायकों के लिए Markdown। इसे चैट में पेस्ट करें या सहायक को लिंक दें।

त्वरित शुरुआत

अपने डैशबोर्ड में एक key बनाएं, फिर अपना पहला अनुरोध भेजें। SDK की आवश्यकता नहीं है।

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

प्रत्येक endpoint एक ही रूप लौटाता है, इसलिए आप अपने पार्सिंग कोड को बदले बिना input स्विच कर सकते हैं।

प्रमाणीकरण

हर अनुरोध आपकी API key को एक header में लेकर जाता है। डिफ़ॉल्ट रूप से Authorization: Bearer का उपयोग करें, या X-Api-Key का, जब आपका HTTP client Authorization header को किसी और काम के लिए रखता हो। URL में रखी गई key अस्वीकार कर दी जाती है: URLs proxy logs, analytics tools और browser history में कॉपी हो जाते हैं।

Authorization header (अनुशंसित)
Authorization: Bearer ng_live_xxxxxxxxxxxx

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

X-Api-Key header
X-Api-Key: ng_live_xxxxxxxxxxxx

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

अपनी key को कभी भी क्लाइंट-साइड कोड में expose न करें। ब्राउज़र या मोबाइल ऐप से कॉल आपके अपने backend के माध्यम से जाना चाहिए।

आप डैशबोर्ड से key को विशिष्ट IP पतों तक सीमित कर सकते हैं।

क्लाइंट लाइब्रेरी

REST API पर thin wrappers। ये आपकी key भेजते हैं, हर request बनाते हैं और error responses को exceptions में बदलते हैं।

JavaScript Source
npm install namegender

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

Command line Source
npm install -g namegender

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

composer require namegender/namegender

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

Python Source
pip install namegender-client

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

gem install namegender

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

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

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

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

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

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

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

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

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

PowerShell Source
Install-Module NameGender

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

cargo add namegender

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

आपको इसकी जरूरत नहीं है। API बस कुछ plain JSON endpoints है; एक library आपकी एक दोपहर बचाती है, पूरा project नहीं। यदि आपकी language listed नहीं है, तो REST reference में copy-paste examples हैं।

सभी देखें

AI सहायक (MCP)

Claude, Cursor और Model Context Protocol को support करने वाले किसी भी अन्य client से NameGender का उपयोग करें। सहायक से नामों की किसी सूची के बारे में पूछें और वह आपके लिए API call करेगा, हर उत्तर के साथ उसका प्रमाण भी दिखाएगा।

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

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

Claude Desktop, Cursor और अन्य clients
{
    "mcpServers": {
        "namegender": {
            "command": "npx",
            "args": [
                "-y",
                "namegender-mcp"
            ],
            "env": {
                "NAMEGENDER_API_KEY": "ng_live_..."
            }
        }
    }
}

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

इसे client की MCP configuration file में जोड़ें और client को restart करें।

टूल

gender_from_name
पहले नाम या पूरे नाम से लिंग।
gender_from_email
Email पते में मौजूद नाम पढ़ता है; info@ जैसे role addresses अज्ञात परिणाम लौटाते हैं।
gender_from_username
Username या handle में मौजूद नाम पढ़ता है।
gender_bulk
एक अनुरोध में 100 तक values, match-rate सारांश के साथ।
name_countries
वे देश जहाँ कोई नाम दर्ज है। यह उसके मूल के बारे में कोई दावा नहीं है।
salutation
पत्र की भाषा में पत्र की शुरुआती पंक्ति; लिंग निश्चित न होने पर तटस्थ रूप।
name_check
फ़ॉर्म में लिखा गया नाम असली लगता है या नहीं, कारणों के साथ। किसी नाम को कभी नकली नहीं कहता।
age_from_name
संयुक्त राज्य अमेरिका, फ़्रांस और नॉर्वे में किसी पहले नाम वाले लोगों की median उम्र और उम्र की सीमाएँ।
account_status
बचे हुए credits और आज का मुफ़्त allowance।

हर lookup उसी खाते के credits इस्तेमाल करता है जिसकी key है, ठीक वैसे ही जैसे सीधा API call करता है। आधिकारिक MCP registry में io.github.anpekesen/namegender नाम से सूचीबद्ध। npm package · Source

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

नाम से लिंग

पहले नाम या पूरे नाम को स्वीकार करता है। खिताब, middle name और surname को lookup से पहले हटा दिया जाता है, इसलिए "Dr. Ayşe Yılmaz" और "Ayşe" एक ही उत्तर देते हैं।

पैरामीटर प्रकार विवरण
name
आवश्यक
string वर्गीकृत करने के लिए नाम। पहला नाम या पूरा नाम।
country
वैकल्पिक
string ISO 3166-1 alpha-2 country code। उन नामों के लिए सटीकता में सुधार करता है जिनका लिंग क्षेत्र के अनुसार अलग-अलग होता है, जैसे Andrea (इटली में male, जर्मनी में female)।
locale
वैकल्पिक
string de-DE या en_US जैसा भाषा टैग, जैसे ब्राउज़र की भाषा। country न भेजने पर इसका क्षेत्र देश बन जाता है। बिना क्षेत्र वाला टैग (en, de) कोई देश तय नहीं करता।
ip
वैकल्पिक
string अंतिम उपयोगकर्ता का IP पता। जब न country भेजा जाए न क्षेत्र वाला locale, तो इसका देश इस्तेमाल होता है। संग्रहीत नहीं किया जाता। IP geolocation by DB-IP (db-ip.com).
ai_fallback
वैकल्पिक
boolean अगर हमारे डेटा में नाम की कोई entry नहीं है, तो null लौटाने के बजाय language model से अनुमान मांगा जाता है। यह तभी काम करता है जब आपकी settings में AI lookups चालू हों, और इसमें एक अतिरिक्त credit लगता है।
best_guess
वैकल्पिक
boolean प्रमुख लिंग लौटाएं, भले ही सबूत confidence threshold तक न पहुंचें। डिफ़ॉल्ट रूप से बंद: लगभग 50/50 वाला उत्तर जो निश्चित दिखे, 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

ईमेल से लिंग

पते के local part से व्यक्ति को निकालता है, फिर वर्गीकृत करता है। "ayse.yilmaz84@example.com" Ayşe को resolve करता है।

पैरामीटर प्रकार विवरण
email
आवश्यक
string ईमेल पता। केवल @ से पहले का भाग उपयोग किया जाता है।
country
वैकल्पिक
string ISO 3166-1 alpha-2 country code। उन नामों के लिए सटीकता में सुधार करता है जिनका लिंग क्षेत्र के अनुसार अलग-अलग होता है, जैसे Andrea (इटली में male, जर्मनी में female)।
locale
वैकल्पिक
string de-DE या en_US जैसा भाषा टैग, जैसे ब्राउज़र की भाषा। country न भेजने पर इसका क्षेत्र देश बन जाता है। बिना क्षेत्र वाला टैग (en, de) कोई देश तय नहीं करता।
ip
वैकल्पिक
string अंतिम उपयोगकर्ता का IP पता। जब न country भेजा जाए न क्षेत्र वाला locale, तो इसका देश इस्तेमाल होता है। संग्रहीत नहीं किया जाता। IP geolocation by DB-IP (db-ip.com).
ai_fallback
वैकल्पिक
boolean अगर हमारे डेटा में नाम की कोई entry नहीं है, तो null लौटाने के बजाय language model से अनुमान मांगा जाता है। यह तभी काम करता है जब आपकी settings में AI lookups चालू हों, और इसमें एक अतिरिक्त credit लगता है।
best_guess
वैकल्पिक
boolean प्रमुख लिंग लौटाएं, भले ही सबूत confidence threshold तक न पहुंचें। डिफ़ॉल्ट रूप से बंद: लगभग 50/50 वाला उत्तर जो निश्चित दिखे, null से ज़्यादा नुकसान करता है।

best_guess पते से पढ़े गए पहले नाम पर लागू होता है, खुद पते पर नहीं। जब कोई पहला नाम पढ़ा नहीं जा सकता, तो force करने के लिए कुछ नहीं होता और gender null ही रहता है। ध्यान रखें कि यहां force किया गया उत्तर एक ऐसे extraction पर टिका है जो खुद गलत हो सकता है।

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

यूजरनेम से लिंग

camelCase, snake_case, trailing digit और leading @ signs को संभालता है। "AyseYilmaz84" Ayşe को resolve करता है।

पैरामीटर प्रकार विवरण
username
आवश्यक
string यूजरनेम या handle। एक leading @ को ignore किया जाता है।
country
वैकल्पिक
string ISO 3166-1 alpha-2 country code। उन नामों के लिए सटीकता में सुधार करता है जिनका लिंग क्षेत्र के अनुसार अलग-अलग होता है, जैसे Andrea (इटली में male, जर्मनी में female)।
locale
वैकल्पिक
string de-DE या en_US जैसा भाषा टैग, जैसे ब्राउज़र की भाषा। country न भेजने पर इसका क्षेत्र देश बन जाता है। बिना क्षेत्र वाला टैग (en, de) कोई देश तय नहीं करता।
ip
वैकल्पिक
string अंतिम उपयोगकर्ता का IP पता। जब न country भेजा जाए न क्षेत्र वाला locale, तो इसका देश इस्तेमाल होता है। संग्रहीत नहीं किया जाता। IP geolocation by DB-IP (db-ip.com).
ai_fallback
वैकल्पिक
boolean अगर हमारे डेटा में नाम की कोई entry नहीं है, तो null लौटाने के बजाय language model से अनुमान मांगा जाता है। यह तभी काम करता है जब आपकी settings में AI lookups चालू हों, और इसमें एक अतिरिक्त credit लगता है।
best_guess
वैकल्पिक
boolean प्रमुख लिंग लौटाएं, भले ही सबूत confidence threshold तक न पहुंचें। डिफ़ॉल्ट रूप से बंद: लगभग 50/50 वाला उत्तर जो निश्चित दिखे, 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

बल्क अनुरोध

एक अनुरोध में 100 नाम तक भेजें। looping के बजाय इसका उपयोग करें: 100 नामों के लिए एक बल्क कॉल एक single round trip और एक single deduplicated lookup है।

पैरामीटर प्रकार विवरण
names
आवश्यक
string[] नामों की array। अधिकतम 100 items।
type
वैकल्पिक
string items क्या हैं: name, email या username। डिफ़ॉल्ट name है।
country
वैकल्पिक
string अनुरोध में प्रत्येक item पर लागू होता है।
locale
वैकल्पिक
string भाषा टैग जिसका क्षेत्र country न भेजने पर हर आइटम का देश बन जाता है।
ip
वैकल्पिक
string अंतिम उपयोगकर्ता का IP पता, जिसका देश हर आइटम के लिए इस्तेमाल होता है जब न country भेजा जाए न क्षेत्र वाला locale। संग्रहीत नहीं किया जाता। 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" }
  ]
}

परिणाम उसी क्रम में वापस आते हैं जिस क्रम में आपने उन्हें भेजा था। Credit प्रति नाम लिए जाते हैं, और यदि आपका balance कम है तो पूरा अनुरोध किसी भी काम से पहले अस्वीकार कर दिया जाता है, इसलिए आप कभी half-processed batch नहीं पाते हैं।

summary block आपको एक नज़र में match rate बताता है, इसलिए आप तय कर सकते हैं कि बाकी को process करने से पहले input को clean करने की आवश्यकता है या नहीं।

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

फ़ाइल जॉब

100 MB और 10,00,000 पंक्तियों तक की CSV या XLSX फ़ाइल अपलोड करें और हर पंक्ति में लिंग कॉलम जुड़ी हुई फ़ाइल वापस पाएँ। प्रति पंक्ति एक क्रेडिट, केवल जॉब पूरा होने पर लिया जाता है।

  1. 1. POST /batches फ़ाइल और name_column भेजें। जॉब तुरंत कतार में लग जाता है।
  2. 2. GET /batches/{id} जॉब को तब तक पढ़ें जब तक status completed या failed न हो जाए। poll_after_seconds बताता है कि दो बार पढ़ने के बीच कितना रुकना है।
  3. 3. GET /batches/{id}/result परिणाम डाउनलोड करें। यह उसी फ़ॉर्मेट में लौटता है जिसमें आपने अपलोड किया था।
पैरामीटर प्रकार विवरण
file
आवश्यक
file हेडर पंक्ति वाली CSV, TSV या XLSX।
name_column
आवश्यक
string नामों वाले कॉलम का हेडर, ठीक वैसा ही जैसा फ़ाइल में है। start=false न होने पर ज़रूरी।
country_column
वैकल्पिक
string हर पंक्ति के देश कोड वाले कॉलम का हेडर।
country
वैकल्पिक
string बिना देश वाली पंक्तियों के लिए डिफ़ॉल्ट देश।
ai_fallback
वैकल्पिक
boolean डेटासेट में न मिलने वाले नामों के लिए AI मॉडल से पूछें। सेटिंग्स में AI सहमति ज़रूरी है।
best_guess
वैकल्पिक
boolean साक्ष्य कमज़ोर होने पर भी अधिक संभावित लिंग लौटाएँ।
delete_after_download
वैकल्पिक
boolean परिणाम एक बार डाउनलोड किया जा सकता है, फिर हटा दिया जाता है।
start
वैकल्पिक
boolean false: केवल अपलोड और जाँच करें। डिफ़ॉल्ट 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 ज़रूरी है: अनुमान से चुना गया कॉलम गलत निकला तो क्रेडिट गलत डेटा पर खर्च होंगे। पहले कॉलम, पूर्वावलोकन और लागत देखने के लिए start=false भेजें, फिर जॉब शुरू करें।

Idempotency-Key हेडर भेजें। उसी कुंजी से दोबारा प्रयास करने पर दूसरा जॉब खुलने के बजाय पहला जॉब लौटता है।

एक समय में अधिकतम 3 जॉब कतार में या चल रहे हो सकते हैं। जो जॉब शुरू नहीं हुआ है उसे रद्द किया जा सकता है और उसका क्रेडिट लौटा दिया जाता है; प्रोसेस हो रहे जॉब को रोका नहीं जा सकता।

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

वेबहुक

अपने डैशबोर्ड में वेबहुक के अंतर्गत एक एंडपॉइंट जोड़ें; फ़ाइल जॉब पूरा या विफल होने पर हम उसे एक हस्ताक्षरित POST भेजेंगे, ताकि आपको बार-बार स्थिति न पूछनी पड़े।

इवेंट प्रकार विवरण
batch.completed BatchJob जॉब पूरा हुआ। बॉडी में जॉब ठीक वैसे ही है जैसे GET /batches/{id} उसे लौटाता है।
batch.failed BatchJob जॉब विफल हुआ और कोई शुल्क नहीं लिया गया। error.code के आधार पर निर्णय लें।
credits.low CreditsAlert मौजूदा दर से क्रेडिट 7 दिन या उससे कम चलेंगे। हर घंटे जाँचा जाता है; सदस्यता नवीनीकरण को गिना जाता है।
credits.depleted CreditsAlert बैलेंस ख़ाली है और अनुरोध 402 के साथ अस्वीकार हो रहे हैं। हर घंटे जाँचा जाता है।
webhook.test object केवल डैशबोर्ड के "टेस्ट इवेंट भेजें" से और केवल उसी एंडपॉइंट पर भेजा जाता है।
हेडर प्रकार विवरण
NameGender-Signature
आवश्यक
string t=<यूनिक्स सेकंड>,v1=<hex>। सीक्रेट बदलने के बाद 24 घंटे तक एक दूसरा v1 भी रहता है।
NameGender-Event-Id
आवश्यक
string इवेंट ID। एक ही इवेंट के हर दोबारा प्रयास में यही रहती है।
NameGender-Delivery-Attempt
आवश्यक
integer पहले प्रयास में 1, अधिकतम 8।

हर अनुरोध को सत्यापित करें

v1 आपके एंडपॉइंट सीक्रेट से टाइमस्टैम्प, एक बिंदु और कच्ची बॉडी का HMAC-SHA256 है। स्थिर समय में तुलना करें, कोई भी v1 मेल खाए तो अनुरोध स्वीकार करें, और आपकी घड़ी से पाँच मिनट से अधिक अंतर वाले टाइमस्टैम्प को अस्वीकार करें। क्लाइंट लाइब्रेरी यह सब एक कॉल में करती हैं।

बॉडी को ठीक वैसे ही सत्यापित करें जैसे वह आई। जो फ़्रेमवर्क JSON को पार्स करके फिर से सीरियलाइज़ करता है, वह बाइट बदल देता है और हस्ताक्षर मेल नहीं खाता।
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" }
    }
  }
}
  • 10 सेकंड के भीतर किसी भी 2xx से जवाब दें, फिर काम करें।
  • रीडायरेक्ट सहित कोई भी दूसरा जवाब लगभग 45 घंटों में अधिकतम 7 बार दोबारा आज़माया जाता है। अगर कोई एंडपॉइंट तीन दिन तक विफल रहता है, तो उसे बंद कर दिया जाता है और आपको ईमेल भेजा जाता है।
  • दोबारा प्रयास में वही ID होती है और क्रम की गारंटी नहीं है। NameGender-Event-Id से डुप्लिकेट हटाएँ, और जॉब की वर्तमान स्थिति चाहिए तो उसे GET से पढ़ें।
  • डैशबोर्ड में सीक्रेट बदलने पर पुराना 24 घंटे तक हस्ताक्षर करता रहता है, ताकि आप बिना कोई इवेंट खोए अपना सर्वर अपडेट कर सकें।
  • नए इवेंट प्रकार जोड़े जा सकते हैं। जिस प्रकार को आप संभालते नहीं, उसे 2xx से जवाब दें और अनदेखा करें।
GET POST https://namegender.com/api/v1/gender/countries
Markdown

देश वितरण

वे देश लौटाता है जहां एक नाम दर्ज है। दो सूचियां वापस आती हैं और वे जानबूझकर मर्ज नहीं की जाती हैं: `registrations` मापा गया आयतन है, केवल उन ग्यारह देशों के बीच तुलनीय जो गिने हुए नाम आंकड़े प्रकाशित करते हैं, और `attested_in` उपस्थिति है, बिना किसी भार के।

यह देश-की-उत्पत्ति या जातीयता अनुमान नहीं है, और इसका उपयोग इस प्रकार नहीं किया जाना चाहिए। गिने हुए आंकड़े केवल ग्यारह देशों के लिए मौजूद हैं: US, UK, France, Canada, Spain, Ireland, Norway, Austria, Israel, Poland और Switzerland। इसलिए "Mehmet" के लिए एक query Switzerland और France को लगभग 29% प्रत्येक के साथ पहले स्थान पर रखती है, और Turkey ranking में बिल्कुल भी दिखाई नहीं देता — Turkey कोई counts प्रकाशित नहीं करता। Turkey `attested_in` में दिखाई देता है।
पैरामीटर प्रकार विवरण
name
आवश्यक
string खोज के लिए नाम।
limit
वैकल्पिक
integer `registrations` में कितने गिने हुए देश सूचीबद्ध करने हैं। 1–100, डिफ़ॉल्ट 25। छोटी सूची के लिए shares दोबारा calculate नहीं किए जाते।
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"]
}

प्रति request एक क्रेडिट। `share` गिनती वाले सभी देशों के आधार पर calculate होता है, इसलिए यह 100 तक तभी जुड़ता है जब `limit` सूची को नहीं काटता; `counted_countries` भी कटौती से पहले की गिनती है। `attested_in` में कोई प्रतिशत नहीं है क्योंकि उन records के पीछे कोई count नहीं है।

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

संबोधन

किसी नाम को पत्र या ईमेल के लिए तैयार संबोधन में बदलता है, दस भाषाओं में: “Sehr geehrte Frau Dr. Müller,”, “Sayın Ahmet Bey,”, “Madame,”, “山田様”। लिंग lookup शामिल है और उसी एक क्रेडिट में होता है। हर response में एक औपचारिक, एक अनौपचारिक और एक तटस्थ पंक्ति होती है, साथ में औपचारिक पंक्ति के हिस्से।

पैरामीटर प्रकार विवरण
name
आवश्यक
string पूरा नाम, उपाधियों सहित (“Dr. Anna Müller”)। यह भेजें या `first_name` और `last_name`।
first_name, last_name
वैकल्पिक
string जब आपका CRM नाम अलग-अलग fields में रखता है तो `name` की जगह इनका उपयोग करें। कुछ भी parse नहीं किया जाता।
email
वैकल्पिक
string ईमेल पता, जब कोई नाम नहीं भेजा जाता। नाम @ से पहले वाले हिस्से से बिना accents के पढ़ा जाता है (Müller नहीं, Mueller); info@ जैसे role addresses को संगठन वाला संबोधन मिलता है।
language
वैकल्पिक
string संबोधन की भाषा: en, en-US, en-GB, de, de-AT, de-CH, fr, es, it, pt, pt-PT, pt-BR, nl, tr, pl, ja। इसके बिना: `locale` की भाषा, फिर देश की मुख्य भाषा, फिर अंग्रेज़ी। असमर्थित भाषा एक error है, कभी भी चुपचाप अंग्रेज़ी पर स्विच नहीं।
country, locale, ip
वैकल्पिक
string लिंग lookup के लिए देश संकेत, जैसे लिंग endpoints पर। यह भाषा तभी चुनता है जब `language` नहीं भेजा गया हो।
gender
वैकल्पिक
string `male`, `female` या `neutral`, जब आप पहले से जानते हों। यह lookup को override करता है; `neutral` हमेशा तटस्थ रूप देता है।
min_probability
वैकल्पिक
integer लिंग-आधारित संबोधन के लिए न्यूनतम probability, 50–100। डिफ़ॉल्ट 90।
title
वैकल्पिक
string अलग field में रखी गई शैक्षणिक उपाधि, जैसे `Dr.` जर्मन और अंग्रेज़ी संबोधनों में उपयोग होती है।
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"
}

गलत लिंग, कोई लिंग न होने से बुरा है, इसलिए लिंग-आधारित रूप तभी उपयोग होता है जब लिंग कम से कम `min_probability` के साथ ज्ञात हो और भाषा के पास नाम का वह हिस्सा हो जिसकी उसे ज़रूरत है। अन्यथा `form` का मान `neutral` होता है और `reason` कारण बताता है। कंपनियों और role addresses को `form: organization` मिलता है। `best_guess` और `ai_fallback` यहां लागू नहीं होते।

POST /api/v1/salutation/bulk `names` में अधिकतम 100 नाम लेता है, हर नाम के लिए एक क्रेडिट, हर नाम पर वही विकल्प लागू होते हैं।

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

नाम जाँच

बताता है कि sign-up या lead form में लिखा गया नाम किसी असली व्यक्ति के नाम जैसा दिखता है या नहीं, और क्यों। यह कीबोर्ड पर बेतरतीब टाइपिंग (“asdf qwerty”), placeholder (“Test Test”, “John Doe”, “n/a”), काल्पनिक पात्र (“Mickey Mouse”), अपशब्द, और नाम field में अंक, चिह्न या ईमेल पते पकड़ता है। हर नाम के लिए एक क्रेडिट।

यह पहचान सत्यापन नहीं है और यह किसी नाम को कभी नकली नहीं कहता। `implausible` और `suspicious` का उपयोग किसी record को चिह्नित करने या अधिक जानकारी माँगने के लिए करें, लोगों को अपने-आप अस्वीकार करने के लिए नहीं।
पैरामीटर प्रकार विवरण
name
आवश्यक
string नाम, जैसा form में लिखा गया। यह भेजें या `first_name` और `last_name`।
first_name, last_name
वैकल्पिक
string जब आपके form में अलग-अलग fields हों तो `name` की जगह इनका उपयोग करें।
country, locale, ip
वैकल्पिक
string देश संकेत, जैसे लिंग endpoints पर। नाम को parse करने और records में खोजने में मदद करता है।
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 }
}

उच्च गंभीरता वाला signal होने पर (कीबोर्ड pattern, दोहराए गए अक्षर, placeholder, अपशब्द, ईमेल या URL) `assessment` का मान `implausible` होता है, एक मध्यम signal (काल्पनिक पात्र, अंक, चिह्न, कंपनी का नाम, कोई स्वर नहीं, बहुत लंबा) या दो निम्न signals होने पर `suspicious`, और बाकी स्थितियों में `plausible`। `score` 0 से 100 तक होता है, ताकि आप अपनी सीमा तय कर सकें। आधिकारिक जन्म records में मिला पहला नाम इसे बढ़ाता है; जो नाम हमने कभी नहीं देखा, वह अकेले इसे कम नहीं करता। उपनामों को केवल उनके आकार से परखा जाता है: इस endpoint के पीछे उपनामों का कोई dataset नहीं है।

नौ लिपियों में 4,610 असली पहले नामों पर परखा गया, अकेले और उपनाम के साथ: किसी को भी संदिग्ध या असंभावित नहीं माना गया। Null, Test या Cockburn जैसे उपनाम, Ng जैसे दो अक्षरों वाले नाम और एकल नाम जानबूझकर छोड़ दिए जाते हैं।

POST /api/v1/name-check/bulk `names` में अधिकतम 100 नाम लेता है, हर नाम के लिए एक क्रेडिट, तीनों आकलनों के सारांश के साथ।

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

नाम से उम्र

किसी पहले नाम वाले जीवित लोगों की उम्र कितनी है: median उम्र, बीच के आधे लोग (`age_range`) और बीच के 80% (`age_range_80`)। संयुक्त राज्य अमेरिका में Brittany: median 36, आधे 32 से 38 के बीच। हर नाम के लिए एक क्रेडिट।

यह एक समूह का वर्णन है, किसी व्यक्ति का नहीं। ज़्यादातर नामों में बीच का आधा हिस्सा 10 से 25 साल तक फैला होता है। इसका उपयोग audience analysis, segments और research के लिए करें, किसी एक व्यक्ति के बारे में कोई भी फ़ैसला लेने के लिए कभी नहीं: ऋण, भर्ती, आवास, बीमा, पात्रता या उम्र की जाँच।
पैरामीटर प्रकार विवरण
name
आवश्यक
string पहला नाम या पूरा नाम; पहले नाम का उपयोग होता है।
gender
वैकल्पिक
string केवल उस लिंग के records इस्तेमाल करने के लिए `male` या `female`। Leslie नाम के पुरुष Leslie नाम की महिलाओं से 16 साल बड़े हैं।
country, locale, ip
वैकल्पिक
string देश संकेत, जैसे लिंग endpoints पर। शामिल: US, FR और NO। संकेत न होने पर संयुक्त राज्य अमेरिका की series का उपयोग होता है और `country_source` का मान `default` होता है। कोई दूसरा देश `reason: country_not_covered` लौटाता है और उसका कोई शुल्क नहीं लगता।
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
}

तरीका: नाम, लिंग और वर्ष के अनुसार दर्ज जन्म, जिसमें हर वर्ष को उस वर्ष जन्मे लोगों के अभी जीवित हिस्से से भारित किया जाता है (SSA की cohort life tables)। स्रोत: SSA जन्म 1880–2024 (US), INSEE 1900–2025 (फ़्रांस), SSB 1945–2025 (नॉर्वे)। series में न मिलने वाले नाम के लिए `reason` का मान `not_found` होता है और 100 से कम जीवित लोगों पर `insufficient_data`।

विदेश में हुए जन्म किसी series में नहीं हैं, इसलिए प्रवासियों में आम नाम असल से कम उम्र के दिखते हैं। नॉर्वे की series 1945 से शुरू होती है, इसलिए उससे पहले जन्मे लोग छूट जाते हैं। फ़्रांस और नॉर्वे के लिए भी संयुक्त राज्य अमेरिका की life table का उपयोग होता है।

POST /api/v1/age/bulk `names` में अधिकतम 100 नाम लेता है, हर नाम के लिए एक क्रेडिट, भेजे गए क्रम में।

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

बैलेंस

अपना credit balance और आज के मुफ़्त allowance में से बचा हिस्सा देखें। इस call का कोई शुल्क नहीं लगता।

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
}

गैर-लैटिन लिपियाँ

नाम को अपनी लिपि में भेजें और हम इसे संदर्भ डेटा से जोड़ते हैं। कोई अतिरिक्त पैरामीटर नहीं: हम लिपि का पता लगाते हैं और इसके लिए सही रणनीति चुनते हैं।

समर्थित
अरबी लिपि

अरबी लेखन छोटी मात्राओं को छोड़ता है, इसलिए محمد को "mhmd" में लिप्यंतरित किया जाता है जबकि हमारे डेटा में "muhammed" है। हम व्यंजन पैटर्न पर मेल खाते हैं और स्त्रीलिंग ة चिन्ह को बनाए रखते हैं ताकि خالد (Khalid) और خالدة (Khalida) अलग रहें। फारसी और उर्दू नाम भी कवर करता है जो अरबी लिपि में लिखे हों।

चीनी अक्षर

Pinyin में रूपांतरित। चीनी में पहला नाम उपनाम है, इसलिए 李明 का उपनाम 李 (Li) है और दिया गया नाम 明 (Ming) है — हम खोज से पहले उपनाम हटाते हैं। एक एकल अक्षर एक पूर्ण दिया गया नाम है और एक के रूप में संभाला जाता है।

कोरियाई

चीनी जैसा ही उपनाम-पहले हैंडलिंग, सामान्य कोरियाई उपनामों का उपयोग करते हुए।

जापानी कना

हिरागाना और कातकाना सही तरीके से पढ़े जाते हैं (ひろし → Hiroshi)।

Cyrillic

रूसी, यूक्रेनी, बल्गेरियाई और सर्बियाई नाम सीधे लिप्यंतरित होते हैं।

देवनागरी

हिंदी, मराठी और नेपाली नाम। अंतर्निहित अनुगामी मात्रा को संभाला जाता है (राहुल → Rahul, "Rahula" नहीं)।

समर्थित नहीं
जापानी कांजी

जापानी कंजी और चीनी अक्षर एक ही Unicode range में आते हैं, इसलिए हम केवल अक्षरों से उन्हें अलग नहीं कर सकते। Han input को चीनी के रूप में पढ़ा जाता है: एक कंजी नाम जो हमारे पास शब्दशः नहीं है, उसे Mandarin उच्चारण मिलता है, जो जापानी नाम के लिए आमतौर पर गलत होता है (健太 को "jian tai" के रूप में पढ़ा जाता है जबकि नाम Kenta है)। जो नाम हमारे पास हैं वे बिल्कुल मेल खाते हैं और सही हैं। निश्चित होने के लिए जापानी नाम kana या Latin में भेजें।

थाई

थाई अरबी की तरह मात्राओं को छोड़ता है और इसके लिए अपनी मिलान परत की आवश्यकता है। अभी तक बनाई नहीं गई है, इसलिए ये 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" }

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

जब हम किसी script को बिल्कुल भी bridge नहीं कर सकते, तो response में gender: null और source: none होता है। source field को देखें: script का अर्थ है हमने transliterate किया, db का अर्थ है हमने आपके द्वारा भेजे गए अक्षरों को सीधे match किया। दोनों में अलग-अलग confidence है, और हम आपको दिखाते हैं कि आपको कौन सा मिला।

Response फ़ील्ड

सभी endpoints पर समान।

फ़ील्ड प्रकार विवरण
credits_charged integer इस call के लिए कितने credits काटे गए।
credits_remaining integer इस call का भुगतान होने के बाद आपका खर्च करने योग्य balance: खरीदे गए credits और आज के मुफ़्त allowance में से बचा हिस्सा।
query string आपका input ठीक वैसा ही, जैसा आपने भेजा था, किसी भी cleaning से पहले।
name string वह नाम जिसे हमने वास्तव में खोजा, titles और surnames हटाने के बाद।
first_name string इनपुट से निकाला गया पहला नाम। gender null होने पर भी लौटाया जाता है, बिना अतिरिक्त शुल्क के।
middle_name string पहले नाम और उपनाम के बीच के अन्य नाम। आद्याक्षर हटा दिए जाते हैं।
last_name string उपनाम, van या de la जैसे उपसर्गों सहित। यूज़रनेम के लिए हमेशा null।
name_type string personal, organization (Acme Pvt Ltd) या role (info@, ग्राहक सेवा)। संगठनों और भूमिका खातों को जेंडर नहीं मिलता।
gender string male, female, या null जब हम आत्मविश्वास से कहने के लिए पर्याप्त निश्चित न हों।
country string वह देश जहाँ से आँकड़े आए, या null global aggregate के लिए।
country_source string देश कहाँ से आया: country, locale, ip, या null जब उत्तर दुनिया भर का हो।
sample_size integer इस उत्तर के पीछे दर्ज लोगों की संख्या। 0 का मतलब है कि स्रोत अनुपात या उल्लेख प्रकाशित करता है, ऐसी गिनती नहीं जिसे हम audit कर सकें।
probability integer बताए गए लिंग में आत्मविश्वास, 50 से 100। 0 जब gender null हो।
took_ms integer lookup को हल करने में हमें लगा समय, पूरे milliseconds में। आपकी ओर का network समय शामिल नहीं है।

दो फ़ील्ड जो अन्य सेवाएं नहीं देती हैं

source बताता है कि उत्तर कहाँ से आया: reference database, fuzzy match, या AI fallback। matched_as उस entry का नाम देता है जिस पर fuzzy match पड़ा। साथ में ये आपको यह तय करने देते हैं कि एक परिणाम पर कितना भरोसा करें।

फ़ील्ड प्रकार विवरण
source string db, script, fuzzy, llm, या none।
confidence string उच्च, मध्यम, निम्न, अपरिवर्तित, या अज्ञात — नमूना सबूत के आधार पर।
matched_as string Fuzzy match के लिए, वह database entry जो match हुई। अन्यथा null।

Error codes

HTTP status code बताता है कि call विफल हुई। फिर JSON body error में कारण बताती है, message में उसे समझाती है, और आपको support को बताने के लिए एक request_id के साथ नीचे मिलती-जुलती row का docs link देती है। error पर branch करें, message पर कभी नहीं: messages translated होते हैं और उनके शब्द बदल सकते हैं।

कोड HTTP अर्थ
missing_key 401 कोई API key नहीं भेजी गई। अनुरोध में Authorization: Bearer header या X-Api-Key header जोड़ें।
invalid_key 401 यह API key वैध नहीं है।
revoked_key 401 इस API key को रद्द कर दिया गया है।
blocked 403 यह खाता निलंबित कर दिया गया है। सहायता से संपर्क करें।
email_not_verified 403 इस खाते के ईमेल पते की अभी पुष्टि नहीं हुई है। हमने जो पुष्टिकरण लिंक भेजा है उसे खोलें, या डैशबोर्ड से नया लिंक माँगें।
ip_not_allowed 403 इस IP पते से इस key के लिए अनुरोध की अनुमति नहीं है।
proxy_secret_required 403 यह कुंजी केवल अपने API marketplace के माध्यम से काम करती है, जो हर अनुरोध पर हस्ताक्षर करता है। वहाँ आपको जारी की गई कुंजी का उपयोग करें।
forbidden 403 आपको यह कार्य करने की अनुमति नहीं है।
no_credits 402 आपके पास क्रेडिट समाप्त हो गए हैं। और खरीदें या अपनी दैनिक निःशुल्क कोटा रीसेट होने का इंतज़ार करें।
missing_input 400 "name" पैरामीटर आवश्यक है।
invalid_input 422 "name" पैरामीटर वैध नहीं है।
too_many_items 422 एक अनुरोध में अधिकतम 100 आइटम भेजे जा सकते हैं।
unknown_endpoint 404 इस पथ पर कोई endpoint नहीं है। API दस्तावेज़ के विरुद्ध URL की जाँच करें।
method_not_allowed 405 यह endpoint DELETE अनुरोधों को स्वीकार नहीं करता है।
payload_too_large 413 वह अनुरोध निकाय बहुत बड़ा है।
rate_limited 429 बहुत सारे अनुरोध। धीमा करें और जल्द ही फिर से कोशिश करें।
batch_not_found 404 इस खाते में इस ID वाला कोई फ़ाइल जॉब नहीं है।
batch_not_startable 409 यह जॉब पहले ही शुरू या बंद हो चुका है।
batch_not_finished 409 यह जॉब अभी पूरा नहीं हुआ है। इसकी स्थिति जाँचें और पूरा होने पर परिणाम डाउनलोड करें।
batch_in_progress 409 यह जॉब प्रोसेस हो रहा है और अभी रद्द नहीं किया जा सकता। पूरा होने के बाद इसे हटाएँ।
result_gone 410 इस जॉब का डाउनलोड करने के लिए कोई परिणाम नहीं है। यह विफल हुआ, रद्द हुआ, समाप्त हो गया, या इसका एक-बार वाला परिणाम पहले ही डाउनलोड हो चुका है।
too_many_batches 429 आपके 100 फ़ाइल जॉब पहले से चल रहे हैं। नया शुरू करने से पहले किसी एक के पूरा होने की प्रतीक्षा करें।
not_ready 503 नाम डेटाबेस फिर से बनाया जा रहा है। एक पल में फिर से कोशिश करें।
server_error 500 हमारी ओर से कुछ गलत हुआ। हमें सूचित कर दिया गया है।
{
  "error": "no_credits",
  "message": "You are out of credits. Buy more or wait for your daily free quota to reset.",
  "request_id": "req_9c1f5b2a7e0d4a13",
  "docs": "https://namegender.com/docs#error-no_credits"
}

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।

Rate limits

सामान्य उपयोग से limit नहीं लगती। यह cap एक leaked key के दुरुपयोग को रोकने के लिए है, और यह API key के अनुसार count होता है न कि IP के अनुसार, इसलिए एक सर्वर पर कई ग्राहक एक दूसरे का allowance नहीं खा सकते।

वर्तमान limit: प्रति मिनट 1,200 requests प्रति key। अधिक चाहिए? बताएं और हम इसे आपके खाते पर बढ़ा देंगे।

हर response में standard X-RateLimit-Limit और X-RateLimit-Remaining headers होते हैं।

GET अनुरोधों में स्पेस और गैर-लैटिन अक्षर

Ayşe Yılmaz या 中村 जैसा नाम URL में वैसे का वैसा नहीं भेजा जा सकता। GET से call करते समय मान को percent-encode करें, या POST के साथ JSON बॉडी में भेजें, जिससे एनकोडिंग की ज़रूरत ही न पड़े।

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

कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।