مرجع REST API
أربع نقاط نهاية، شكل استجابة واحد. كل ما يلي مباشر على حسابك.
https://namegender.com/api
إنشاء حساب مجاني
البدء السريع
أنشئ مفتاحًا في لوحة التحكم، ثم أرسل طلبك الأول. لا تحتاج إلى SDK.
curl "https://namegender.com/api?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?' . $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?${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",
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")
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?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: تنتهي السلاسل الاستعلام في سجلات الخادم وسجل المتصفح.
Authorization: Bearer ng_live_xxxxxxxxxxxx
X-Api-Key: ng_live_xxxxxxxxxxxx
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
يمكنك تقييد مفتاح إلى عناوين IP محددة من لوحة التحكم.
مكتبات العميل
واجهة برمجية واحدة وأربعة أنواع إدخال وأدوات جماعية تتعامل مع الملفات التي تفشل فيها الخدمات الأخرى.
عرض الكلhttps://namegender.com/api
الجنس من الاسم
يقبل الاسم الأول أو الاسم الكامل. يتم حذف الألقاب والأسماء الوسطى والألقاب قبل البحث، لذا فإن "Dr. Ayşe Yılmaz" و"Ayşe" يعطيان نفس الإجابة.
| المعامل | النوع | الوصف |
|---|---|---|
name
مطلوب
|
string
|
الاسم المراد تصنيفه. الاسم الأول أو الاسم الكامل. |
country
اختياري
|
string
|
رمز ISO 3166-1 alpha-2 للدولة. يحسّن الدقة للأسماء التي يختلف جنسها حسب المنطقة، مثل Andrea (ذكر في إيطاليا، أنثى في ألمانيا). |
askToAI
اختياري
|
boolean
|
الرجوع إلى نموذج لغة عندما لا يكون الاسم في قاعدة البيانات. يكلف رصيد إضافي واحد. |
forceToGenderize
اختياري
|
boolean
|
أرجع الجنس الأكثر احتمالاً حتى عندما تكون الثقة أقل من الحد الأدنى. معطل بشكل افتراضي، لأن إجابة معادلة العملات المعدنية مقدمة كمؤكدة أسوأ من عدم وجود إجابة. |
curl "https://namegender.com/api?name=Jordan" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"status": true,
"used_credits": 1,
"remaining_credits": 49999,
"expires": null,
"q": "Jordan",
"name": "Jordan",
"gender": "male",
"country": null,
"total_names": 62240,
"probability": 84,
"confidence": "high",
"duration": "1ms",
"source": "db",
"matched_as": null
}
https://namegender.com/api/email
الجنس من البريد الإلكتروني
يستخرج الشخص من الجزء المحلي من العنوان، ثم يصنف ذلك. "ayse.yilmaz84@example.com" يُحل إلى Ayşe.
| المعامل | النوع | الوصف |
|---|---|---|
email
مطلوب
|
string
|
عنوان البريد الإلكتروني. يتم استخدام الجزء قبل @ فقط. |
country
اختياري
|
string
|
رمز ISO 3166-1 alpha-2 للدولة. يحسّن الدقة للأسماء التي يختلف جنسها حسب المنطقة، مثل Andrea (ذكر في إيطاليا، أنثى في ألمانيا). |
askToAI
اختياري
|
boolean
|
الرجوع إلى نموذج لغة عندما لا يكون الاسم في قاعدة البيانات. يكلف رصيد إضافي واحد. |
forceToGenderize غير متاح هنا: يتم استخراج الاسم داخليًا، لذا فرض النتيجة على استخراج غير مؤكد يضاعف التخمينات.
curl "https://namegender.com/api/email?email=ayse.yilmaz84%40example.com" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"status": true,
"q": "ayse.yilmaz84@example.com",
"name": "Ayse",
"gender": "female",
"probability": 95,
"confidence": "unverified",
"total_names": 655,
"duration": "1ms",
"source": "db"
}
https://namegender.com/api/username
الجنس من اسم المستخدم
يتعامل مع camelCase و snake_case والأرقام الزائدة وعلامات @ البادئة. "AyseYilmaz84" يُحل إلى Ayşe.
| المعامل | النوع | الوصف |
|---|---|---|
username
مطلوب
|
string
|
اسم المستخدم أو الاسم المستعار. يتم تجاهل @ البادئة. |
country
اختياري
|
string
|
رمز ISO 3166-1 alpha-2 للدولة. يحسّن الدقة للأسماء التي يختلف جنسها حسب المنطقة، مثل Andrea (ذكر في إيطاليا، أنثى في ألمانيا). |
askToAI
اختياري
|
boolean
|
الرجوع إلى نموذج لغة عندما لا يكون الاسم في قاعدة البيانات. يكلف رصيد إضافي واحد. |
forceToGenderize
اختياري
|
boolean
|
أرجع الجنس الأكثر احتمالاً حتى عندما تكون الثقة أقل من الحد الأدنى. معطل بشكل افتراضي، لأن إجابة معادلة العملات المعدنية مقدمة كمؤكدة أسوأ من عدم وجود إجابة. |
curl "https://namegender.com/api/username?username=AyseYilmaz84" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"status": true,
"q": "AyseYilmaz84",
"name": "Ayse",
"gender": "female",
"probability": 95,
"confidence": "unverified",
"source": "db"
}
https://namegender.com/api/bulk
طلب جماعي
أرسل ما يصل إلى ١٠٠ أسماء في طلب واحد. استخدم هذا بدلاً من الحلقة: استدعاء جماعي واحد لـ 100 اسم هو جولة واحدة وبحث منزوع التكرار واحد.
| المعامل | النوع | الوصف |
|---|---|---|
names
مطلوب
|
string[]
|
مصفوفة من الأسماء. أقصى ١٠٠ عنصر. |
type
اختياري
|
string
|
ما هي العناصر: اسم أو بريد إلكتروني أو اسم مستخدم. الافتراضي هو اسم. |
country
اختياري
|
string
|
تطبق على كل عنصر في الطلب. |
curl -X POST "https://namegender.com/api/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/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['q'], $row['gender'] ?? '?', $row['probability']);
}
const response = await fetch('https://namegender.com/api/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.q, r.gender, r.probability));
import requests
response = requests.post(
"https://namegender.com/api/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["q"], row["gender"], row["probability"])
{
"status": true,
"used_credits": 4,
"remaining_credits": 49995,
"duration": "2ms",
"summary": {
"total": 4,
"identified": 4,
"unknown": 0,
"match_rate": 100
},
"results": [
{ "q": "Ayşe", "gender": "female", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
{ "q": "Mehmet", "gender": "male", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
{ "q": "Priya", "gender": "female", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
{ "q": "Wei", "gender": "male", "probability": 85, "total_names": 0, "confidence": "unverified", "source": "db" }
]
}
تعود النتائج بنفس الترتيب الذي أرسلتها به. يتم فرض الأرصدة لكل اسم، وتُرفض الطلب بأكمله قبل أي عمل إذا كان رصيدك قصيرًا، لذا لا تحصل أبدًا على دفعة معالجة جزئيًا.
يخبرك كتلة الملخص بمعدل المطابقة للتو، لذا يمكنك تحديد ما إذا كان المدخل يحتاج إلى تنظيف قبل معالجة الباقي.
https://namegender.com/api/me
الحساب والحصة
تحقق من رصيدك المتبقي دون صرف رصيد.
curl "https://namegender.com/api/me" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"status": true,
"email": "you@example.com",
"remaining_credits": 50099,
"purchased_credits": 50000,
"free_today": 99,
"free_daily_limit": 100,
"lifetime_requests": 12480,
"expires": null
}
البرامج النصية غير اللاتينية
أرسل اسماً بنصه الأصلي وسنقوم بربطه بالبيانات المرجعية. بدون معامل إضافي: نكتشف النص ونختار الاستراتيجية المناسبة له.
الكتابة العربية تحذف الحروف الصوتية القصيرة، فمحمد يتحول إلى "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?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?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.
| الحقل | النوع | الوصف |
|---|---|---|
status
|
boolean
|
خطأ عندما تفشل الطلب. تحقق من هذا أولاً. |
used_credits
|
integer
|
الأرصدة التي استهلكتها هذه الطلب. |
remaining_credits
|
integer
|
الأرصدة المتبقية بعد هذا الطلب. |
expires
|
null
|
فارغ دائماً. الأرصدة المشتراة لا تنتهي صلاحيتها. |
q
|
string
|
مدخلك، معاد بدون تغيير. |
name
|
string
|
الاسم الذي بحثنا عنه فعلياً بعد إزالة الألقاب والأسماء الأخيرة. |
gender
|
string
|
ذكر أو أنثى أو فارغ عندما لا نكون واثقين كفاية. |
country
|
string
|
الدولة التي جاءت منها الإحصائيات، أو فارغ للإجمالي العالمي. |
total_names
|
integer
|
عدد الأشخاص الحقيقيين التي تقوم عليها هذه الإجابة. 0 تعني أن المصدر يوفر نسباً وليس أعداداً، وليس أن الإجابة ضعيفة. |
probability
|
integer
|
الثقة في النوع المذكور، من 50 إلى 100. 0 عندما يكون النوع فارغاً. |
duration
|
string
|
وقت معالجة الخادم. |
حقلان لا توفرهما الخدمات الأخرى
source يخبرك بمصدر الإجابة: قاعدة البيانات المرجعية أو تطابق غير دقيق أو النموذج الاحتياطي بالذكاء الاصطناعي. matched_as يسمي المدخل الذي تطابق معه البحث غير الدقيق. معاً يسمحان لك بتقرير مدى موثوقية النتيجة بدلاً من قبولها دون تحفظ.
| الحقل | النوع | الوصف |
|---|---|---|
source
|
string
|
db أو fuzzy أو llm أو none. |
confidence
|
string
|
عالية أو متوسطة أو منخفضة أو غير مؤكدة أو مجهولة، بناءً على الأدلة المتاحة. |
matched_as
|
string
|
بالنسبة للتطابق غير الدقيق، مدخل قاعدة البيانات الذي تطابق. وإلا فهو فارغ. |
رموز الأخطاء
الأخطاء ترجع body JSON مع status: false وسلسلة خطأ قابلة للقراءة الآلية. طابق على الخطأ، لا على الرسالة: الرسائل مترجمة وقد تتغير.
| الرمز | HTTP | المعنى |
|---|---|---|
missing_key |
401 | مفتاح API مفقود. مرره كمعامل "key" أو كـ Authorization: Bearer header. |
invalid_key |
401 | مفتاح API هذا غير صحيح. |
revoked_key |
401 | تم إلغاء مفتاح API هذا. |
blocked |
403 | تم إيقاف هذا الحساب. تواصل مع الدعم. |
email_not_verified |
403 | لم يتم بعد تأكيد عنوان البريد الإلكتروني لهذا الحساب. افتح رابط التأكيد الذي أرسلناه إليك، أو اطلب رابطًا جديدًا من لوحة التحكم. |
ip_not_allowed |
403 | الطلبات من عنوان IP هذا غير مسموحة لهذا المفتاح. |
forbidden |
403 | ليس لديك صلاحيات لتنفيذ هذا الإجراء. |
no_credits |
402 | لقد نفدت لديك الأرصدة. اشترِ المزيد أو انتظر إعادة تعيين حصتك اليومية المجانية. |
missing_input |
400 | معامل "name" مطلوب. |
invalid_input |
422 | معامل "name" غير صحيح. |
too_many_items |
422 | يمكن إرسال 100 عنصر كحد أقصى في طلب واحد. |
ai_consent_required |
422 | يرسل askToAI اسم الشخص إلى مزود ذكاء اصطناعي من طرف ثالث، وهذا الحساب لم يوافق عليه. اطّلع على حقل "ai" لمعرفة هوية المزود، ثم فعّل عمليات البحث بالذكاء الاصطناعي في إعدادات لوحة التحكم الخاصة بك. |
unknown_endpoint |
404 | لا يوجد endpoint في هذا المسار. تحقق من عنوان URL مقابل توثيق API. |
method_not_allowed |
405 | هذا endpoint لا يقبل طلبات DELETE. |
payload_too_large |
413 | جسم الطلب كبير جداً. |
rate_limited |
429 | عدد كبير جداً من الطلبات. بطّئ المعدل وحاول مجدداً قريباً. |
not_ready |
503 | جاري إعادة بناء قاعدة بيانات الأسماء. حاول مجدداً في لحظة. |
server_error |
500 | حدث خطأ من جانبنا. لقد تم إشعارنا. |
{
"status": false,
"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 القياسية.
الترحيل من مزود آخر
حقول الاستجابة وأسماء المعاملات لدينا تتطابق مع الاتفاقية الشائعة، لذا التبديل عادة ما يعني تغيير سطر واحد: الـ URL الأساسي.
- https://api.other-provider.io/api?name=Ayşe&key=KEY
+ https://namegender.com/api?name=Ayşe&key=KEY
askToAI و forceToGenderize يحتفظان بتهجئتهما الأصلية لهذا السبب بالضبط. إذا كان حقل تعتمد عليه مفقوداً، أخبرنا وسنضيفه.
رمز مدخلاتك
تحتوي الأسماء على مسافات وأحرف غير ASCII. قم بترميز URL للقيمة قبل وضعها في سلسلة الاستعلام، أو استخدم POST مع JSON body.
Ayşe Yılmaz -> Ay%C5%9Fe%20Y%C4%B1lmaz
محمد -> %D9%85%D8%AD%D9%85%D8%AF
中村 -> %E4%B8%AD%E6%9D%91