Go SDK
The official ProxyHat Go SDK provides an idiomatic Go interface for the ProxyHat API with context support and strong typing.
Requirements
- Go 1.21 or later
Installation
go get github.com/ProxyHatCom/go-sdk
Quick Start
package main
import (
"context"
"fmt"
"log"
"github.com/ProxyHatCom/go-sdk/proxyhat"
)
func main() {
client := proxyhat.New("YOUR_API_KEY")
ctx := context.Background()
// Get account info
user, err := client.Auth.User(ctx)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Email: %s\n", user.Email)
fmt.Printf("Traffic balance: %d bytes\n", user.TrafficBalance)
// List sub-users
subUsers, err := client.SubUsers.List(ctx)
if err != nil {
log.Fatal(err)
}
for _, su := range subUsers {
fmt.Printf("%s — %d bytes used\n", su.Username, su.TrafficUsed)
}
}
Sub-User Management
Create a Sub-User
subUser, err := client.SubUsers.Create(ctx, &proxyhat.CreateSubUserParams{
Username: "user1",
Password: "securePass123",
TrafficLimit: 1073741824, // 1 GB
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Created: %s\n", subUser.Username)
Update a Sub-User
err := client.SubUsers.Update(ctx, subUser.ID, &proxyhat.UpdateSubUserParams{
TrafficLimit: proxyhat.Int64(2147483648), // 2 GB
})
Delete a Sub-User
err := client.SubUsers.Delete(ctx, subUser.ID)
Locations
// List available countries
countries, err := client.Locations.Countries(ctx)
if err != nil {
log.Fatal(err)
}
for _, country := range countries {
fmt.Printf("%s: %d proxies\n", country.Name, country.ProxyCount)
}
// List cities in a country
cities, err := client.Locations.Cities(ctx, &proxyhat.CitiesParams{
CountryCode: "US",
})
for _, city := range cities {
fmt.Printf("%s, %s\n", city.Name, city.Region)
}
Proxy Presets
// Create a preset
preset, err := client.ProxyPresets.Create(ctx, &proxyhat.CreatePresetParams{
Name: "US Residential",
CountryCode: "US",
ConnectionType: "residential",
})
// List presets
presets, err := client.ProxyPresets.List(ctx)
for _, p := range presets {
fmt.Printf("%s: %s\n", p.Name, p.CountryCode)
}
Analytics
// Get traffic usage chart
chart, err := client.Analytics.TrafficChart(ctx, &proxyhat.TrafficChartParams{
Period: "7d",
})
for _, point := range chart {
fmt.Printf("%s: %d bytes\n", point.Date, point.BytesUsed)
}
Error Handling
import "errors"
user, err := client.Auth.User(ctx)
if err != nil {
var authErr *proxyhat.AuthenticationError
var rateErr *proxyhat.RateLimitError
var apiErr *proxyhat.Error
switch {
case errors.As(err, &authErr):
fmt.Println("Invalid API key")
case errors.As(err, &rateErr):
fmt.Printf("Rate limited. Retry after %ds\n", rateErr.RetryAfter)
case errors.As(err, &apiErr):
fmt.Printf("API error: %s\n", apiErr.Message)
default:
fmt.Printf("Unexpected error: %v\n", err)
}
}