Poznaj strukturę odpowiedzi JSON
Pojedyncze prognozy GenderAPI.io V2 zwracają obiekt data z wynikiem i obiekt meta z informacjami o zapytaniu, dostępie i rozliczeniu. Odczytuj data.gender i data.confidence razem z data.confidence_kind i data.source. Poniższy przykład ze zbioru danych to prawdziwa odpowiedź pobrana 1 października 2026 r. z użyciem klucza API; zastąpiono jedynie saldo konta. Nie przedstawia zmierzonej dokładności produktu, a zapytanie na żywo może zwrócić inny wynik. Zapytania z kluczem API zwracają access.mode: api_key oraz null w polach limitu dotyczących wyłącznie próby; zapytania w ramach próby dla adresu IP zwracają ip_trial wraz z limitem próby i czasem jego odnowienia.
{
"data": {
"input": {
"type": "name",
"value": "Krzysztof",
"country": "PL"
},
"name": "krzysztof",
"gender": "male",
"country": "PL",
"confidence": 0.9928131416837782,
"confidence_kind": "observed_frequency",
"sample_count": 974,
"source": "dataset",
"result_status": "identified",
"reason": null,
"country_source": "dataset",
"match": {
"name": "krzysztof",
"method": "normalized",
"scope": "country",
"country": "PL"
}
},
"meta": {
"request_id": "a03ce9f1-da34-4c69-9dac-363e861f9ade",
"duration_ms": 11,
"access": {
"mode": "api_key",
"reason": null
},
"usage": {
"charged_credits": 1,
"remaining_credits": 49999,
"billing_status": "confirmed",
"resets_at": null,
"limit": null,
"period_seconds": null
}
}
}Pola odpowiedzi z prognozą
| Pole | Typ | Dopuszcza null | Przykład | Opis |
|---|---|---|---|---|
data.input | object | Nie | {"type":"name","value":"Krzysztof","country":"PL"} | Typ danych wejściowych, wartość i kraj. forceToGenderize jest dołączane, gdy ma wartość true. |
data.name | string | Tak | "krzysztof" | Dopasowane lub wyodrębnione imię; null, gdy nie jest dostępne. |
data.gender | string | Tak | "male" | male, female lub JSON null. To wynik wnioskowania, a nie zweryfikowana tożsamość osoby. |
data.result_status | string | Nie | "identified" | identified, gdy zwrócono płeć; w przeciwnym razie unknown. |
data.reason | string | Tak | null | null dla wyników identified. Powody wyniku nieznanego: not_found, no_name_candidate, ambiguous lub insufficient_evidence. |
data.confidence | number | Tak | 0.95 | Wynik w skali 0–1 lub null. Gdy płeć ma wartość null, pewność również jest null. |
data.confidence_kind | string | Tak | "observed_frequency" | observed_frequency: liczba wystąpień dominującej płci podzielona przez sumę w wybranym wierszu zbioru danych. model_reported: wynik AI, a nie skalibrowane prawdopodobieństwo. null, gdy wartość jest niedostępna. |
data.sample_count | integer | Tak | 1200 | Wielkość próby w zbiorze danych lub null. AI nie wymyśla liczby próbek. |
data.source | string | Nie | "dataset" | dataset, ai lub none. |
data.country | string | Tak | "PL" | Powiązanie z krajem pochodzące z dataset lub ai_association albo null. Nie określa obywatelstwa, miejsca zamieszkania ani pochodzenia etnicznego. |
data.country_source | string | Tak | "dataset" | Źródło powiązania z krajem: dataset, ai_association lub null. |
data.match | object | Nie | {"name":"krzysztof","method":"normalized","scope":"country","country":"PL"} | Dopasowane imię ze zbioru danych, metoda (normalized, token, substring lub model_inference), zakres country lub global oraz dopasowany kraj. Niedostępne informacje o dopasowaniu mają wartość null. |
Zwracane pola wejściowe
| Pole | Typ | Dopuszcza null | Przykład | Opis |
|---|---|---|---|---|
data.input.type | string | Nie | "name" | Kategoria danych wejściowych: name, email lub username. |
data.input.value | string | Nie | "Krzysztof" | Przesłana wartość do prognozy. |
data.input.country | string | Tak | "PL" | Przesłany kontekst kraju; null, jeśli pominięty. |
data.input.forceToGenderize | boolean | Nie | true | Obecne tylko przy włączonym trybie pseudonimu; w przeciwnym razie pomijane. |
Pola dopasowania w zbiorze danych
| Pole | Typ | Dopuszcza null | Przykład | Opis |
|---|---|---|---|---|
data.match.name | string | Tak | "krzysztof" | Wybrany kandydat ze zbioru danych; null, jeśli nie wybrano wiersza. |
data.match.method | string | Tak | "normalized" | normalized, token, substring lub model_inference; null, gdy wartość jest niedostępna. |
data.match.scope | string | Tak | "country" | country lub global przy wyszukiwaniu w zbiorze danych; null dla AI lub przy braku informacji o dopasowaniu. |
data.match.country | string | Tak | "PL" | Kraj wybranego wiersza zbioru danych; null dla wierszy globalnych lub AI. |
Metadane dostępu, rozliczenia i zapytania
| Pole | Typ | Dopuszcza null | Przykład | Opis |
|---|---|---|---|---|
meta.request_id | string | Nie | "550e8400-e29b-41d4-a716-446655440000" | Unikalny identyfikator tej próby HTTP; wysyłany także w X-Request-ID. |
meta.duration_ms | integer | Nie | 42 | Czas przetwarzania zapytania w milisekundach. |
meta.access.mode | string | Nie | "api_key" | api_key, ip_trial lub unauthenticated. Korzystając z płatnego konta, sprawdź api_key. |
meta.access.reason | string | Tak | null | Powód przejścia na próbę: api_key_missing, api_key_invalid lub api_key_not_found; w pozostałych przypadkach null. |
meta.usage.charged_credits | integer | Tak | 1 | Liczba pobranych kredytów netto. Zero przed pobraniem lub po potwierdzonym pełnym zwrocie; null, gdy rozliczenie jest niepotwierdzone. |
meta.usage.remaining_credits | integer | Tak | 99 | Saldo po zakończeniu operacji. Może być ujemne; null, gdy saldo jest niedostępne lub rozliczenie jest niepotwierdzone. |
meta.usage.billing_status | string | Nie | "confirmed" | not_charged, confirmed lub unconfirmed. Sprawdź to pole przed ponowieniem nieudanej prognozy. |
meta.usage.resets_at | string | Tak | "2026-09-27T12:00:00.000Z" | Czas odnowienia próby dla adresu IP w UTC (ISO 8601); null dla kont z kluczem API lub gdy nie jest znany. |
meta.usage.limit | integer | Tak | 10 | Limit kredytów próby dla adresu IP; null dla kont z kluczem API. |
meta.usage.period_seconds | integer | Tak | 86400 | Okres próby dla adresu IP w sekundach; null dla kont z kluczem API. |
Udany wynik nieznany
HTTP 200 oznacza, że operacja została zakończona; nie gwarantuje ustalenia płci. Zachowaj JSON null zamiast zamieniać go na male, female, pusty ciąg znaków lub zerową pewność. Sprawdzaj data.result_status i data.reason niezależnie od błędów HTTP.
Ten prawdziwy przykład korzystający tylko ze zbioru danych, pobrany 1 października 2026 r., zwraca source: none i reason: not_found, a mimo to kosztuje 1 kredyt. Wiersz zbioru danych z remisem może zwrócić reason: ambiguous z zachowanym sample_count. Nieznany wynik AI ma source: ai i reason: insufficient_evidence.
{
"data": {
"input": {
"type": "name",
"value": "zzzxxyy",
"country": null
},
"name": null,
"gender": null,
"country": null,
"confidence": null,
"confidence_kind": null,
"sample_count": null,
"source": "none",
"result_status": "unknown",
"reason": "not_found",
"country_source": null,
"match": {
"name": null,
"method": null,
"scope": null,
"country": null
}
},
"meta": {
"request_id": "54fdcd4e-f8bc-4224-918f-3a5732e08b9c",
"duration_ms": 10,
"access": {
"mode": "api_key",
"reason": null
},
"usage": {
"charged_credits": 1,
"remaining_credits": 49999,
"billing_status": "confirmed",
"resets_at": null,
"limit": null,
"period_seconds": null
}
}
}Interpretuj pewność i informacje o dopasowaniu
Pewność 0.9 jest wyrażona w skali 0–1. Dla observed_frequency oznacza liczbę wystąpień dominującej płci podzieloną przez sumę w wybranym wierszu zbioru danych; nie jest to zmierzona kompleksowa dokładność produktu. Wynik model_reported pochodzi od AI i nie jest kalibrowany względem częstości w zbiorze danych.
Dobierz progi w swojej aplikacji na podstawie własnych danych ewaluacyjnych i confidence_kind. Nie porównuj bezpośrednio wyników zbioru danych i AI, jakby mierzyły to samo. W wynikach AI match.name, match.scope i match.country mają wartość null, ponieważ nie wybrano żadnego wiersza zbioru danych; match.method ma wartość model_inference.
W przypadku imienia i nazwiska wynik ze zbioru danych może pochodzić z jednego składnika, a nie z całego ciągu. data.input zachowuje przesłaną wartość; data.name opisuje zwrócone imię, a data.match opisuje kandydata i zakres wyszukiwania.
Zdecyduj, co Twoja aplikacja ma zrobić dalej
Najpierw obsłuż błędy zapytania i elementów, a potem sprawdź result_status. W przypadku pojedynczej prognozy odczytaj data; w partii zastosuj tę samą decyzję do data każdego udanego elementu. Zachowuj wyniki unknown w aplikacji zamiast wymuszać etykietę male lub female.
| Wynik | Co oznacza | Zalecane postępowanie |
|---|---|---|
| identified; gender: male lub female | Inferencja zwróciła płeć na podstawie zbioru danych lub AI. | Zastosuj regułę ocenioną dla danego confidence_kind; zachowaj source i informacje o dopasowaniu. |
| unknown; reason: not_found | Żaden zapisany rekord zbioru danych nie pasuje do wyodrębnionych kandydatów. | Pozostaw gender jako null. Celowe zapytanie z innymi opcjami AI to nowa, płatna operacja. |
| unknown; reason: no_name_candidate | Analiza danych wejściowych nie dała żadnego użytecznego kandydata imienia. | Zachowaj null; sprawdź typ i wartość danych wejściowych, zanim wybierzesz dodatkową inferencję. |
| unknown; reason: ambiguous | Wybrany wiersz zbioru danych ma równą liczbę wystąpień męskich i żeńskich; sample_count może nadal być obecne. | Nie rozstrzygaj remisu samodzielnie i nie zamieniaj pewności null na zero. |
| unknown; reason: insufficient_evidence | AI zakończyła pracę bez wystarczających przesłanek do zwrócenia płci. | Traktuj to jako zakończony wynik unknown, a nie awarię dostawcy ani kandydata do automatycznej ponownej próby. |
| Problem Details lub error elementu | Wykonanie się nie powiodło, na przykład z powodu ai_upstream_error lub prediction_timeout. | Zachowaj kod błędu i identyfikator zapytania, sprawdź rozliczenie i postępuj zgodnie ze wskazówkami dotyczącymi ponownych prób. |
Dobierz progi na podstawie własnej oceny
Nie istnieje uniwersalny próg pewności, który sprawia, że prognoza jest poprawna. Oceniaj observed_frequency i model_reported osobno, na reprezentatywnych przykładach z Twojego przypadku użycia, oznaczonych niezależnie. Częstość w zbiorze danych i wynik zgłoszony przez AI to różne sygnały, nawet jeśli oba wynoszą akurat 0.9. Mierz, jak często Twoja reguła udziela odpowiedzi i jak często udzielone odpowiedzi są poprawne; dla pozostałych przypadków zachowaj ścieżkę unknown lub ręcznej weryfikacji.
Jeśli na przykład result_status to identified, ale confidence_kind to model_reported, zastosuj regułę ocenioną dla AI zamiast progu dla zbioru danych. Jeśli użyto forceToGenderize, name: null razem z gender o wartości innej niż null jest poprawne: alias może zostać zinterpretowany bez wyodrębnienia prawdziwego imienia. Aby ustalić, czy inferencja udzieliła odpowiedzi, sprawdzaj gender i result_status, a nie tylko name. Wynik pozostaje oszacowaniem, a nie weryfikacją tożsamości osoby.