متابعة → نظرة عامة

مرجع 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 (مُنصى به)
Authorization: Bearer ng_live_xxxxxxxxxxxx
رأس مخصص
X-Api-Key: ng_live_xxxxxxxxxxxx
معامل الاستعلام
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
لا تكشف أبدًا عن مفتاحك في الكود على جانب العميل. يجب أن تمر الاستدعاءات من المتصفح أو تطبيق الجوال عبر خادمك الخاص.

يمكنك تقييد مفتاح إلى عناوين IP محددة من لوحة التحكم.

مكتبات العميل

واجهة برمجية واحدة وأربعة أنواع إدخال وأدوات جماعية تتعامل مع الملفات التي تفشل فيها الخدمات الأخرى.

عرض الكل
GET · POST 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
}
GET · POST 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"
}
GET · POST 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"
}
POST 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" }
  ]
}

تعود النتائج بنفس الترتيب الذي أرسلتها به. يتم فرض الأرصدة لكل اسم، وتُرفض الطلب بأكمله قبل أي عمل إذا كان رصيدك قصيرًا، لذا لا تحصل أبدًا على دفعة معالجة جزئيًا.

يخبرك كتلة الملخص بمعدل المطابقة للتو، لذا يمكنك تحديد ما إذا كان المدخل يحتاج إلى تنظيف قبل معالجة الباقي.

GET 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 عنصر كحد أقصى في طلب واحد.
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