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.

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)
}