REST API-referens
Några få slutpunkter, en svarsstruktur. Allt nedan är live mot ditt konto.
https://namegender.com/api/v1/gender
Registrera dig gratis
Markdown för kodassistenter som Claude Code, Cursor och Copilot. Klistra in i chatten eller ge assistenten länken.
Snabbstart
Skapa en nyckel i din dashboard och skicka din första förfrågan. Inget SDK krävs.
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
Varje slutpunkt returnerar samma struktur, så du kan byta inmatning utan att ändra din parsningskod.
Autentisering
Varje förfrågan skickar din API-nyckel i en header. Använd Authorization: Bearer som standard, eller X-Api-Key när din HTTP-klient använder Authorization-headern till något annat. En nyckel i URL:en avvisas: URL:er kopieras in i proxyloggar, analysverktyg och webbläsarhistorik.
Authorization: Bearer ng_live_xxxxxxxxxxxx
Kopieringen misslyckades. Markera och kopiera texten.
X-Api-Key: ng_live_xxxxxxxxxxxx
Kopieringen misslyckades. Markera och kopiera texten.
Du kan begränsa en nyckel till specifika IP-adresser från dashboarden.
Klientbibliotek
Tunna omslag runt REST API:n. De skickar din nyckel, bygger varje anrop och gör om felsvar till undantag.
npm install namegender
Kopieringen misslyckades. Markera och kopiera texten.
npm install -g namegender
Kopieringen misslyckades. Markera och kopiera texten.
composer require namegender/namegender
Kopieringen misslyckades. Markera och kopiera texten.
pip install namegender-client
Kopieringen misslyckades. Markera och kopiera texten.
gem install namegender
Kopieringen misslyckades. Markera och kopiera texten.
<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>
Kopieringen misslyckades. Markera och kopiera texten.
dotnet add package NameGender --version 0.6.0
Kopieringen misslyckades. Markera och kopiera texten.
go get github.com/anpekesen/namegender-go@v0.7.0
Kopieringen misslyckades. Markera och kopiera texten.
remotes::install_github('anpekesen/namegender-r', ref = 'v0.7.0')
Kopieringen misslyckades. Markera och kopiera texten.
Install-Module NameGender
Kopieringen misslyckades. Markera och kopiera texten.
cargo add namegender
Kopieringen misslyckades. Markera och kopiera texten.
Du behöver inget. API:n består av en handfull enkla JSON-endpoints; ett bibliotek sparar dig en eftermiddag, inte ett projekt. Om ditt språk inte finns med har REST-referensen copy-paste-exempel.
Visa allaAI-assistenter (MCP)
Använd NameGender från Claude, Cursor och alla andra klienter som stöder Model Context Protocol. Fråga assistenten om en lista med namn så anropar den API:t åt dig, med underlaget bredvid varje svar.
claude mcp add namegender -e NAMEGENDER_API_KEY=ng_live_... -- npx -y namegender-mcp
Kopieringen misslyckades. Markera och kopiera texten.
{
"mcpServers": {
"namegender": {
"command": "npx",
"args": [
"-y",
"namegender-mcp"
],
"env": {
"NAMEGENDER_API_KEY": "ng_live_..."
}
}
}
}
Kopieringen misslyckades. Markera och kopiera texten.
Lägg till detta i klientens MCP-konfigurationsfil och starta om den.
Verktyg
gender_from_name- Kön utifrån ett förnamn eller fullständigt namn.
gender_from_email- Läser namnet i en e-postadress; funktionsadresser som info@ ger okänt.
gender_from_username- Läser namnet i ett användarnamn eller handle.
gender_bulk- Upp till 100 värden i en förfrågan, med en sammanfattning av träffgraden.
name_countries- Länder där ett namn finns registrerat. Inget påstående om ursprung.
salutation- Brevets inledande rad på brevets språk; den neutrala formen när könet inte är säkert.
name_check- Om ett namn som skrivits i ett formulär ser verkligt ut, med skälen. Kallar aldrig ett namn falskt.
age_from_name- Medianålder och åldersintervall för personer med ett förnamn i USA, Frankrike och Norge.
account_status- Återstående krediter och dagens gratiskvot.
Varje uppslagning använder krediter från kontot som äger nyckeln, precis som ett direkt API-anrop. Listad i det officiella MCP-registret som io.github.anpekesen/namegender. npm-paket · Källa
Kön från namn
Accepterar förnamn eller fullständigt namn. Titlar, mellannamn och efternamn tas bort före sökning, så "Dr. Ayşe Yılmaz" och "Ayşe" ger samma svar.
| Parameter | Typ | Beskrivning |
|---|---|---|
name
obligatorisk
|
string
|
Namnet som ska klassificeras. Förnamn eller fullständigt namn. |
country
valfri
|
string
|
ISO 3166-1 alpha-2-landskod. Förbättrar noggrannheten för namn vars kön skiljer sig åt mellan regioner, såsom Andrea (man i Italien, kvinna i Tyskland). |
locale
valfri
|
string
|
En språktagg som de-DE eller en_US, till exempel webbläsarens språk. Dess region blir landet när country inte skickas. En tagg utan region (en, de) anger inget land. |
ip
valfri
|
string
|
Slutanvändarens IP-adress. Dess land används när varken country eller en locale med region skickas. Sparas inte. IP geolocation by DB-IP (db-ip.com). |
ai_fallback
valfri
|
boolean
|
Om namnet saknas i våra data, be en språkmodell om en uppskattning i stället för att returnera null. Fungerar bara när AI-uppslag är aktiverade i dina inställningar och kostar en extra kredit. |
best_guess
valfri
|
boolean
|
Returnera det dominerande könet även när underlaget inte når konfidenströskeln. Avstängt som standard: ett nästan 50/50-svar som ser säkert ut gör mer skada än 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
}
Kön från e-post
Extraherar personen från adressens lokala del och klassificerar sedan det. "ayse.yilmaz84@example.com" matchas till Ayşe.
| Parameter | Typ | Beskrivning |
|---|---|---|
email
obligatorisk
|
string
|
E-postadressen. Endast delen före @ används. |
country
valfri
|
string
|
ISO 3166-1 alpha-2-landskod. Förbättrar noggrannheten för namn vars kön skiljer sig åt mellan regioner, såsom Andrea (man i Italien, kvinna i Tyskland). |
locale
valfri
|
string
|
En språktagg som de-DE eller en_US, till exempel webbläsarens språk. Dess region blir landet när country inte skickas. En tagg utan region (en, de) anger inget land. |
ip
valfri
|
string
|
Slutanvändarens IP-adress. Dess land används när varken country eller en locale med region skickas. Sparas inte. IP geolocation by DB-IP (db-ip.com). |
ai_fallback
valfri
|
boolean
|
Om namnet saknas i våra data, be en språkmodell om en uppskattning i stället för att returnera null. Fungerar bara när AI-uppslag är aktiverade i dina inställningar och kostar en extra kredit. |
best_guess
valfri
|
boolean
|
Returnera det dominerande könet även när underlaget inte når konfidenströskeln. Avstängt som standard: ett nästan 50/50-svar som ser säkert ut gör mer skada än null. |
best_guess verkar på förnamnet som läses ut ur adressen, inte på själva adressen. Om inget förnamn kan läsas ut finns det inget att tvinga fram och gender förblir null. Tänk på att ett framtvingat svar här bygger på en extraktion som i sig kan vara fel.
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"
}
Kön från användarnamn
Hanterar camelCase, snake_case, avslutande siffror och inledande @-tecken. "AyseYilmaz84" matchas till Ayşe.
| Parameter | Typ | Beskrivning |
|---|---|---|
username
obligatorisk
|
string
|
Användarnamnet eller handtaget. Ett inledande @ ignoreras. |
country
valfri
|
string
|
ISO 3166-1 alpha-2-landskod. Förbättrar noggrannheten för namn vars kön skiljer sig åt mellan regioner, såsom Andrea (man i Italien, kvinna i Tyskland). |
locale
valfri
|
string
|
En språktagg som de-DE eller en_US, till exempel webbläsarens språk. Dess region blir landet när country inte skickas. En tagg utan region (en, de) anger inget land. |
ip
valfri
|
string
|
Slutanvändarens IP-adress. Dess land används när varken country eller en locale med region skickas. Sparas inte. IP geolocation by DB-IP (db-ip.com). |
ai_fallback
valfri
|
boolean
|
Om namnet saknas i våra data, be en språkmodell om en uppskattning i stället för att returnera null. Fungerar bara när AI-uppslag är aktiverade i dina inställningar och kostar en extra kredit. |
best_guess
valfri
|
boolean
|
Returnera det dominerande könet även när underlaget inte når konfidenströskeln. Avstängt som standard: ett nästan 50/50-svar som ser säkert ut gör mer skada än 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"
}
Bulkförfrågan
Skicka upp till 100 namn i en förfrågan. Använd detta istället för att loopa: ett bulkanrop för 100 namn är en enda rundresa och en enda deduplicerad sökning.
| Parameter | Typ | Beskrivning |
|---|---|---|
names
obligatorisk
|
string[]
|
Rad med namn. Maximalt 100 objekt. |
type
valfri
|
string
|
Vad objekten är: namn, e-post eller användarnamn. Standard är namn. |
country
valfri
|
string
|
Tillämpas på varje objekt i förfrågan. |
locale
valfri
|
string
|
Språktagg vars region blir landet för varje post när country inte skickas. |
ip
valfri
|
string
|
Slutanvändarens IP-adress vars land gäller varje post när varken country eller en locale med region skickas. Sparas inte. 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" }
]
}
Resultat kommer tillbaka i samma ordning som du skickade dem. Krediter debiteras per namn, och hela förfrågan avvisas innan något arbete påbörjas om ditt saldo är otillräckligt, så du får aldrig en delvis bearbetad batch.
Sammanfattningsblocket visar matchgraden på en blick, så du kan avgöra om inmatningen behöver rengöring innan du bearbetar resten.
Filjobb
Ladda upp en CSV- eller XLSX-fil på upp till 100 MB och 1 000 000 rader och få tillbaka den med könskolumner tillagda på varje rad. En kredit per rad, debiteras bara om jobbet slutförs.
-
1.
POST /batchesSkicka filen och name_column. Jobbet köas direkt. -
2.
GET /batches/{id}Läs jobbet tills status är completed eller failed. poll_after_seconds anger hur länge du ska vänta mellan läsningarna. -
3.
GET /batches/{id}/resultLadda ner resultatet. Det kommer tillbaka i det format du laddade upp.
| Parameter | Typ | Beskrivning |
|---|---|---|
file
obligatorisk
|
file
|
CSV, TSV eller XLSX med en rubrikrad. |
name_column
obligatorisk
|
string
|
Rubriken på kolumnen med namnen, exakt som i filen. Krävs om inte start=false. |
country_column
valfri
|
string
|
Rubriken på en kolumn med en landskod per rad. |
country
valfri
|
string
|
Standardland för rader utan land. |
ai_fallback
valfri
|
boolean
|
Fråga en AI-modell om namn som inte finns i datamängden. Kräver AI-samtycke under Inställningar. |
best_guess
valfri
|
boolean
|
Returnera det troligaste könet även när underlaget är svagt. |
delete_after_download
valfri
|
boolean
|
Resultatet kan laddas ner en gång och raderas sedan. |
start
valfri
|
boolean
|
false: ladda bara upp och granska. Standard är 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 krävs för att starta: en gissad kolumn som visar sig vara fel skulle förbruka krediter på fel data. Skicka start=false för att först se kolumnerna, en förhandsvisning och kostnaden, och starta sedan jobbet.
Skicka en Idempotency-Key-header. Ett nytt försök med samma nyckel returnerar det första jobbet i stället för att öppna ett andra.
Upp till 3 jobb kan vara köade eller igång samtidigt. Ett jobb som inte har startat kan avbrytas och dess kredit återbetalas; ett jobb som bearbetas kan inte stoppas.
Webhooks
Lägg till en endpoint under Webhooks i din panel så skickar vi en signerad POST till den när ett filjobb slutförs eller misslyckas, utan att du behöver fråga.
| Händelse | Typ | Beskrivning |
|---|---|---|
batch.completed
|
BatchJob
|
Jobbet är klart. Bodyn innehåller jobbet precis som GET /batches/{id} returnerar det. |
batch.failed
|
BatchJob
|
Jobbet misslyckades och debiterades inte. Förgrena på error.code. |
credits.low
|
CreditsAlert
|
Med nuvarande förbrukning räcker krediterna 7 dagar eller mindre. Kontrolleras varje timme; prenumerationsförnyelser räknas med. |
credits.depleted
|
CreditsAlert
|
Saldot är tomt och förfrågningar avvisas med 402. Kontrolleras varje timme. |
webhook.test
|
object
|
Skickas bara via "Skicka testhändelse" i panelen och bara till den endpointen. |
| Header | Typ | Beskrivning |
|---|---|---|
NameGender-Signature
obligatorisk
|
string
|
t=<unix-sekunder>,v1=<hex>. Efter att du förnyat hemligheten finns en andra v1 i 24 timmar. |
NameGender-Event-Id
obligatorisk
|
string
|
Händelsens ID. Samma vid varje nytt försök av samma händelse. |
NameGender-Delivery-Attempt
obligatorisk
|
integer
|
1 vid första försöket, upp till 8. |
Verifiera varje förfrågan
v1 är HMAC-SHA256 av tidsstämpeln, en punkt och den råa bodyn, med din endpoints hemlighet. Jämför i konstant tid, godkänn förfrågan om någon v1 stämmer och avvisa en tidsstämpel som avviker mer än fem minuter från din klocka. Klientbiblioteken gör allt detta i ett anrop.
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" }
}
}
}
- Svara med valfri 2xx inom 10 sekunder och gör arbetet efteråt.
- Alla andra svar, även omdirigeringar, försöks igen upp till 7 gånger under ungefär 45 timmar. Om en endpoint fortsätter att misslyckas i tre dagar stängs den av och du får ett e-postmeddelande.
- Ett nytt försök har samma ID och ordningen garanteras inte. Ta bort dubbletter med NameGender-Event-Id och läs jobbet med GET när du behöver dess aktuella läge.
- När du förnyar hemligheten i panelen fortsätter den gamla att signera i 24 timmar, så du kan uppdatera servern utan att missa händelser.
- Nya händelsetyper kan tillkomma. Svara 2xx på en typ du inte hanterar och ignorera den.
Landsfördelning
Returnerar de länder där ett namn är registrerat. Två listor returneras och de slås avsiktligt inte samman: `registrations` är mätt volym, jämförbar endast mellan de elva länder som publicerar räknad namnstatistik, och `attested_in` är närvaro utan viktning.
| Parameter | Typ | Beskrivning |
|---|---|---|
name
obligatorisk
|
string
|
Namnet som ska slås upp. |
limit
valfri
|
integer
|
Hur många räknade länder som ska listas i `registrations`. 1–100, standard 25. Andelarna räknas inte om för den kortare listan. |
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"]
}
En kredit per begäran. `share` beräknas över alla länder med räknad statistik, så summan blir 100 bara när `limit` inte kortar listan; `counted_countries` räknas också innan listan kortas. `attested_in` har inga procentsatser eftersom det inte finns något räknat värde bakom dessa poster att beräkna från.
Hälsningsfras
Gör ett namn till en hälsningsfras, klar för brev eller e-post, på tio språk: “Sehr geehrte Frau Dr. Müller,”, “Sayın Ahmet Bey,”, “Madame,”, “山田様”. Könsuppslaget ingår och kostar samma enda kredit. Varje svar har en formell, en informell och en neutral rad, plus delarna av den formella raden.
| Parameter | Typ | Beskrivning |
|---|---|---|
name
obligatorisk
|
string
|
Fullständigt namn inklusive titlar (“Dr. Anna Müller”). Skicka detta eller `first_name` och `last_name`. |
first_name, last_name
valfri
|
string
|
Använd dessa i stället för `name` när ditt CRM sparar namn i separata fält. Inget tolkas. |
email
valfri
|
string
|
E-postadress som används när inget namn skickas. Namnet läses från delen före @, utan accenter (Mueller, inte Müller); info@ och andra funktionsadresser får hälsningsfrasen för organisationer. |
language
valfri
|
string
|
Hälsningsfrasens språk: en, en-US, en-GB, de, de-AT, de-CH, fr, es, it, pt, pt-PT, pt-BR, nl, tr, pl, ja. Utan det: språket i `locale`, sedan landets huvudspråk, sedan engelska. Ett språk som inte stöds ger ett fel, aldrig ett tyst byte till engelska. |
country, locale, ip
valfri
|
string
|
Landsledtråd för könsuppslaget, som på könsslutpunkterna. Den väljer språket bara när `language` inte skickas. |
gender
valfri
|
string
|
`male`, `female` eller `neutral`, när du redan vet det. Ersätter uppslaget; `neutral` ger alltid den neutrala formen. |
min_probability
valfri
|
integer
|
Lägsta sannolikhet för en könad hälsningsfras, 50–100. Standard 90. |
title
valfri
|
string
|
Akademisk titel som sparas i ett eget fält, till exempel `Dr.` Används i tyska och engelska hälsningsfraser. |
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"
}
Fel kön är värre än inget, så den könade formen används bara när könet är känt med minst `min_probability` och språket har den namndel det behöver. Annars är `form` lika med `neutral` och `reason` anger varför. Företag och funktionsadresser får `form: organization`. `best_guess` och `ai_fallback` gäller inte här.
POST /api/v1/salutation/bulk tar upp till 100 namn i `names`, en kredit vardera, med samma alternativ för varje namn.
Namnkontroll
Berättar om ett namn som skrivits i ett registrerings- eller leadformulär ser ut som en verklig persons namn, och varför. Den fångar slumpmässigt tangentbordsbankande (“asdf qwerty”), platshållare (“Test Test”, “John Doe”, “n/a”), fiktiva figurer (“Mickey Mouse”), svordomar samt siffror, symboler eller e-postadresser i namnfältet. En kredit per namn.
| Parameter | Typ | Beskrivning |
|---|---|---|
name
obligatorisk
|
string
|
Namnet som det skrevs i formuläret. Skicka detta eller `first_name` och `last_name`. |
first_name, last_name
valfri
|
string
|
Använd dessa i stället för `name` när ditt formulär har separata fält. |
country, locale, ip
valfri
|
string
|
Landsledtråd, som på könsslutpunkterna. Hjälper till att dela upp namnet och att slå upp det i registren. |
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` är `implausible` när det finns en signal med hög allvarlighet (tangentbordsmönster, upprepade bokstäver, platshållare, svordom, e-post eller URL), `suspicious` med en medelhög signal (fiktiv figur, siffror, symboler, företagsnamn, inga vokaler, mycket långt) eller två låga, och annars `plausible`. `score` går från 0 till 100 för din egen tröskel. Ett förnamn som finns i officiella födelseregister höjer den; ett namn vi aldrig har sett sänker den inte på egen hand. Efternamn bedöms bara efter sin form: det finns ingen efternamnsdatamängd bakom den här slutpunkten.
Testad på 4 610 riktiga förnamn i nio skriftsystem, ensamma och tillsammans med ett efternamn: inget markerades som misstänkt eller osannolikt. Efternamn som Null, Test eller Cockburn, namn på två bokstäver som Ng och ensamma namn lämnas medvetet i fred.
POST /api/v1/name-check/bulk tar upp till 100 namn i `names`, en kredit vardera, med en sammanfattning av de tre bedömningarna.
Ålder utifrån namn
Hur gamla de levande personerna med ett förnamn är: medianåldern, den mittersta hälften (`age_range`) och de mittersta 80 % (`age_range_80`). Brittany i USA: median 36, hälften mellan 32 och 38. En kredit per namn.
| Parameter | Typ | Beskrivning |
|---|---|---|
name
obligatorisk
|
string
|
Ett förnamn eller ett fullständigt namn; förnamnet används. |
gender
valfri
|
string
|
`male` eller `female` för att bara använda det könets uppgifter. Män som heter Leslie är 16 år äldre än kvinnor som heter Leslie. |
country, locale, ip
valfri
|
string
|
Landsledtråd, som på könsslutpunkterna. Täckta: US, FR och NO. Utan ledtråd används den amerikanska serien och `country_source` är `default`. Ett annat land ger `reason: country_not_covered` och kostar ingenting. |
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
}
Metod: registrerade födslar efter namn, kön och år, där varje år viktas med den andel av födelsekohorten som fortfarande lever (SSA:s kohortlivslängdstabeller). Källor: SSA-födslar 1880–2024 (US), INSEE 1900–2025 (Frankrike), SSB 1945–2025 (Norge). `reason` är `not_found` för ett namn som inte finns i serien och `insufficient_data` under 100 levande personer.
Födslar utomlands finns inte i någon serie, så namn som är vanliga bland invandrare ser yngre ut än de är. Den norska serien börjar 1945, så personer födda tidigare saknas. Den amerikanska livslängdstabellen används även för Frankrike och Norge.
POST /api/v1/age/bulk tar upp till 100 namn i `names`, en kredit vardera, i den ordning de skickas.
Saldo
Läs ditt kreditsaldo och hur mycket som återstår av dagens gratiskvot. Anropet debiteras inte.
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
}
Icke-latinska skript
Skicka ett namn i sitt eget skript och vi kopplar det till referensdata. Ingen extra parameter krävs: vi detekterar skriptet och väljer rätt strategi för det.
Arabisk skrift utelämnar korta vokaler, så محمد translittereras till "mhmd" medan vår data innehåller "muhammed". Vi matchar på konsonantmönstret istället och bevarar den feminina ة-markören så خالد (Khalid) och خالدة (Khalida) hålls isär. Täcker även persiska och urdunamn skrivna i arabiska skript.
Omvandlat till Pinyin. Efternamnet kommer först på kinesiska, så 李明 har efternamnet 李 (Li) och förnamnet 明 (Ming) — vi tar bort efternamnet innan sökningen. Ett enskilt tecken är ett komplett förnamn och hanteras som ett.
Samma efternamnshantering som kinesiska, med vanliga koreanska efternamn.
Hiragana och katakana läses korrekt (ひろし → Hiroshi).
Ryska, ukrainska, bulgariska och serbiska namn translittereras direkt.
Hindi-, marathi- och nepalinamn. Den inneboende avslutande vokalen hanteras (राहुल → Rahul, inte "Rahula").
Japanska kanji och kinesiska tecken upptar samma Unicode-intervall, så vi kan inte skilja dem åt från tecknen själva. Han-inmatning läses som kinesisk: ett kanji-namn som vi inte redan har ordagrant får sin mandarin-uttal, vilket för ett japanskt namn vanligtvis är fel (健太 läses som "jian tai" när namnet är Kenta). Namnet vi har matchas exakt och är korrekt. Skicka japanska namn i kana eller Latin för att vara säker.
Thai utelämnar vokaler ungefär som arabiska och behöver sitt eget matchningslager. Inte byggd ännu, så dessa returnerar 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" }
Kopieringen misslyckades. Markera och kopiera texten.
När vi inte kan transkribera ett skriftsystem alls, är svaret gender: null med source: none. Kontrollera source-fältet: script betyder att vi translittererade, db betyder att vi matchade tecknen du skickade direkt. De två har olika konfidensnivå, och vi visar dig vilken du fick.
Responsefält
Identiska för alla endpoints.
| Fält | Typ | Beskrivning |
|---|---|---|
credits_charged
|
integer
|
Hur många krediter som drogs för detta anrop. |
credits_remaining
|
integer
|
Ditt användbara saldo när anropet är betalt: köpta krediter plus det som återstår av dagens gratiskvot. |
query
|
string
|
Indata exakt som du skickade den, före all rensning. |
name
|
string
|
Namnet vi faktiskt slogs upp efter att ha tagit bort titlar och efternamn. |
first_name
|
string
|
Förnamn som tolkats från indata. Returneras även när gender är null, utan extra kostnad. |
middle_name
|
string
|
Övriga förnamn mellan förnamnet och efternamnet. Initialer utelämnas. |
last_name
|
string
|
Efternamn, inklusive prefix som van eller de la. Alltid null för användarnamn. |
name_type
|
string
|
personal, organization (Acme AB) eller role (info@, kundtjänst). Organisationer och roller får inget kön. |
gender
|
string
|
male, female, eller null när vi inte är tillräckligt säkra. |
country
|
string
|
Det land statistiken kommer från, eller null för det globala aggregatet. |
country_source
|
string
|
Varifrån landet kom: country, locale, ip eller null när svaret gäller hela världen. |
sample_size
|
integer
|
Antal registrerade personer bakom svaret. 0 betyder att källan publicerar andelar eller belägg, inte ett antal vi kan granska. |
probability
|
integer
|
Säkerhet i angivet kön, 50 till 100. 0 när kön är null. |
took_ms
|
integer
|
Tiden vi lade på att lösa uppslaget, i hela millisekunder. Nätverkstid på din sida ingår inte. |
Två fält som andra tjänster inte erbjuder
source talar om var svaret kommer från: referensdatabasen, en fuzzy match eller AI-reserv. matched_as namnger den post som en fuzzy match träffade. Tillsammans låter de dig bedöma hur mycket du kan lita på ett enskilt resultat.
| Fält | Typ | Beskrivning |
|---|---|---|
source
|
string
|
db, script, fuzzy, llm, eller none. |
confidence
|
string
|
högt, medel, lågt, overifierat eller okänt, baserat på provdata. |
matched_as
|
string
|
För en fuzzy match, databasposten som matchade. Annars null. |
Felkoder
HTTP-statuskoden talar om att ett anrop misslyckades. JSON-bodyn anger sedan orsaken i error, förklarar den i message och ger dig ett request_id att uppge för supporten samt en länk till motsvarande rad i dokumentationen nedan. Styr på error, aldrig på message: meddelanden översätts och kan formuleras om.
| Kod | HTTP | Betydelse |
|---|---|---|
missing_key |
401 | Ingen API-nyckel skickades. Lägg till en Authorization: Bearer-header eller en X-Api-Key-header i förfrågan. |
invalid_key |
401 | Denna API-nyckel är inte giltig. |
revoked_key |
401 | Denna API-nyckel har återkallats. |
blocked |
403 | Detta konto har avaktiverats. Kontakta support. |
email_not_verified |
403 | Det här kontots e-postadress är inte bekräftad ännu. Öppna bekräftelselänken vi skickade, eller begär en ny från din kontrollpanel. |
ip_not_allowed |
403 | Begäranden från denna IP-adress är inte tillåtna för denna nyckel. |
proxy_secret_required |
403 | Den här nyckeln fungerar endast via dess API-marknadsplats, som signerar varje begäran. Använd den nyckel som utfärdats till dig där. |
forbidden |
403 | Du är inte behörig att utföra denna åtgärd. |
no_credits |
402 | Du har slut på krediter. Köp mer eller vänta på att din dagliga gratiskvot återställs. |
missing_input |
400 | Parametern "name" är obligatorisk. |
invalid_input |
422 | Parametern "name" är inte giltig. |
too_many_items |
422 | Högst 100 objekt kan skickas i en begäran. |
ai_consent_required |
422 | ai_fallback skickar namn till en AI-leverantör från tredje part som detta konto inte har godkänt. Se "ai"-fältet för vilken leverantör det är, och aktivera sedan AI-uppslag i dina instrumentpanelsinställningar. |
unknown_endpoint |
404 | Det finns ingen endpoint på denna sökväg. Kontrollera URL:en mot API-dokumentationen. |
method_not_allowed |
405 | Denna endpoint accepterar inte DELETE-förfrågningar. |
payload_too_large |
413 | Denna förfrågan är för stor. |
rate_limited |
429 | För många begäranden. Vänta en stund och försök igen. |
batch_not_found |
404 | Det finns inget filjobb med detta ID på det här kontot. |
batch_not_startable |
409 | Det här jobbet har redan startats eller stängts. |
batch_not_finished |
409 | Det här jobbet är inte klart ännu. Kontrollera statusen och ladda ner resultatet när det är slutfört. |
batch_in_progress |
409 | Det här jobbet bearbetas och kan inte avbrytas nu. Radera det när det är klart. |
result_gone |
410 | Det här jobbet har inget resultat att ladda ner. Det misslyckades, avbröts, löpte ut, eller så har dess engångsresultat redan hämtats. |
too_many_batches |
429 | Du har redan 100 filjobb igång. Vänta tills ett är klart innan du startar ett nytt. |
not_ready |
503 | Namnsdatabasen uppdateras. Försök igen om en stund. |
server_error |
500 | Något gick fel på vår sida. Vi har underrättats. |
{
"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"
}
Kopieringen misslyckades. Markera och kopiera texten.
Hastighetsgränser
Normal användning träffar inte en gräns. Taket finns för att stoppa en läckt nyckel från missbruk, och det räknas per API-nyckel snarare än per IP så att flera kunder på en server inte konsumerar varandras tilldelning.
Nuvarande gräns: 1 200 förfrågningar per minut per nyckel. Behöver du mer? Fråga och vi höjer det på ditt konto.
Varje respons innehåller standardheaderna X-RateLimit-Limit och X-RateLimit-Remaining.
Mellanslag och icke-latinska bokstäver i GET-förfrågningar
Ett namn som Ayşe Yılmaz eller 中村 kan inte skickas i en URL som det är skrivet. Procentkoda värdet när du anropar med GET, eller skicka det i en JSON-body med POST och hoppa över kodningen helt.
Ayşe Yılmaz -> Ay%C5%9Fe%20Y%C4%B1lmaz
محمد -> %D9%85%D8%AD%D9%85%D8%AF
中村 -> %E4%B8%AD%E6%9D%91
Kopieringen misslyckades. Markera och kopiera texten.