Autentisera GenderAPI v2 med din befintliga API-nyckel. Lär dig Bearer-rubriker, GET frågetycklar, IP provåtkomst och JSON-förfrågningar.
Autentisering och den kostnadsfria provperioden
Skicka Authorization: Bearer YOUR_API_KEY från din server. Byt ut YOUR_API_KEY med din befintliga GenderAPI-nyckel. Båda versionerna delar ditt saldo; ingen separat v2-prenumeration eller nyckel krävs.
Alla POST-förfrågningar kräver Content-Type: application/json. Använd din befintliga Bearer API-nyckel. Varje begäran behandlas oberoende; upprepade förfrågningar använder normal fakturering.
Endast GET /gender accepterar också nyckelfrågans parameter. Föredra auktoriseringshuvudet för integrationer eftersom webbadresser kan lagras i webbläsarhistorik och loggar. Lägg inte in privata nycklar i frontend-koden.
Om en API-nyckel saknas, har ett ogiltigt format eller inte känns igen, använder begäran IP-testversionen som delas med v1. Detta gäller inte igenkända nycklar som är inaktiverade, förfallna eller begränsade. Kontrollera åtkomstläget i meta.access.mode: api_key, ip_trial eller unauthenticated. Anledningen till testet är api_key_missing, api_key_invalid eller api_key_not_found. En ogiltig nyckel kan därför fortfarande få ett framgångsrikt testsvar. Verifiera åtkomstläget i produktionen.
Provkrediter återställs efter en 24-timmarsperiod, inte nödvändigtvis vid midnatt. Använd /usage för att läsa resets_at. Personer bakom samma offentliga IP delar denna ersättning.
Kopiera din API-nyckel från ditt GenderAPI-konto. Ersätt YOUR_API_KEY nedan med den nyckeln och kör sedan ditt valda exempel i samma terminalsession. Dessa kommandon anger en miljövariabel endast för den sessionen; den publicerade platshållaren är inte en arbetsnyckel.
För en applikation eller distribution, konfigurera GENDERAPI_API_KEY som en hemlighet på serversidan. Exemplen laddar inte automatiskt en .env-fil. Håll nyckeln borta från webbläsarpaket, källkontroll och offentliga webbadresser.
macOS/Linux-terminal
export GENDERAPI_API_KEY='YOUR_API_KEY'
Windows PowerShell
$env:GENDERAPI_API_KEY = 'YOUR_API_KEY'
Verifiera åtkomst utan att spendera krediter
Ring GET /usage med Bearer-huvudet. En giltig kontonyckel ger meta.access.mode: api_key. Om resultatet säger ip_trial, kontrollera den kopierade nyckeln innan du kör förutsägelser. Denna begäran är gratis, inklusive för ett konto utan återstående krediter.
Denna saldoavläsning kostar inga krediter. Det räknas fortfarande mot gränserna för begäranden.
Innan du kör: åtkomst och felhantering
Kör dessa exempel på din server. Ställ in GENDERAPI_API_KEY i processmiljön till din befintliga API-nyckel. Bekräfta att meta.access.mode är api_key: en okänd nyckel kan falla tillbaka till IP-testversionen.
HTTP 4xx och 5xx JSON svar bevarar felkroppen och returnerar en utgångsstatus som inte är noll. Kontrollera code, action och meta.usage.billing_status innan du försöker igen.
// 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+; inbyggd apport. Spara som example.mjs och kör node example.mjs. Körtidsdokumentation
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+; standardbibliotek. Spara som example.py och kör python3 example.py. Körtidsdokumentation
PHP 8+ med tillägget cURL. Spara som example.php och kör php example.php. Körtidsdokumentation
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+; standard HTTP-klient. Spara som GenderApiExample.java och kör java GenderApiExample.java. Körtidsdokumentation
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+ konsolapplikation. Använd som Program.cs i ett konsolprojekt och kör sedan dotnet run. Körtidsdokumentation
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+; standardbibliotek. Spara som main.go och kör go run main.go. Körtidsdokumentation