Doorgaan → Overzicht

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 header (aanbevolen)
Authorization: Bearer ng_live_xxxxxxxxxxxx
Aangepaste header
X-Api-Key: ng_live_xxxxxxxxxxxx
Query parameter
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
Stel uw sleutel nooit bloot in code aan de clientzijde. Aanroepen van een browser of mobiele app moeten via uw eigen backend gaan.

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 weergeven
GET · POST https://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
}
GET · POST 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"
}
GET · POST 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"
}
POST 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.

GET 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.

Ondersteund
Arabisch schrift

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.

Chinese tekens

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.

Koreaans

Dezelfde familienaam-eerst-verwerking als Chinees, met gebruik van algemene Koreaanse familienamen.

Japans kana

Hiragana en katakana worden correct gelezen (ひろし → Hiroshi).

Cyrillisch

Russische, Oekraïense, Bulgaarse en Servische namen translitereren rechtstreeks.

Devanagari

Hindi-, Marathi- en Nepalese namen. De inherente sluitende klinker wordt verwerkt (राहुल → Rahul, niet "Rahula").

Niet ondersteund
Japanse kanji

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

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.
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