RealValidito Lookup API Documentation
RealValidito provides a real-time REST API for phone number validation, DNC lookup, carrier detection, and line type identification across US and Canada numbers. Each API call returns a JSON response, usually in under a second — covering Valid/Invalid status, line type (mobile, landline, VoIP, toll-free), carrier name, location and time zone. DNC status comes from the DNC Lookup API or the Phone + DNC Lookup API. All endpoints use standard HTTP methods with API key authentication. New accounts receive free credits for every service: 1,000 Phone Lookup, 100 DNC Lookup, 1,000 Gender Lookup and 1,000 ZIP Code Lookup — no credit card required.
Use the API to validate numbers at point of entry in signup forms, enrich CRM records in real time, clean bulk contact lists, or screen numbers as part of your TCPA compliance program. Code examples are available in 7 languages: cURL, jQuery, PHP, Node.js, Python, Go and C#. For bulk validation without API integration, use the CSV upload tool in the dashboard. For features, use cases and pricing in one place, see the phone number lookup API overview.
Common use cases
- TCPA & DNC compliance — screen phone numbers against DNC screening data before outbound calls or SMS campaigns
- Carrier & line type detection — identify mobile, landline, VoIP and toll-free numbers to route messages correctly and avoid wasted credits
- Lead validation — verify that a phone number is valid (assigned to a carrier) before it enters your CRM
- SMS deliverability — filter out VoIP and landline numbers before bulk sends to improve delivery rates and sender reputation
- Fraud prevention — flag VoIP numbers at account sign-up to help block synthetic identity fraud
RealValidito covers US and Canada numbers. The Phone + DNC Lookup API returns carrier name, line type, region and number status together with the DNC status and TCPA litigator flag in one call.
Getting started is free — your account comes with free credits for every service, no credit card required. Create a free account and run your first lookup in under 5 minutes.
Quick start
After signing up, copy your API key and secret from your console, then run the example below. The phone numbers in the request examples on this page (such as 2015550123) are placeholders: 555 numbers are not real and come back Invalid, so replace them with your own numbers.
curl -X POST "https://app.realvalidito.com/phonelookup/validate" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"numbers": ["2015550123"]
}'{
"status": "success",
"data": {
"470*******": {
"status": "Valid",
"phone_number": "+1470*******",
"national_format": "(470) ***-****",
"country_prefix": "1",
"number_type": "Mobile",
"zip": "30097",
"area": "",
"city": "Duluth",
"state": "GA",
"country": "US",
"timezone": "EST (America/New_York)",
"network_name": "Verizon Wireless",
"network_type": "WIRELESS",
"network_domain": "470*******@vtext.com"
}
}
}Base URL
All URLs referenced in the API documentation have the following base:
https://app.realvalidito.com
This REST API is served over HTTPS. To ensure data privacy, unencrypted HTTP is not supported.
Request header:
Content-Type: application/json
Authentication
All RealValidito API requests require authentication. Pass your API key and API secret as fields in the JSON request body (POST endpoints) or as path parameters (GET endpoints).
Find your API key and secret in your console.
Security: Never embed your API key or secret directly in client-side code or public repositories. Store them as environment variables (e.g. REALVALIDITO_API_KEY) and read them server-side.
Your API key and secret are tied to your account. You are responsible for all API calls made with your credentials.
Phone Lookup API
- Get Available Credits GET
/phonelookup/getcredits/{api_key}/{api_secret} - Phone Number Lookup POST
/phonelookup/validate
Get Available Credits
GET /phonelookup/getcredits/{api_key}/{api_secret}
Path variables
| Name | Type | Description | Example |
|---|---|---|---|
api_key | string required | API Key | YOUR_API_KEY |
api_secret | string required | API Secret | YOUR_API_SECRET |
Responses
Request
curl "https://app.realvalidito.com/phonelookup/getcredits/YOUR_API_KEY/YOUR_API_SECRET"// Run this in an internal tool or behind a login only: never put your API secret into a public web page.
var apiKey = 'YOUR_API_KEY';
var apiSecret = 'YOUR_API_SECRET';
$.ajax({
url: 'https://app.realvalidito.com/phonelookup/getcredits/' + encodeURIComponent(apiKey) + '/' + encodeURIComponent(apiSecret),
method: 'GET',
dataType: 'json',
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.error(xhr.status, xhr.responseText);
}
});<?php
$apiKey = 'YOUR_API_KEY';
$apiSecret = 'YOUR_API_SECRET';
$ch = curl_init('https://app.realvalidito.com/phonelookup/getcredits/' . rawurlencode($apiKey) . '/' . rawurlencode($apiSecret));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
if ($response === false) {
die('Request failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode(json_decode($response, true), JSON_PRETTY_PRINT);// Node.js 18+ (built-in fetch)
const apiKey = 'YOUR_API_KEY';
const apiSecret = 'YOUR_API_SECRET';
async function main() {
const url = 'https://app.realvalidito.com/phonelookup/getcredits/' + encodeURIComponent(apiKey) + '/' + encodeURIComponent(apiSecret);
const response = await fetch(url);
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main().catch(console.error);import json
from urllib.parse import quote
import requests
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"
url = f"https://app.realvalidito.com/phonelookup/getcredits/{quote(api_key)}/{quote(api_secret)}"
response = requests.get(url, timeout=30)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
"time"
)
func main() {
apiKey := "YOUR_API_KEY"
apiSecret := "YOUR_API_SECRET"
endpoint := "https://app.realvalidito.com/phonelookup/getcredits/" + url.PathEscape(apiKey) + "/" + url.PathEscape(apiSecret)
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Get(endpoint)
if err != nil {
fmt.Println("request failed:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read failed:", err)
return
}
var result map[string]any
if err := json.Unmarshal(body, &result); err != nil {
fmt.Println("invalid JSON:", err)
return
}
pretty, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(pretty))
}// .NET 6+ console app
using System;
using System.Net.Http;
using System.Text.Json;
var apiKey = "YOUR_API_KEY";
var apiSecret = "YOUR_API_SECRET";
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
var url = "https://app.realvalidito.com/phonelookup/getcredits/" + Uri.EscapeDataString(apiKey) + "/" + Uri.EscapeDataString(apiSecret);
var body = await client.GetStringAsync(url);
using var doc = JsonDocument.Parse(body);
Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));Response 200 OK
{
"status": "success",
"data": {
"available_credits": "5000"
}
}Unauthorized
{
"status": "failed",
"error": {
"error_code": 600,
"message": "Invalid API Key or API Secret."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 600,
"ErrorMessage": "Invalid API Key or API Secret."
}
}
}
{
"status": "failed",
"error": {
"error_code": 614,
"message": "The request could not be authenticated. Only HTTP GET method is allowed."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 614,
"ErrorMessage": "The request could not be authenticated. Only HTTP GET method is allowed."
}
}
}Phone Number Lookup
POST /phonelookup/validate
Request body
| Name | Type | Description | Example |
|---|---|---|---|
api_key | string required | API Key | YOUR_API_KEY |
api_secret | string required | API Secret | YOUR_API_SECRET |
numbers | array required | Phone number(s) to validate Array of 10-digit numeric phone numbers of the USA / Canada only. No spaces, special characters, etc. No leading +1. A maximum of 1,000 phone numbers per request. | ['1234567890', '470*******', '908*******', '704*******'] |
Responses
Request
curl -X POST "https://app.realvalidito.com/phonelookup/validate" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"numbers": ["2015550123", "4165550198"]
}'// Run this in an internal tool or behind a login only: never put your API secret into a public web page.
$.ajax({
url: 'https://app.realvalidito.com/phonelookup/validate',
method: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify({
api_key: 'YOUR_API_KEY',
api_secret: 'YOUR_API_SECRET',
numbers: ['2015550123', '4165550198']
}),
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.error(xhr.status, xhr.responseText);
}
});<?php
$payload = json_encode([
'api_key' => 'YOUR_API_KEY',
'api_secret' => 'YOUR_API_SECRET',
'numbers' => ['2015550123', '4165550198'],
]);
$ch = curl_init('https://app.realvalidito.com/phonelookup/validate');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
if ($response === false) {
die('Request failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode(json_decode($response, true), JSON_PRETTY_PRINT);// Node.js 18+ (built-in fetch)
async function main() {
const response = await fetch('https://app.realvalidito.com/phonelookup/validate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'YOUR_API_KEY',
api_secret: 'YOUR_API_SECRET',
numbers: ['2015550123', '4165550198']
})
});
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main().catch(console.error);import json
import requests
payload = {
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"numbers": ["2015550123", "4165550198"],
}
response = requests.post("https://app.realvalidito.com/phonelookup/validate", json=payload, timeout=30)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
func main() {
payload, err := json.Marshal(map[string]any{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"numbers": []string{"2015550123", "4165550198"},
})
if err != nil {
fmt.Println(err)
return
}
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Post("https://app.realvalidito.com/phonelookup/validate", "application/json", bytes.NewReader(payload))
if err != nil {
fmt.Println("request failed:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read failed:", err)
return
}
var result map[string]any
if err := json.Unmarshal(body, &result); err != nil {
fmt.Println("invalid JSON:", err)
return
}
pretty, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(pretty))
}// .NET 6+ console app
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
var payload = new
{
api_key = "YOUR_API_KEY",
api_secret = "YOUR_API_SECRET",
numbers = new[] { "2015550123", "4165550198" }
};
var response = await client.PostAsJsonAsync("https://app.realvalidito.com/phonelookup/validate", payload);
var body = await response.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(body);
Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));Response 200 OK
{
"status": "success",
"data": {
"1234567890": {
"status": "Invalid",
"phone_number": "1234567890",
"national_format": "",
"country_prefix": "",
"number_type": "Unknown",
"zip": "",
"area": "",
"city": "",
"state": "",
"country": "",
"timezone": "",
"network_name": "",
"network_type": "",
"network_domain": ""
},
"470*******": {
"status": "Valid",
"phone_number": "+1470*******",
"national_format": "(470) ***-****",
"country_prefix": "1",
"number_type": "Mobile",
"zip": "30097",
"area": "",
"city": "Duluth",
"state": "GA",
"country": "US",
"timezone": "EST (America/New_York)",
"network_name": "Verizon Wireless",
"network_type": "WIRELESS",
"network_domain": "470*******@vtext.com"
},
"908*******": {
"status": "Valid",
"phone_number": "+1908*******",
"national_format": "(908) ***-****",
"country_prefix": "1",
"number_type": "Landline",
"zip": "07102",
"area": "Essex",
"city": "Newark",
"state": "NJ",
"country": "US",
"timezone": "EST (America/New_York)",
"network_name": "Lightpath",
"network_type": "CLEC",
"network_domain": ""
},
"704*******": {
"status": "Valid",
"phone_number": "+1704*******",
"national_format": "(704) ***-****",
"country_prefix": "1",
"number_type": "VoIP",
"zip": "",
"area": "",
"city": "",
"state": "NC",
"country": "US",
"timezone": "EST",
"network_name": "CenturyLink",
"network_type": "CLEC",
"network_domain": ""
}
}
}Unauthorized
{
"status": "failed",
"error": {
"error_code": 600,
"message": "Invalid API Key or API Secret."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 600,
"ErrorMessage": "Invalid API Key or API Secret."
}
}
}
{
"status": "failed",
"error": {
"error_code": 601,
"message": "API Key and API Secret are required."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 601,
"ErrorMessage": "API Key and API Secret are required."
}
}
}
{
"status": "failed",
"error": {
"error_code": 602,
"message": "The request could not be authenticated. Only HTTP POST method is allowed."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 602,
"ErrorMessage": "The request could not be authenticated. Only HTTP POST method is allowed."
}
}
}Payment Required
{
"status": "failed",
"error": {
"error_code": 603,
"message": "You do not have enough credits to process this request."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 603,
"ErrorMessage": "You do not have enough credits to process this request."
}
}
}
{
"status": "failed",
"error": {
"error_code": 604,
"message": "You have no credits remaining to process this request."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 604,
"ErrorMessage": "You have no credits remaining to process this request."
}
}
}Inactive Account
{
"status": "failed",
"error": {
"error_code": 605,
"message": "Your account is not activated to use this service."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 605,
"ErrorMessage": "Your account is not activated to use this service."
}
}
}Unknown Error
{
"status": "failed",
"error": {
"error_code": 607,
"message": "An internal error occurred. Please try again later."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 607,
"ErrorMessage": "An internal error occurred. Please try again later."
}
}
}Phone Number(s) Required
{
"status": "failed",
"error": {
"error_code": 608,
"message": "The request doesn't contain Phone Number(s)."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 608,
"ErrorMessage": "The request doesn't contain Phone Number(s)."
}
}
}Too Many Phone Numbers
{
"status": "failed",
"error": {
"error_code": 609,
"message": "The request must not contain more than 1000 Phone Number(s)."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 609,
"ErrorMessage": "The request must not contain more than 1000 Phone Number(s)."
}
}
}DNC Lookup API
- Get Available Credits GET
/dnclookup/getcredits/{api_key}/{api_secret} - DNC Lookup POST
/dnclookup/validate
Get Available Credits
GET /dnclookup/getcredits/{api_key}/{api_secret}
Path variables
| Name | Type | Description | Example |
|---|---|---|---|
api_key | string required | API Key | YOUR_API_KEY |
api_secret | string required | API Secret | YOUR_API_SECRET |
Responses
Request
curl "https://app.realvalidito.com/dnclookup/getcredits/YOUR_API_KEY/YOUR_API_SECRET"// Run this in an internal tool or behind a login only: never put your API secret into a public web page.
var apiKey = 'YOUR_API_KEY';
var apiSecret = 'YOUR_API_SECRET';
$.ajax({
url: 'https://app.realvalidito.com/dnclookup/getcredits/' + encodeURIComponent(apiKey) + '/' + encodeURIComponent(apiSecret),
method: 'GET',
dataType: 'json',
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.error(xhr.status, xhr.responseText);
}
});<?php
$apiKey = 'YOUR_API_KEY';
$apiSecret = 'YOUR_API_SECRET';
$ch = curl_init('https://app.realvalidito.com/dnclookup/getcredits/' . rawurlencode($apiKey) . '/' . rawurlencode($apiSecret));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
if ($response === false) {
die('Request failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode(json_decode($response, true), JSON_PRETTY_PRINT);// Node.js 18+ (built-in fetch)
const apiKey = 'YOUR_API_KEY';
const apiSecret = 'YOUR_API_SECRET';
async function main() {
const url = 'https://app.realvalidito.com/dnclookup/getcredits/' + encodeURIComponent(apiKey) + '/' + encodeURIComponent(apiSecret);
const response = await fetch(url);
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main().catch(console.error);import json
from urllib.parse import quote
import requests
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"
url = f"https://app.realvalidito.com/dnclookup/getcredits/{quote(api_key)}/{quote(api_secret)}"
response = requests.get(url, timeout=30)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
"time"
)
func main() {
apiKey := "YOUR_API_KEY"
apiSecret := "YOUR_API_SECRET"
endpoint := "https://app.realvalidito.com/dnclookup/getcredits/" + url.PathEscape(apiKey) + "/" + url.PathEscape(apiSecret)
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Get(endpoint)
if err != nil {
fmt.Println("request failed:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read failed:", err)
return
}
var result map[string]any
if err := json.Unmarshal(body, &result); err != nil {
fmt.Println("invalid JSON:", err)
return
}
pretty, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(pretty))
}// .NET 6+ console app
using System;
using System.Net.Http;
using System.Text.Json;
var apiKey = "YOUR_API_KEY";
var apiSecret = "YOUR_API_SECRET";
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
var url = "https://app.realvalidito.com/dnclookup/getcredits/" + Uri.EscapeDataString(apiKey) + "/" + Uri.EscapeDataString(apiSecret);
var body = await client.GetStringAsync(url);
using var doc = JsonDocument.Parse(body);
Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));Response 200 OK
{
"status": "success",
"data": {
"available_credits": "5000"
}
}Unauthorized
{
"status": "failed",
"error": {
"error_code": 600,
"message": "Invalid API Key or API Secret."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 600,
"ErrorMessage": "Invalid API Key or API Secret."
}
}
}
{
"status": "failed",
"error": {
"error_code": 614,
"message": "The request could not be authenticated. Only HTTP GET method is allowed."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 614,
"ErrorMessage": "The request could not be authenticated. Only HTTP GET method is allowed."
}
}
}DNC Lookup
POST /dnclookup/validate
Request body
| Name | Type | Description | Example |
|---|---|---|---|
api_key | string required | API Key | YOUR_API_KEY |
api_secret | string required | API Secret | YOUR_API_SECRET |
numbers | array required | Phone number(s) to scrub Array of 10-digit numeric phone numbers of the USA. No spaces, special characters, etc. No leading +1. A maximum of 1,000 phone numbers per request. | ['1234567890', '812*******', '908*******', '704*******', '757*******'] |
Responses
Request
curl -X POST "https://app.realvalidito.com/dnclookup/validate" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"numbers": ["2015550123", "2015550124"]
}'// Run this in an internal tool or behind a login only: never put your API secret into a public web page.
$.ajax({
url: 'https://app.realvalidito.com/dnclookup/validate',
method: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify({
api_key: 'YOUR_API_KEY',
api_secret: 'YOUR_API_SECRET',
numbers: ['2015550123', '2015550124']
}),
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.error(xhr.status, xhr.responseText);
}
});<?php
$payload = json_encode([
'api_key' => 'YOUR_API_KEY',
'api_secret' => 'YOUR_API_SECRET',
'numbers' => ['2015550123', '2015550124'],
]);
$ch = curl_init('https://app.realvalidito.com/dnclookup/validate');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
if ($response === false) {
die('Request failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode(json_decode($response, true), JSON_PRETTY_PRINT);// Node.js 18+ (built-in fetch)
async function main() {
const response = await fetch('https://app.realvalidito.com/dnclookup/validate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'YOUR_API_KEY',
api_secret: 'YOUR_API_SECRET',
numbers: ['2015550123', '2015550124']
})
});
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main().catch(console.error);import json
import requests
payload = {
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"numbers": ["2015550123", "2015550124"],
}
response = requests.post("https://app.realvalidito.com/dnclookup/validate", json=payload, timeout=30)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
func main() {
payload, err := json.Marshal(map[string]any{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"numbers": []string{"2015550123", "2015550124"},
})
if err != nil {
fmt.Println(err)
return
}
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Post("https://app.realvalidito.com/dnclookup/validate", "application/json", bytes.NewReader(payload))
if err != nil {
fmt.Println("request failed:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read failed:", err)
return
}
var result map[string]any
if err := json.Unmarshal(body, &result); err != nil {
fmt.Println("invalid JSON:", err)
return
}
pretty, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(pretty))
}// .NET 6+ console app
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
var payload = new
{
api_key = "YOUR_API_KEY",
api_secret = "YOUR_API_SECRET",
numbers = new[] { "2015550123", "2015550124" }
};
var response = await client.PostAsJsonAsync("https://app.realvalidito.com/dnclookup/validate", payload);
var body = await response.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(body);
Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));Response 200 OK
{
"status": "success",
"data": {
"cleaned_number": [
"908*******",
"704*******"
],
"tcpa_litigator": [
"757*******",
"812*******"
],
"federal_dnc": [
"989*******",
"207*******"
],
"state_dnc": {
"561*******": "Florida-DNC"
},
"invalid": [
"1234567890"
]
}
}Unauthorized
{
"status": "failed",
"error": {
"error_code": 600,
"message": "Invalid API Key or API Secret."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 600,
"ErrorMessage": "Invalid API Key or API Secret."
}
}
}
{
"status": "failed",
"error": {
"error_code": 601,
"message": "API Key and API Secret are required."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 601,
"ErrorMessage": "API Key and API Secret are required."
}
}
}
{
"status": "failed",
"error": {
"error_code": 602,
"message": "The request could not be authenticated. Only HTTP POST method is allowed."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 602,
"ErrorMessage": "The request could not be authenticated. Only HTTP POST method is allowed."
}
}
}Payment Required
{
"status": "failed",
"error": {
"error_code": 603,
"message": "You do not have enough credits to process this request."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 603,
"ErrorMessage": "You do not have enough credits to process this request."
}
}
}
{
"status": "failed",
"error": {
"error_code": 604,
"message": "You have no credits remaining to process this request."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 604,
"ErrorMessage": "You have no credits remaining to process this request."
}
}
}Inactive Account
{
"status": "failed",
"error": {
"error_code": 605,
"message": "Your account is not activated to use this service."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 605,
"ErrorMessage": "Your account is not activated to use this service."
}
}
}Unknown Error
{
"status": "failed",
"error": {
"error_code": 607,
"message": "An internal error occurred. Please try again later."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 607,
"ErrorMessage": "An internal error occurred. Please try again later."
}
}
}Phone Number(s) Required
{
"status": "failed",
"error": {
"error_code": 608,
"message": "The request doesn't contain Phone Number(s)."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 608,
"ErrorMessage": "The request doesn't contain Phone Number(s)."
}
}
}Too Many Phone Numbers
{
"status": "failed",
"error": {
"error_code": 609,
"message": "The request must not contain more than 1000 Phone Number(s)."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 609,
"ErrorMessage": "The request must not contain more than 1000 Phone Number(s)."
}
}
}Phone + DNC Lookup API
Phone Lookup and DNC Lookup in one request: every number gets its Valid/Invalid status, line type, carrier and location, plus its DNC result. Each number costs 1 Phone credit + 1 DNC credit, so both balances must cover the request.
- Get Available Credits GET
/lookups/getcredits/{api_key}/{api_secret} - Phone + DNC Lookup POST
/lookups/validate
Get Available Credits
GET /lookups/getcredits/{api_key}/{api_secret}
Returns both balances: available_phonelookup_credits and available_dnclookup_credits.
Path variables
| Name | Type | Description | Example |
|---|---|---|---|
api_key | string required | API Key | YOUR_API_KEY |
api_secret | string required | API Secret | YOUR_API_SECRET |
Responses
Request
curl "https://app.realvalidito.com/lookups/getcredits/YOUR_API_KEY/YOUR_API_SECRET"// Run this in an internal tool or behind a login only: never put your API secret into a public web page.
var apiKey = 'YOUR_API_KEY';
var apiSecret = 'YOUR_API_SECRET';
$.ajax({
url: 'https://app.realvalidito.com/lookups/getcredits/' + encodeURIComponent(apiKey) + '/' + encodeURIComponent(apiSecret),
method: 'GET',
dataType: 'json',
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.error(xhr.status, xhr.responseText);
}
});<?php
$apiKey = 'YOUR_API_KEY';
$apiSecret = 'YOUR_API_SECRET';
$ch = curl_init('https://app.realvalidito.com/lookups/getcredits/' . rawurlencode($apiKey) . '/' . rawurlencode($apiSecret));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
if ($response === false) {
die('Request failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode(json_decode($response, true), JSON_PRETTY_PRINT);// Node.js 18+ (built-in fetch)
const apiKey = 'YOUR_API_KEY';
const apiSecret = 'YOUR_API_SECRET';
async function main() {
const url = 'https://app.realvalidito.com/lookups/getcredits/' + encodeURIComponent(apiKey) + '/' + encodeURIComponent(apiSecret);
const response = await fetch(url);
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main().catch(console.error);import json
from urllib.parse import quote
import requests
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"
url = f"https://app.realvalidito.com/lookups/getcredits/{quote(api_key)}/{quote(api_secret)}"
response = requests.get(url, timeout=30)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
"time"
)
func main() {
apiKey := "YOUR_API_KEY"
apiSecret := "YOUR_API_SECRET"
endpoint := "https://app.realvalidito.com/lookups/getcredits/" + url.PathEscape(apiKey) + "/" + url.PathEscape(apiSecret)
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Get(endpoint)
if err != nil {
fmt.Println("request failed:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read failed:", err)
return
}
var result map[string]any
if err := json.Unmarshal(body, &result); err != nil {
fmt.Println("invalid JSON:", err)
return
}
pretty, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(pretty))
}// .NET 6+ console app
using System;
using System.Net.Http;
using System.Text.Json;
var apiKey = "YOUR_API_KEY";
var apiSecret = "YOUR_API_SECRET";
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
var url = "https://app.realvalidito.com/lookups/getcredits/" + Uri.EscapeDataString(apiKey) + "/" + Uri.EscapeDataString(apiSecret);
var body = await client.GetStringAsync(url);
using var doc = JsonDocument.Parse(body);
Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));Response 200 OK
{
"status": "success",
"data": {
"available_phonelookup_credits": "5000",
"available_dnclookup_credits": "2000"
}
}Unauthorized
{
"status": "failed",
"error": {
"error_code": 600,
"message": "Invalid API Key or API Secret."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 600,
"ErrorMessage": "Invalid API Key or API Secret."
}
}
}
{
"status": "failed",
"error": {
"error_code": 614,
"message": "The request could not be authenticated. Only HTTP GET method is allowed."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 614,
"ErrorMessage": "The request could not be authenticated. Only HTTP GET method is allowed."
}
}
}IP Address Not Allowed
{
"status": "failed",
"error": {
"error_code": 616,
"message": "Requests from this IP address are not allowed for this API key. Add the address under API Credentials > Allowed IP addresses."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 616,
"ErrorMessage": "Requests from this IP address are not allowed for this API key. Add the address under API Credentials > Allowed IP addresses."
}
}
}Phone + DNC Lookup
POST /lookups/validate
Request body
| Name | Type | Description | Example |
|---|---|---|---|
api_key | string required | API Key | YOUR_API_KEY |
api_secret | string required | API Secret | YOUR_API_SECRET |
numbers | array required | Phone number(s) to check Array of 10-digit numeric phone numbers of the USA / Canada. No spaces, special characters, etc. No leading 1 or +1 (a leading 1 is removed). A maximum of 1,000 phone numbers per request. | ['1234567890', '470*******', '561*******', '757*******'] |
Response fields
phone_status—ValidorInvalid, followed by the Phone Lookup fields (phone_number…network_domain).dnc_status—cleaned_number,tcpa_litigator,federal_dncorinvalid.state_dnc— on every number: the state list(s) the number is on (for exampleFlorida-DNC;dnc_statusis thenfederal_dnc), otherwise an empty string.
Errors: 603 = not enough Phone or DNC credits for the request; 604 = no DNC credits left.
Responses
Request
curl -X POST "https://app.realvalidito.com/lookups/validate" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"numbers": ["2015550123", "4165550198"]
}'// Run this in an internal tool or behind a login only: never put your API secret into a public web page.
$.ajax({
url: 'https://app.realvalidito.com/lookups/validate',
method: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify({
api_key: 'YOUR_API_KEY',
api_secret: 'YOUR_API_SECRET',
numbers: ['2015550123', '4165550198']
}),
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.error(xhr.status, xhr.responseText);
}
});<?php
$payload = json_encode([
'api_key' => 'YOUR_API_KEY',
'api_secret' => 'YOUR_API_SECRET',
'numbers' => ['2015550123', '4165550198'],
]);
$ch = curl_init('https://app.realvalidito.com/lookups/validate');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
if ($response === false) {
die('Request failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode(json_decode($response, true), JSON_PRETTY_PRINT);// Node.js 18+ (built-in fetch)
async function main() {
const response = await fetch('https://app.realvalidito.com/lookups/validate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'YOUR_API_KEY',
api_secret: 'YOUR_API_SECRET',
numbers: ['2015550123', '4165550198']
})
});
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main().catch(console.error);import json
import requests
payload = {
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"numbers": ["2015550123", "4165550198"],
}
response = requests.post("https://app.realvalidito.com/lookups/validate", json=payload, timeout=30)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
func main() {
payload, err := json.Marshal(map[string]any{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"numbers": []string{"2015550123", "4165550198"},
})
if err != nil {
fmt.Println(err)
return
}
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Post("https://app.realvalidito.com/lookups/validate", "application/json", bytes.NewReader(payload))
if err != nil {
fmt.Println("request failed:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read failed:", err)
return
}
var result map[string]any
if err := json.Unmarshal(body, &result); err != nil {
fmt.Println("invalid JSON:", err)
return
}
pretty, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(pretty))
}// .NET 6+ console app
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
var payload = new
{
api_key = "YOUR_API_KEY",
api_secret = "YOUR_API_SECRET",
numbers = new[] { "2015550123", "4165550198" }
};
var response = await client.PostAsJsonAsync("https://app.realvalidito.com/lookups/validate", payload);
var body = await response.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(body);
Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));Response 200 OK
{
"status": "success",
"data": {
"1234567890": {
"phone_status": "Invalid",
"phone_number": "1234567890",
"national_format": "",
"country_prefix": "",
"number_type": "Unknown",
"zip": "",
"area": "",
"city": "",
"state": "",
"country": "",
"timezone": "",
"network_name": "",
"network_type": "",
"network_domain": "",
"dnc_status": "invalid",
"state_dnc": ""
},
"470*******": {
"phone_status": "Valid",
"phone_number": "+1470*******",
"national_format": "(470) ***-****",
"country_prefix": "1",
"number_type": "Mobile",
"zip": "30097",
"area": "",
"city": "Duluth",
"state": "GA",
"country": "US",
"timezone": "EST (America/New_York)",
"network_name": "Verizon Wireless",
"network_type": "WIRELESS",
"network_domain": "470*******@vtext.com",
"dnc_status": "cleaned_number",
"state_dnc": ""
},
"561*******": {
"phone_status": "Valid",
"phone_number": "+1561*******",
"national_format": "(561) ***-****",
"country_prefix": "1",
"number_type": "Landline",
"zip": "33401",
"area": "",
"city": "West Palm Beach",
"state": "FL",
"country": "US",
"timezone": "EST (America/New_York)",
"network_name": "AT&T Southeast",
"network_type": "LANDLINE",
"network_domain": "",
"dnc_status": "federal_dnc",
"state_dnc": "Florida-DNC"
},
"757*******": {
"phone_status": "Valid",
"phone_number": "+1757*******",
"national_format": "(757) ***-****",
"country_prefix": "1",
"number_type": "Mobile",
"zip": "23510",
"area": "",
"city": "Norfolk",
"state": "VA",
"country": "US",
"timezone": "EST (America/New_York)",
"network_name": "T-Mobile",
"network_type": "WIRELESS",
"network_domain": "757*******@tmomail.net",
"dnc_status": "tcpa_litigator",
"state_dnc": ""
}
}
}Unauthorized
{
"status": "failed",
"error": {
"error_code": 600,
"message": "Invalid API Key or API Secret."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 600,
"ErrorMessage": "Invalid API Key or API Secret."
}
}
}
{
"status": "failed",
"error": {
"error_code": 601,
"message": "API Key and API Secret are required."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 601,
"ErrorMessage": "API Key and API Secret are required."
}
}
}
{
"status": "failed",
"error": {
"error_code": 602,
"message": "The request could not be authenticated. Only HTTP POST method is allowed."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 602,
"ErrorMessage": "The request could not be authenticated. Only HTTP POST method is allowed."
}
}
}Payment Required
{
"status": "failed",
"error": {
"error_code": 603,
"message": "You do not have enough phone lookup credits to process this request."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 603,
"ErrorMessage": "You do not have enough phone lookup credits to process this request."
}
}
}
{
"status": "failed",
"error": {
"error_code": 604,
"message": "You have no DNC lookup credits to process this request."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 604,
"ErrorMessage": "You have no DNC lookup credits to process this request."
}
}
}Inactive Account
{
"status": "failed",
"error": {
"error_code": 605,
"message": "Your account is not activated to use this service."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 605,
"ErrorMessage": "Your account is not activated to use this service."
}
}
}Phone Number(s) Required
{
"status": "failed",
"error": {
"error_code": 608,
"message": "The request doesn't contain Phone Number(s)."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 608,
"ErrorMessage": "The request doesn't contain Phone Number(s)."
}
}
}Too Many Phone Numbers
{
"status": "failed",
"error": {
"error_code": 609,
"message": "The request must not contain more than 1000 Phone Number(s)."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 609,
"ErrorMessage": "The request must not contain more than 1000 Phone Number(s)."
}
}
}IP Address Not Allowed
{
"status": "failed",
"error": {
"error_code": 616,
"message": "Requests from this IP address are not allowed for this API key. Add the address under API Credentials > Allowed IP addresses."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 616,
"ErrorMessage": "Requests from this IP address are not allowed for this API key. Add the address under API Credentials > Allowed IP addresses."
}
}
}Gender Lookup API
- Get Available Credits GET
/genderlookup/getcredits/{api_key}/{api_secret} - Gender Lookup POST
/genderlookup/validate
Get Available Credits
GET /genderlookup/getcredits/{api_key}/{api_secret}
Path variables
| Name | Type | Description | Example |
|---|---|---|---|
api_key | string required | API Key | YOUR_API_KEY |
api_secret | string required | API Secret | YOUR_API_SECRET |
Responses
Request
curl "https://app.realvalidito.com/genderlookup/getcredits/YOUR_API_KEY/YOUR_API_SECRET"// Run this in an internal tool or behind a login only: never put your API secret into a public web page.
var apiKey = 'YOUR_API_KEY';
var apiSecret = 'YOUR_API_SECRET';
$.ajax({
url: 'https://app.realvalidito.com/genderlookup/getcredits/' + encodeURIComponent(apiKey) + '/' + encodeURIComponent(apiSecret),
method: 'GET',
dataType: 'json',
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.error(xhr.status, xhr.responseText);
}
});<?php
$apiKey = 'YOUR_API_KEY';
$apiSecret = 'YOUR_API_SECRET';
$ch = curl_init('https://app.realvalidito.com/genderlookup/getcredits/' . rawurlencode($apiKey) . '/' . rawurlencode($apiSecret));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
if ($response === false) {
die('Request failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode(json_decode($response, true), JSON_PRETTY_PRINT);// Node.js 18+ (built-in fetch)
const apiKey = 'YOUR_API_KEY';
const apiSecret = 'YOUR_API_SECRET';
async function main() {
const url = 'https://app.realvalidito.com/genderlookup/getcredits/' + encodeURIComponent(apiKey) + '/' + encodeURIComponent(apiSecret);
const response = await fetch(url);
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main().catch(console.error);import json
from urllib.parse import quote
import requests
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"
url = f"https://app.realvalidito.com/genderlookup/getcredits/{quote(api_key)}/{quote(api_secret)}"
response = requests.get(url, timeout=30)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
"time"
)
func main() {
apiKey := "YOUR_API_KEY"
apiSecret := "YOUR_API_SECRET"
endpoint := "https://app.realvalidito.com/genderlookup/getcredits/" + url.PathEscape(apiKey) + "/" + url.PathEscape(apiSecret)
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Get(endpoint)
if err != nil {
fmt.Println("request failed:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read failed:", err)
return
}
var result map[string]any
if err := json.Unmarshal(body, &result); err != nil {
fmt.Println("invalid JSON:", err)
return
}
pretty, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(pretty))
}// .NET 6+ console app
using System;
using System.Net.Http;
using System.Text.Json;
var apiKey = "YOUR_API_KEY";
var apiSecret = "YOUR_API_SECRET";
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
var url = "https://app.realvalidito.com/genderlookup/getcredits/" + Uri.EscapeDataString(apiKey) + "/" + Uri.EscapeDataString(apiSecret);
var body = await client.GetStringAsync(url);
using var doc = JsonDocument.Parse(body);
Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));Response 200 OK
{
"status": "success",
"data": {
"available_credits": "5000"
}
}Unauthorized
{
"status": "failed",
"error": {
"error_code": 600,
"message": "Invalid API Key or API Secret."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 600,
"ErrorMessage": "Invalid API Key or API Secret."
}
}
}
{
"status": "failed",
"error": {
"error_code": 614,
"message": "The request could not be authenticated. Only HTTP GET method is allowed."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 614,
"ErrorMessage": "The request could not be authenticated. Only HTTP GET method is allowed."
}
}
}Gender Lookup
POST /genderlookup/validate
Request body
| Name | Type | Description | Example |
|---|---|---|---|
api_key | string required | API Key | YOUR_API_KEY |
api_secret | string required | API Secret | YOUR_API_SECRET |
names | array required | Customer's name(s) Array of names (first name, or full name: the first name is used). A maximum of 1,000 names per request. | ['Aabel', 'Delain', 'Kecha', 'Vincenzzo', 'Shade', 'Cracker', 'Yes'] |
Responses
Request
curl -X POST "https://app.realvalidito.com/genderlookup/validate" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"names": ["Maria", "Jordan"]
}'// Run this in an internal tool or behind a login only: never put your API secret into a public web page.
$.ajax({
url: 'https://app.realvalidito.com/genderlookup/validate',
method: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify({
api_key: 'YOUR_API_KEY',
api_secret: 'YOUR_API_SECRET',
names: ['Maria', 'Jordan']
}),
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.error(xhr.status, xhr.responseText);
}
});<?php
$payload = json_encode([
'api_key' => 'YOUR_API_KEY',
'api_secret' => 'YOUR_API_SECRET',
'names' => ['Maria', 'Jordan'],
]);
$ch = curl_init('https://app.realvalidito.com/genderlookup/validate');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
if ($response === false) {
die('Request failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode(json_decode($response, true), JSON_PRETTY_PRINT);// Node.js 18+ (built-in fetch)
async function main() {
const response = await fetch('https://app.realvalidito.com/genderlookup/validate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'YOUR_API_KEY',
api_secret: 'YOUR_API_SECRET',
names: ['Maria', 'Jordan']
})
});
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main().catch(console.error);import json
import requests
payload = {
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"names": ["Maria", "Jordan"],
}
response = requests.post("https://app.realvalidito.com/genderlookup/validate", json=payload, timeout=30)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
func main() {
payload, err := json.Marshal(map[string]any{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"names": []string{"Maria", "Jordan"},
})
if err != nil {
fmt.Println(err)
return
}
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Post("https://app.realvalidito.com/genderlookup/validate", "application/json", bytes.NewReader(payload))
if err != nil {
fmt.Println("request failed:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read failed:", err)
return
}
var result map[string]any
if err := json.Unmarshal(body, &result); err != nil {
fmt.Println("invalid JSON:", err)
return
}
pretty, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(pretty))
}// .NET 6+ console app
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
var payload = new
{
api_key = "YOUR_API_KEY",
api_secret = "YOUR_API_SECRET",
names = new[] { "Maria", "Jordan" }
};
var response = await client.PostAsJsonAsync("https://app.realvalidito.com/genderlookup/validate", payload);
var body = await response.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(body);
Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));Response 200 OK
{
"status": "success",
"data": {
"valid_names": {
"Aabel": "Male",
"Delain": "Unisex",
"Kecha": "Female",
"Vincenzzo": "Male",
"Shade": "Unisex"
},
"salacious_names": [
"Cracker"
],
"random_names": [
"Yes"
],
"incomplete_names": []
}
}Unauthorized
{
"status": "failed",
"error": {
"error_code": 600,
"message": "Invalid API Key or API Secret."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 600,
"ErrorMessage": "Invalid API Key or API Secret."
}
}
}
{
"status": "failed",
"error": {
"error_code": 601,
"message": "API Key and API Secret are required."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 601,
"ErrorMessage": "API Key and API Secret are required."
}
}
}
{
"status": "failed",
"error": {
"error_code": 602,
"message": "The request could not be authenticated. Only HTTP POST method is allowed."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 602,
"ErrorMessage": "The request could not be authenticated. Only HTTP POST method is allowed."
}
}
}Payment Required
{
"status": "failed",
"error": {
"error_code": 603,
"message": "You do not have enough credits to process this request."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 603,
"ErrorMessage": "You do not have enough credits to process this request."
}
}
}
{
"status": "failed",
"error": {
"error_code": 604,
"message": "You have no credits remaining to process this request."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 604,
"ErrorMessage": "You have no credits remaining to process this request."
}
}
}Inactive Account
{
"status": "failed",
"error": {
"error_code": 605,
"message": "Your account is not activated to use this service."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 605,
"ErrorMessage": "Your account is not activated to use this service."
}
}
}Unknown Error
{
"status": "failed",
"error": {
"error_code": 607,
"message": "An internal error occurred. Please try again later."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 607,
"ErrorMessage": "An internal error occurred. Please try again later."
}
}
}Name(s) Required
{
"status": "failed",
"error": {
"error_code": 610,
"message": "The request doesn't contain Name(s)."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 610,
"ErrorMessage": "The request doesn't contain Name(s)."
}
}
}Too Many Names
{
"status": "failed",
"error": {
"error_code": 611,
"message": "The request must not contain more than 1000 Name(s)."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 611,
"ErrorMessage": "The request must not contain more than 1000 Name(s)."
}
}
}ZIP/Postal Code Lookup API
- Get Available Credits GET
/ziplookup/getcredits/{api_key}/{api_secret} - ZIP Code Lookup POST
/ziplookup/validate
Get Available Credits
GET /ziplookup/getcredits/{api_key}/{api_secret}
Path variables
| Name | Type | Description | Example |
|---|---|---|---|
api_key | string required | API Key | YOUR_API_KEY |
api_secret | string required | API Secret | YOUR_API_SECRET |
Responses
Request
curl "https://app.realvalidito.com/ziplookup/getcredits/YOUR_API_KEY/YOUR_API_SECRET"// Run this in an internal tool or behind a login only: never put your API secret into a public web page.
var apiKey = 'YOUR_API_KEY';
var apiSecret = 'YOUR_API_SECRET';
$.ajax({
url: 'https://app.realvalidito.com/ziplookup/getcredits/' + encodeURIComponent(apiKey) + '/' + encodeURIComponent(apiSecret),
method: 'GET',
dataType: 'json',
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.error(xhr.status, xhr.responseText);
}
});<?php
$apiKey = 'YOUR_API_KEY';
$apiSecret = 'YOUR_API_SECRET';
$ch = curl_init('https://app.realvalidito.com/ziplookup/getcredits/' . rawurlencode($apiKey) . '/' . rawurlencode($apiSecret));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
if ($response === false) {
die('Request failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode(json_decode($response, true), JSON_PRETTY_PRINT);// Node.js 18+ (built-in fetch)
const apiKey = 'YOUR_API_KEY';
const apiSecret = 'YOUR_API_SECRET';
async function main() {
const url = 'https://app.realvalidito.com/ziplookup/getcredits/' + encodeURIComponent(apiKey) + '/' + encodeURIComponent(apiSecret);
const response = await fetch(url);
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main().catch(console.error);import json
from urllib.parse import quote
import requests
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"
url = f"https://app.realvalidito.com/ziplookup/getcredits/{quote(api_key)}/{quote(api_secret)}"
response = requests.get(url, timeout=30)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
"time"
)
func main() {
apiKey := "YOUR_API_KEY"
apiSecret := "YOUR_API_SECRET"
endpoint := "https://app.realvalidito.com/ziplookup/getcredits/" + url.PathEscape(apiKey) + "/" + url.PathEscape(apiSecret)
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Get(endpoint)
if err != nil {
fmt.Println("request failed:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read failed:", err)
return
}
var result map[string]any
if err := json.Unmarshal(body, &result); err != nil {
fmt.Println("invalid JSON:", err)
return
}
pretty, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(pretty))
}// .NET 6+ console app
using System;
using System.Net.Http;
using System.Text.Json;
var apiKey = "YOUR_API_KEY";
var apiSecret = "YOUR_API_SECRET";
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
var url = "https://app.realvalidito.com/ziplookup/getcredits/" + Uri.EscapeDataString(apiKey) + "/" + Uri.EscapeDataString(apiSecret);
var body = await client.GetStringAsync(url);
using var doc = JsonDocument.Parse(body);
Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));Response 200 OK
{
"status": "success",
"data": {
"available_credits": "5000"
}
}Unauthorized
{
"status": "failed",
"error": {
"error_code": 600,
"message": "Invalid API Key or API Secret."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 600,
"ErrorMessage": "Invalid API Key or API Secret."
}
}
}
{
"status": "failed",
"error": {
"error_code": 614,
"message": "The request could not be authenticated. Only HTTP GET method is allowed."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 614,
"ErrorMessage": "The request could not be authenticated. Only HTTP GET method is allowed."
}
}
}ZIP Code Lookup
POST /ziplookup/validate
Request body
| Name | Type | Description | Example |
|---|---|---|---|
api_key | string required | API Key | YOUR_API_KEY |
api_secret | string required | API Secret | YOUR_API_SECRET |
zipcodes | array required | ZIP/postal code(s) to validate Array of ZIP/postal codes of the USA / Canada. ZIP+4 (12345-6789) and Canadian codes with or without the space are accepted. A maximum of 1,000 ZIP/postal codes per request. | ['12345', 'Y1A 6V6', '99835', '49032', '00000', '35004','11111'] |
Responses
Request
curl -X POST "https://app.realvalidito.com/ziplookup/validate" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"zipcodes": ["10001", "M5V 2T6"]
}'// Run this in an internal tool or behind a login only: never put your API secret into a public web page.
$.ajax({
url: 'https://app.realvalidito.com/ziplookup/validate',
method: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify({
api_key: 'YOUR_API_KEY',
api_secret: 'YOUR_API_SECRET',
zipcodes: ['10001', 'M5V 2T6']
}),
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.error(xhr.status, xhr.responseText);
}
});<?php
$payload = json_encode([
'api_key' => 'YOUR_API_KEY',
'api_secret' => 'YOUR_API_SECRET',
'zipcodes' => ['10001', 'M5V 2T6'],
]);
$ch = curl_init('https://app.realvalidito.com/ziplookup/validate');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
if ($response === false) {
die('Request failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode(json_decode($response, true), JSON_PRETTY_PRINT);// Node.js 18+ (built-in fetch)
async function main() {
const response = await fetch('https://app.realvalidito.com/ziplookup/validate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
api_key: 'YOUR_API_KEY',
api_secret: 'YOUR_API_SECRET',
zipcodes: ['10001', 'M5V 2T6']
})
});
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main().catch(console.error);import json
import requests
payload = {
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"zipcodes": ["10001", "M5V 2T6"],
}
response = requests.post("https://app.realvalidito.com/ziplookup/validate", json=payload, timeout=30)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
func main() {
payload, err := json.Marshal(map[string]any{
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"zipcodes": []string{"10001", "M5V 2T6"},
})
if err != nil {
fmt.Println(err)
return
}
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Post("https://app.realvalidito.com/ziplookup/validate", "application/json", bytes.NewReader(payload))
if err != nil {
fmt.Println("request failed:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read failed:", err)
return
}
var result map[string]any
if err := json.Unmarshal(body, &result); err != nil {
fmt.Println("invalid JSON:", err)
return
}
pretty, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(pretty))
}// .NET 6+ console app
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
var payload = new
{
api_key = "YOUR_API_KEY",
api_secret = "YOUR_API_SECRET",
zipcodes = new[] { "10001", "M5V 2T6" }
};
var response = await client.PostAsJsonAsync("https://app.realvalidito.com/ziplookup/validate", payload);
var body = await response.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(body);
Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));Response 200 OK
{
"status": "success",
"data": {
"valid_zipcodes": {
"12345": {
"state": "New York (NY)",
"county": "Schenectady County",
"country": "US",
"timezone": "America/New_York",
"type": "UNIQUE",
"area_codes": "518",
"latitude": "42.8",
"longitude": "-73.92",
"estimated_population": "48",
"city": "Schenectady"
},
"35004": {
"state": "Alabama (AL)",
"county": "St. Clair County",
"country": "US",
"timezone": "America/Chicago",
"type": "STANDARD",
"area_codes": "205",
"latitude": "33.59",
"longitude": "-86.49",
"estimated_population": "10440",
"city": "Moody"
},
"49032": {
"state": "Michigan (MI)",
"county": "St. Joseph County",
"country": "US",
"timezone": "America/Detroit",
"type": "STANDARD",
"area_codes": "269",
"latitude": "41.92",
"longitude": "-85.52",
"estimated_population": "2780",
"city": "Centreville"
},
"99835": {
"state": "Alaska (AK)",
"county": "Sitka City and Borough",
"country": "US",
"timezone": "America/Sitka",
"type": "STANDARD",
"area_codes": "907",
"latitude": "56.73",
"longitude": "-135",
"estimated_population": "7550",
"city": "Sitka"
},
"Y1A 6V6": {
"state": "Yukon (YT)",
"county": "",
"country": "CA",
"timezone": "Mountain Standard Time (MST)",
"type": "",
"area_codes": "867",
"latitude": "60.706299",
"longitude": "-135.115264",
"estimated_population": "",
"city": "Whitehorse"
}
},
"invalid_zipcodes": [
"11111"
]
}
}Unauthorized
{
"status": "failed",
"error": {
"error_code": 600,
"message": "Invalid API Key or API Secret."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 600,
"ErrorMessage": "Invalid API Key or API Secret."
}
}
}
{
"status": "failed",
"error": {
"error_code": 601,
"message": "API Key and API Secret are required."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 601,
"ErrorMessage": "API Key and API Secret are required."
}
}
}
{
"status": "failed",
"error": {
"error_code": 602,
"message": "The request could not be authenticated. Only HTTP POST method is allowed."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 602,
"ErrorMessage": "The request could not be authenticated. Only HTTP POST method is allowed."
}
}
}Payment Required
{
"status": "failed",
"error": {
"error_code": 603,
"message": "You do not have enough credits to process this request."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 603,
"ErrorMessage": "You do not have enough credits to process this request."
}
}
}
{
"status": "failed",
"error": {
"error_code": 604,
"message": "You have no credits remaining to process this request."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 604,
"ErrorMessage": "You have no credits remaining to process this request."
}
}
}Inactive Account
{
"status": "failed",
"error": {
"error_code": 605,
"message": "Your account is not activated to use this service."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 605,
"ErrorMessage": "Your account is not activated to use this service."
}
}
}Unknown Error
{
"status": "failed",
"error": {
"error_code": 607,
"message": "An internal error occurred. Please try again later."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 607,
"ErrorMessage": "An internal error occurred. Please try again later."
}
}
}Zip Code(s) Required
{
"status": "failed",
"error": {
"error_code": 612,
"message": "The request doesn't contain Zip/Postal Code(s)."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 612,
"ErrorMessage": "The request doesn't contain Zip/Postal Code(s)."
}
}
}Too Many Zip Codes
{
"status": "failed",
"error": {
"error_code": 613,
"message": "The request must not contain more than 1000 Zip/Postal Code(s)."
},
"Response": {
"Status": "Failed",
"Errors": {
"ErrorCode": 613,
"ErrorMessage": "The request must not contain more than 1000 Zip/Postal Code(s)."
}
}
}HTTP Response Codes
200 | Successful requests will receive a 200 response code |
500 | Internal Server Error |
503 | Service unavailable |
524 | Request Timeout |
Error Codes
RealValidito Error Codes
600 | Invalid API Key or API Secret. |
601 | API Key and API Secret are required. |
602 | The request could not be authenticated. Only HTTP POST method is allowed. |
603 | You do not have enough credits to process this request. (Phone + DNC Lookup API: not enough Phone or DNC credits.) |
604 | You have no credits remaining to process this request. (Phone + DNC Lookup API: no DNC credits left.) |
605 | Your account is not activated to use this service. / Invalid API credentials or service not activated for your account. |
607 | An internal error occurred. Please try again later. |
608 | The request doesn't contain Phone Number(s). |
609 | The request must not contain more than 1000 Phone Number(s). |
610 | The request doesn't contain Name(s). |
611 | The request must not contain more than 1000 Name(s). |
612 | The request doesn't contain Zip/Postal Code(s). |
613 | The request must not contain more than 1000 Zip/Postal Code(s). |
614 | The request could not be authenticated. Only HTTP GET method is allowed. |
616 | Requests from this IP address are not allowed for this API key. Add the address under API Credentials > Allowed IP addresses. |
Related Resources
- Phone Lookup — validate individual numbers in your browser
- DNC Lookup — screen a number against DNC screening data
- Pricing & Credits — see volume pricing and credit packages
- TCPA Compliance 2026 Guide — understand TCPA rules before building your integration
- Carrier Lookup API Guide — deep-dive on line type and carrier detection
