GenderAPI.io V2 telefon doğrulama ve biçimlendirme
GenderAPI.io V2 ile uluslararası veya ulusal telefon numaralarını doğrulayın ve biçimlendirin. Ülke gereksinimini, JSON alanlarını ve 1 kredilik ücreti inceleyin.
Telefon numarasını doğrulama ve biçimlendirme
Parametre
Tür
Zorunlu
Varsayılan
Açıklama
Parametrenumber
Türstring
ZorunluEvet
Varsayılan—
AçıklamaZorunlu, 3–32 karakter. ASCII rakamlar, boşluk, parantez ve tire; başta isteğe bağlı +. Dahili numaralar ve harfler kabul edilmez.
Parametrecountry
Türstring
ZorunluKoşullu
Varsayılan—
AçıklamaBüyük harfli ISO 3166-1 alpha-2 kodu. Ulusal numarada zorunlu; number + ile başlıyorsa isteğe bağlı. Kullanılmıyorsa göndermeyin.
POST /phone/validate, number ve isteğe bağlı country kabul eder. + ile başlayan uluslararası numara kullanın; ulusal numarada büyük harfli ISO ülke kodunu gönderin. Yanıt, data içinde valid, possible, e164, country ve country_calling_code; ayrıca ortak meta zarfını içerir. Abonenin varlığı değil numara yapısı kontrol edilir. Tamamlanan doğrulama, geçersiz sonuçta da 1 kredidir. Aşağıdaki temsili geçersiz numara yanıtı, istek örneğinden bağımsızdır.
Yeniden denemeler dahil her tahmin isteği yeni ve ücretlendirilebilir bir işlemdir. Örnekler otomatik yeniden deneme yapmaz. Yeni istekten önce ücretlendirme durumunu kontrol edin.
Çalıştırmadan önce: erişim ve hata yönetimi
Örnekleri sunucunuzda çalıştırın. İşlem ortamındaki GENDERAPI_API_KEY değişkenini mevcut anahtarınıza ayarlayın. Tanınmayan anahtar IP denemesine yönlenebildiğinden meta.access.mode değerinin api_key olduğunu doğrulayın.
HTTP 4xx ve 5xx JSON yanıtlarında hata gövdesi korunur ve program sıfırdan farklı çıkış koduyla sonlanır. Yeniden denemeden önce code, action ve meta.usage.billing_status alanlarını kontrol edin.
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+; standart HTTP istemcisi. GenderApiExample.java olarak kaydedin ve java GenderApiExample.java çalıştırın. Çalıştırma ortamı dokümantasyonu
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.}
.NET 8+ konsol uygulaması. Konsol projesinde Program.cs olarak kullanın, ardından dotnet run çalıştırın. Çalıştırma ortamı dokümantasyonu
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) }}
Bozuk girdi, ücretlendirmeden önce 422 ile reddedilir. Biçimsel olarak geçerli istekte ayrıştırılamayan numara, HTTP 200, valid: false ve null biçimlendirme alanlarıyla tamamlanabilir; bu işlem 1 kredidir. Ayrıştırılabilir ancak geçersiz numarada e164 bulunabilir. Biçimlendirilmiş çıktıyı geçerlilik kanıtı saymayın; valid alanını kontrol edin.
Açıklamaapi_key, ip_trial veya unauthenticated. Hesap anahtarıyla erişimde api_key olduğunu doğrulayın.
Alanmeta.access.reason
Türstring
Null olabilir mi?Evet
Örneknull
AçıklamaDenemeye geçiş nedeni: api_key_missing, api_key_invalid veya api_key_not_found; diğer durumlarda null.
Alanmeta.usage.charged_credits
Türinteger
Null olabilir mi?Evet
Örnek1
AçıklamaNet düşülen kredi. Ücretlendirme öncesinde veya tam iade doğrulandığında sıfırdır; ücretlendirme belirsizse null.
Alanmeta.usage.remaining_credits
Türinteger
Null olabilir mi?Evet
Örnek99
Açıklamaİşlem tamamlandığındaki bakiye. Negatif olabilir; bilgi alınamıyorsa veya ücretlendirme belirsizse null.
Alanmeta.usage.billing_status
Türstring
Null olabilir mi?Hayır
Örnek"confirmed"
Açıklamanot_charged, confirmed veya unconfirmed. Başarısız bir tahmini yeniden denemeden önce kontrol edin.
Alanmeta.usage.resets_at
Türstring
Null olabilir mi?Evet
Örnek"2026-09-27T12:00:00.000Z"
AçıklamaIP denemesinin UTC sıfırlanma zamanı (ISO 8601); API anahtarlı hesaplarda veya bilinmiyorsa null.
Alanmeta.usage.limit
Türinteger
Null olabilir mi?Evet
Örnek10
AçıklamaIP denemesinin kredi hakkı; API anahtarlı hesaplarda null.
Alanmeta.usage.period_seconds
Türinteger
Null olabilir mi?Evet
Örnek86400
AçıklamaIP denemesinin saniye cinsinden süresi; API anahtarlı hesaplarda null.
Kimlik doğrulama ve yeniden denemeler
Mevcut Bearer API anahtarınızı ve Content-Type: application/json gönderin. Örnekler GENDERAPI_API_KEY ortam değişkenini okur. Ulusal numarada country zorunludur; number + ile başlıyorsa isteğe bağlıdır.