مرجع REST API
بضع نقاط نهاية، شكل استجابة واحد. كل ما يلي مباشر على حسابك.
https://namegender.com/api/v1/gender
إنشاء حساب مجاني
نص Markdown لمساعدي البرمجة مثل Claude Code وCursor وCopilot. الصقه في المحادثة أو أعطِ المساعد الرابط.
البدء السريع
أنشئ مفتاحًا في لوحة التحكم، ثم أرسل طلبك الأول. لا تحتاج إلى 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
تعيد كل نقطة نهاية نفس الشكل، لذا يمكنك تبديل المدخلات دون تغيير كود التحليل الخاص بك.
المصادقة
يحمل كل طلب مفتاح API الخاص بك في رأس. استخدم Authorization: Bearer افتراضياً، أو X-Api-Key عندما يحجز عميل HTTP لديك رأس Authorization لغرض آخر. يُرفض المفتاح الموضوع في عنوان URL: فعناوين URL تُنسخ إلى سجلات الوكيل وأدوات التحليلات وسجل المتصفح.
Authorization: Bearer ng_live_xxxxxxxxxxxx
تعذر النسخ. حدد النص وانسخه.
X-Api-Key: ng_live_xxxxxxxxxxxx
تعذر النسخ. حدد النص وانسخه.
يمكنك تقييد مفتاح إلى عناوين IP محددة من لوحة التحكم.
مكتبات العميل
تغليفات رقيقة فوق REST API. ترسل مفتاحك، وتبني كل طلب، وتحوّل استجابات الأخطاء إلى استثناءات.
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 مجرد عدد قليل من endpoints بصيغة JSON عادي؛ المكتبة توفر عليك فترة بعد الظهر، لا مشروعًا. إذا لم تكن لغتك مدرجة، فمرجع REST يحتوي على أمثلة جاهزة للنسخ واللصق.
عرض الكلمساعدو الذكاء الاصطناعي (MCP)
استخدم NameGender من Claude وCursor وأي عميل آخر يدعم Model Context Protocol. اسأل المساعد عن قائمة من الأسماء وسيستدعي API نيابةً عنك، مع الأدلة بجانب كل إجابة.
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_..."
}
}
}
}
تعذر النسخ. حدد النص وانسخه.
أضف هذا إلى ملف إعدادات MCP الخاص بالعميل ثم أعد تشغيله.
الأدوات
gender_from_name- الجنس من الاسم الأول أو الاسم الكامل.
gender_from_email- يقرأ الاسم الموجود في عنوان البريد الإلكتروني؛ العناوين الوظيفية مثل info@ تُرجع نتيجة غير معروفة.
gender_from_username- يقرأ الاسم الموجود في اسم المستخدم أو المعرّف.
gender_bulk- حتى 100 قيمة في طلب واحد، مع ملخص لنسبة المطابقة.
name_countries- الدول التي سُجّل فيها الاسم. وهذا ليس ادعاءً بشأن أصله.
salutation- سطر افتتاح الرسالة بلغة الرسالة، مع الصيغة المحايدة عندما لا يكون الجنس مؤكداً.
name_check- هل يبدو الاسم المكتوب في نموذج اسماً حقيقياً، مع الأسباب. لا يصف أي اسم بأنه مزيّف أبداً.
age_from_name- العمر الوسيط والفئات العمرية للأشخاص الذين يحملون اسماً أول في الولايات المتحدة وفرنسا والنرويج.
account_status- الأرصدة المتبقية والحصة المجانية لهذا اليوم.
كل استعلام يستهلك أرصدة من الحساب الذي يملك المفتاح، تمامًا كما يفعل استدعاء API المباشر. مُدرج في سجل MCP الرسمي باسم io.github.anpekesen/namegender. حزمة npm · المصدر
الجنس من الاسم
يقبل الاسم الأول أو الاسم الكامل. يتم حذف الألقاب والأسماء الوسطى والألقاب قبل البحث، لذا فإن "Dr. Ayşe Yılmaz" و"Ayşe" يعطيان نفس الإجابة.
| المعامل | النوع | الوصف |
|---|---|---|
name
مطلوب
|
string
|
الاسم المراد تصنيفه. الاسم الأول أو الاسم الكامل. |
country
اختياري
|
string
|
رمز ISO 3166-1 alpha-2 للدولة. يحسّن الدقة للأسماء التي يختلف جنسها حسب المنطقة، مثل Andrea (ذكر في إيطاليا، أنثى في ألمانيا). |
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
|
إذا لم يكن للاسم إدخال في بياناتنا، نطلب تقديراً من نموذج لغوي بدلاً من إرجاع null. لا يعمل إلا بعد تفعيل عمليات البحث بالذكاء الاصطناعي في إعداداتك، ويكلّف رصيداً إضافياً واحداً. |
best_guess
اختياري
|
boolean
|
أرجِع الجنس المرجّح حتى عندما لا تبلغ الأدلة حد الثقة. معطّل افتراضياً: فالإجابة القريبة من 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
}
الجنس من البريد الإلكتروني
يستخرج الشخص من الجزء المحلي من العنوان، ثم يصنف ذلك. "ayse.yilmaz84@example.com" يُحل إلى Ayşe.
| المعامل | النوع | الوصف |
|---|---|---|
email
مطلوب
|
string
|
عنوان البريد الإلكتروني. يتم استخدام الجزء قبل @ فقط. |
country
اختياري
|
string
|
رمز ISO 3166-1 alpha-2 للدولة. يحسّن الدقة للأسماء التي يختلف جنسها حسب المنطقة، مثل Andrea (ذكر في إيطاليا، أنثى في ألمانيا). |
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
|
إذا لم يكن للاسم إدخال في بياناتنا، نطلب تقديراً من نموذج لغوي بدلاً من إرجاع null. لا يعمل إلا بعد تفعيل عمليات البحث بالذكاء الاصطناعي في إعداداتك، ويكلّف رصيداً إضافياً واحداً. |
best_guess
اختياري
|
boolean
|
أرجِع الجنس المرجّح حتى عندما لا تبلغ الأدلة حد الثقة. معطّل افتراضياً: فالإجابة القريبة من 50/50 التي تبدو قاطعة تُحدث ضرراً أكبر من null. |
يعمل best_guess على الاسم الأول المستخرج من العنوان، لا على العنوان نفسه. وعندما يتعذّر استخراج اسم أول، لا يوجد ما يُفرض ويبقى gender بقيمة null. وتذكّر أن الإجابة المفروضة هنا تقوم على استخراج قد يكون هو نفسه خاطئاً.
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 والأرقام الزائدة وعلامات @ البادئة. "AyseYilmaz84" يُحل إلى Ayşe.
| المعامل | النوع | الوصف |
|---|---|---|
username
مطلوب
|
string
|
اسم المستخدم أو الاسم المستعار. يتم تجاهل @ البادئة. |
country
اختياري
|
string
|
رمز ISO 3166-1 alpha-2 للدولة. يحسّن الدقة للأسماء التي يختلف جنسها حسب المنطقة، مثل Andrea (ذكر في إيطاليا، أنثى في ألمانيا). |
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
|
إذا لم يكن للاسم إدخال في بياناتنا، نطلب تقديراً من نموذج لغوي بدلاً من إرجاع null. لا يعمل إلا بعد تفعيل عمليات البحث بالذكاء الاصطناعي في إعداداتك، ويكلّف رصيداً إضافياً واحداً. |
best_guess
اختياري
|
boolean
|
أرجِع الجنس المرجّح حتى عندما لا تبلغ الأدلة حد الثقة. معطّل افتراضياً: فالإجابة القريبة من 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 اسم هو جولة واحدة وبحث منزوع التكرار واحد.
| المعامل | النوع | الوصف |
|---|---|---|
names
مطلوب
|
string[]
|
مصفوفة من الأسماء. أقصى ١٠٠ عنصر. |
type
اختياري
|
string
|
ما هي العناصر: اسم أو بريد إلكتروني أو اسم مستخدم. الافتراضي هو اسم. |
country
اختياري
|
string
|
تطبق على كل عنصر في الطلب. |
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" }
]
}
تعود النتائج بنفس الترتيب الذي أرسلتها به. يتم فرض الأرصدة لكل اسم، وتُرفض الطلب بأكمله قبل أي عمل إذا كان رصيدك قصيرًا، لذا لا تحصل أبدًا على دفعة معالجة جزئيًا.
يخبرك كتلة الملخص بمعدل المطابقة للتو، لذا يمكنك تحديد ما إذا كان المدخل يحتاج إلى تنظيف قبل معالجة الباقي.
مهام الملفات
ارفع ملف CSV أو XLSX بحجم يصل إلى ١٠٠ ميغابايت و١٬٠٠٠٬٠٠٠ صف، واستلمه مع أعمدة الجنس مضافة إلى كل صف. رصيد واحد لكل صف، ولا يُحتسب إلا إذا اكتملت المهمة.
-
١.
POST /batchesأرسل الملف وname_column. تُوضع المهمة في قائمة الانتظار فورًا. -
٢.
GET /batches/{id}اقرأ المهمة حتى يصبح status إما completed أو failed. يوضح poll_after_seconds مدة الانتظار بين كل قراءة وأخرى. -
٣.
GET /batches/{id}/resultنزّل النتيجة. تعود بالصيغة التي رفعتها.
| المعامل | النوع | الوصف |
|---|---|---|
file
مطلوب
|
file
|
ملف CSV أو TSV أو XLSX يحتوي على صف عناوين. |
name_column
مطلوب
|
string
|
عنوان العمود الذي يحتوي على الأسماء كما هو في الملف تمامًا. مطلوب ما لم يكن start=false. |
country_column
اختياري
|
string
|
عنوان عمود يحتوي على رمز دولة لكل صف. |
country
اختياري
|
string
|
الدولة الافتراضية للصفوف التي لا تحتوي على دولة. |
ai_fallback
اختياري
|
boolean
|
سؤال نموذج ذكاء اصطناعي عن الأسماء غير الموجودة في مجموعة البيانات. يتطلب الموافقة على الذكاء الاصطناعي في الإعدادات. |
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. إعادة المحاولة بالمفتاح نفسه تُعيد المهمة الأولى بدلًا من فتح مهمة ثانية.
يمكن أن يكون ما يصل إلى ٣ مهام في قائمة الانتظار أو قيد التشغيل في الوقت نفسه. يمكن إلغاء المهمة التي لم تبدأ ويُعاد رصيدها؛ أما المهمة قيد المعالجة فلا يمكن إيقافها.
خطافات الويب
أضف نقطة نهاية من قسم خطافات الويب في لوحة التحكم، وسنرسل إليها طلب 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>. يظهر v1 ثانٍ لمدة 24 ساعة بعد تجديد السر. |
NameGender-Event-Id
مطلوب
|
string
|
معرّف الحدث. يبقى نفسه في كل إعادة محاولة للحدث نفسه. |
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" }
}
}
}
- أجب بأي حالة 2xx خلال ١٠ ثوانٍ، ثم نفّذ العمل.
- أي استجابة أخرى، بما فيها إعادة التوجيه، تُعاد محاولتها حتى ٧ مرات خلال نحو ٤٥ ساعة. إذا استمر فشل نقطة النهاية ثلاثة أيام تُوقف ونرسل إليك بريدًا إلكترونيًا.
- تحمل إعادة المحاولة المعرّف نفسه، والترتيب غير مضمون. أزل التكرار باستخدام NameGender-Event-Id، واقرأ المهمة عبر GET عندما تحتاج حالتها الحالية.
- عند تجديد السر من لوحة التحكم يظل السر القديم يوقّع لمدة 24 ساعة، فتحدّث خادمك دون أن يفوتك أي حدث.
- قد تُضاف أنواع أحداث جديدة. أجب بحالة 2xx على أي نوع لا تعالجه وتجاهله.
توزيع الدول
يعيد الدول المسجلة فيها الاسم. تأتي قائمتان وهما متعمداً غير مدمجتين: `registrations` تقيس الحجم المسجل، قابلة للمقارنة فقط بين الدول الإحدى عشرة التي تنشر إحصائيات أسماء معدودة، و `attested_in` تشير إلى الوجود بدون أي وزن مرتبط.
| المعامل | النوع | الوصف |
|---|---|---|
name
مطلوب
|
string
|
الاسم المراد البحث عنه. |
limit
اختياري
|
integer
|
عدد الدول المعدودة المراد عرضها في `registrations`. 1–100، الافتراضي 25. لا يُعاد حساب النسب للقائمة المختصرة. |
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"]
}
رصيد واحد لكل طلب. `share` يُحسب عبر كل الدول المعدودة، لذا لا يجمع إلى 100 إلا عندما لا يقتطع `limit` القائمة؛ و `counted_countries` يُحسب أيضاً قبل الاقتطاع. `attested_in` لا يحمل نسباً مئوية لأنه لا توجد أعداد مسجلة لحسابها.
التحية
يحوّل الاسم إلى تحية جاهزة لرسالة أو بريد إلكتروني، بعشر لغات: “Sehr geehrte Frau Dr. Müller,”, “Sayın Ahmet Bey,”, “Madame,”, “山田様”. تحديد الجنس مُضمَّن ويكلّف الرصيد الواحد نفسه. تحتوي كل استجابة على سطر رسمي وسطر غير رسمي وسطر محايد، إضافة إلى أجزاء السطر الرسمي.
| المعامل | النوع | الوصف |
|---|---|---|
name
مطلوب
|
string
|
الاسم الكامل مع الألقاب (“Dr. Anna Müller”). أرسل هذا أو `first_name` و `last_name`. |
first_name, last_name
اختياري
|
string
|
استخدمهما بدلاً من `name` عندما يحفظ نظام CRM لديك الأسماء في حقول منفصلة. لا يتم تحليل أي شيء. |
email
اختياري
|
string
|
عنوان بريد إلكتروني يُستخدم عند عدم إرسال اسم. يُقرأ الاسم من الجزء الذي يسبق @ دون علامات (Mueller بدلًا من Müller)؛ وتحصل info@ وعناوين الأدوار الأخرى على تحية المؤسسات. |
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`، ثم اللغة الرئيسية للدولة، ثم الإنجليزية. اللغة غير المدعومة تُعيد خطأً، ولا يتم التحويل إلى الإنجليزية بصمت أبداً. |
country, locale, ip
اختياري
|
string
|
تلميح الدولة لتحديد الجنس، كما في نقاط نهاية الجنس. يختار اللغة فقط عند عدم إرسال `language`. |
gender
اختياري
|
string
|
`male` أو `female` أو `neutral`، إذا كنت تعرفه مسبقاً. يتجاوز التحديد؛ و `neutral` يعطي دائماً الصيغة المحايدة. |
min_probability
اختياري
|
integer
|
أدنى احتمال لتحية بحسب الجنس، 50–100. الافتراضي 90. |
title
اختياري
|
string
|
لقب أكاديمي محفوظ في حقل منفصل، مثل `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` السبب. الشركات وعناوين الأدوار تحصل على `form: organization`. لا ينطبق `best_guess` و `ai_fallback` هنا.
يقبل POST /api/v1/salutation/bulk حتى ١٠٠ اسم في `names`، برصيد واحد لكل اسم، مع تطبيق الخيارات نفسها على كل اسم.
فحص الاسم
يبيّن ما إذا كان الاسم المكتوب في نموذج تسجيل أو نموذج عملاء محتملين يبدو اسماً حقيقياً لشخص، ولماذا. يلتقط الضرب العشوائي على لوحة المفاتيح (“asdf qwerty”)، والعناصر النائبة (“Test Test”، “John Doe”، “n/a”)، والشخصيات الخيالية (“Mickey Mouse”)، والألفاظ النابية، والأرقام أو الرموز أو عناوين البريد الإلكتروني في حقل الاسم. رصيد واحد لكل اسم.
| المعامل | النوع | الوصف |
|---|---|---|
name
مطلوب
|
string
|
الاسم كما كُتب في النموذج. أرسل هذا أو `first_name` و `last_name`. |
first_name, last_name
اختياري
|
string
|
استخدمهما بدلاً من `name` عندما يحتوي نموذجك على حقول منفصلة. |
country, locale, ip
اختياري
|
string
|
تلميح الدولة، كما في نقاط نهاية الجنس. يساعد في تحليل الاسم والبحث في السجلات. |
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` هي `implausible` عند وجود إشارة عالية الخطورة (نمط لوحة مفاتيح، أحرف مكررة، عنصر نائب، ألفاظ نابية، بريد إلكتروني أو رابط)، و `suspicious` عند وجود إشارة متوسطة (شخصية خيالية، أرقام، رموز، اسم شركة، بلا حروف علة، طويل جداً) أو إشارتين منخفضتين، و `plausible` في غير ذلك. تتراوح `score` من 0 إلى 100 لتضع عليها الحدّ الذي يناسبك. الاسم الأول الموجود في سجلات المواليد الرسمية يرفعها؛ أما الاسم الذي لم نره من قبل فلا يخفضها وحده. يُحكم على أسماء العائلة من شكلها فقط: لا توجد مجموعة بيانات لأسماء العائلة خلف نقطة النهاية هذه.
اختُبر على 4,610 اسماً أول حقيقياً بتسع كتابات، منفرداً ومقترناً باسم عائلة: لم يُصنَّف أي منها مشبوهاً أو غير معقول. أسماء العائلة مثل Null أو Test أو Cockburn، والأسماء المكونة من حرفين مثل Ng، والأسماء المفردة تُترك دون تمييز عن قصد.
يقبل POST /api/v1/name-check/bulk حتى ١٠٠ اسم في `names`، برصيد واحد لكل اسم، مع ملخص للتقييمات الثلاثة.
العمر من الاسم
كم يبلغ عمر الأحياء الذين يحملون اسماً أول معيّناً: العمر الوسيط، والنصف الأوسط منهم (`age_range`)، والـ 80% الوسطى (`age_range_80`). Brittany في الولايات المتحدة: الوسيط 36، ونصفهم بين 32 و 38. رصيد واحد لكل اسم.
| المعامل | النوع | الوصف |
|---|---|---|
name
مطلوب
|
string
|
اسم أول أو اسم كامل؛ يُستخدم الاسم الأول. |
gender
اختياري
|
string
|
`male` أو `female` لاستخدام سجلات ذلك الجنس فقط. الرجال الذين يحملون اسم Leslie أكبر بـ 16 سنة من النساء اللواتي يحملنه. |
country, locale, ip
اختياري
|
string
|
تلميح الدولة، كما في نقاط نهاية الجنس. الدول المشمولة: US و FR و NO. من دون تلميح تُستخدم سلسلة الولايات المتحدة وتكون قيمة `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). المصادر: مواليد SSA 1880–2024 (US)، و INSEE 1900–2025 (فرنسا)، و SSB 1945–2025 (النرويج). تكون قيمة `reason` هي `not_found` لاسم غير موجود في السلسلة، و `insufficient_data` عندما يقل عدد الأحياء عن 100.
المواليد في الخارج غير موجودين في أي سلسلة، لذا تبدو الأسماء الشائعة بين المهاجرين أصغر سناً مما هي عليه. تبدأ سلسلة النرويج في 1945، لذا يغيب من وُلدوا قبل ذلك. ويُستخدم جدول الحياة الخاص بالولايات المتحدة لفرنسا والنرويج أيضاً.
يقبل POST /api/v1/age/bulk حتى ١٠٠ اسم في `names`، برصيد واحد لكل اسم، بالترتيب الذي أُرسلت به.
الرصيد
اطّلع على رصيدك وما تبقى من الحصة المجانية لهذا اليوم. لا يُخصم أي رصيد مقابل هذا الاستدعاء.
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". نقابل على أساس نمط الحروف الساكنة، ونحتفظ بعلامة المؤنث ة حتى يبقى خالد وخالدة منفصلين. يشمل أيضاً الأسماء الفارسية والأردية المكتوبة بالنص العربي.
تم تحويله إلى Pinyin. اللقب يأتي أولاً في الصينية، لذا 李明 لقبه 李 (Li) والاسم الأول 明 (Ming) — نحذف اللقب قبل البحث. حرف واحد يشكل اسماً أول كاملاً ويتم التعامل معه كواحد.
نفس معالجة اللقب الأول كما في الصينية، باستخدام الألقاب الكورية الشائعة.
الهيراجانا والكاتاكانا تُقرأ بشكل صحيح (ひろし → Hiroshi).
الأسماء الروسية والأوكرانية والبلغارية والصربية تتحول مباشرة.
الأسماء الهندية والماراثية والنيبالية. يتم التعامل مع الحرف الصوتي الزائد في النهاية (राहुल → Rahul، وليس "Rahula").
أحرف الكانجي اليابانية والأحرف الصينية تشغل نفس نطاق Unicode، لذا لا يمكننا التمييز بينها من الأحرف وحدها. يتم قراءة إدخال Han كلغة صينية: اسم كانجي لا نملكه بالفعل حرفياً يحصل على قراءة الماندرين، وهي عادة خاطئة لاسم ياباني (健太 تُقرأ كـ "jian tai" بينما الاسم هو Kenta). الأسماء التي نملكها تطابق بالضبط وتكون صحيحة. أرسل الأسماء اليابانية بصيغة كانا أو لاتينية للتأكد.
التايلاندية تحذف الحروف الصوتية مثل العربية وتحتاج إلى طبقة مطابقة خاصة بها. لم يتم بناؤها بعد، لذا تعيد هذه 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" }
تعذر النسخ. حدد النص وانسخه.
عندما لا نتمكن من تحويل الكتابة على الإطلاق، تكون الاستجابة gender: null مع source: none. تحقق من حقل source: script تعني أننا نقلنا بالنسق، و db تعني أننا طابقنا الأحرف التي أرسلتها مباشرة. الاثنان لهما درجات ثقة مختلفة، ونعرض لك أيهما حصلت عليه.
حقول الاستجابة
متطابقة عبر جميع endpoints.
| الحقل | النوع | الوصف |
|---|---|---|
credits_charged
|
integer
|
عدد الأرصدة التي خُصمت مقابل هذا الاستدعاء. |
credits_remaining
|
integer
|
رصيدك القابل للإنفاق بعد احتساب هذا الاستدعاء: الأرصدة المشتراة مضافاً إليها ما تبقى من الحصة المجانية لهذا اليوم. |
query
|
string
|
المدخل تماماً كما أرسلته، قبل أي تنظيف. |
name
|
string
|
الاسم الذي بحثنا عنه فعلياً بعد إزالة الألقاب والأسماء الأخيرة. |
first_name
|
string
|
الاسم الأول المستخرج من الإدخال. يُعاد حتى عندما تكون قيمة gender هي null، دون تكلفة إضافية. |
middle_name
|
string
|
الأسماء الإضافية بين الاسم الأول واسم العائلة. تُحذف الأحرف الأولى. |
last_name
|
string
|
اسم العائلة، بما في ذلك الأدوات مثل bin أو al. يكون null دائمًا لأسماء المستخدمين. |
name_type
|
string
|
personal أو organization (Acme LLC) أو role (info@، خدمة العملاء). لا يُعطى جنس للمؤسسات والحسابات الوظيفية. |
gender
|
string
|
ذكر أو أنثى أو فارغ عندما لا نكون واثقين كفاية. |
country
|
string
|
الدولة التي جاءت منها الإحصائيات، أو فارغ للإجمالي العالمي. |
country_source
|
string
|
مصدر الدولة: country أو locale أو ip أو null عندما تكون الإجابة عالمية. |
sample_size
|
integer
|
عدد الأشخاص المسجَّلين الذين تستند إليهم هذه الإجابة. 0 يعني أن المصدر ينشر نسباً أو شواهد، لا عدداً يمكننا التحقق منه. |
probability
|
integer
|
الثقة في النوع المذكور، من 50 إلى 100. 0 عندما يكون النوع فارغاً. |
took_ms
|
integer
|
الوقت الذي استغرقناه لإتمام البحث، بالمللي ثانية الكاملة. لا يشمل وقت الشبكة من جهتك. |
حقلان لا توفرهما الخدمات الأخرى
source يخبرك بمصدر الإجابة: قاعدة البيانات المرجعية أو تطابق غير دقيق أو النموذج الاحتياطي بالذكاء الاصطناعي. matched_as يسمي المدخل الذي تطابق معه البحث غير الدقيق. معاً يسمحان لك بتقرير مدى موثوقية النتيجة بدلاً من قبولها دون تحفظ.
| الحقل | النوع | الوصف |
|---|---|---|
source
|
string
|
db أو script أو fuzzy أو llm أو none. |
confidence
|
string
|
عالية أو متوسطة أو منخفضة أو غير مؤكدة أو مجهولة، بناءً على الأدلة المتاحة. |
matched_as
|
string
|
بالنسبة للتطابق غير الدقيق، مدخل قاعدة البيانات الذي تطابق. وإلا فهو فارغ. |
رموز الأخطاء
يخبرك رمز حالة HTTP بأن الاستدعاء فشل. ثم يذكر JSON body السبب في error، ويشرحه في message، ويعطيك request_id لتذكره للدعم، إضافة إلى رابط في التوثيق إلى الصف المطابق أدناه. اعتمد في منطقك على error، وليس على message أبداً: الرسائل مترجمة وقد تُعاد صياغتها.
| الرمز | HTTP | المعنى |
|---|---|---|
missing_key |
401 | لم يُرسَل أي مفتاح API. أضف إلى الطلب رأس Authorization: Bearer أو رأس X-Api-Key. |
invalid_key |
401 | مفتاح API هذا غير صحيح. |
revoked_key |
401 | تم إلغاء مفتاح API هذا. |
blocked |
403 | تم إيقاف هذا الحساب. تواصل مع الدعم. |
email_not_verified |
403 | لم يتم بعد تأكيد عنوان البريد الإلكتروني لهذا الحساب. افتح رابط التأكيد الذي أرسلناه إليك، أو اطلب رابطًا جديدًا من لوحة التحكم. |
ip_not_allowed |
403 | الطلبات من عنوان IP هذا غير مسموحة لهذا المفتاح. |
proxy_secret_required |
403 | هذا المفتاح يعمل فقط من خلال سوق API الخاص به، الذي يوقّع كل طلب. استخدم المفتاح الذي تم إصداره لك هناك. |
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" لمعرفة هوية المزود، ثم فعّل عمليات البحث بالذكاء الاصطناعي في إعدادات لوحة التحكم الخاصة بك. |
unknown_endpoint |
404 | لا يوجد endpoint في هذا المسار. تحقق من عنوان URL مقابل توثيق API. |
method_not_allowed |
405 | هذا endpoint لا يقبل طلبات DELETE. |
payload_too_large |
413 | جسم الطلب كبير جداً. |
rate_limited |
429 | عدد كبير جداً من الطلبات. بطّئ المعدل وحاول مجدداً قريباً. |
batch_not_found |
404 | لا توجد مهمة ملف بهذا المعرّف في هذا الحساب. |
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"
}
تعذر النسخ. حدد النص وانسخه.
حدود المعدل
الاستخدام الطبيعي لا يصل إلى حد. الحد موجود لمنع مفتاح مسرب من الإساءة، ويُحسب لكل مفتاح API وليس لكل عنوان IP حتى لا يستهلك عدة عملاء على خادم واحد حصة بعضهم البعض.
الحد الحالي: ١٬٢٠٠ طلب في الدقيقة لكل مفتاح. هل تحتاج إلى المزيد؟ اطلب وسنرفعه على حسابك.
كل استجابة تحمل رؤوس X-RateLimit-Limit و X-RateLimit-Remaining القياسية.
المسافات والأحرف غير اللاتينية في طلبات GET
لا يمكن لاسم مثل Ayşe Yılmaz أو 中村 أن يُرسل في عنوان URL كما هو مكتوب. رمّز القيمة بترميز النسبة المئوية عند الاستدعاء بـ GET، أو أرسلها في JSON body عبر POST واستغنِ عن الترميز تماماً.
Ayşe Yılmaz -> Ay%C5%9Fe%20Y%C4%B1lmaz
محمد -> %D9%85%D8%AD%D9%85%D8%AF
中村 -> %E4%B8%AD%E6%9D%91
تعذر النسخ. حدد النص وانسخه.