Go guide
Use FindIP with Go
Use Go's standard library to call FindIP, check status codes, and decode the geolocation plus intelligence payload.
Endpoint
Authenticated IP lookup
GET https://api.findip.net/{ip}/?token={token}
Typed decodeModel the fields you use and let unknown fields pass through.
SignalsUse
Flags for quick security gates and Categories for explanation.Response guideView the full response model
Go example
Uses net/http and encoding/json.
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"time"
)
type FindIPResponse struct {
City struct{ Names map[string]string `json:"names"` } `json:"city"`
Country struct{ Names map[string]string `json:"names"` } `json:"country"`
Traits struct {
ISP string `json:"isp"`
ASN int `json:"autonomous_system_number"`
} `json:"traits"`
Intelligence struct {
Summary struct{ Verdict string `json:"verdict"` } `json:"summary"`
Risk struct {
Score int `json:"score"`
Level string `json:"level"`
} `json:"risk"`
Flags struct {
IsVPN bool `json:"is_vpn"`
IsProxy bool `json:"is_proxy"`
IsTor bool `json:"is_tor"`
} `json:"flags"`
Tags []string `json:"tags"`
} `json:"intelligence"`
}
func main() {
ip := "8.8.8.8"
token := "YOUR_API_KEY"
endpoint := fmt.Sprintf("https://api.findip.net/%s/", ip)
reqURL, _ := url.Parse(endpoint)
query := reqURL.Query()
query.Set("token", token)
query.Set("returnIp", "true")
reqURL.RawQuery = query.Encode()
client := http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(reqURL.String())
if err != nil {
panic(err)
}
defer resp.Body.Close()
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
panic(fmt.Sprintf("FindIP request failed: %s", resp.Status))
}
var data FindIPResponse
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
panic(err)
}
fmt.Println("City:", data.City.Names["en"])
fmt.Println("Country:", data.Country.Names["en"])
fmt.Println("ISP:", data.Traits.ISP)
fmt.Println("ASN:", data.Traits.ASN)
fmt.Println("Verdict:", data.Intelligence.Summary.Verdict)
fmt.Println("Risk:", data.Intelligence.Risk.Score, data.Intelligence.Risk.Level)
fmt.Println("VPN:", data.Intelligence.Flags.IsVPN)
fmt.Println("Proxy:", data.Intelligence.Flags.IsProxy)
fmt.Println("Tor:", data.Intelligence.Flags.IsTor)
}