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: Bearer ng_live_xxxxxxxxxxxx
X-Api-Key: ng_live_xxxxxxxxxxxx
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
대시보드에서 특정 IP 주소로 키를 제한할 수 있습니다.
클라이언트 라이브러리
하나의 API, 4가지 입력 유형, 다른 서비스가 처리하지 못하는 파일을 다루는 대량 도구.
모두 보기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
}
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"
}
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"
}
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" }
]
}
결과는 전송한 순서대로 반환됩니다. 크레딧은 이름당 부과되며, 잔액이 부족한 경우 어떤 작업도 실행되기 전에 전체 요청이 거부되므로 절반만 처리된 배치를 받을 수 없습니다.
요약 블록은 일치율을 한눈에 보여주므로, 나머지를 처리하기 전에 입력을 정리해야 하는지 결정할 수 있습니다.
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개의 항목을 보낼 수 있습니다. |
ai_consent_required |
422 | askToAI는 이름을 제3자 AI 제공업체로 전송하며, 이 계정이 이에 동의하지 않았습니다. "ai" 필드에서 해당 제공업체를 확인한 후 대시보드 설정에서 AI 조회를 활성화하세요. |
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