Συνέχεια → Επισκόπηση

Αναφορά REST API

Λίγα endpoint, ένα σχήμα απόκρισης. Όλα παρακάτω είναι ενεργά στον λογαριασμό σας.

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

Κάθε endpoint επιστρέφει το ίδιο σχήμα, οπότε μπορείτε να αλλάξετε εισόδους χωρίς να αλλάξετε τον κώδικα ανάλυσής σας.

Έλεγχος ταυτότητας

Κάθε αίτημα μεταφέρει το API key σας σε μια κεφαλίδα. Χρησιμοποιήστε από προεπιλογή το Authorization: Bearer, ή το X-Api-Key όταν ο HTTP client σας δεσμεύει την κεφαλίδα Authorization για κάτι άλλο. Ένα key που τοποθετείται στο URL απορρίπτεται: τα URL αντιγράφονται σε logs proxy, εργαλεία analytics και στο ιστορικό του περιηγητή.

Κεφαλίδα Authorization (συνιστάται)
Authorization: Bearer ng_live_xxxxxxxxxxxx

Η αντιγραφή απέτυχε. Επιλέξτε και αντιγράψτε το κείμενο.

Κεφαλίδα X-Api-Key
X-Api-Key: ng_live_xxxxxxxxxxxx

Η αντιγραφή απέτυχε. Επιλέξτε και αντιγράψτε το κείμενο.

Ποτέ μην εκθέσετε το κλειδί σας στον κώδικα πελάτη. Οι κλήσεις από περιηγητή ή εφαρμογή κινητού θα πρέπει να διέρχονται από το δικό σας backend.

Μπορείτε να περιορίσετε ένα κλειδί σε συγκεκριμένες διευθύνσεις IP από τον πίνακα ελέγχου.

Βιβλιοθήκες πελάτη

Λεπτά περιτυλίγματα πάνω από το REST API. Στέλνουν το κλειδί σας, δημιουργούν κάθε αίτημα και μετατρέπουν τις αποκρίσεις σφάλματος σε εξαιρέσεις.

npm install namegender

Η αντιγραφή απέτυχε. Επιλέξτε και αντιγράψτε το κείμενο.

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>

Η αντιγραφή απέτυχε. Επιλέξτε και αντιγράψτε το κείμενο.

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')

Η αντιγραφή απέτυχε. Επιλέξτε και αντιγράψτε το κείμενο.

Install-Module NameGender

Η αντιγραφή απέτυχε. Επιλέξτε και αντιγράψτε το κείμενο.

cargo add namegender

Η αντιγραφή απέτυχε. Επιλέξτε και αντιγράψτε το κείμενο.

Δεν χρειάζεστε κάποια. Το API είναι λίγα μόνο απλά JSON endpoints· μια βιβλιοθήκη σας εξοικονομεί ένα απόγευμα, όχι ένα έργο. Αν η γλώσσα σας δεν αναφέρεται, το REST reference έχει παραδείγματα αντιγραφής-επικόλλησης.

Προβολή όλων

Βοηθοί AI (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
Διαβάζει το όνομα σε μια διεύθυνση email· διευθύνσεις ρόλων όπως info@ επιστρέφουν άγνωστο.
gender_from_username
Διαβάζει το όνομα σε ένα όνομα χρήστη ή handle.
gender_bulk
Έως 100 τιμές σε ένα αίτημα, με σύνοψη του ποσοστού αντιστοίχισης.
name_countries
Χώρες όπου έχει καταγραφεί ένα όνομα. Δεν αποτελεί ισχυρισμό για την προέλευση.
salutation
Η εναρκτήρια γραμμή μιας επιστολής στη γλώσσα της επιστολής· η ουδέτερη μορφή όταν το φύλο δεν είναι βέβαιο.
name_check
Αν ένα όνομα που πληκτρολογήθηκε σε φόρμα μοιάζει πραγματικό, με τους λόγους. Δεν χαρακτηρίζει ποτέ ένα όνομα ψεύτικο.
age_from_name
Διάμεση ηλικία και ηλικιακά εύρη των ανθρώπων με ένα μικρό όνομα στις Ηνωμένες Πολιτείες, τη Γαλλία και τη Νορβηγία.
account_status
Υπόλοιπο credits και η σημερινή δωρεάν ποσόστωση.

Κάθε αναζήτηση χρησιμοποιεί credits από τον λογαριασμό στον οποίο ανήκει το κλειδί, ακριβώς όπως μια άμεση κλήση 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. Λειτουργεί μόνο αφού ενεργοποιήσετε τις αναζητήσεις AI στις ρυθμίσεις σας και κοστίζει ένα επιπλέον credit.
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

Φύλο από email

Εξάγει το όνομα από το τοπικό μέρος της διεύθυνσης, κατόπιν ταξινομεί αυτό. "ayse.yilmaz84@example.com" αναλύεται σε Ayşe.

Παράμετρος Τύπος Περιγραφή
email
υποχρεωτικό
string Η διεύθυνση email. Χρησιμοποιείται μόνο το μέρος πριν το @.
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. Λειτουργεί μόνο αφού ενεργοποιήσετε τις αναζητήσεις AI στις ρυθμίσεις σας και κοστίζει ένα επιπλέον credit.
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 Το όνομα χρήστη ή handle. Ένα αρχικό @ αγνοείται.
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. Λειτουργεί μόνο αφού ενεργοποιήσετε τις αναζητήσεις AI στις ρυθμίσεις σας και κοστίζει ένα επιπλέον credit.
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 ονόματα σε ένα αίτημα. Χρησιμοποιήστε αυτό αντί για βρόχο: ένα μαζικό κάλεσμα για 100 ονόματα είναι ένα μόνο round trip και μια μόνο αναζήτηση χωρίς διπλότυπα.

Παράμετρος Τύπος Περιγραφή
names
υποχρεωτικό
string[] Πίνακας ονομάτων. Μέγιστο 100 στοιχεία.
type
προαιρετικό
string Τι είναι τα στοιχεία: όνομα, email ή όνομα χρήστη. Προεπιλεγμένη τιμή όνομα.
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" }
  ]
}

Τα αποτελέσματα έρχονται με την ίδια σειρά που τα στείλατε. Τα credit χρεώνονται ανά όνομα, και ολόκληρο το αίτημα απορρίπτεται πριν από οποιοδήποτε έργο εάν το υπόλοιπό σας είναι ανεπαρκές, οπότε ποτέ δεν λαμβάνετε μερικώς επεξεργασμένη παρτίδα.

Το ρόφημα σύνοψης σας ενημερώνει για την αναλογία αντιστοίχισης με μια ματιά, ώστε να μπορείτε να αποφασίσετε εάν η είσοδος χρειάζεται καθαρισμό πριν επεξεργαστείτε το υπόλοιπο.

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

Εργασίες αρχείων

Ανεβάστε ένα αρχείο CSV ή XLSX έως 100 MB και 1.000.000 γραμμές και λάβετέ το πίσω με στήλες φύλου σε κάθε γραμμή. Μία μονάδα ανά γραμμή, χρεώνεται μόνο αν η εργασία ολοκληρωθεί.

  1. 1. POST /batches Στείλτε το αρχείο και το name_column. Η εργασία μπαίνει αμέσως στην ουρά.
  2. 2. GET /batches/{id} Διαβάζετε την εργασία μέχρι το status να γίνει completed ή failed. Το poll_after_seconds δείχνει πόσο να περιμένετε ανάμεσα στις αναγνώσεις.
  3. 3. GET /batches/{id}/result Κατεβάστε το αποτέλεσμα. Επιστρέφει στη μορφή που ανεβάσατε.
Παράμετρος Τύπος Περιγραφή
file
υποχρεωτικό
file CSV, TSV ή XLSX με γραμμή επικεφαλίδων.
name_column
υποχρεωτικό
string Η επικεφαλίδα της στήλης με τα ονόματα, ακριβώς όπως στο αρχείο. Υποχρεωτική εκτός αν start=false.
country_column
προαιρετικό
string Η επικεφαλίδα μιας στήλης με κωδικό χώρας ανά γραμμή.
country
προαιρετικό
string Προεπιλεγμένη χώρα για γραμμές χωρίς χώρα.
ai_fallback
προαιρετικό
boolean Ερώτηση σε μοντέλο AI για ονόματα που δεν υπάρχουν στο σύνολο δεδομένων. Απαιτεί συναίνεση AI στις Ρυθμίσεις.
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. Μια νέα προσπάθεια με το ίδιο κλειδί επιστρέφει την πρώτη εργασία αντί να ανοίξει δεύτερη.

Έως 3 εργασίες μπορούν να βρίσκονται ταυτόχρονα στην ουρά ή σε εκτέλεση. Μια εργασία που δεν έχει ξεκινήσει μπορεί να ακυρωθεί και οι μονάδες της επιστρέφονται· μια εργασία σε επεξεργασία δεν μπορεί να σταματήσει.

POST https://your-server.example/…
Markdown

Webhooks

Προσθέστε ένα endpoint στα Webhooks του πίνακα ελέγχου και θα του στέλνουμε ένα υπογεγραμμένο POST όταν μια εργασία αρχείου ολοκληρώνεται ή αποτυγχάνει, χωρίς να χρειάζεται να ρωτάτε.

Συμβάν Τύπος Περιγραφή
batch.completed BatchJob Η εργασία ολοκληρώθηκε. Το σώμα περιέχει την εργασία ακριβώς όπως την επιστρέφει το GET /batches/{id}.
batch.failed BatchJob Η εργασία απέτυχε και δεν χρεώθηκε. Διακλαδώστε με βάση το error.code.
credits.low CreditsAlert Με τον τρέχοντα ρυθμό οι μονάδες αρκούν για 7 ημέρες ή λιγότερο. Ελέγχεται κάθε ώρα· οι ανανεώσεις συνδρομής λαμβάνονται υπόψη.
credits.depleted CreditsAlert Το υπόλοιπο μηδενίστηκε και τα αιτήματα απορρίπτονται με 402. Ελέγχεται κάθε ώρα.
webhook.test object Στέλνεται μόνο από το «Αποστολή δοκιμαστικού συμβάντος» στον πίνακα ελέγχου και μόνο σε εκείνο το endpoint.
Κεφαλίδα Τύπος Περιγραφή
NameGender-Signature
υποχρεωτικό
string t=<δευτερόλεπτα unix>,v1=<hex>. Μετά την ανανέωση του μυστικού εμφανίζεται δεύτερο v1 για 24 ώρες.
NameGender-Event-Id
υποχρεωτικό
string Το αναγνωριστικό του συμβάντος. Ίδιο σε κάθε νέα προσπάθεια του ίδιου συμβάντος.
NameGender-Delivery-Attempt
υποχρεωτικό
integer 1 στην πρώτη προσπάθεια, έως 8.

Επαληθεύστε κάθε αίτημα

Το v1 είναι το HMAC-SHA256 της χρονοσφραγίδας, μιας τελείας και του ακατέργαστου σώματος, με το μυστικό του endpoint σας. Συγκρίνετε σε σταθερό χρόνο, δεχτείτε το αίτημα αν ταιριάζει οποιοδήποτε v1 και απορρίψτε χρονοσφραγίδα που απέχει πάνω από πέντε λεπτά από το ρολόι σας. Οι βιβλιοθήκες πελάτη τα κάνουν όλα αυτά με μία κλήση.

Επαληθεύστε το σώμα ακριβώς όπως λήφθηκε. Ένα framework που αναλύει το JSON και το σειριοποιεί ξανά αλλάζει τα byte και η υπογραφή δεν ταιριάζει.
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 μέσα σε 10 δευτερόλεπτα και κάντε τη δουλειά μετά.
  • Κάθε άλλη απάντηση, μαζί με τις ανακατευθύνσεις, επαναλαμβάνεται έως 7 φορές μέσα σε περίπου 45 ώρες. Αν ένα endpoint αποτυγχάνει για τρεις ημέρες, απενεργοποιείται και λαμβάνετε email.
  • Μια νέα προσπάθεια έχει το ίδιο αναγνωριστικό και η σειρά δεν είναι εγγυημένη. Αφαιρέστε τα διπλότυπα με το 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"]
}

Ένα credit ανά αίτημα. Το `share` υπολογίζεται σε όλες τις χώρες με καταμετρήσεις, οπότε αθροίζεται στο 100 μόνο όταν το `limit` δεν περικόπτει τη λίστα· και το `counted_countries` μετρά πριν από την περικοπή. Η `attested_in` δεν περιλαμβάνει ποσοστά καθώς δεν υπάρχουν μετρήσεις για τον υπολογισμό τους.

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

Προσφώνηση

Μετατρέπει ένα όνομα σε προσφώνηση έτοιμη για επιστολή ή email, σε δέκα γλώσσες: “Sehr geehrte Frau Dr. Müller,”, “Sayın Ahmet Bey,”, “Madame,”, “山田様”. Ο προσδιορισμός φύλου περιλαμβάνεται και κοστίζει το ίδιο ένα credit. Κάθε απάντηση έχει μια επίσημη, μια ανεπίσημη και μια ουδέτερη γραμμή, καθώς και τα μέρη της επίσημης γραμμής.

Παράμετρος Τύπος Περιγραφή
name
υποχρεωτικό
string Πλήρες όνομα, μαζί με τίτλους (“Dr. Anna Müller”). Στείλτε αυτό ή `first_name` και `last_name`.
first_name, last_name
προαιρετικό
string Χρησιμοποιήστε τα αντί για `name` όταν το CRM σας κρατά τα ονόματα σε ξεχωριστά πεδία. Δεν γίνεται καμία ανάλυση.
email
προαιρετικό
string Διεύθυνση email, όταν δεν αποστέλλεται όνομα. Το όνομα διαβάζεται από το τμήμα πριν από το @, χωρίς τόνους (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 Ένδειξη χώρας για τον προσδιορισμό φύλου, όπως στα endpoints φύλου. Επιλέγει τη γλώσσα μόνο όταν δεν στέλνεται `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 δέχεται έως 100 ονόματα στο `names`, ένα credit το καθένα, με τις ίδιες επιλογές για κάθε όνομα.

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

Έλεγχος ονόματος

Λέει αν ένα όνομα που πληκτρολογήθηκε σε φόρμα εγγραφής ή φόρμα δυνητικών πελατών μοιάζει με όνομα πραγματικού προσώπου, και γιατί. Εντοπίζει τυχαία πληκτρολόγηση (“asdf qwerty”), συμπληρωματικές τιμές (“Test Test”, “John Doe”, “n/a”), φανταστικούς χαρακτήρες (“Mickey Mouse”), βωμολοχίες, καθώς και ψηφία, σύμβολα ή διευθύνσεις email στο πεδίο του ονόματος. Ένα credit ανά όνομα.

Δεν πρόκειται για επαλήθευση ταυτότητας και δεν χαρακτηρίζει ποτέ ένα όνομα ψεύτικο. Χρησιμοποιήστε τα `implausible` και `suspicious` για να επισημάνετε μια εγγραφή ή να ζητήσετε περισσότερες πληροφορίες, όχι για να απορρίπτετε αυτόματα ανθρώπους.
Παράμετρος Τύπος Περιγραφή
name
υποχρεωτικό
string Το όνομα όπως πληκτρολογήθηκε στη φόρμα. Στείλτε αυτό ή `first_name` και `last_name`.
first_name, last_name
προαιρετικό
string Χρησιμοποιήστε τα αντί για `name` όταν η φόρμα σας έχει ξεχωριστά πεδία.
country, locale, ip
προαιρετικό
string Ένδειξη χώρας, όπως στα endpoints φύλου. Βοηθά στην ανάλυση του ονόματος και στην αναζήτηση στα μητρώα.
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` όταν υπάρχει σήμα υψηλής σοβαρότητας (μοτίβο πληκτρολογίου, επαναλαμβανόμενα γράμματα, συμπληρωματική τιμή, βωμολοχία, email ή URL), `suspicious` με ένα μεσαίο (φανταστικός χαρακτήρας, ψηφία, σύμβολα, επωνυμία εταιρείας, χωρίς φωνήεντα, πολύ μεγάλο) ή δύο χαμηλά, και `plausible` σε κάθε άλλη περίπτωση. Το `score` κυμαίνεται από 0 έως 100 για το δικό σας όριο. Ένα μικρό όνομα που υπάρχει σε επίσημα ληξιαρχικά αρχεία γεννήσεων το ανεβάζει· ένα όνομα που δεν έχουμε δει ποτέ δεν το κατεβάζει από μόνο του. Τα επώνυμα κρίνονται μόνο από τη μορφή τους: πίσω από αυτό το endpoint δεν υπάρχει σύνολο δεδομένων επωνύμων.

Δοκιμάστηκε σε 4.610 πραγματικά μικρά ονόματα σε εννέα γραφές, μόνα τους και μαζί με επώνυμο: κανένα δεν χαρακτηρίστηκε ύποπτο ή απίθανο. Επώνυμα όπως Null, Test ή Cockburn, ονόματα δύο γραμμάτων όπως Ng και μονά ονόματα αφήνονται σκόπιμα ανέγγιχτα.

Το POST /api/v1/name-check/bulk δέχεται έως 100 ονόματα στο `names`, ένα credit το καθένα, με σύνοψη των τριών αξιολογήσεων.

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

Ηλικία από το όνομα

Πόσο χρονών είναι οι εν ζωή άνθρωποι με ένα μικρό όνομα: η διάμεση ηλικία, το μεσαίο μισό τους (`age_range`) και το μεσαίο 80% (`age_range_80`). Brittany στις Ηνωμένες Πολιτείες: διάμεσος 36, οι μισοί μεταξύ 32 και 38. Ένα credit ανά όνομα.

Περιγράφει μια ομάδα, όχι ένα πρόσωπο. Για τα περισσότερα ονόματα το μεσαίο μισό εκτείνεται σε 10 έως 25 χρόνια. Χρησιμοποιήστε το για ανάλυση κοινού, τμηματοποίηση και έρευνα, ποτέ για να αποφασίσετε κάτι για ένα πρόσωπο: δανειοδότηση, πρόσληψη, στέγαση, ασφάλιση, επιλεξιμότητα ή έλεγχο ηλικίας.
Παράμετρος Τύπος Περιγραφή
name
υποχρεωτικό
string Ένα μικρό όνομα ή ένα πλήρες όνομα· χρησιμοποιείται το μικρό όνομα.
gender
προαιρετικό
string `male` ή `female` για να χρησιμοποιηθούν μόνο οι εγγραφές αυτού του φύλου. Οι άνδρες με το όνομα Leslie είναι 16 χρόνια μεγαλύτεροι από τις γυναίκες με το ίδιο όνομα.
country, locale, ip
προαιρετικό
string Ένδειξη χώρας, όπως στα endpoints φύλου. Καλύπτονται: 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 δέχεται έως 100 ονόματα στο `names`, ένα credit το καθένα, με τη σειρά αποστολής.

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

Υπόλοιπο

Δείτε το υπόλοιπο credits σας και ό,τι απομένει από τη σημερινή δωρεάν ποσόστωση. Αυτή η κλήση δεν χρεώνεται.

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". Αντιστοιχούμε με βάση το σχέδιο συμφώνων και διατηρούμε το θηλυκό σημάδι ة, ώστε خالد (Khalid) και خالدة (Khalida) να παραμένουν διακριτά. Καλύπτει επίσης Περσικά και Ουρδού ονόματα γραμμένα σε αραβικό γράμμα.

Κινέζικα χαρακτήρα

Μετατροπή σε Pinyin. Το επώνυμο προηγείται στα κινέζικα, οπότε 李明 έχει επώνυμο 李 (Li) και δεδομένο όνομα 明 (Ming) — αφαιρούμε το επώνυμο πριν την αναζήτηση. Ένας απλός χαρακτήρας είναι ένα πλήρες δεδομένο όνομα.

Κορεατικά

Ίδια επεξεργασία επωνύμου-πρώτο όπως τα κινέζικα, χρησιμοποιώντας τα κοινά κορεατικά επώνυμα.

Ιαπωνικά kana

Hiragana και katakana διαβάζονται σωστά (ひろし → Hiroshi).

Κυριλλικά

Ρωσικά, Ουκρανικά, Βουλγαρικά και Σερβικά ονόματα μεταφράζονται άμεσα.

Devanagari

Ινδικά, Μαράθι και Νεπαλικά ονόματα. Το εγγενές φωνήεν στο τέλος επεξεργάζεται (राहुल → Rahul, όχι "Rahula").

Δεν υποστηρίζεται
Ιαπωνικά kanji

Τα ιαπωνικά kanji και τα κινέζικα χαρακτήρα καταλαμβάνουν το ίδιο εύρος Unicode, οπότε δεν μπορούμε να τα διακρίνουμε μόνο από τους χαρακτήρες. Η είσοδος Han διαβάζεται ως κινέζικα: ένα όνομα kanji που δεν έχουμε ήδη αποθηκεύσει ακριβώς παίρνει την ανάγνωσή του στα Μανδαρινικά, η οποία για ένα ιαπωνικό όνομα είναι συνήθως λανθασμένη (το 健太 διαβάζεται ως "jian tai" ενώ το όνομα είναι Kenta). Τα ονόματα που έχουμε αποθηκεύσει ταιριάζουν ακριβώς και είναι σωστά. Στείλτε ιαπωνικά ονόματα σε kana ή Λατινικά για σιγουριά.

Ταϊλανδικά

Τα ταϊλανδικά παραλείπουν τα φωνήεντα όπως τα αραβικά και χρειάζονται δικό τους επίπεδο αντιστοίχησης. Δεν έχει υλοποιηθεί ακόμη, οπότε αυτά επιστρέφουν 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 σημαίνει ότι ταιριάσαμε απευθείας τους χαρακτήρες που στείλατε. Τα δύο έχουν διαφορετική confidence και σας δείχνουμε ποιο πήρατε.

Πεδία απάντησης

Ίδια σε όλα τα endpoints.

Πεδίο Τύπος Περιγραφή
credits_charged integer Πόσα credits αφαιρέθηκαν για αυτή την κλήση.
credits_remaining integer Το διαθέσιμο υπόλοιπό σας αφού πληρωθεί αυτή η κλήση: αγορασμένα credits συν ό,τι απομένει από τη σημερινή δωρεάν ποσόστωση.
query string Η είσοδος ακριβώς όπως τη στείλατε, πριν από οποιονδήποτε καθαρισμό.
name string Το όνομα που πραγματικά αναζητήσαμε μετά την αφαίρεση τίτλων και επωνύμων.
first_name string Όνομα που αναγνωρίστηκε από την είσοδο. Επιστρέφεται ακόμη κι όταν το gender είναι null, χωρίς επιπλέον χρέωση.
middle_name string Επιπλέον ονόματα ανάμεσα στο όνομα και το επώνυμο. Τα αρχικά παραλείπονται.
last_name string Επώνυμο, μαζί με μόρια όπως van ή de la. Πάντα null για ονόματα χρήστη.
name_type string personal, organization (Acme A.E.) ή role (info@, εξυπηρέτηση πελατών). Οι οργανισμοί και οι ρόλοι δεν λαμβάνουν φύλο.
gender string male, female, ή null όταν δεν είμαστε αρκετά σίγουροι.
country string Η χώρα από την οποία προήλθαν τα στατιστικά, ή null για το παγκόσμιο σύνολο.
country_source string Από πού προήλθε η χώρα: country, locale, ip ή null όταν η απάντηση είναι παγκόσμια.
sample_size integer Αριθμός καταγεγραμμένων ατόμων πίσω από αυτή την απάντηση. 0 σημαίνει ότι η πηγή δημοσιεύει αναλογίες ή μαρτυρίες, όχι έναν αριθμό που μπορούμε να ελέγξουμε.
probability integer Εμπιστοσύνη στο δηλωμένο gender, 50 έως 100. 0 όταν το gender είναι null.
took_ms integer Ο χρόνος που χρειαστήκαμε για την αναζήτηση, σε ακέραια χιλιοστά του δευτερολέπτου. Ο χρόνος δικτύου από τη δική σας πλευρά δεν περιλαμβάνεται.

Δύο πεδία που άλλες υπηρεσίες δεν σας δίνουν

source σας λέει από πού προήλθε η απάντηση: τη βάση δεδομένων αναφοράς, μια ασαφή αντιστοίχιση ή την εναλλακτική λύση AI. matched_as ονοματίζει την καταχώρηση που ταίριασε με ασαφή αντιστοίχιση. Μαζί σας επιτρέπουν να αποφασίσετε πόσο να εμπιστευθείτε ένα μεμονωμένο αποτέλεσμα αντί να το λάβετε με πίστη.

Πεδίο Τύπος Περιγραφή
source string db, script, fuzzy, llm, ή none.
confidence string υψηλή, μεσαία, χαμηλή, ανεπιβεβαίωτη ή άγνωστη, με βάση τα δεδομένα δείγματος.
matched_as string Για μια ασαφή αντιστοίχιση, η καταχώρηση βάσης δεδομένων που ταίριασε. Διαφορετικά null.

Κωδικοί σφάλματος

Ο κωδικός κατάστασης HTTP σας λέει ότι μια κλήση απέτυχε. Το σώμα JSON δίνει στη συνέχεια την αιτία στο error, την εξηγεί στο message και σας δίνει ένα request_id για να το αναφέρετε στην υποστήριξη, μαζί με έναν σύνδεσμο προς την αντίστοιχη γραμμή της τεκμηρίωσης παρακάτω. Διακλαδώστε με βάση το error, ποτέ το message: τα μηνύματα μεταφράζονται και μπορεί να αναδιατυπωθούν.

Κώδικας HTTP Σημασία
missing_key 401 Δεν στάλθηκε API key. Προσθέστε στο αίτημα μια κεφαλίδα Authorization: Bearer ή μια κεφαλίδα X-Api-Key.
invalid_key 401 Αυτό το API key δεν είναι έγκυρο.
revoked_key 401 Αυτό το API key έχει ανακληθεί.
blocked 403 Αυτός ο λογαριασμός έχει αναστείλει. Επικοινωνήστε με την υποστήριξη.
email_not_verified 403 Η διεύθυνση email αυτού του λογαριασμού δεν έχει επιβεβαιωθεί ακόμη. Ανοίξτε τον σύνδεσμο επιβεβαίωσης που σας στείλαμε ή ζητήστε νέον από τον πίνακα ελέγχου.
ip_not_allowed 403 Τα αιτήματα από αυτήν την IP διεύθυνση δεν επιτρέπονται για αυτό το κλειδί.
proxy_secret_required 403 Αυτό το κλειδί λειτουργεί μόνο μέσω της API marketplace του, η οποία υπογράφει κάθε αίτημα. Χρησιμοποιήστε το κλειδί που σας εκδόθηκε εκεί.
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 key και όχι ανά IP, έτσι ώστε πολλοί πελάτες σε έναν διακομιστή να μην καταναλώνουν το δικαίωμα ο ένας του άλλου.

Τρέχον όριο: 1.200 αιτήματα ανά λεπτό ανά κλειδί. Χρειάζεστε περισσότερα; Ζητήστε και θα το αυξήσουμε στον λογαριασμό σας.

Κάθε απάντηση φέρει τα τυπικά headers X-RateLimit-Limit και X-RateLimit-Remaining.

Κενά και μη λατινικά γράμματα σε αιτήματα GET

Ένα όνομα όπως Ayşe Yılmaz ή 中村 δεν μπορεί να σταλεί μέσα σε URL όπως είναι γραμμένο. Κωδικοποιήστε την τιμή με percent-encoding όταν καλείτε με GET, ή στείλτε την σε σώμα JSON με 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

Η αντιγραφή απέτυχε. Επιλέξτε και αντιγράψτε το κείμενο.