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

مرجع REST API

بضع نقاط نهاية، شكل استجابة واحد. كل ما يلي مباشر على حسابك.

https://namegender.com/api/v1/gender إنشاء حساب مجاني
llms-full.txt

نص 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 (مُنصى به)
Authorization: Bearer ng_live_xxxxxxxxxxxx

تعذر النسخ. حدد النص وانسخه.

رأس X-Api-Key
X-Api-Key: ng_live_xxxxxxxxxxxx

تعذر النسخ. حدد النص وانسخه.

لا تكشف أبدًا عن مفتاحك في الكود على جانب العميل. يجب أن تمر الاستدعاءات من المتصفح أو تطبيق الجوال عبر خادمك الخاص.

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

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

تغليفات رقيقة فوق REST API. ترسل مفتاحك، وتبني كل طلب، وتحوّل استجابات الأخطاء إلى استثناءات.

JavaScript المصدر
npm install namegender

تعذر النسخ. حدد النص وانسخه.

Command line المصدر
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>

تعذر النسخ. حدد النص وانسخه.

C# / .NET المصدر
dotnet add package NameGender --version 0.6.0

تعذر النسخ. حدد النص وانسخه.

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

تعذر النسخ. حدد النص وانسخه.

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

تعذر النسخ. حدد النص وانسخه.

PowerShell المصدر
Install-Module NameGender

تعذر النسخ. حدد النص وانسخه.

cargo add namegender

تعذر النسخ. حدد النص وانسخه.

أنت لا تحتاج إلى واحدة. API مجرد عدد قليل من endpoints بصيغة JSON عادي؛ المكتبة توفر عليك فترة بعد الظهر، لا مشروعًا. إذا لم تكن لغتك مدرجة، فمرجع REST يحتوي على أمثلة جاهزة للنسخ واللصق.

عرض الكل

مساعدو الذكاء الاصطناعي (MCP)

استخدم NameGender من Claude وCursor وأي عميل آخر يدعم Model Context Protocol. اسأل المساعد عن قائمة من الأسماء وسيستدعي API نيابةً عنك، مع الأدلة بجانب كل إجابة.

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

تعذر النسخ. حدد النص وانسخه.

Claude Desktop وCursor وعملاء آخرون
{
    "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 · المصدر

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

الجنس من الاسم

يقبل الاسم الأول أو الاسم الكامل. يتم حذف الألقاب والأسماء الوسطى والألقاب قبل البحث، لذا فإن "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
}
GET · POST https://namegender.com/api/v1/gender/email
Markdown

الجنس من البريد الإلكتروني

يستخرج الشخص من الجزء المحلي من العنوان، ثم يصنف ذلك. "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"
}
GET · POST https://namegender.com/api/v1/gender/username
Markdown

الجنس من اسم المستخدم

يتعامل مع 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"
}
POST https://namegender.com/api/v1/gender/bulk
Markdown

طلب جماعي

أرسل ما يصل إلى ١٠٠ أسماء في طلب واحد. استخدم هذا بدلاً من الحلقة: استدعاء جماعي واحد لـ 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" }
  ]
}

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

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

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

مهام الملفات

ارفع ملف 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 سؤال نموذج ذكاء اصطناعي عن الأسماء غير الموجودة في مجموعة البيانات. يتطلب الموافقة على الذكاء الاصطناعي في الإعدادات.
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 https://your-server.example/…
Markdown

خطافات الويب

أضف نقطة نهاية من قسم خطافات الويب في لوحة التحكم، وسنرسل إليها طلب POST موقّعًا عند اكتمال مهمة ملف أو فشلها، دون الحاجة إلى الاستعلام.

الحدث النوع الوصف
batch.completed BatchJob انتهت المهمة. يحمل النص المهمة تمامًا كما يعيدها GET /batches/{id}.
batch.failed BatchJob فشلت المهمة ولم تُحتسب أي رسوم. تفرّع حسب error.code.
credits.low CreditsAlert بالمعدل الحالي يكفي الرصيد 7 أيام أو أقل. يُفحص كل ساعة، مع احتساب تجديدات الاشتراك.
credits.depleted CreditsAlert الرصيد فارغ وتُرفض الطلبات بالرمز 402. يُفحص كل ساعة.
webhook.test object يُرسل فقط من "إرسال حدث تجريبي" في لوحة التحكم وإلى نقطة النهاية تلك فقط.
الترويسة النوع الوصف
NameGender-Signature
مطلوب
string t=<ثوانٍ بتوقيت يونكس>,v1=<hex>. يظهر v1 ثانٍ لمدة 24 ساعة بعد تجديد السر.
NameGender-Event-Id
مطلوب
string معرّف الحدث. يبقى نفسه في كل إعادة محاولة للحدث نفسه.
NameGender-Delivery-Attempt
مطلوب
integer 1 في المحاولة الأولى، وحتى 8.

تحقّق من كل طلب

قيمة v1 هي HMAC-SHA256 للطابع الزمني ونقطة والنص الخام، باستخدام سر نقطة النهاية. قارن بزمن ثابت، واقبل الطلب إذا تطابقت أي قيمة v1، وارفض الطابع الزمني الذي يبتعد عن ساعتك أكثر من خمس دقائق. تقوم مكتبات العميل بكل ذلك في استدعاء واحد.

تحقّق من النص كما وصل تمامًا. إطار العمل الذي يحلل JSON ثم يعيد تسلسله يغيّر البايتات فلا يتطابق التوقيع.
import express from 'express';
import { webhooks, NameGenderWebhookError } from 'namegender';

const app = express();

// express.raw, not express.json: the signature covers the exact bytes.
app.post('/namegender', express.raw({ type: 'application/json' }), async (req, res) => {
  let event;
  try {
    event = await webhooks.verify(
      req.body,
      req.get('NameGender-Signature'),
      process.env.NAMEGENDER_WEBHOOK_SECRET,
    );
  } catch (error) {
    if (error instanceof NameGenderWebhookError) return res.sendStatus(400);
    throw error;
  }

  res.sendStatus(204);   // answer first, then do the work

  if (event.type === 'batch.completed') {
    const job = event.data.object;   // same object as GET /batches/{id}
  }
});
import os
from flask import Flask, request
from namegender import webhooks, WebhookVerificationError

app = Flask(__name__)

@app.post("/namegender")
def namegender_webhook():
    try:
        event = webhooks.verify(
            request.get_data(),   # raw bytes, not request.json
            request.headers.get("NameGender-Signature"),
            os.environ["NAMEGENDER_WEBHOOK_SECRET"],
        )
    except WebhookVerificationError:
        return "", 400

    if event["type"] == "batch.completed":
        job = event["data"]["object"]   # same object as GET /batches/{id}
    return "", 204
<?php

$body   = file_get_contents('php://input');   // raw body, before json_decode
$header = $_SERVER['HTTP_NAMEGENDER_SIGNATURE'] ?? '';
$secret = getenv('NAMEGENDER_WEBHOOK_SECRET');

parse_str(str_replace(',', '&', $header), $parts);   // t=…&v1=…
preg_match_all('/v1=([0-9a-f]{64})/', $header, $m);

$t = (int) ($parts['t'] ?? 0);
$expected = hash_hmac('sha256', $t . '.' . $body, $secret);
$valid = abs(time() - $t) <= 300
    && array_filter($m[1], fn ($sig) => hash_equals($expected, $sig));

if (! $valid) {
    http_response_code(400);
    exit;
}

http_response_code(204);
$event = json_decode($body, true);
{
  "id": "evt_16f7c01502fda5436e8b7c4e",
  "type": "batch.completed",
  "created_at": "2026-09-24T10:04:12Z",
  "api_version": "v1",
  "data": {
    "object": {
      "id": "B-7K2M9QX4TA",
      "status": "completed",
      "rows": { "total": 200000, "processed": 200000, "identified": 187412 },
      "credits": { "reserved": 200000, "charged": 200000 },
      "result": { "url": "…/api/v1/batches/B-7K2M9QX4TA/result", "format": "csv" }
    }
  }
}
  • أجب بأي حالة 2xx خلال ١٠ ثوانٍ، ثم نفّذ العمل.
  • أي استجابة أخرى، بما فيها إعادة التوجيه، تُعاد محاولتها حتى ٧ مرات خلال نحو ٤٥ ساعة. إذا استمر فشل نقطة النهاية ثلاثة أيام تُوقف ونرسل إليك بريدًا إلكترونيًا.
  • تحمل إعادة المحاولة المعرّف نفسه، والترتيب غير مضمون. أزل التكرار باستخدام NameGender-Event-Id، واقرأ المهمة عبر GET عندما تحتاج حالتها الحالية.
  • عند تجديد السر من لوحة التحكم يظل السر القديم يوقّع لمدة 24 ساعة، فتحدّث خادمك دون أن يفوتك أي حدث.
  • قد تُضاف أنواع أحداث جديدة. أجب بحالة 2xx على أي نوع لا تعالجه وتجاهله.
GET POST https://namegender.com/api/v1/gender/countries
Markdown

توزيع الدول

يعيد الدول المسجلة فيها الاسم. تأتي قائمتان وهما متعمداً غير مدمجتين: `registrations` تقيس الحجم المسجل، قابلة للمقارنة فقط بين الدول الإحدى عشرة التي تنشر إحصائيات أسماء معدودة، و `attested_in` تشير إلى الوجود بدون أي وزن مرتبط.

هذا ليس استدلالاً على بلد المنشأ أو الانتماء العرقي، ويجب عدم استخدامه كذلك. توجد إحصائيات معدودة لإحدى عشرة دولة فقط: الولايات المتحدة والمملكة المتحدة وفرنسا وكندا وإسبانيا وأيرلندا والنرويج والنمسا وإسرائيل وبولندا وسويسرا. لذلك يضع الاستعلام عن "Mehmet" سويسرا وفرنسا في المرتبة الأولى بنسبة 29% تقريباً لكل منهما، ولا تظهر تركيا في الترتيب على الإطلاق — تركيا لا تنشر أعداداً. تركيا تظهر في `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` لا يحمل نسباً مئوية لأنه لا توجد أعداد مسجلة لحسابها.

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

التحية

يحوّل الاسم إلى تحية جاهزة لرسالة أو بريد إلكتروني، بعشر لغات: “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`، برصيد واحد لكل اسم، مع تطبيق الخيارات نفسها على كل اسم.

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

فحص الاسم

يبيّن ما إذا كان الاسم المكتوب في نموذج تسجيل أو نموذج عملاء محتملين يبدو اسماً حقيقياً لشخص، ولماذا. يلتقط الضرب العشوائي على لوحة المفاتيح (“asdf qwerty”)، والعناصر النائبة (“Test Test”، “John Doe”، “n/a”)، والشخصيات الخيالية (“Mickey Mouse”)، والألفاظ النابية، والأرقام أو الرموز أو عناوين البريد الإلكتروني في حقل الاسم. رصيد واحد لكل اسم.

هذا ليس تحققاً من الهوية، ولا يصف أي اسم بأنه مزيّف أبداً. استخدم `implausible` و `suspicious` لتمييز سجل أو لطلب معلومات إضافية، لا لرفض الأشخاص تلقائياً.
المعامل النوع الوصف
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`، برصيد واحد لكل اسم، مع ملخص للتقييمات الثلاثة.

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

العمر من الاسم

كم يبلغ عمر الأحياء الذين يحملون اسماً أول معيّناً: العمر الوسيط، والنصف الأوسط منهم (`age_range`)، والـ 80% الوسطى (`age_range_80`). Brittany في الولايات المتحدة: الوسيط 36، ونصفهم بين 32 و 38. رصيد واحد لكل اسم.

هذا يصف مجموعة لا شخصاً. في معظم الأسماء يمتد النصف الأوسط على 10 إلى 25 سنة. استخدمه لتحليل الجمهور والتقسيم والبحث، ولا تستخدمه أبداً لاتخاذ أي قرار بشأن شخص بعينه: الائتمان، أو التوظيف، أو السكن، أو التأمين، أو الأهلية، أو التحقق من العمر.
المعامل النوع الوصف
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`، برصيد واحد لكل اسم، بالترتيب الذي أُرسلت به.

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

الرصيد

اطّلع على رصيدك وما تبقى من الحصة المجانية لهذا اليوم. لا يُخصم أي رصيد مقابل هذا الاستدعاء.

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

تعذر النسخ. حدد النص وانسخه.