Go SDK

The official ProxyHat Go SDK provides an idiomatic Go interface for the ProxyHat API with context support and strong typing.

View on GitHub

Requirements

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

Resources