Skip to content

Response Schema

This page documents the complete JSON response schema for the /api/v1/json endpoint.

interface InfoResponse {
ip: string;
ip_version: number;
reverse_dns: string | null;
network: NetworkInfo;
connection: ConnectionInfo;
client: ClientInfo;
privacy: PrivacyInfo;
server: ServerInfo;
cloudflare?: CloudflareHeaders;
nginx?: NginxHeaders;
}

FieldTypeDescription
ipstringThe detected IP address
ip_versionnumberIP version (4 or 6)
reverse_dnsstring | nullReverse DNS lookup (always null - reverse DNS is client-side only via HTML UI)
cloudflareCloudflareHeaders | undefinedCloudflare Worker headers (only present when mode = "cloudflare")
nginxNginxHeaders | undefinedNginx headers (only present when mode = "nginx")

Information about the IP’s network/ASN and organization details from all 5 Regional Internet Registries.

interface NetworkInfo {
asn: number | null;
as_name: string | null;
prefix: string | null;
rir: string | null;
country: string | null;
org_name: string | null;
org_id: string | null;
org_rir: string | null;
org_country: string | null; // Deprecated: duplicates country field
org_type: string | null;
abuse_contact: string | null;
org_last_updated: string | null;
tor_exit: boolean;
vpn_or_hosting: boolean;
}
FieldTypeDescription
asnnumber | nullAutonomous System Number
as_namestring | nullAS description/name
prefixstring | nullNetwork prefix (CIDR notation)
rirstring | nullRegional Internet Registry (ARIN, RIPE, APNIC, LACNIC, AFRINIC) - displays org_rir value
countrystring | nullTwo-letter country code (from ASN database)
org_namestring | nullOrganization name
org_idstring | nullOrganization identifier (e.g., ORG-GVMT1-RIPE)
org_rirstring | nullRIR that provided the organization data
org_countrystring | nullDeprecated: Duplicates country field. Use country instead.
org_typestring | nullOrganization type (LIR, ISP, CORP, etc.)
abuse_contactstring | nullAbuse contact email address (resolved from RIR handles)
org_last_updatedstring | nullLast update date of organization record
tor_exitbooleanWhether IP is a known Tor exit node
vpn_or_hostingbooleanWhether IP belongs to VPN/hosting provider

Information about the current connection.

interface ConnectionInfo {
tls_version: string | null;
http_protocol: string | null;
tls_cipher: string | null;
cf_ray: string | null;
datacenter: string | null;
request_id: string | null;
remote_port: string | null;
connection_id: string | null;
}
FieldTypeDescription
tls_versionstring | nullTLS version (e.g., TLSv1.3)
http_protocolstring | nullHTTP version (h2, http/1.1)
tls_cipherstring | nullTLS cipher suite (e.g., AEAD-AES128-GCM-SHA256)
cf_raystring | nullCloudflare Ray ID (only in cloudflare mode)
datacenterstring | nullCloudflare datacenter code (e.g., IAD, only in cloudflare mode)
request_idstring | nullUnique request identifier from nginx $request_id (only in nginx mode)
remote_portstring | nullClient source port from nginx $remote_port (only in nginx mode)
connection_idstring | nullConnection serial number from nginx $connection (only in nginx mode)

These fields are populated based on the proxy mode:

  • Cloudflare mode: Uses X-CF-TLS-Version, X-CF-TLS-Cipher, X-CF-HTTP-Protocol headers. cf_ray and datacenter are populated from Cloudflare headers.
  • Nginx mode: Uses X-TLS-Version, X-TLS-Cipher, X-HTTP-Protocol headers. request_id, remote_port, and connection_id are populated from nginx variables.

Information about the client making the request, including privacy preferences and security headers.

interface ClientInfo {
user_agent: string | null;
accept_language: string | null;
accept_encoding: string | null;
dnt: string | null;
sec_gpc: string | null;
save_data: string | null;
upgrade_insecure_requests: string | null;
referer: string | null;
origin: string | null;
client_hints: ClientHints;
sec_fetch: SecFetchHeaders;
}
interface ClientHints {
sec_ch_ua: string | null;
sec_ch_ua_platform: string | null;
sec_ch_ua_mobile: string | null;
sec_ch_ua_full_version_list: string | null;
device_memory: string | null;
viewport_width: string | null;
downlink: string | null;
rtt: string | null;
ect: string | null;
}
interface SecFetchHeaders {
site: string | null;
mode: string | null;
dest: string | null;
user: string | null;
}
FieldTypeDescription
user_agentstring | nullUser-Agent header value
accept_languagestring | nullAccept-Language header
accept_encodingstring | nullAccept-Encoding header
dntstring | nullDo Not Track preference (Enabled / Disabled)
sec_gpcstring | nullGlobal Privacy Control (Enabled / Disabled)
save_datastring | nullSave-Data preference
upgrade_insecure_requestsstring | nullHTTPS upgrade preference
refererstring | nullReferer header
originstring | nullOrigin header
client_hints.sec_ch_uastring | nullClient Hints UA string
client_hints.sec_ch_ua_platformstring | nullClient Hints platform
client_hints.sec_ch_ua_mobilestring | nullMobile device indicator
client_hints.sec_ch_ua_full_version_liststring | nullFull version list
client_hints.device_memorystring | nullDevice memory (GB)
client_hints.viewport_widthstring | nullViewport width (px)
client_hints.downlinkstring | nullNetwork downlink (Mbps)
client_hints.rttstring | nullNetwork RTT (ms)
client_hints.ectstring | nullEffective connection type
sec_fetch.sitestring | nullSec-Fetch-Site header
sec_fetch.modestring | nullSec-Fetch-Mode header
sec_fetch.deststring | nullSec-Fetch-Dest header
sec_fetch.userstring | nullSec-Fetch-User header

Information about the server’s privacy mode.

interface PrivacyInfo {
mode: string;
logs_retained: boolean;
}
FieldTypeDescription
modestringPrivacy mode (strict or balanced)
logs_retainedbooleanWhether logs are retained

Information about the CloakProbe server.

interface ServerInfo {
timestamp_utc: string;
region: string | null;
version: string;
response_time_ms: number | null;
}
FieldTypeDescription
timestamp_utcstringISO 8601 timestamp
regionstring | nullServer region (from CLOAKPROBE_REGION)
versionstringCloakProbe version
response_time_msnumber | nullServer processing time in milliseconds

Information from Cloudflare Worker headers (only present when using Cloudflare Worker).

interface CloudflareHeaders {
geo?: CloudflareGeoHeaders;
network?: CloudflareNetworkHeaders;
connection?: CloudflareConnectionHeaders;
security?: CloudflareSecurityHeaders;
proxy?: CloudflareProxyHeaders;
}

Geographic location information (derived from CF-IPCountry header).

interface CloudflareGeoHeaders {
country?: string;
city?: string;
region?: string;
region_code?: string;
continent?: string;
latitude?: string;
longitude?: string;
postal_code?: string;
timezone?: string;
}

Network information.

interface CloudflareNetworkHeaders {
asn?: string;
as_organization?: string;
colo?: string;
}

Connection details.

interface CloudflareConnectionHeaders {
cf_visitor?: string;
x_forwarded_proto?: string;
http_protocol?: string;
tls_version?: string;
tls_cipher?: string;
cf_request_id?: string;
cf_cache_status?: string;
}

Security and bot management information.

interface CloudflareSecurityHeaders {
trust_score?: string;
bot_score?: string;
verified_bot?: string;
}

Proxy forwarding headers.

interface CloudflareProxyHeaders {
x_forwarded_for?: string;
x_real_ip?: string;
}

Information from nginx headers (only present when mode = "nginx").

interface NginxHeaders {
geo?: NginxGeoHeaders;
proxy?: CloudflareProxyHeaders;
}

Geographic location information from nginx GeoIP module (optional, requires GeoIP module configuration).

interface NginxGeoHeaders {
country?: string;
city?: string;
region?: string;
latitude?: string;
longitude?: string;
postal_code?: string;
org?: string;
}
FieldTypeDescription
countrystring | undefinedTwo-letter country code from GeoIP
citystring | undefinedCity name from GeoIP
regionstring | undefinedRegion/state name from GeoIP
latitudestring | undefinedLatitude coordinate
longitudestring | undefinedLongitude coordinate
postal_codestring | undefinedPostal/ZIP code
orgstring | undefinedOrganization/ISP name from GeoIP

{
"ip": "2001:db8::1234",
"ip_version": 6,
"reverse_dns": null,
"network": {
"asn": 64496,
"as_name": "EXAMPLE-NET",
"prefix": "2001:db8::/32",
"rir": "RIPE",
"country": "DE",
"org_name": "Example GmbH",
"org_id": "ORG-EG1-RIPE",
"org_rir": "ripe",
"org_country": "DE",
"org_type": "LIR",
"abuse_contact": "abuse@example.de",
"org_last_updated": "2024-01-10",
"tor_exit": false,
"vpn_or_hosting": false
},
"connection": {
"tls_version": "TLSv1.3",
"http_protocol": "h2",
"tls_cipher": "AEAD-AES128-GCM-SHA256",
"cf_ray": "8abc123def456-FRA",
"datacenter": "FRA",
"request_id": null,
"remote_port": null,
"connection_id": null
},
"client": {
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"accept_language": "en-US,en;q=0.9,de;q=0.8",
"accept_encoding": "gzip, deflate, br",
"dnt": "Enabled",
"sec_gpc": "Enabled",
"save_data": null,
"upgrade_insecure_requests": "1",
"referer": null,
"origin": null,
"client_hints": {
"sec_ch_ua": "\"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
"sec_ch_ua_platform": "\"Windows\"",
"sec_ch_ua_mobile": "?0",
"sec_ch_ua_full_version_list": null,
"device_memory": "8",
"viewport_width": "1920",
"downlink": null,
"rtt": null,
"ect": null
},
"sec_fetch": {
"site": "none",
"mode": "navigate",
"dest": "document",
"user": "?1"
}
},
"privacy": {
"mode": "strict",
"logs_retained": false
},
"server": {
"timestamp_utc": "2024-01-15T14:30:00.123456789Z",
"region": "eu-central",
"version": "0.1.3",
"response_time_ms": 0.42
},
"cloudflare": {
"geo": {
"country": "DE",
"city": "Berlin",
"region": "Berlin",
"region_code": "BE",
"continent": "EU",
"latitude": "52.5200",
"longitude": "13.4050",
"postal_code": "10115",
"timezone": "Europe/Berlin"
},
"network": {
"asn": "AS64496",
"as_organization": "Example GmbH",
"colo": "FRA"
},
"connection": {
"http_protocol": "h2",
"tls_version": "TLSv1.3",
"tls_cipher": "AEAD-AES128-GCM-SHA256",
"cf_request_id": "8abc123def456",
"cf_cache_status": "MISS"
},
"security": {
"trust_score": "50",
"bot_score": "1",
"verified_bot": "false"
}
}
}