Förutsäg från användarnamn och smeknamn med GenderAPI v2. Lär dig forceToGenderize, datauppsättning-första sökning, AI-svarsfält och 1 eller 2-kredittariffen.
Innan du skickar förfrågan
Skicka JSON till POST https://api.genderapi.io/api/v2/gender. Använd din befintliga API-nyckel i Authorization: Bearer YOUR_API_KEY och Content-Type: application/json. Varje förfrågan behandlas oberoende.
Välj ditt språk i kodexemplet. Ställ in GENDERAPI_API_KEY i processmiljön innan du kör den. Saknade eller okända nycklar kan använda den delade IP testversionen, så bekräfta att meta.access.mode är api_key när du integrerar ett konto.
Använd type: username för ett användarnamn eller smeknamn. Ställ in forceToGenderize till true för att härleda kön från betydelsen av ett alias som prenses, även när inget riktigt förnamn kan extraheras. Datauppsättningen kontrolleras först. En smeknamnsförutsägelse kan returnera ett kön även när name: null.
Varje förutsägelseförfrågan är en ny fakturerbar operation, inklusive omförsök. Dessa exempel försöker inte automatiskt igen. Kontrollera faktureringsstatus innan du skickar en ny förfrågan.
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 body = { "type": "username", "value": "prenses", "country": "TR", "forceToGenderize": true};const response = await fetch("https://api.genderapi.io/api/v2/gender", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json", }, body: JSON.stringify(body), 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")body = json.loads("{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}")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/gender", method="POST", data=json.dumps(body).encode("utf-8"), headers={ "Authorization": "Bearer " + api_key, "Content-Type": "application/json", },)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"); String body = "{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}"; 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/gender")) .timeout(Duration.ofSeconds(30)) .header("Authorization", "Bearer " + apiKey) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8)) .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.Post, "https://api.genderapi.io/api/v2/gender");request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);request.Content = new StringContent("{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}", Encoding.UTF8, "application/json");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") body := "{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}" request, err := http.NewRequest("POST", "https://api.genderapi.io/api/v2/gender", strings.NewReader(body)) if err != nil { return err } request.Header.Set("Authorization", "Bearer " + apiKey) request.Header.Set("Content-Type", "application/json") 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
Exempelsvar
Detta syntetiska svar illustrerar JSON-formen, inte uppmätt noggrannhet eller ett garanterat liveresultat. Den visar IP-teståtkomst; en autentiserad åtgärd rapporterar meta.access.mode: api_key och null endast prova kvotfält. Läs data för slutsatsen och meta.usage för operationens faktureringsresultat.
Det här exemplet använder forceToGenderize: true. Om datasetet identifierar ett kön är kostnaden 1 kredit. Annars tolkar AI aliaset och en genomförd förfrågan kostar totalt 2 krediter, även om könet förblir okänt. Utelämna ai_mode eller ställ in den på fallback. Att använda off eller always tillsammans med forceToGenderize returnerar HTTP 422.
I smeknamnsläge är en könsförutsägelse med name: null tillåten. Det betyder att inget riktigt förnamn extraherades, inte att analysen misslyckades. Om AI returnerar ett kön returneras sample_count: null och confidence_kind: model_reported. Poängen är inte en kalibrerad sannolikhet och verifierar inte personlig identitet.
Utan forceToGenderize är en enda användarnamnsökning fortfarande standard till vanlig AI fallback för totalt 1 kredit, men det kräver ett användbart verkligt förnamn. Använd options.ai_mode: off för endast datauppsättningsbehandling.