Fortsätt → Översikt

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
llms-full.txt

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-header (rekommenderas)
Authorization: Bearer ng_live_xxxxxxxxxxxx

Kopieringen misslyckades. Markera och kopiera texten.

X-Api-Key-header
X-Api-Key: ng_live_xxxxxxxxxxxx

Kopieringen misslyckades. Markera och kopiera texten.

Exponera aldrig din nyckel i kod på klientsidan. Anrop från en webbläsare eller mobilapp bör gå genom din egen backend.

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.

JavaScript Källa
npm install namegender

Kopieringen misslyckades. Markera och kopiera texten.

Command line Källa
npm install -g namegender

Kopieringen misslyckades. Markera och kopiera texten.

composer require namegender/namegender

Kopieringen misslyckades. Markera och kopiera texten.

Python Källa
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.

C# / .NET Källa
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.

PowerShell Källa
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 alla

AI-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 Code
claude mcp add namegender -e NAMEGENDER_API_KEY=ng_live_... -- npx -y namegender-mcp

Kopieringen misslyckades. Markera och kopiera texten.

Claude Desktop, Cursor och andra klienter
{
    "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

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

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
}
GET · POST https://namegender.com/api/v1/gender/email
Markdown

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"
}
GET · POST https://namegender.com/api/v1/gender/username
Markdown

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"
}
POST https://namegender.com/api/v1/gender/bulk
Markdown

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.

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

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. 1. POST /batches Skicka filen och name_column. Jobbet köas direkt.
  2. 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. 3. GET /batches/{id}/result Ladda 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.

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

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.

Verifiera bodyn exakt som den tas emot. Ett ramverk som tolkar JSON och serialiserar den igen ändrar byten, och signaturen stämmer inte.
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.
GET POST https://namegender.com/api/v1/gender/countries
Markdown

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.

Detta är inte en inferens om ursprungsland eller etnicitet och får inte användas som sådan. Räknad statistik finns endast för elva länder: USA, Storbritannien, Frankrike, Kanada, Spanien, Irland, Norge, Österrike, Israel, Polen och Schweiz. En sökning på "Mehmet" rankar därför Schweiz och Frankrike först, med omkring 29 % vardera, och Turkiet visas inte i rankningen alls — Turkiet publicerar inga räkningar. Turkiet visas dock i `attested_in`.
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.

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

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.

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

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.

Det här är ingen identitetskontroll, och den kallar aldrig ett namn falskt. Använd `implausible` och `suspicious` för att flagga en post eller be om mer information, inte för att automatiskt avvisa människor.
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.

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

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

Det här beskriver en grupp, inte en person. För de flesta namn spänner den mittersta hälften över 10 till 25 år. Använd det för målgruppsanalys, segment och forskning, aldrig för att avgöra något om en enskild person: kreditprövning, anställning, bostad, försäkring, behörighet eller ålderskontroll.
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.

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

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.

Stöds
Arabiska skript

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.

Kinesiska tecken

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.

Koreansk

Samma efternamnshantering som kinesiska, med vanliga koreanska efternamn.

Japansk kana

Hiragana och katakana läses korrekt (ひろし → Hiroshi).

Kyrillisk

Ryska, ukrainska, bulgariska och serbiska namn translittereras direkt.

Devanagari

Hindi-, marathi- och nepalinamn. Den inneboende avslutande vokalen hanteras (राहुल → Rahul, inte "Rahula").

Stöds inte
Japansk kanji

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

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