GenderAPI.io V2: ověření a formátování telefonního čísla
Ověřujte a formátujte mezinárodní i národní telefonní čísla pomocí GenderAPI.io V2. Najdete zde povinný kontext země, pole JSON a cenu 1 kredit.
Ověřte a naformátujte telefonní číslo
Parametr
Typ
Povinné
Výchozí hodnota
Popis
Parametrnumber
Typstring
PovinnéAno
Výchozí hodnota—
PopisPovinné, 3–32 znaků. Číslice ASCII, mezery, závorky a spojovníky, na začátku volitelně +. Klapky a písmena nejsou přijímány.
Parametrcountry
Typstring
PovinnéPodmíněně
Výchozí hodnota—
PopisKód ISO 3166-1 alpha-2 velkými písmeny. Povinný u národního čísla; volitelný, pokud number začíná znakem +. Pokud ho nepoužíváte, vynechte ho.
POST /phone/validate přijímá number a volitelné country. Použijte mezinárodní číslo začínající znakem +, nebo u národního čísla uveďte kód země ISO velkými písmeny. Odpověď obsahuje v data pole valid, possible, e164, country a country_calling_code a navíc stejnou obálku meta. Kontroluje se struktura čísla, nikoli existence účastníka. Dokončené ověření stojí 1 kredit, včetně neplatných výsledků. Níže uvedená syntetická odpověď ukazuje neplatné číslo nezávisle na příkladu požadavku.
Vyberte programovací jazyk.Nastavte API klíč, potom spusťte příklad na svém serveru.
Každý požadavek na odhad je nová zpoplatněná operace, včetně opakování. Tyto příklady požadavky automaticky neopakují. Před odesláním dalšího požadavku zkontrolujte stav účtování.
Před spuštěním: přístup a zpracování chyb
Tyto příklady spouštějte na svém serveru. V prostředí procesu nastavte GENDERAPI_API_KEY na svůj stávající API klíč. Ověřte, že meta.access.mode je api_key: nerozpoznaný klíč může přejít na zkušební režim podle IP.
U odpovědí JSON s HTTP 4xx a 5xx příklady zachovají tělo chyby a skončí s nenulovým návratovým kódem. Před opakováním požadavku zkontrolujte code, action a 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")body = json.loads("{\"number\":\"+905321234567\"}")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/phone/validate", method="POST", data=json.dumps(body).encode("utf-8"), headers={ "Authorization": "Bearer " + api_key, "Content-Type": "application/json", },)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.
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"); String body = "{\"number\":\"+905321234567\"}"; 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/phone/validate")) .timeout(Duration.ofSeconds(30)) .header("Authorization", "Bearer " + apiKey) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8)) .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+; standardní HTTP klient. Uložte jako GenderApiExample.java a spusťte java GenderApiExample.java. Dokumentace běhového prostředí
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.Post, "https://api.genderapi.io/api/v2/phone/validate");request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);request.Content = new StringContent("{\"number\":\"+905321234567\"}", Encoding.UTF8, "application/json");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.}
Konzolová aplikace .NET 8+. Použijte jako Program.cs v konzolovém projektu a potom spusťte dotnet run. Dokumentace běhového prostředí
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") body := "{\"number\":\"+905321234567\"}" request, err := http.NewRequest("POST", "https://api.genderapi.io/api/v2/phone/validate", strings.NewReader(body)) if err != nil { return err } request.Header.Set("Authorization", "Bearer " + apiKey) request.Header.Set("Content-Type", "application/json") 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) }}
Odpověď 422 odmítne chybně formátovaný vstup ještě před účtováním. Správně formátovaný požadavek, jehož číslo nelze analyzovat, může skončit s HTTP 200, valid: false a formátovacími poli s hodnotou null; takové dokončené ověření stojí 1 kredit. Číslo, které lze analyzovat, ale je neplatné, může mít hodnotu e164. Kontrolujte valid a nepovažujte naformátovaný výstup za důkaz platnosti.
Pole
Typ
Může být null
Příklad
Popis
Poledata.valid
Typboolean
Může být nullNe
Příkladfalse
PopisZda číslo odpovídá validačním pravidlům číslovacího plánu.
Poledata.possible
Typboolean
Může být nullNe
Příkladfalse
PopisZda má číslo pro svůj číslovací plán věrohodnou délku; slabší kontrola než valid.
Poledata.e164
Typstring
Může být nullAno
Příkladnull
PopisČíslo v mezinárodním formátu, pokud se analýza podaří, jinak null.
Poledata.country
Typstring
Může být nullAno
Příkladnull
PopisOblast odvozená z čísla, nebo null, pokud není k dispozici; neurčuje polohu účastníka.
Poledata.country_calling_code
Typinteger
Může být nullAno
Příkladnull
PopisČíselná mezinárodní volací předvolba, nebo null, pokud není k dispozici.
Metadata přístupu, účtování a požadavku
Pole
Typ
Může být null
Příklad
Popis
Polemeta.request_id
Typstring
Může být nullNe
Příklad"550e8400-e29b-41d4-a716-446655440000"
PopisJedinečný identifikátor tohoto pokusu HTTP; posílá se také v X-Request-ID.
Polemeta.duration_ms
Typinteger
Může být nullNe
Příklad42
PopisDoba zpracování požadavku v milisekundách.
Polemeta.access.mode
Typstring
Může být nullNe
Příklad"api_key"
Popisapi_key, ip_trial nebo unauthenticated. U placeného účtu ověřte api_key.
Polemeta.access.reason
Typstring
Může být nullAno
Příkladnull
PopisDůvod přechodu na zkušební režim: api_key_missing, api_key_invalid nebo api_key_not_found; jinak null.
Polemeta.usage.charged_credits
Typinteger
Může být nullAno
Příklad1
PopisČistý počet odečtených kreditů. Nula před odečtením nebo po úplném potvrzeném vrácení; null, pokud účtování není potvrzeno.
Polemeta.usage.remaining_credits
Typinteger
Může být nullAno
Příklad99
PopisZůstatek po dokončení operace. Může být záporný; null, pokud není k dispozici nebo účtování není potvrzeno.
Polemeta.usage.billing_status
Typstring
Může být nullNe
Příklad"confirmed"
Popisnot_charged, confirmed nebo unconfirmed. Zkontrolujte před opakováním neúspěšného odhadu.
Polemeta.usage.resets_at
Typstring
Může být nullAno
Příklad"2026-09-27T12:00:00.000Z"
PopisČas obnovení zkušebního režimu podle IP v UTC (ISO 8601); null u účtů s API klíčem nebo pokud není znám.
Polemeta.usage.limit
Typinteger
Může být nullAno
Příklad10
PopisLimit kreditů zkušebního režimu podle IP; null u účtů s API klíčem.
Polemeta.usage.period_seconds
Typinteger
Může být nullAno
Příklad86400
PopisDélka období zkušebního režimu podle IP v sekundách; null u účtů s API klíčem.
Autentizace a opakování požadavků
Pošlete svůj stávající API klíč v hlavičce Bearer a Content-Type: application/json. Příklady kódu načítají GENDERAPI_API_KEY z prostředí. Národní čísla vyžadují country; pokud number začíná znakem +, je toto pole volitelné.