Przeczytaj swoje wspólne saldo GenderAPI i poznaj koszty kredytu w wersji 2, niewiadome do rozliczenia, zwroty pieniędzy, salda ujemne i czasy próbnego resetowania IP.
Kredyty, nieznane wyniki i wykorzystanie
Ukończona prognoza za pomocą gender: null kosztuje kredyty zgodnie z wybranym trybem. Weryfikacja telefonu kosztuje 1 kredyt, nawet jeśli valid: false. Wprowadź błędy sprawdzania poprawności, zanim rozliczenie nie będzie kosztować żadnych kredytów. Nieudane przewidywania nie kosztują żadnych kredytów po potwierdzeniu zwrotu pieniędzy.
Do rozpoczęcia pojedynczego zlecenia lub partii wystarczy dodatnie saldo początkowe. Ostateczne odliczenie może spowodować, że saldo będzie ujemne. Na przykład, zaczynając od 1 kredytu i korzystając z operacji AI, która kosztuje 2 kredyty, saldo wynosi -1. Saldo zerowe lub ujemne uniemożliwia wykonywanie nowych operacji kosztujących kredyty. Zwroty pieniędzy są nadal możliwe.
Sprawdź meta.usage.billing_status. Wartość not_charged oznacza, że nie odjęto żadnych kredytów oraz charged_credits: 0. Wartość confirmed oznacza, że ostateczny koszt jest znany. Wartość unconfirmed oznacza, że charged_credits to null i wynik rozliczenia wymaga sprawdzenia. remaining_credits może być ujemny lub null, jeśli jest niedostępny. Saldo to jest rejestrowane po zakończeniu operacji i może ulec zmianie, gdy inne żądania będą uruchamiane jednocześnie.
GET /użycie jest bezpłatne. Zwraca remaining_credits i expires_at. W przypadku wersji próbnej IP zwraca również resets_at, limit i period_seconds. Limit okresu próbnego wynosi 10 kredytów, a okres wynosi 86400 sekund. Te pola przeznaczone tylko do wersji próbnej to null dla kont z kluczem API. resets_at to czas resetowania wersji próbnej, a nie data wygaśnięcia subskrypcji.
V1 i v2 wykorzystują to samo saldo kredytowe. Jednoczesne aktualizacje salda z wersji 1 i 2 mogą powodować konflikt. Nie zakładaj, że rozliczenie nastąpi dokładnie raz w obu wersjach.
GET /api/v2/usage jest darmowy i wymaga uwierzytelnienia Bearer, bez parametrów zapytania. Pominięcie klucza powoduje odczytanie bieżącego limitu próbnego IP.
Wybierz język programowania.Skonfiguruj klucz API, następnie uruchom przykład na swoim serwerze.
Odczyt salda nie kosztuje żadnych kredytów. Nadal wlicza się to do limitów liczby żądań.
Zanim uruchomisz: dostęp i obsługa błędów
Uruchom te przykłady na swoim serwerze. Ustaw GENDERAPI_API_KEY w środowisku procesowym na istniejący klucz API. Potwierdź, że meta.access.mode to api_key: nierozpoznany klucz może wrócić do wersji próbnej IP.
Odpowiedzi HTTP 4xx i 5xx JSON zachowują treść błędu i zwracają niezerowy status wyjścia. Przed ponowną próbą sprawdź code, action i meta.usage.billing_status.
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.}