REST API Referentie
Vier endpoints, één antwoordstructuur. Alles hieronder werkt live met uw account.
https://namegender.com/api
Gratis aanmelden
Snel starten
Maak een sleutel in uw dashboard en verzend uw eerste aanvraag. Geen SDK nodig.
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
Elk endpoint retourneert dezelfde structuur, dus u kunt invoer omschakelen zonder uw parseringscode te wijzigen.
Authenticatie
Geef uw API-sleutel op een van drie manieren door. De Authorization header wordt aanbevolen: querystrings verschijnen in serverlogboeken en browsergeschiedenis.
Authorization: Bearer ng_live_xxxxxxxxxxxx
X-Api-Key: ng_live_xxxxxxxxxxxx
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
U kunt een sleutel beperken tot specifieke IP-adressen via het dashboard.
Clientbibliotheken
Eén API, vier invoertypen en bulktools die bestanden verwerken waar andere services mee worstelen.
Alles weergevenhttps://namegender.com/api
Geslacht uit naam
Accepteert een voornaam of volledige naam. Titels, tweede voornamen en achternamen worden verwijderd voordat de zoekopdracht plaatsvindt, dus "Dr. Ayşe Yılmaz" en "Ayşe" geven hetzelfde resultaat.
| Parameter | Type | Beschrijving |
|---|---|---|
name
verplicht
|
string
|
De naam om in te delen. Voornaam of volledige naam. |
country
optioneel
|
string
|
ISO 3166-1 alfa-2 landcode. Verbetert de nauwkeurigheid voor namen waarvan het geslacht per regio verschilt, zoals Andrea (man in Italië, vrouw in Duitsland). |
askToAI
optioneel
|
boolean
|
Terugvallen op een taalmodel als de naam niet in de database staat. Kost één extra credit. |
forceToGenderize
optioneel
|
boolean
|
Retourneer het meest waarschijnlijke geslacht, zelfs als het vertrouwen onder de drempel ligt. Standaard uit, omdat een antwoord met muntopgooi gepresenteerd als zeker slechter is dan geen antwoord. |
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
Geslacht uit e-mail
Haalt de persoon uit het lokale deel van het adres en classify dat. "ayse.yilmaz84@example.com" leidt tot Ayşe.
| Parameter | Type | Beschrijving |
|---|---|---|
email
verplicht
|
string
|
Het e-mailadres. Alleen het deel vóór @ wordt gebruikt. |
country
optioneel
|
string
|
ISO 3166-1 alfa-2 landcode. Verbetert de nauwkeurigheid voor namen waarvan het geslacht per regio verschilt, zoals Andrea (man in Italië, vrouw in Duitsland). |
askToAI
optioneel
|
boolean
|
Terugvallen op een taalmodel als de naam niet in de database staat. Kost één extra credit. |
forceToGenderize is hier niet beschikbaar: de naam wordt intern geëxtraheerd, dus het forceren van een resultaat op een onzekere extractie leidt tot twee gissingen.
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
Geslacht uit gebruikersnaam
Verwerkt camelCase, snake_case, navolgende cijfers en voorvoegsel @ tekens. "AyseYilmaz84" leidt tot Ayşe.
| Parameter | Type | Beschrijving |
|---|---|---|
username
verplicht
|
string
|
De gebruikersnaam of handle. Een voorvoegsel @ wordt genegeerd. |
country
optioneel
|
string
|
ISO 3166-1 alfa-2 landcode. Verbetert de nauwkeurigheid voor namen waarvan het geslacht per regio verschilt, zoals Andrea (man in Italië, vrouw in Duitsland). |
askToAI
optioneel
|
boolean
|
Terugvallen op een taalmodel als de naam niet in de database staat. Kost één extra credit. |
forceToGenderize
optioneel
|
boolean
|
Retourneer het meest waarschijnlijke geslacht, zelfs als het vertrouwen onder de drempel ligt. Standaard uit, omdat een antwoord met muntopgooi gepresenteerd als zeker slechter is dan geen antwoord. |
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
Bulkaanvraag
Verzend tot 100 namen in één aanvraag. Gebruik dit in plaats van looping: één bulkaanroep voor 100 namen is één enkele trip en een enkele gededupliceerde zoekopdracht.
| Parameter | Type | Beschrijving |
|---|---|---|
names
verplicht
|
string[]
|
Array van namen. Maximaal 100 items. |
type
optioneel
|
string
|
Wat de items zijn: naam, e-mail of gebruikersnaam. Standaard naar naam. |
country
optioneel
|
string
|
Toegepast op elk item in de aanvraag. |
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" }
]
}
Resultaten retourneren in dezelfde volgorde als u ze hebt verzonden. Credits worden per naam in rekening gebracht, en de hele aanvraag wordt afgewezen voordat enig werk gebeurt als uw saldo onvoldoende is, dus u krijgt nooit een half verwerkte batch.
Het samenvattingsblok laat u de match rate in één oogopslag zien, zodat u kunt bepalen of de invoer opschoning nodig heeft voordat u de rest verwerkt.
https://namegender.com/api/me
Account & quotum
Controleer uw resterende saldo zonder een credit uit te geven.
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
}
Niet-Latijnse schriften
Stuur een naam in zijn eigen schrift en wij koppelen het aan de referentiegegevens. Geen extra parameter nodig: wij detecteren het schrift en kiezen de juiste strategie.
Arabisch schrift laat korte klinkers weg, dus محمد wordt "mhmd" terwijl onze gegevens "muhammed" bevatten. Wij matchen op het medeklinkerpatroon en behouden de vrouwelijke ة marker, dus خالد (Khalid) en خالدة (Khalida) blijven gescheiden. Omvat ook Perzische en Urdu-namen in Arabisch schrift.
Geconverteerd naar Pinyin. De familienaam staat eerst in het Chinees, dus 李明 heeft familienaam 李 (Li) met voornaam 明 (Ming) — wij verwijderen de familienaam voordat wij opzoeken. Een enkel teken is een volledige voornaam en wordt als één teken behandeld.
Dezelfde familienaam-eerst-verwerking als Chinees, met gebruik van algemene Koreaanse familienamen.
Hiragana en katakana worden correct gelezen (ひろし → Hiroshi).
Russische, Oekraïense, Bulgaarse en Servische namen translitereren rechtstreeks.
Hindi-, Marathi- en Nepalese namen. De inherente sluitende klinker wordt verwerkt (राहुल → Rahul, niet "Rahula").
Japanse kanji en Chinese tekens bevinden zich in hetzelfde Unicode-bereik, dus we kunnen ze niet van elkaar onderscheiden op basis van de tekens alleen. Han-invoer wordt als Chinees gelezen: een kanjinaam die we niet exact hebben opgeslagen krijgt zijn Mandarijnse uitspraak, wat voor een Japanse naam meestal onjuist is (健太 wordt "jian tai" gelezen terwijl de naam Kenta is). Namen die we hebben opgeslagen komen exact overeen en zijn correct. Stuur Japanse namen in kana of Latin om zeker te zijn.
Thais laat klinkers weg net als Arabisch en heeft zijn eigen matching-laag. Dit is nog niet gebouwd, dus deze retourneren 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" }
Wanneer we een script helemaal niet kunnen omzetten, is de respons gender: null met source: none. Controleer het source-veld: script betekent dat we hebben getranslitereerd, db betekent dat we de tekens die u heeft verzonden rechtstreeks hebben vergeleken. De twee hebben verschillende betrouwbaarheid, en we tonen u welke u heeft ontvangen.
Responsevelden
Identiek voor alle endpoints.
| Veld | Type | Beschrijving |
|---|---|---|
status
|
boolean
|
false wanneer de request mislukt. Controleer dit eerst. |
used_credits
|
integer
|
Credits die deze request verbruikt heeft. |
remaining_credits
|
integer
|
Credits die resterend na deze request. |
expires
|
null
|
Altijd null. Aankochte credits verlopen niet. |
q
|
string
|
Je input, onveranderd teruggegeven. |
name
|
string
|
De naam die we daadwerkelijk hebben opgezocht na het verwijderen van titels en familienamen. |
gender
|
string
|
male, female, of null wanneer we niet zeker genoeg zijn. |
country
|
string
|
Het land waarvan de statistieken afkomstig zijn, of null voor de wereldwijde samenvatting. |
total_names
|
integer
|
Hoeveel echte personen dit antwoord is gebaseerd op. 0 betekent dat de bron verhoudingen geeft in plaats van aantallen, niet dat het antwoord zwak is. |
probability
|
integer
|
Vertrouwen in het aangegeven geslacht, 50 tot 100. 0 wanneer geslacht null is. |
duration
|
string
|
Verwerkingstijd aan serverzijde. |
Twee velden die andere services niet bieden
source geeft aan waar het antwoord vandaan komt: de referentiedatabase, een fuzzy match, of de AI-fallback. matched_as benoemt de entry waar een fuzzy match op landde. Samen laten ze je bepalen hoeveel je één resultaat vertrouwt in plaats van het voor lief te nemen.
| Veld | Type | Beschrijving |
|---|---|---|
source
|
string
|
db, fuzzy, llm, of none. |
confidence
|
string
|
hoog, gemiddeld, laag, ongecontroleerd of onbekend, gebaseerd op steekproefgegevens. |
matched_as
|
string
|
Voor een fuzzy match, de databaseentry die overeenkomt. Anders null. |
Foutcodes
Fouten retourneren een JSON-body met status: false en een machine-leesbare foutstring. Match op error, niet op het bericht: berichten zijn vertaald en kunnen veranderen.
| Code | HTTP | Betekenis |
|---|---|---|
missing_key |
401 | API-sleutel ontbreekt. Geef deze door als "key"-parameter of Authorization: Bearer header. |
invalid_key |
401 | Deze API-sleutel is niet geldig. |
revoked_key |
401 | Deze API-sleutel is ingetrokken. |
blocked |
403 | Dit account is opgeschort. Neem contact op met ondersteuning. |
email_not_verified |
403 | Het e-mailadres van dit account is nog niet bevestigd. Open de bevestigingslink die we je hebben gestuurd of vraag een nieuwe aan in je dashboard. |
ip_not_allowed |
403 | Verzoeken van dit IP-adres zijn niet toegestaan voor deze sleutel. |
forbidden |
403 | U bent niet gemachtigd om deze actie uit te voeren. |
no_credits |
402 | U bent zonder tegoed. Koop meer of wacht tot uw dagelijkse gratis quota wordt opnieuw ingesteld. |
missing_input |
400 | De parameter "name" is verplicht. |
invalid_input |
422 | De parameter "name" is niet geldig. |
too_many_items |
422 | Maximaal 100 items kunnen in één verzoek worden verzonden. |
ai_consent_required |
422 | askToAI stuurt de naam naar een AI-provider van derden, waar dit account niet mee heeft ingestemd. Zie het veld "ai" voor wie die provider is, en schakel AI-zoekopdrachten in uw dashboardinstellingen in. |
unknown_endpoint |
404 | Er bestaat geen endpoint op dit pad. Controleer de URL in de API-documentatie. |
method_not_allowed |
405 | Dit endpoint accepteert geen DELETE-verzoeken. |
payload_too_large |
413 | Die requestbody is te groot. |
rate_limited |
429 | Te veel verzoeken. Vertraag en probeer het over een moment opnieuw. |
not_ready |
503 | De naamdatabase wordt opnieuw opgebouwd. Probeer het over een moment opnieuw. |
server_error |
500 | Er is iets misgegaan aan onze kant. Wij zijn hiervan op de hoogte gesteld. |
{
"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"
}
Snelheidslimieten
Normaal gebruik bereikt geen limiet. De limiet bestaat om te voorkomen dat een gelekte sleutel wordt misbruikt, en wordt per API-sleutel geteld in plaats van per IP zodat meerdere klanten op één server elkaars quotum niet opgebruiken.
Huidige limiet: 1.200 requests per minuut per sleutel. Meer nodig? Vraag het en we verhogen het op je account.
Elke response bevat de standaard X-RateLimit-Limit en X-RateLimit-Remaining headers.
Migreren van een ander platform
Onze responsevelden en parameternamen volgen de gebruikelijke conventie, dus omschakelen betekent meestal één regel wijzigen: de basis-URL.
- https://api.other-provider.io/api?name=Ayşe&key=KEY
+ https://namegender.com/api?name=Ayşe&key=KEY
askToAI en forceToGenderize behouden hun originele spelling om exact deze reden. Als een veld dat je gebruikt ontbreekt, laat het ons weten en we voegen het toe.
Codeer je invoer
Namen bevatten spaties en niet-ASCII-tekens. URL-codeer de waarde voordat je deze in een querystring plaatst, of gebruik POST met een 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