Lesen Sie Ihr gemeinsames GenderAPI-Guthaben und verstehen Sie die Kosten für v2-Gutschriften, abrechenbare Unbekannte, Rückerstattungen, negative Guthaben und die Rücksetzzeiten der IP-Testversion.
Credits, unbekannte Ergebnisse und Verwendung
Eine abgeschlossene Vorhersage mit gender: null kostet Credits entsprechend dem ausgewählten Modus. Die Telefonvalidierung kostet 1 Guthaben, auch wenn valid: false. Eingabevalidierungsfehler vor der Abrechnung kosten keine Credits. Für fehlgeschlagene Vorhersagen fallen nach einer bestätigten Rückerstattung keine Credits an.
Ein positiver Startsaldo reicht aus, um eine einzelne Anfrage oder einen Stapel zu starten. Durch den endgültigen Abzug kann der Saldo negativ werden. Wenn Sie beispielsweise mit 1 Credit beginnen und eine KI-Operation verwenden, die 2 Credits kostet, verbleibt ein Saldo von -1. Ein Null- oder Negativsaldo verhindert neue Operationen, die Credits kosten. Rückerstattungen bleiben weiterhin möglich.
Überprüfen Sie meta.usage.billing_status. Der Wert not_charged bedeutet, dass keine Credits abgezogen wurden und charged_credits: 0. Der Wert confirmed bedeutet, dass die endgültigen Kosten bekannt sind. Der Wert unconfirmed bedeutet, dass charged_credits gleich null ist und das Abrechnungsergebnis überprüft werden muss. remaining_credits kann negativ sein, oder null, wenn nicht verfügbar. Dieser Saldo wird nach Abschluss des Vorgangs aufgezeichnet und kann sich ändern, wenn andere Anforderungen gleichzeitig ausgeführt werden.
GET /Nutzung ist kostenlos. Es werden remaining_credits und expires_at zurückgegeben. Für die IP-Testversion werden außerdem resets_at, limit und period_seconds zurückgegeben. Das Testlimit beträgt 10 Credits und die Dauer beträgt 86400 Sekunden. Diese Nur-Testfelder lauten null für API-Schlüsselkonten. resets_at ist die Zeit zum Zurücksetzen der Testversion, nicht das Ablaufdatum des Abonnements.
V1 und v2 verwenden das gleiche Guthaben. Gleichzeitige Guthabenaktualisierungen von Version 1 und Version 2 können zu Konflikten führen. Gehen Sie nicht davon aus, dass die Abrechnung in beiden Versionen garantiert genau einmal erfolgt.
GET /api/v2/usage ist kostenlos und erfordert die Bearer-Authentifizierung ohne Abfrageparameter. Wenn ein Schlüssel weggelassen wird, lautet die aktuelle Testzulage IP.
Diese Bilanzablesung kostet keine Credits. Es wird weiterhin auf die Anforderungsratenbegrenzungen angerechnet.
Vor der Ausführung: Zugriff 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. Bestätigen Sie, dass meta.access.mode api_key ist: Ein nicht erkannter Schlüssel kann auf die IP-Testversion zurückgreifen.
HTTP 4xx und 5xx JSON-Antworten behalten den Fehlertext bei und geben einen Exit-Status ungleich Null zurück. Überprüfen Sie code, action und meta.usage.billing_status, bevor Sie es erneut versuchen.
cURL 7.76+ in einer POSIX-Shell. Führen Sie es in Ihrem Terminal aus. Laufzeitdokumentation
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+; Integrierter Abruf. Speichern Sie es als example.mjs und führen Sie node example.mjs aus. Laufzeitdokumentation
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+; Standardbibliothek. Speichern Sie es als example.py und führen Sie python3 example.py aus. Laufzeitdokumentation
PHP 8+ mit der cURL-Erweiterung. Speichern Sie es als example.php und führen Sie php example.php aus. Laufzeitdokumentation
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-Client. Speichern Sie es als GenderApiExample.java und führen Sie java GenderApiExample.java aus. Laufzeitdokumentation
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+ Konsolenanwendung. Als Program.cs in einem Konsolenprojekt verwenden und dann dotnet run ausführen. Laufzeitdokumentation
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+; Standardbibliothek. Speichern Sie es als main.go und führen Sie go run main.go aus. Laufzeitdokumentation