Lea su saldo compartido de GenderAPI y comprenda los costos de crédito v2, las incógnitas facturables, los reembolsos, los saldos negativos y los tiempos de reinicio de la prueba de IP.
Créditos, resultados desconocidos y uso
Una predicción completa con gender: null cuesta créditos según el modo seleccionado. La validación del teléfono cuesta 1 crédito incluso cuando valid: false. Los errores de validación de entrada antes de la facturación no cuestan créditos. Las predicciones fallidas no cuestan créditos después de un reembolso confirmado.
Un saldo inicial positivo es suficiente para comenzar una sola solicitud o un lote. La deducción final puede hacer que el saldo sea negativo. Por ejemplo, comenzar con 1 crédito y usar una operación de IA que cueste 2 créditos deja un saldo de -1. Un saldo cero o negativo impide nuevas operaciones que cuesten créditos. Los reembolsos siguen siendo posibles.
Verifique meta.usage.billing_status. El valor not_charged significa que no se dedujeron créditos y charged_credits: 0. El valor confirmed significa que se conoce el coste final. El valor unconfirmed significa que charged_credits es null y es necesario verificar el resultado de facturación. remaining_credits puede ser negativo o null si no está disponible. Este saldo se registra cuando se completa la operación y puede cambiar cuando se ejecutan otras solicitudes simultáneamente.
OBTENER /uso es gratuito. Devuelve remaining_credits y expires_at. Para la prueba de IP, también devuelve resets_at, limit y period_seconds. El límite de prueba es de 10 créditos y el período es de 86400 segundos. Estos campos solo de prueba son null para cuentas de clave API. resets_at es el tiempo de reinicio de la prueba, no la fecha de vencimiento de la suscripción.
V1 y v2 utilizan el mismo saldo de crédito. Las actualizaciones de saldo simultáneas de v1 y v2 pueden entrar en conflicto. No asuma que se garantiza que la facturación se realizará exactamente una vez en ambas versiones.
GET /api/v2/usage es gratuito y requiere autenticación Bearer, sin parámetros de consulta. Al omitir una clave se lee la asignación de prueba actual IP.
Elija un lenguaje de programación.Configura tu clave API, luego ejecute el ejemplo en su servidor.
Esta lectura de saldo no cuesta créditos. Todavía cuenta para los límites de tasa de solicitud.
Antes de ejecutar: acceso y manejo de errores
Ejecute estos ejemplos en su servidor. Configure GENDERAPI_API_KEY en el entorno de proceso con su clave API existente. Confirme que meta.access.mode es api_key: una clave no reconocida puede recurrir a la prueba IP.
Las respuestas HTTP 4xx y 5xx JSON conservan el cuerpo del error y devuelven un estado de salida distinto de cero. Verifique code, action y meta.usage.billing_status antes de volver a intentarlo.
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.
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.}