Lees uw gedeelde GenderAPI-saldo en krijg inzicht in v2-kredietkosten, factureerbare onbekenden, terugbetalingen, negatieve saldi en IP-proefresettijden.
Credits, onbekende resultaten en gebruik
Een voltooide voorspelling met gender: null kost credits volgens de geselecteerde modus. Telefoonvalidatie kost 1 credit, zelfs als valid: false. Invoervalidatiefouten vóór facturering kosten geen credits. Mislukte voorspellingen kosten geen credits na een bevestigde terugbetaling.
Een positief startsaldo is voldoende om een enkele aanvraag of een batch te starten. Door de eindaftrek kan het saldo negatief worden. Als u bijvoorbeeld met 1 credit begint en een AI-bewerking gebruikt die 2 credits kost, blijft er een saldo van -1 over. Een nul- of negatief saldo voorkomt nieuwe operaties die kredieten kosten. Terugbetalingen blijven mogelijk.
Controleer meta.usage.billing_status. De waarde not_charged betekent dat er geen credits zijn afgetrokken en charged_credits: 0. De waarde confirmed betekent dat de uiteindelijke kosten bekend zijn. De waarde unconfirmed betekent dat charged_credits null is en dat het factureringsresultaat moet worden gecontroleerd. remaining_credits kan negatief zijn, of null indien niet beschikbaar. Dit saldo wordt vastgelegd wanneer de bewerking is voltooid en kan veranderen wanneer andere aanvragen gelijktijdig worden uitgevoerd.
GET /gebruik is gratis. Het retourneert remaining_credits en expires_at. Voor de IP-proefversie retourneert het ook resets_at, limit en period_seconds. De proeflimiet is 10 credits en de periode is 86400 seconden. Deze proefvelden zijn null voor API-sleutelaccounts. resets_at is de resettijd van de proefversie, niet de vervaldatum van het abonnement.
V1 en v2 gebruiken hetzelfde creditsaldo. Gelijktijdige saldo-updates van v1 en v2 kunnen conflicteren. Ga er niet vanuit dat de facturering gegarandeerd precies één keer plaatsvindt in beide versies.
GET /api/v2/usage is gratis en vereist Bearer-authenticatie, zonder queryparameters. Als u een sleutel weglaat, wordt het huidige proefbedrag IP gelezen.
Kies een programmeertaal.Stel uw API-sleutel in, voer vervolgens het voorbeeld uit op uw server.
Deze saldo-uitlezing kost geen credits. Het telt nog steeds mee voor de limieten voor de aanvraagsnelheid.
Voordat u begint: toegang en foutafhandeling
Voer deze voorbeelden uit op uw server. Stel GENDERAPI_API_KEY in de procesomgeving in op uw bestaande API-sleutel. Bevestig dat meta.access.mode api_key is: een niet-herkende sleutel kan terugvallen op de IP-proefversie.
HTTP 4xx en 5xx JSON-antwoorden behouden de fouttekst en retourneren een afsluitstatus die niet nul is. Controleer code, action en meta.usage.billing_status voordat u het opnieuw probeert.
// 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+; ingebouwde ophaalfunctie. Opslaan als example.mjs en voer node example.mjs uit. Runtime-documentatie
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+; standaard bibliotheek. Opslaan als example.py en voer python3 example.py uit. Runtime-documentatie
PHP 8+ met de cURL-extensie. Opslaan als example.php en voer php example.php uit. Runtime-documentatie
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+; standaard HTTP-client. Opslaan als GenderApiExample.java en voer java GenderApiExample.java uit. Runtime-documentatie
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+ console-applicatie. Gebruik als Program.cs in een consoleproject en voer vervolgens dotnet run uit. Runtime-documentatie
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+; standaard bibliotheek. Opslaan als main.go en voer go run main.go uit. Runtime-documentatie