기존 API 키로 GenderAPI.io V2에 인증하세요. Bearer 헤더, GET 쿼리의 키, IP 체험 접근과 JSON 요청을 설명합니다.
인증과 무료 IP 체험
매개변수
유형
필수
기본값
설명
매개변수Authorization
유형string
필수아니요
기본값—
설명계정을 사용하려면 Bearer YOUR_API_KEY를 보내세요. 키가 없거나 인식되지 않으면 공유 IP 체험이 사용됩니다.
매개변수Content-Type
유형string
필수POST 전용
기본값—
설명POST 요청에는 application/json을 보내세요.
서버에서 Authorization: Bearer YOUR_API_KEY를 보내세요. YOUR_API_KEY는 기존 GenderAPI.io API 키로 바꾸세요. 두 버전은 잔액을 공유하므로 V2용 구독이나 키를 따로 만들 필요가 없습니다.
모든 POST 요청에는 Content-Type: application/json이 필요합니다. 기존 Bearer API 키를 사용하세요. 각 요청은 독립적으로 처리되며, 반복한 요청에도 일반 과금이 적용됩니다.
key 쿼리 매개변수는 GET /gender에서만 추가로 받을 수 있습니다. URL은 브라우저 기록과 로그에 남을 수 있으므로 연동에는 Authorization 헤더를 사용하는 것이 좋습니다. 비공개 키를 프런트엔드 코드에 넣지 마세요.
API 키가 없거나 형식이 잘못되었거나 인식되지 않으면 V1과 공유하는 IP 체험으로 전환됩니다. 인식되었지만 비활성화, 만료 또는 제한된 키는 전환되지 않습니다. meta.access.mode가 api_key, ip_trial, unauthenticated 중 무엇인지 확인하세요. IP 체험으로 전환된 사유는 api_key_missing, api_key_invalid 또는 api_key_not_found입니다. 따라서 유효하지 않은 키로도 IP 체험 응답이 성공할 수 있으므로, 프로덕션에서는 접근 모드를 확인하세요.
IP 체험 크레딧은 24시간 주기가 지나면 초기화되며, 반드시 자정에 초기화되는 것은 아닙니다. resets_at은 /usage에서 확인하세요. 같은 공인 IP를 사용하는 사람들은 이 한도를 공유합니다.
GenderAPI.io 계정에서 API 키를 복사하세요. 아래의 YOUR_API_KEY를 그 키로 바꾼 다음, 같은 터미널 세션에서 원하는 예시를 실행하세요. 이 명령은 해당 세션에만 환경 변수를 설정합니다. 게시된 자리 표시자는 실제로 작동하는 키가 아닙니다.
애플리케이션이나 배포 환경에서는 GENDERAPI_API_KEY를 서버 측 비밀 값으로 구성하세요. 예시는 .env 파일을 자동으로 불러오지 않습니다. 키가 브라우저 번들, 소스 관리 시스템, 공개 URL에 포함되지 않도록 하세요.
macOS / Linux 터미널
export GENDERAPI_API_KEY='YOUR_API_KEY'
Windows PowerShell
$env:GENDERAPI_API_KEY = 'YOUR_API_KEY'
크레딧을 쓰지 않고 접근 확인하기
Bearer 헤더와 함께 GET /usage를 호출하세요. 유효한 계정 키라면 meta.access.mode: api_key가 반환됩니다. 결과가 ip_trial이면 추정 요청을 실행하기 전에 복사한 키를 확인하세요. 이 요청은 남은 크레딧이 없는 계정에서도 무료입니다.
// Server-side Node.js. Save as example.mjs.const apiKey = process.env.GENDERAPI_API_KEY;if (!apiKey) throw new Error("Set GENDERAPI_API_KEY");const response = await fetch("https://api.genderapi.io/api/v2/usage", { method: "GET", headers: { Authorization: `Bearer ${apiKey}`, }, signal: AbortSignal.timeout(30_000), redirect: "error",});const raw = await response.text();if (!(response.headers.get("content-type") ?? "").includes("json")) { throw new Error(`HTTP ${response.status}: expected JSON; request ID ${response.headers.get("x-request-id")}`);}const result = JSON.parse(raw); // Also accepts application/problem+json.if (!response.ok) { console.error(`HTTP ${response.status}`, result); process.exitCode = 1; // A retry is a new operation; inspect billing first.} else { console.log(JSON.stringify(result, null, 2)); // For batches, inspect every item: HTTP 200 may contain item errors.}
Node.js 22+, 내장 fetch. example.mjs로 저장하고 node example.mjs를 실행하세요. 런타임 문서
Python
import jsonimport osimport sysimport urllib.errorimport urllib.requestapi_key = os.environ.get("GENDERAPI_API_KEY")if not api_key: raise RuntimeError("Set GENDERAPI_API_KEY")class NoRedirect(urllib.request.HTTPRedirectHandler): def redirect_request(self, req, fp, code, msg, headers, newurl): return Nonerequest = urllib.request.Request( "https://api.genderapi.io/api/v2/usage", method="GET", headers={ "Authorization": "Bearer " + api_key, },)opener = urllib.request.build_opener(NoRedirect())try: response = opener.open(request, timeout=30)except urllib.error.HTTPError as error: response = error # Keep the Problem Details body on non-2xx responses.with response: status = response.status raw = response.read().decode("utf-8") if "json" not in response.headers.get("Content-Type", ""): raise RuntimeError(f"HTTP {status}: expected a JSON response") result = json.loads(raw)print(json.dumps(result, indent=2), file=sys.stderr if status >= 300 else sys.stdout)if not 200 <= status < 300: sys.exit(1) # Inspect code, action and billing before retrying.# For batches, inspect every item even when HTTP status is 200.
Python 3.10+, 표준 라이브러리. example.py로 저장하고 python3 example.py를 실행하세요. 런타임 문서
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.nio.charset.StandardCharsets;import java.time.Duration;public class GenderApiExample { private static String requiredEnv(String name) { String value = System.getenv(name); if (value == null || value.isBlank()) throw new IllegalStateException("Set " + name); return value; } public static void main(String[] args) throws Exception { String apiKey = requiredEnv("GENDERAPI_API_KEY"); HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .followRedirects(HttpClient.Redirect.NEVER) .build(); HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.genderapi.io/api/v2/usage")) .timeout(Duration.ofSeconds(30)) .header("Authorization", "Bearer " + apiKey) .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)); if (!response.headers().firstValue("content-type").orElse("").contains("json")) { throw new IllegalStateException("HTTP " + response.statusCode() + ": expected JSON"); } // JSON text; parse with your application's JSON library when integrating. if (response.statusCode() < 200 || response.statusCode() >= 300) { System.err.println(response.body()); // Includes Problem Details. System.exit(1); } System.out.println(response.body()); // For batches, inspect each item's data or error, including on HTTP 200. }}
Java 17+, 표준 HTTP 클라이언트. GenderApiExample.java로 저장하고 java GenderApiExample.java를 실행하세요. 런타임 문서
C# / .NET
using System;using System.Net.Http;using System.Net.Http.Headers;using System.Text;using System.Text.Json;string RequiredEnv(string name) => !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(name)) ? Environment.GetEnvironmentVariable(name)! : throw new InvalidOperationException($"Set {name}");var apiKey = RequiredEnv("GENDERAPI_API_KEY");using var handler = new HttpClientHandler { AllowAutoRedirect = false };using var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.genderapi.io/api/v2/usage");request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);using var response = await client.SendAsync(request);var raw = await response.Content.ReadAsStringAsync();if (!(response.Content.Headers.ContentType?.MediaType?.Contains("json") ?? false)) throw new InvalidOperationException($"HTTP {(int)response.StatusCode}: expected JSON");using var result = JsonDocument.Parse(raw);if (!response.IsSuccessStatusCode){ Console.Error.WriteLine(result.RootElement); // Preserve Problem Details. Environment.ExitCode = 1;}else{ Console.WriteLine(result.RootElement); // For batches, inspect every item even on HTTP 200.}
.NET 8+ 콘솔 애플리케이션. 콘솔 프로젝트의 Program.cs로 사용한 다음 dotnet run을 실행하세요. 런타임 문서
Go
package mainimport ( "encoding/json" "fmt" "io" "net/http" "os" "strings" "time")func requiredEnv(name string) string { value := os.Getenv(name) if value == "" { panic("Set " + name) } return value}func run() error { apiKey := requiredEnv("GENDERAPI_API_KEY") request, err := http.NewRequest("GET", "https://api.genderapi.io/api/v2/usage", nil) if err != nil { return err } request.Header.Set("Authorization", "Bearer " + apiKey) client := &http.Client{ Timeout: 30 * time.Second, CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, } response, err := client.Do(request) if err != nil { return err } defer response.Body.Close() raw, err := io.ReadAll(response.Body) if err != nil { return err } if !strings.Contains(response.Header.Get("Content-Type"), "json") || !json.Valid(raw) { return fmt.Errorf("HTTP %d: expected a JSON response", response.StatusCode) } if response.StatusCode < 200 || response.StatusCode >= 300 { return fmt.Errorf("HTTP %d: %s", response.StatusCode, raw) } fmt.Println(string(raw)) // For batches, inspect every item even on HTTP 200. return nil}func main() { if err := run(); err != nil { fmt.Fprintln(os.Stderr, err) // Keep Problem Details for error handling. os.Exit(1) }}
Go 1.22+, 표준 라이브러리. main.go로 저장하고 go run main.go를 실행하세요. 런타임 문서