REST API संदर्भ
कुछ endpoint, एक प्रतिक्रिया रूप। नीचे सब कुछ आपके खाते के विरुद्ध लाइव है।
https://namegender.com/api/v1/gender
मुफ्त साइन अप करें
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: Bearer ng_live_xxxxxxxxxxxx
कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।
X-Api-Key: ng_live_xxxxxxxxxxxx
कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।
आप डैशबोर्ड से key को विशिष्ट IP पतों तक सीमित कर सकते हैं।
क्लाइंट लाइब्रेरी
REST API पर thin wrappers। ये आपकी key भेजते हैं, हर request बनाते हैं और error responses को exceptions में बदलते हैं।
npm install namegender
कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।
npm install -g namegender
कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।
composer require namegender/namegender
कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।
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>
कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।
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')
कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।
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 mcp add namegender -e NAMEGENDER_API_KEY=ng_live_... -- npx -y namegender-mcp
कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।
{
"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
नाम से लिंग
पहले नाम या पूरे नाम को स्वीकार करता है। खिताब, 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
}
ईमेल से लिंग
पते के 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"
}
यूजरनेम से लिंग
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"
}
बल्क अनुरोध
एक अनुरोध में 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 करने की आवश्यकता है या नहीं।
फ़ाइल जॉब
100 MB और 10,00,000 पंक्तियों तक की CSV या XLSX फ़ाइल अपलोड करें और हर पंक्ति में लिंग कॉलम जुड़ी हुई फ़ाइल वापस पाएँ। प्रति पंक्ति एक क्रेडिट, केवल जॉब पूरा होने पर लिया जाता है।
-
1.
POST /batchesफ़ाइल और name_column भेजें। जॉब तुरंत कतार में लग जाता है। -
2.
GET /batches/{id}जॉब को तब तक पढ़ें जब तक status completed या failed न हो जाए। poll_after_seconds बताता है कि दो बार पढ़ने के बीच कितना रुकना है। -
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 भेजेंगे, ताकि आपको बार-बार स्थिति न पूछनी पड़े।
| इवेंट | प्रकार | विवरण |
|---|---|---|
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 मेल खाए तो अनुरोध स्वीकार करें, और आपकी घड़ी से पाँच मिनट से अधिक अंतर वाले टाइमस्टैम्प को अस्वीकार करें। क्लाइंट लाइब्रेरी यह सब एक कॉल में करती हैं।
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 से जवाब दें और अनदेखा करें।
देश वितरण
वे देश लौटाता है जहां एक नाम दर्ज है। दो सूचियां वापस आती हैं और वे जानबूझकर मर्ज नहीं की जाती हैं: `registrations` मापा गया आयतन है, केवल उन ग्यारह देशों के बीच तुलनीय जो गिने हुए नाम आंकड़े प्रकाशित करते हैं, और `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 नहीं है।
संबोधन
किसी नाम को पत्र या ईमेल के लिए तैयार संबोधन में बदलता है, दस भाषाओं में: “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 नाम लेता है, हर नाम के लिए एक क्रेडिट, हर नाम पर वही विकल्प लागू होते हैं।
नाम जाँच
बताता है कि sign-up या lead form में लिखा गया नाम किसी असली व्यक्ति के नाम जैसा दिखता है या नहीं, और क्यों। यह कीबोर्ड पर बेतरतीब टाइपिंग (“asdf qwerty”), placeholder (“Test Test”, “John Doe”, “n/a”), काल्पनिक पात्र (“Mickey Mouse”), अपशब्द, और नाम field में अंक, चिह्न या ईमेल पते पकड़ता है। हर नाम के लिए एक क्रेडिट।
| पैरामीटर | प्रकार | विवरण |
|---|---|---|
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 नाम लेता है, हर नाम के लिए एक क्रेडिट, तीनों आकलनों के सारांश के साथ।
नाम से उम्र
किसी पहले नाम वाले जीवित लोगों की उम्र कितनी है: median उम्र, बीच के आधे लोग (`age_range`) और बीच के 80% (`age_range_80`)। संयुक्त राज्य अमेरिका में Brittany: median 36, आधे 32 से 38 के बीच। हर नाम के लिए एक क्रेडिट।
| पैरामीटर | प्रकार | विवरण |
|---|---|---|
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 नाम लेता है, हर नाम के लिए एक क्रेडिट, भेजे गए क्रम में।
बैलेंस
अपना 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)।
रूसी, यूक्रेनी, बल्गेरियाई और सर्बियाई नाम सीधे लिप्यंतरित होते हैं।
हिंदी, मराठी और नेपाली नाम। अंतर्निहित अनुगामी मात्रा को संभाला जाता है (राहुल → 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 आइटम भेजे जा सकते हैं। |
ai_consent_required |
422 | ai_fallback नाम को एक तृतीय-पक्ष AI प्रदाता को भेजता है, जिसके लिए इस खाते ने सहमति नहीं दी है। प्रदाता जानने के लिए "ai" फ़ील्ड देखें, फिर अपनी डैशबोर्ड सेटिंग्स में AI lookups को सक्षम करें। |
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
कॉपी नहीं हुआ। टेक्स्ट चुनकर कॉपी करें।