Skip to content
IP IPBot
Get Started

Quickstart Guide - Get Started with IPBot API in 30 Seconds

Use the public v1 API:

https://api.ipbot.com/v1

Lookup a specific IPv4/IPv6 address:

Terminal window
curl -s https://api.ipbot.com/v1/ip/8.8.8.8 | jq

Auto-detect the caller IP:

Terminal window
curl -s https://api.ipbot.com/v1/ip/current | jq
const response = await fetch("https://api.ipbot.com/v1/ip/8.8.8.8");
const data = await response.json();
console.log(data.score.risk_score);
console.log(data.score.recommended_action);
console.log(data.evidence.signals.map((signal) => signal.label));
import requests
response = requests.get("https://api.ipbot.com/v1/ip/8.8.8.8")
data = response.json()
print(data["network"]["category"])
print(data["score"]["recommended_action"])
print([signal["label"] for signal in data["evidence"]["signals"]])
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type IPBotResponse struct {
IP string `json:"ip"`
Score struct {
RiskScore int `json:"risk_score"`
RecommendedAction string `json:"recommended_action"`
} `json:"score"`
Classification struct {
IsDatacenter bool `json:"is_datacenter"`
IsProxy bool `json:"is_proxy"`
Traits []string `json:"traits"`
} `json:"classification"`
}
func main() {
resp, err := http.Get("https://api.ipbot.com/v1/ip/8.8.8.8")
if err != nil {
panic(err)
}
defer resp.Body.Close()
var data IPBotResponse
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
panic(err)
}
fmt.Printf("%s risk=%d action=%s\n", data.IP, data.Score.RiskScore, data.Score.RecommendedAction)
}
Terminal window
curl -s https://api.ipbot.com/v1/ip/8.8.8.8 | jq -r '.location.country_code'
Terminal window
curl -s https://api.ipbot.com/v1/ip/8.8.8.8 | jq -r '.network.category'
Terminal window
curl -s https://api.ipbot.com/v1/ip/8.8.8.8 | jq '{risk_score: .score.risk_score, action: .score.recommended_action}'
Terminal window
curl -s https://api.ipbot.com/v1/ip/8.8.8.8 | jq -r '.evidence.signals[].label'

Anonymous access is rate-limited. Sign in with GitHub to get a free API key with higher limits:

  1. Visit ipbot.com/login and sign in with GitHub
  2. Access your Dashboard to view your API key
  3. Use the key in your requests:
Terminal window
curl -H "X-API-Key: ipb_free_REPLACE_ME" \
https://api.ipbot.com/v1/ip/8.8.8.8

IP intelligence changes at different speeds by class:

  • Cache residential ISP results: 7-30 days
  • Cache datacenter, proxy, or VPN results: 1-7 days
  • Cache mobile IP results: 1-7 days
const response = await fetch("https://api.ipbot.com/v1/ip/8.8.8.8");
const data = await response.json();
if (!response.ok || data.error) {
console.error(`Error ${data.code}: ${data.error}`);
return;
}
console.log(data.score.verdict);
import time
import requests
def get_ip_info(ip, max_retries=3):
for attempt in range(max_retries):
response = requests.get(f"https://api.ipbot.com/v1/ip/{ip}")
if response.status_code == 429:
time.sleep(2 ** attempt)
continue
return response.json()
return None

Ensure you’re passing a valid IPv4 or IPv6 address.

Terminal window
curl https://api.ipbot.com/v1/ip/8.8.8.8
curl https://api.ipbot.com/v1/ip/2001:4860:4860::8888

Some IP addresses, especially private or reserved IPs, may not have complete location data.

Check your network, verify DNS resolution for api.ipbot.com, and cache repeat lookups where possible.