GenderAPI.io V2: Authentifizierung und kostenloser Testzugang
Nutzen Sie Ihren vorhandenen GenderAPI.io-Schlüssel mit Bearer-Authentifizierung. Erfahren Sie mehr über das gemeinsame Guthaben von V1 und V2, den IP-Testzugang und die Prüfung des Zugangs.
Authentifizierung und kostenloser Testzugang
Parameter
Typ
Erforderlich
Standardwert
Beschreibung
ParameterAuthorization
Typstring
ErforderlichNein
Standardwert—
BeschreibungSenden Sie Bearer YOUR_API_KEY, um ein Konto zu verwenden. Fehlende oder unbekannte Schlüssel nutzen den gemeinsamen IP-Testzugang.
ParameterContent-Type
Typstring
ErforderlichNur POST
Standardwert—
BeschreibungSenden Sie application/json bei POST-Anfragen.
Senden Sie Authorization: Bearer YOUR_API_KEY von Ihrem Server. Ersetzen Sie YOUR_API_KEY durch Ihren vorhandenen GenderAPI.io-Schlüssel. Beide Versionen nutzen dasselbe Guthaben; ein separates V2-Abonnement oder ein eigener V2-Schlüssel ist nicht erforderlich.
Alle POST-Anfragen erfordern Content-Type: application/json. Verwenden Sie Ihren vorhandenen API-Schlüssel im Bearer-Header. Jede Anfrage wird unabhängig verarbeitet; wiederholte Anfragen werden regulär abgerechnet.
Nur GET /gender akzeptiert zusätzlich den Query-Parameter key. Bevorzugen Sie für Integrationen den Authorization-Header, da URLs im Browserverlauf und in Protokollen gespeichert werden können. Hinterlegen Sie private Schlüssel nicht im Frontend-Code.
Ein fehlender, ungültig formatierter oder nicht erkannter Schlüssel führt zum IP-Testzugang, der mit V1 geteilt wird. Ein erkannter, aber deaktivierter, abgelaufener oder eingeschränkter Schlüssel führt nicht dorthin. Prüfen Sie meta.access.mode: api_key, ip_trial oder unauthenticated. Gründe für den Testzugang sind api_key_missing, api_key_invalid oder api_key_not_found. Ein ungültiger Schlüssel kann daher eine erfolgreiche Antwort über den Testzugang erhalten; prüfen Sie den Zugangsmodus im Produktivbetrieb.
Test-Credits werden nach Ablauf eines 24-Stunden-Zeitraums zurückgesetzt, nicht unbedingt um Mitternacht. Lesen Sie resets_at über /usage. Alle Personen hinter derselben öffentlichen IP-Adresse teilen sich dieses Kontingent.
Kopieren Sie Ihren API-Schlüssel aus Ihrem GenderAPI-Konto. Ersetzen Sie unten YOUR_API_KEY durch diesen Schlüssel und führen Sie das gewählte Beispiel anschließend in derselben Terminalsitzung aus. Diese Befehle setzen eine Umgebungsvariable nur für diese Sitzung; der veröffentlichte Platzhalter ist kein funktionierender Schlüssel.
Konfigurieren Sie GENDERAPI_API_KEY für eine Anwendung oder ein Deployment als serverseitiges Secret. Die Beispiele laden eine .env-Datei nicht automatisch. Halten Sie den Schlüssel aus Browser-Bundles, der Versionsverwaltung und öffentlichen URLs heraus.
macOS-/Linux-Terminal
export GENDERAPI_API_KEY='YOUR_API_KEY'
Windows PowerShell
$env:GENDERAPI_API_KEY = 'YOUR_API_KEY'
Zugang prüfen, ohne Credits zu verbrauchen
Rufen Sie GET /usage mit dem Bearer-Header auf. Ein gültiger Kontoschlüssel liefert meta.access.mode: api_key. Lautet das Ergebnis ip_trial, prüfen Sie den kopierten Schlüssel, bevor Sie Vorhersagen anfordern. Diese Anfrage ist kostenlos, auch für ein Konto ohne verbleibende Credits.
Diese Guthabenabfrage kostet keine Credits. Sie wird dennoch auf die Anfragelimits angerechnet.
Vor der Ausführung: Zugang und Fehlerbehandlung
Führen Sie diese Beispiele auf Ihrem Server aus. Setzen Sie GENDERAPI_API_KEY in der Prozessumgebung auf Ihren vorhandenen API-Schlüssel. Prüfen Sie, ob meta.access.mode den Wert api_key hat: Ein nicht erkannter Schlüssel kann in den IP-Testzugang wechseln.
Bei HTTP-4xx- und -5xx-Antworten im JSON-Format bleibt der Fehlerinhalt erhalten, und das Beispiel endet mit einem Exit-Status ungleich null. Prüfen Sie code, action und meta.usage.billing_status, bevor Sie die Anfrage wiederholen.
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.
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+; Standard-HTTP-Client. Als GenderApiExample.java speichern und java GenderApiExample.java ausführen. Dokumentation der Laufzeitumgebung
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.}
Konsolenanwendung mit .NET 8+. Als Program.cs in einem Konsolenprojekt verwenden und dann dotnet run ausführen. Dokumentation der Laufzeitumgebung
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) }}