API DOKÜMANTASYONU V2

API V2 kimlik doğrulama ve ücretsiz deneme

Mevcut API anahtarınızla GenderAPI V2’ye bağlanın. Bearer başlığını, GET anahtarını, IP denemesini ve JSON isteklerini öğrenin.

Kimlik doğrulama ve ücretsiz deneme

Sunucunuzdan Authorization: Bearer YOUR_API_KEY başlığını gönderin. YOUR_API_KEY yerine mevcut GenderAPI anahtarınızı yazın. İki sürüm aynı bakiyeyi paylaşır; ayrı V2 aboneliği veya anahtarı gerekmez.

Tüm POST isteklerinde Content-Type: application/json gereklidir. Mevcut API anahtarınızı Bearer biçiminde kullanın. Her istek bağımsız işlenir; tekrarlanan istekler normal şekilde ücretlendirilir.

Yalnızca GET /gender, key sorgu parametresini de kabul eder. URL’ler tarayıcı geçmişine ve günlüklere kaydedilebildiğinden entegrasyonlarda Authorization başlığını tercih edin. Gizli anahtarları ön yüz koduna koymayın.

Eksik, hatalı biçimlendirilmiş veya tanınmayan anahtar, V1 ile ortak IP denemesine yönlendirilir. Tanınan ancak devre dışı, süresi dolmuş veya kısıtlanmış anahtarlar yönlendirilmez. meta.access.mode alanını kontrol edin: api_key, ip_trial veya unauthenticated. Deneme nedenleri api_key_missing, api_key_invalid veya api_key_not_found olabilir. Geçersiz anahtarla başarılı deneme yanıtı alınabileceğinden canlı ortamda erişim modunu doğrulayın.

Deneme kredileri 24 saatlik dönem sonunda yenilenir; bu anın gece yarısı olması gerekmez. resets_at değerini /usage ile okuyun. Aynı genel IP’yi kullanan kişiler bu hakkı paylaşır.

API anahtarınızı ayarlayın

API anahtarınızı GenderAPI hesabınızdan kopyalayın. Aşağıdaki YOUR_API_KEY yerine anahtarınızı yazın ve seçtiğiniz örneği aynı terminal oturumunda çalıştırın. Komutlar yalnızca o oturum için ortam değişkeni oluşturur; örnekteki yer tutucu çalışan bir anahtar değildir.

Uygulamanızda GENDERAPI_API_KEY değerini sunucu tarafında gizli değişken olarak yapılandırın. Örnekler .env dosyasını otomatik yüklemez. Anahtarı tarayıcı paketlerine, sürüm kontrolüne veya herkese açık URL’lere eklemeyin.

macOS / Linux terminali
export GENDERAPI_API_KEY='YOUR_API_KEY'
Windows PowerShell
$env:GENDERAPI_API_KEY = 'YOUR_API_KEY'

Kredi harcamadan erişimi doğrulayın

Bearer başlığıyla GET /usage çağrısı yapın. Geçerli hesap anahtarında meta.access.mode: api_key döner. ip_trial görürseniz tahmin sorgularından önce anahtarı kontrol edin. Bu istek, bakiyesi sıfır olan hesaplarda da ücretsizdir.

Programlama dilinizi seçin. API anahtarınızı ayarlayın, ardından örneği sunucunuzda çalıştırın.

Bu bakiye sorgusu kredi tüketmez; ancak istek hızı sınırına dahildir.

Çalıştırmadan önce: erişim ve hata yönetimi

Örnekleri sunucunuzda çalıştırın. İşlem ortamındaki GENDERAPI_API_KEY değişkenini mevcut anahtarınıza ayarlayın. Tanınmayan anahtar IP denemesine yönlenebildiğinden meta.access.mode değerinin api_key olduğunu doğrulayın.

HTTP 4xx ve 5xx JSON yanıtlarında hata gövdesi korunur ve program sıfırdan farklı çıkış koduyla sonlanır. Yeniden denemeden önce code, action ve meta.usage.billing_status alanlarını kontrol edin.

Hata ve yeniden deneme rehberi →
cURL
curl --silent --show-error --fail-with-body --max-time 30 \
  --request GET 'https://api.genderapi.io/api/v2/usage' \
  --header "Authorization: Bearer ${GENDERAPI_API_KEY:?Set GENDERAPI_API_KEY}"

POSIX kabuğunda cURL 7.76+. Terminalinizde çalıştırın. Çalıştırma ortamı dokümantasyonu

JavaScript / Node.js
// 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+; yerleşik fetch. example.mjs olarak kaydedin ve node example.mjs çalıştırın. Çalıştırma ortamı dokümantasyonu

Python
import json
import os
import sys
import urllib.error
import urllib.request

api_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 None

request = 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+; standart kütüphane. example.py olarak kaydedin ve python3 example.py çalıştırın. Çalıştırma ortamı dokümantasyonu

PHP
<?php
$apiKey = getenv('GENDERAPI_API_KEY');
if (!$apiKey) {
    throw new RuntimeException('Set GENDERAPI_API_KEY');
}

$ch = curl_init('https://api.genderapi.io/api/v2/usage');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
    ],
]);
$raw = curl_exec($ch);
if ($raw === false) {
    throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE) ?: '';
curl_close($ch);
if (strpos($contentType, 'json') === false) {
    throw new RuntimeException("HTTP $status: expected a JSON response");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
$output = json_encode($result, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . PHP_EOL;
if ($status < 200 || $status >= 300) {
    fwrite(STDERR, $output); // Preserve the Problem Details body.
    exit(1);
}
echo $output;
// For batches, inspect every item; HTTP 200 can contain item errors.

cURL uzantılı PHP 8+. example.php olarak kaydedin ve php example.php çalıştırın. Çalıştırma ortamı dokümantasyonu

Java
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+; standart HTTP istemcisi. GenderApiExample.java olarak kaydedin ve java GenderApiExample.java çalıştırın. Çalıştırma ortamı dokümantasyonu

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+ konsol uygulaması. Konsol projesinde Program.cs olarak kullanın, ardından dotnet run çalıştırın. Çalıştırma ortamı dokümantasyonu

Go
package main

import (
    "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+; standart kütüphane. main.go olarak kaydedin ve go run main.go çalıştırın. Çalıştırma ortamı dokümantasyonu

Sonraki adımlar