API Documentation
About this API
Beeping is a RESTful API designed with simplicity in mind. Every endpoint serves both
HTML (for humans) and JSON (for machines) depending on the
Accept header you send.
There's no separate /api
prefix
— the same URLs work for both browser visits and API calls. This keeps the architecture clean and
predictable.
This service is free and open for everyone to use. However, please be respectful: avoid excessive request rates that could impact service availability for others. If you need high-volume access, consider caching responses or reach out to discuss options.
💡 How to use the API
For JSON responses: Add the header
Accept: application/json
For HTML pages: Use
Accept: text/html or just visit the URL in
your browser
📑 Table of Contents
API Endpoints
GET /
Detects client IP address and returns complete information including geolocation and ASN data.
Headers
Accept: application/json- Returns JSON responseAccept: text/html- Returns HTML page (default)
Example Request
curl -H "Accept: application/json" https://beeping.app/
Example Response
{
"ip": "64.81.161.249",
"version": 4,
"type": "global",
"geo": {
"country": {
"code": "ES",
"name": "Spain"
},
"city": "Madrid",
"location": {
"latitude": 40.4165,
"longitude": -3.70256
}
},
"asn": {
"asn": 15704,
"organization": "XTRA TELECOM S.A.",
"network_type": "isp"
}
}
GET /tools/ip-analyzer/{ip}
Analyzes a specific IP address and returns detailed information about its properties and classification.
Parameters
ip- IPv4 or IPv6 address to analyze
Example Request
curl -H "Accept: application/json" https://beeping.app/tools/ip-analyzer/8.8.8.8
Example Response
{
"ip": "8.8.8.8",
"version": "IPv4",
"is_ipv4": true,
"is_ipv6": false,
"is_loopback": false,
"is_private": false,
"is_global": true,
"is_multicast": false,
"is_broadcast": false,
"is_documentation": false,
"is_unspecified": false,
"is_reserved": false,
"ip_class": "A",
"cidr_notation": "8.8.8.8/32",
"default_mask": "255.0.0.0",
"network_type": "Global (Public)"
}
GET /tools/geo/lookup/{ip}
Looks up geographic information for a specific IP address including country, city, and location coordinates.
Parameters
ip- IPv4 or IPv6 address to lookup
Example Request
curl -H "Accept: application/json" https://beeping.app/tools/geo/lookup/8.8.8.8
Example Response
{
"ip": "8.8.8.8",
"geo": {
"country": {
"code": "US",
"name": "United States"
},
"city": "Mountain View",
"location": {
"latitude": 37.419,
"longitude": -122.057
}
}
}
Use Cases
- Content localization based on visitor location
- Security monitoring and fraud detection
- Analytics and traffic analysis
- Geographic access restrictions
GET /tools/asn/lookup/{ip}
Looks up ASN information for a specific IP address including ASN number, organization and network type.
Parameters
ip- IPv4 or IPv6 address to lookup
Example Request
curl -H "Accept: application/json" https://beeping.app/tools/asn/lookup/8.8.8.8
Example Response
{
"ip": "8.8.8.8",
"asn": {
"asn": 15169,
"organization": "GOOGLE",
"network_type": "hosting"
}
}
Use Cases
- Identify hosting providers vs ISPs
- Security and threat attribution
- Traffic analysis and routing decisions
GET /tools/dns/lookup/{domain}
Performs DNS record lookup for a domain name.
Parameters
domain- Domain name to lookup (path parameter)
Query Parameters
record_type- Record type: A, AAAA, MX, TXT, CNAME, NS, SOA, PTR, CAA, SRV (optional, default: A)
Example Request
curl "https://beeping.app/tools/dns/lookup/google.com?record_type=A"
Example Response
{
"domain": "google.com",
"record_type": "A",
"records": [
"142.250.179.110"
],
"ttl": 300,
"query_time_ms": 11
}
GET /tools/dns/propagation/{domain}
Checks DNS propagation across 21 global DNS servers.
Parameters
domain- Domain name to check (path parameter)
Query Parameters
record_type- Record type: A, AAAA, MX, TXT, CNAME, NS, SOA, PTR, CAA, SRV (optional, default: A)
Example Request
curl "https://beeping.app/tools/dns/propagation/google.com?record_type=A"
Example Response
[
{
"server": {
"name": "Cloudflare",
"location": "San Francisco, CA",
"country": "USA",
"ip": "1.1.1.1",
"latitude": 37.775,
"longitude": -122.419
},
"status": "propagated",
"records": [
"142.251.39.206"
],
"error_message": null
},
{
"server": {
"name": "Google Public DNS",
"location": "Mountain View, CA",
"country": "USA",
"ip": "8.8.8.8",
"latitude": 37.419,
"longitude": -122.057
},
"status": "propagated",
"records": [
"142.250.179.110"
],
"error_message": null
},
{
"server": {
"name": "OpenDNS",
"location": "San Jose, CA",
"country": "USA",
"ip": "208.67.222.222",
"latitude": 37.339,
"longitude": -121.895
},
"status": "error",
"records": [],
"error_message": "no record found for Query { name: Name(\"google.com.\"), query_type: A, query_class: IN }"
}
]
GET /tools/ping/{target}
Tests network connectivity and latency to a target IP address or hostname. Returns RTT statistics, packet loss, jitter, OS detection from TTL, and connection quality metrics.
Parameters
target- IP address or hostname to ping (path parameter)
Query Parameters
count- Number of ping attempts (1-10, default: 4)method- Ping method: 'tcp' or 'http' (default: tcp)
Example Request
curl "https://beeping.app/tools/ping/8.8.8.8?count=4&method=tcp"
Example Response
{
"target": "8.8.8.8",
"resolved_ip": "8.8.8.8",
"method": "tcp",
"packets_sent": 4,
"packets_received": 4,
"packet_loss_percent": 0.0,
"rtt_min_ms": 12.34,
"rtt_avg_ms": 14.56,
"rtt_max_ms": 16.78,
"jitter_ms": 1.23,
"ttl": 58,
"os_detection": {
"likely_os": "Linux/Unix",
"confidence": 0.85,
"ttl_expected": 64,
"ttl_hops": 6
},
"connection_quality": {
"score": 94,
"rating": "Excellent",
"is_stable": true,
"jitter_rating": "Excellent"
},
"geo_analysis": {
"distance_km": null,
"expected_latency_ms": null,
"latency_anomaly": false,
"anomaly_score": 1.0
},
"timestamp": "2025-11-21T10:30:00Z"
}
Response Fields
- rtt_min/avg/max_ms - Round-trip time statistics in milliseconds
- jitter_ms - Average latency variation between pings
- ttl - Time-To-Live value observed (used for OS detection)
- os_detection.likely_os - Detected operating system (Linux/Unix, Windows, Network Device)
- os_detection.confidence - Detection confidence (0.0-1.0)
- os_detection.ttl_hops - Estimated number of network hops
- connection_quality.score - Overall quality score (0-100)
- connection_quality.rating - Excellent, Good, Fair, or Poor
- geo_analysis.latency_anomaly - True if latency is unexpectedly high for distance
Notes
- TCP method connects to port 80 or 443 (HTTPS fallback)
- HTTP method sends a HEAD request to the target
- TTL-based OS detection is heuristic and may not be 100% accurate
- Jitter <5ms is excellent, 5-15ms is good, 15-30ms is fair, >30ms is poor
- Quality score considers latency, jitter, and packet loss
GET /tools/subnet/{cidr}
Calculates subnet information from CIDR notation including network address, broadcast address, subnet mask, wildcard mask, and usable host range.
Parameters
cidr- IP address with prefix length (e.g., 192.168.1.0/24)
Example Request
curl -H "Accept: application/json" https://beeping.app/tools/subnet/192.168.1.0/24
Example Response
{
"input": "192.168.1.0/24",
"ip_address": "192.168.1.0",
"network_address": "192.168.1.0",
"broadcast_address": "192.168.1.255",
"subnet_mask": "255.255.255.0",
"wildcard_mask": "0.0.0.255",
"cidr_notation": "192.168.1.0/24",
"prefix_length": 24,
"total_hosts": 256,
"usable_hosts": 254,
"first_usable": "192.168.1.1",
"last_usable": "192.168.1.254",
"ip_class": "C",
"is_private": true
}
Use Cases
- Network planning and subnetting
- Firewall rule configuration
- IP address range allocation
- Network documentation
GET /tools/traceroute/{target}
Traces the network path to a target IP address or hostname. Discovers all routers (hops) between the server and the destination, measuring latency at each step.
Parameters
target- IP address or hostname to trace (path parameter)
Query Parameters
max_hops- Maximum number of hops to trace (1-64, default: 30, optional)probes_per_hop- Number of probes to send per hop (1-10, default: 3, optional)timeout_ms- Timeout per probe in milliseconds (100-30000, default: 5000, optional)
Example Request
# Basic request with defaults curl "https://beeping.app/tools/traceroute/8.8.8.8" # Custom parameters curl "https://beeping.app/tools/traceroute/google.com?max_hops=20&probes_per_hop=5&timeout_ms=3000"
Example Response
{
"target": "8.8.8.8",
"resolved_ip": "8.8.8.8",
"hops": [
{
"hop": 1,
"ip": "192.168.1.1",
"hostname": "router.local",
"probes": [
{"rtt_ms": 1.234, "responder_ip": "192.168.1.1"},
{"rtt_ms": 1.156, "responder_ip": "192.168.1.1"},
{"rtt_ms": 1.298, "responder_ip": "192.168.1.1"}
],
"avg_rtt_ms": 1.229,
"min_rtt_ms": 1.156,
"max_rtt_ms": 1.298,
"rtt_bar_width": 0,
"is_destination": false
},
{
"hop": 2,
"ip": "10.0.0.1",
"hostname": "isp-gateway.example.com",
"probes": [
{"rtt_ms": 15.432, "responder_ip": "10.0.0.1"},
{"rtt_ms": 15.678, "responder_ip": "10.0.0.1"},
{"rtt_ms": 15.234, "responder_ip": "10.0.0.1"}
],
"avg_rtt_ms": 15.448,
"min_rtt_ms": 15.234,
"max_rtt_ms": 15.678,
"rtt_bar_width": 7,
"is_destination": false
},
{
"hop": 3,
"ip": null,
"hostname": null,
"probes": [
{"rtt_ms": null, "responder_ip": null},
{"rtt_ms": null, "responder_ip": null},
{"rtt_ms": null, "responder_ip": null}
],
"avg_rtt_ms": null,
"min_rtt_ms": null,
"max_rtt_ms": null,
"rtt_bar_width": 0,
"is_destination": false
}
],
"destination_reached": false,
"total_hops": null,
"responsive_hops": 2,
"timeout_hops": 1,
"timestamp": 1700000000000
}
Response Fields
- hops - Array of network hops from source to destination
- hop - Hop number (TTL value used)
- ip - IP address of the router at this hop (null if timeout)
- hostname - Reverse DNS hostname of the router (if available)
- probes - Results from 3 probe attempts per hop
- avg_rtt_ms - Average round-trip time for successful probes
- destination_reached - Whether the target destination was reached
- total_hops - Number of hops to destination (if reached)
- responsive_hops - Count of hops that responded
- timeout_hops - Count of hops that timed out
Notes
- Uses ICMP packets with incrementing TTL values to discover routes
- Some routers may not respond to traceroute probes (shown as null/timeout)
- Traceroute stops after 3 consecutive timeouts or reaching max_hops
- Reverse DNS lookups are performed asynchronously for each hop
- Default values can be configured via environment variables (BEEPING_TRACEROUTE_*)
- Query parameters override server defaults if provided
- All parameters are validated and clamped to safe limits
- Requires CAP_NET_RAW capability on the server
Use Cases
- Network troubleshooting and path analysis
- Identifying routing issues or bottlenecks
- Measuring per-hop latency increases
- Detecting network topology changes
- Analyzing CDN or anycast routing
GET /tools/dns/reverse/{ip}
Performs reverse DNS lookup (PTR record) for an IP address.
Parameters
ip- IPv4 or IPv6 address to lookup
Example Request
curl -H "Accept: application/json" https://beeping.app/tools/dns/reverse/8.8.8.8
Example Response
{
"ip": "8.8.8.8",
"ptr_records": [
"dns.google"
],
"lookup_time_ms": 8,
"success": true,
"error": null,
"forward_verified": true
}
GET /health
Health check endpoint for monitoring service status. Returns plain text "OK".
Example Request
curl https://beeping.app/health
Example Response
OK
GET /stats
Returns service statistics and metrics.
Headers
Accept: application/json- Returns JSON responseAccept: text/html- Returns HTML page (default)
Example Request
curl -H "Accept: application/json" https://beeping.app/stats
Example Response
{
"total_requests": 3592661,
"ipv4_requests": 3586495,
"ipv6_requests": 6166,
"bot_requests": 3583784,
"json_requests": 12,
"geo_requests": 3,
"asn_requests": 2,
"html_requests": 8865,
"health_checks": 10,
"errors": 0
}
Code Examples
JavaScript (fetch)
fetch('https://beeping.app/', {
headers: { 'Accept': 'application/json' }
})
.then(response => response.json())
.then(data => console.log(data));
Python (requests)
import requests
response = requests.get(
'https://beeping.app/',
headers={'Accept': 'application/json'}
)
print(response.json())
Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
client := &http.Client{}
req, _ := http.NewRequest("GET", "https://beeping.app/", nil)
req.Header.Set("Accept", "application/json")
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}