계속 → 개요

REST API 참고서

4개의 엔드포인트, 하나의 응답 형식. 아래의 모든 내용은 귀하의 계정에 대해 실시간으로 작동합니다.

https://namegender.com/api 무료 가입

빠른 시작

대시보드에서 키를 생성한 후 첫 번째 요청을 보냅니다. SDK가 필요하지 않습니다.

curl "https://namegender.com/api?name=Ay%C5%9Fe&country=TR" \
  -H "Authorization: Bearer YOUR_API_KEY"
<?php

$query = http_build_query(['name' => 'Ayşe', 'country' => 'TR']);

$ch = curl_init('https://namegender.com/api?' . $query);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer YOUR_API_KEY'],
]);

$result = json_decode(curl_exec($ch), true);

echo $result['gender'];       // female
echo $result['probability'];  // 100
const params = new URLSearchParams({ name: 'Ayşe', country: 'TR' });

const response = await fetch(`https://namegender.com/api?${params}`, {
  headers: { Authorization: 'Bearer YOUR_API_KEY' },
});

const result = await response.json();

console.log(result.gender);       // "female"
console.log(result.probability);  // 100
import requests

response = requests.get(
    "https://namegender.com/api",
    params={"name": "Ayşe", "country": "TR"},
    headers={"Authorization": "Bearer YOUR_API_KEY"},
)

result = response.json()
print(result["gender"])       # female
print(result["probability"])  # 100
require "net/http"
require "json"

uri = URI("https://namegender.com/api")
uri.query = URI.encode_www_form(name: "Ayşe", country: "TR")

request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end

puts JSON.parse(response.body)["gender"]   # female
req, _ := http.NewRequest("GET", "https://namegender.com/api?name=Ay%C5%9Fe&country=TR", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")

resp, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var result struct {
    Gender      string `json:"gender"`
    Probability int    `json:"probability"`
}
json.NewDecoder(resp.Body).Decode(&result)

fmt.Println(result.Gender)   // female

모든 엔드포인트는 동일한 형식으로 반환되므로, 입력을 전환할 때 파싱 코드를 변경할 필요가 없습니다.

인증

3가지 방법 중 하나로 API 키를 전달합니다. Authorization 헤더를 권장합니다: 쿼리 문자열은 서버 로그 및 브라우저 기록에 남을 수 있습니다.

Authorization 헤더 (권장)
Authorization: Bearer ng_live_xxxxxxxxxxxx
사용자 정의 헤더
X-Api-Key: ng_live_xxxxxxxxxxxx
쿼리 매개변수
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
클라이언트 측 코드에서 키를 노출하지 마세요. 브라우저 또는 모바일 앱의 호출은 자신의 백엔드를 통해 진행되어야 합니다.

대시보드에서 특정 IP 주소로 키를 제한할 수 있습니다.

클라이언트 라이브러리

하나의 API, 4가지 입력 유형, 다른 서비스가 처리하지 못하는 파일을 다루는 대량 도구.

모두 보기
GET · POST https://namegender.com/api

이름에서 성별

이름 또는 성명을 입력받습니다. 직함, 중간 이름, 성은 조회 전에 제거되므로, "Dr. Ayşe Yılmaz"와 "Ayşe"는 동일한 결과를 반환합니다.

매개변수 타입 설명
name
필수
string 분류할 이름. 이름 또는 성명.
country
선택
string ISO 3166-1 alpha-2 국가 코드. 지역에 따라 성별이 다른 이름(예: Andrea는 이탈리아에서는 남성, 독일에서는 여성)의 정확도를 향상합니다.
askToAI
선택
boolean 데이터베이스에 없는 이름일 때 언어 모델로 폴백합니다. 크레딧 1개가 추가로 소비됩니다.
forceToGenderize
선택
boolean 신뢰도가 임계값 이하인 경우에도 가장 가능성 높은 성별을 반환합니다. 기본적으로 비활성화되어 있습니다. 불확실한 답변을 확실한 것처럼 제시하는 것보다 답변하지 않는 것이 낫기 때문입니다.
curl "https://namegender.com/api?name=Jordan" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "used_credits": 1,
  "remaining_credits": 49999,
  "expires": null,
  "q": "Jordan",
  "name": "Jordan",
  "gender": "male",
  "country": null,
  "total_names": 62240,
  "probability": 84,
  "confidence": "high",
  "duration": "1ms",
  "source": "db",
  "matched_as": null
}
GET · POST https://namegender.com/api/email

이메일에서 성별

주소의 로컬 부분에서 사람을 추출한 후 분류합니다. "ayse.yilmaz84@example.com"은 Ayşe로 확인됩니다.

매개변수 타입 설명
email
필수
string 이메일 주소. @ 앞의 부분만 사용됩니다.
country
선택
string ISO 3166-1 alpha-2 국가 코드. 지역에 따라 성별이 다른 이름(예: Andrea는 이탈리아에서는 남성, 독일에서는 여성)의 정확도를 향상합니다.
askToAI
선택
boolean 데이터베이스에 없는 이름일 때 언어 모델로 폴백합니다. 크레딧 1개가 추가로 소비됩니다.

forceToGenderize는 여기서 사용할 수 없습니다: 이름이 내부적으로 추출되므로 불확실한 추출에 결과를 강제하면 두 가지 추측이 합쳐집니다.

curl "https://namegender.com/api/email?email=ayse.yilmaz84%40example.com" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "q": "ayse.yilmaz84@example.com",
  "name": "Ayse",
  "gender": "female",
  "probability": 95,
  "confidence": "unverified",
  "total_names": 655,
  "duration": "1ms",
  "source": "db"
}
GET · POST https://namegender.com/api/username

사용자명에서 성별

camelCase, snake_case, 후행 숫자 및 선행 @ 기호를 처리합니다. "AyseYilmaz84"는 Ayşe로 확인됩니다.

매개변수 타입 설명
username
필수
string 사용자명 또는 핸들. 선행 @는 무시됩니다.
country
선택
string ISO 3166-1 alpha-2 국가 코드. 지역에 따라 성별이 다른 이름(예: Andrea는 이탈리아에서는 남성, 독일에서는 여성)의 정확도를 향상합니다.
askToAI
선택
boolean 데이터베이스에 없는 이름일 때 언어 모델로 폴백합니다. 크레딧 1개가 추가로 소비됩니다.
forceToGenderize
선택
boolean 신뢰도가 임계값 이하인 경우에도 가장 가능성 높은 성별을 반환합니다. 기본적으로 비활성화되어 있습니다. 불확실한 답변을 확실한 것처럼 제시하는 것보다 답변하지 않는 것이 낫기 때문입니다.
curl "https://namegender.com/api/username?username=AyseYilmaz84" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "q": "AyseYilmaz84",
  "name": "Ayse",
  "gender": "female",
  "probability": 95,
  "confidence": "unverified",
  "source": "db"
}
POST https://namegender.com/api/bulk

일괄 요청

한 번의 요청으로 최대 100개의 이름을 보냅니다. 루프 대신 이를 사용하세요: 100개 이름의 단일 일괄 호출은 하나의 왕복 및 단일 중복 제거 조회입니다.

매개변수 타입 설명
names
필수
string[] 이름 배열. 최대 100개 항목.
type
선택
string 항목이 무엇인지: 이름, 이메일 또는 사용자명. 기본값은 이름입니다.
country
선택
string 요청의 모든 항목에 적용됩니다.
curl -X POST "https://namegender.com/api/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"names": ["Ayşe", "Mehmet", "Priya", "Wei"]}'
<?php

$ch = curl_init('https://namegender.com/api/bulk');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'names' => ['Ayşe', 'Mehmet', 'Priya', 'Wei'],
    ]),
]);

$data = json_decode(curl_exec($ch), true);

foreach ($data['results'] as $row) {
    printf("%-8s %-7s %d%%\n", $row['q'], $row['gender'] ?? '?', $row['probability']);
}
const response = await fetch('https://namegender.com/api/bulk', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ names: ['Ayşe', 'Mehmet', 'Priya', 'Wei'] }),
});

const { results, summary } = await response.json();

console.log(summary.match_rate);   // 100
results.forEach(r => console.log(r.q, r.gender, r.probability));
import requests

response = requests.post(
    "https://namegender.com/api/bulk",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"names": ["Ayşe", "Mehmet", "Priya", "Wei"]},
)

data = response.json()
print(data["summary"]["match_rate"])   # 100

for row in data["results"]:
    print(row["q"], row["gender"], row["probability"])
{
  "status": true,
  "used_credits": 4,
  "remaining_credits": 49995,
  "duration": "2ms",
  "summary": {
    "total": 4,
    "identified": 4,
    "unknown": 0,
    "match_rate": 100
  },
  "results": [
    { "q": "Ayşe",   "gender": "female", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
    { "q": "Mehmet", "gender": "male",   "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
    { "q": "Priya",  "gender": "female", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
    { "q": "Wei",    "gender": "male",   "probability": 85, "total_names": 0, "confidence": "unverified", "source": "db" }
  ]
}

결과는 전송한 순서대로 반환됩니다. 크레딧은 이름당 부과되며, 잔액이 부족한 경우 어떤 작업도 실행되기 전에 전체 요청이 거부되므로 절반만 처리된 배치를 받을 수 없습니다.

요약 블록은 일치율을 한눈에 보여주므로, 나머지를 처리하기 전에 입력을 정리해야 하는지 결정할 수 있습니다.

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

계정 & 할당량

크레딧을 소비하지 않고 남은 잔액을 확인합니다.

curl "https://namegender.com/api/me" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "email": "you@example.com",
  "remaining_credits": 50099,
  "purchased_credits": 50000,
  "free_today": 99,
  "free_daily_limit": 100,
  "lifetime_requests": 12480,
  "expires": null
}

비라틴 문자

이름을 원래 문자로 보내면 참조 데이터와 연결합니다. 추가 매개변수 없음: 문자를 자동 감지하고 적절한 전략을 적용합니다.

지원됨
아랍 문자

아랍 문자는 단모음을 생략하므로 محمد는 "mhmd"로 음차되지만 데이터는 "muhammed"를 포함합니다. 자음 패턴으로 매칭하고 여성형 ة 표시를 유지하여 خالد (Khalid)와 خالدة (Khalida)를 구분합니다. 페르시아어와 우르두어 이름(아랍 문자)도 처리합니다.

한자

핀인으로 변환합니다. 중국식 이름은 성이 앞에 오므로 李明은 성 李 (Li), 이름 明 (Ming)입니다. 조회 전에 성을 제거합니다. 한 글자는 완전한 이름이며 하나로 처리됩니다.

한글

중국식과 동일한 성-이름 순서 처리이며, 일반적인 한국 성씨를 사용합니다.

일본 가나

히라가나와 가타카나를 올바르게 읽습니다 (ひろし → Hiroshi).

키릴 문자

러시아어, 우크라이나어, 불가리아어, 세르비아어 이름이 직접 음차됩니다.

데바나가리

힌디어, 마라티어, 네팔어 이름. 묵시적 후행 모음이 처리됩니다 (राहुल → Rahul, "Rahula" 아님).

지원되지 않음
일본 한자

일본 한자와 중국 문자는 같은 유니코드 범위를 차지하므로 문자만으로는 구별할 수 없습니다. 한자 입력은 중국어로 읽혀집니다. 기존에 정확히 보유하지 않은 한자 이름은 만다린 음독으로 변환되는데, 일본 이름의 경우 대부분 틀립니다(健太는 이름이 켄타(Kenta)일 때 "지안 타이"로 읽힙니다). 기존에 보유한 이름은 정확히 일치하며 올바릅니다. 일본 이름은 가나 또는 로마자로 보내주시면 확실합니다.

태국어

태국어는 아랍어처럼 모음을 생략하며 자체 매칭 레이어가 필요합니다. 아직 구현되지 않아 null을 반환합니다.

# Arap yazısı — ünsüz iskeleti üzerinden eşleşir
curl "https://namegender.com/api?name=%D9%85%D8%AD%D9%85%D8%AF" -H "Authorization: Bearer KEY"
# -> { "gender": "male", "probability": 100, "source": "script", "matched_as": "mahamad" }

# Çince — soyadı ayıklanır, verilen ad sorgulanır
curl "https://namegender.com/api?name=%E6%9D%8E%E6%98%8E" -H "Authorization: Bearer KEY"
# -> { "gender": "male", "probability": 92, "source": "db" }

스크립트를 전혀 변환할 수 없을 때는 gender: null과 source: none으로 응답합니다. source 필드를 확인하세요. script는 음차 변환을 수행했다는 뜻이고, db는 전송하신 문자를 직접 일치시켰다는 뜻입니다. 두 방식의 confidence는 다르며, 어느 것을 사용했는지 표시합니다.

응답 필드

모든 엔드포인트에서 동일합니다.

필드 타입 설명
status boolean 요청이 실패하면 false입니다. 먼저 이것을 확인하세요.
used_credits integer 이 요청이 소비한 크레딧입니다.
remaining_credits integer 이 요청 후 남은 크레딧입니다.
expires null 항상 null입니다. 구매한 크레딧은 만료되지 않습니다.
q string 변경되지 않은 채로 반환된 입력값입니다.
name string 호칭과 성을 제거한 후 실제로 조회한 이름입니다.
gender string 남성, 여성 또는 신뢰도가 충분하지 않을 때 null입니다.
country string 통계가 나온 국가 또는 전 세계 통계의 경우 null입니다.
total_names integer 이 답변의 기반이 된 실제 인물의 수입니다. 0은 소스가 개수가 아닌 비율을 제공한다는 의미이지, 답변이 약하다는 뜻은 아닙니다.
probability integer 명시된 성별에 대한 신뢰도(50~100). 성별이 null일 때는 0입니다.
duration string 서버 측 처리 시간입니다.

다른 서비스에서 제공하지 않는 두 가지 필드

source는 답변이 어디에서 나왔는지 알려줍니다: 참조 데이터베이스, 유사 매칭 또는 AI 폴백. matched_as는 유사 매칭이 일치시킨 항목의 이름을 지정합니다. 이 두 필드를 함께 사용하면 단일 결과를 얼마나 신뢰할지 결정할 수 있습니다.

필드 타입 설명
source string db, fuzzy, llm 또는 none입니다.
confidence string 샘플 데이터를 기반으로 높음, 중간, 낮음, 확인되지 않음 또는 알 수 없음.
matched_as string 유사 매칭의 경우 일치한 데이터베이스 항목입니다. 그렇지 않으면 null입니다.

오류 코드

오류는 status: false와 기계 읽기 가능한 오류 문자열이 있는 JSON 본문을 반환합니다. 메시지가 아닌 오류에 일치시키세요: 메시지는 번역되고 변경될 수 있습니다.

코드 HTTP 의미
missing_key 401 API key가 없습니다. "key" 파라미터 또는 Authorization: Bearer header로 전달하세요.
invalid_key 401 이 API key는 유효하지 않습니다.
revoked_key 401 이 API key는 취소되었습니다.
blocked 403 이 계정은 정지되었습니다. 지원팀에 문의하세요.
email_not_verified 403 이 계정의 이메일 주소가 아직 확인되지 않았습니다. 보내드린 확인 링크를 열거나 대시보드에서 새로 요청해 주세요.
ip_not_allowed 403 이 IP 주소에서의 요청은 이 key에 대해 허용되지 않습니다.
forbidden 403 이 작업을 수행할 권한이 없습니다.
no_credits 402 크레딧이 부족합니다. 더 구입하거나 일일 무료 할당량이 초기화될 때까지 기다리세요.
missing_input 400 "name" 파라미터는 필수입니다.
invalid_input 422 "name" 파라미터는 유효하지 않습니다.
too_many_items 422 한 번의 요청에 최대 100개의 항목을 보낼 수 있습니다.
unknown_endpoint 404 이 경로에는 endpoint가 없습니다. API 문서에서 URL을 확인하세요.
method_not_allowed 405 이 endpoint는 DELETE 요청을 지원하지 않습니다.
payload_too_large 413 요청 본문이 너무 큽니다.
rate_limited 429 요청이 너무 많습니다. 속도를 늦추고 잠시 후 다시 시도하세요.
not_ready 503 이름 데이터베이스를 재구축 중입니다. 잠시 후 다시 시도하세요.
server_error 500 서버에 문제가 발생했습니다. 지원팀에 알렸습니다.
{
  "status": false,
  "error": "no_credits",
  "message": "You are out of credits. Buy more or wait for your daily free quota to reset.",
  "request_id": "req_9c1f5b2a7e0d4a13",
  "docs": "https://namegender.com/docs#error-no_credits"
}

레이트 제한

정상적인 사용은 제한에 도달하지 않습니다. 상한은 유출된 키가 악용되는 것을 방지하기 위해 존재하며, IP가 아닌 API 키당 계산되므로 한 서버의 여러 고객이 서로의 할당량을 소비하지 않습니다.

현재 제한: 키당 분당 1,200 요청입니다. 더 필요하신가요? 문의하시면 계정에서 상향 조정하겠습니다.

모든 응답에는 표준 X-RateLimit-Limit 및 X-RateLimit-Remaining 헤더가 포함됩니다.

다른 제공자에서 마이그레이션

응답 필드와 매개변수 이름이 일반적인 규칙과 일치하므로 전환은 보통 한 줄을 변경하는 것입니다: 기본 URL입니다.

- https://api.other-provider.io/api?name=Ayşe&key=KEY
+ https://namegender.com/api?name=Ayşe&key=KEY

askToAI와 forceToGenderize는 정확히 이 이유로 원래 철자를 유지합니다. 필요한 필드가 누락된 경우 알려주시면 추가하겠습니다.

입력값 인코딩

이름에는 공백과 비ASCII 문자가 포함될 수 있습니다. 쿼리 문자열에 넣기 전에 값을 URL 인코딩하거나 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