Plans API

List available plans and pricing options. Use the authenticated endpoints to retrieve plan details for your account, or the public pricing endpoints to display pricing information on landing pages without authentication.

Regular Plans

GET /v1/regular-options Requires Auth

List Regular Plans

List Regular Plans

Retrieve all available regular (one-time purchase) proxy plans. Returns plan names, traffic allowances, and per-GB and total pricing in USD.

curl https://api.proxyhat.com/v1/regular-options \
  -H "Authorization: Bearer __API_KEY__" \
  -H "Accept: application/json"
import requests

response = requests.get(
    "https://api.proxyhat.com/v1/regular-options",
    headers={
        "Authorization": "Bearer __API_KEY__",
        "Accept": "application/json",
    },
)

plans = response.json()
for plan in plans:
    print(f"{plan[\"name\"]}: {plan[\"gb\"]}GB at ${plan[\"price_total\"]}")
const response = await fetch("https://api.proxyhat.com/v1/regular-options", {
  headers: {
    "Authorization": "Bearer __API_KEY__",
    "Accept": "application/json",
  },
});

const plans = await response.json();
plans.forEach(p => console.log(`${p.name}: ${p.gb}GB at $${p.price_total}`));
req, _ := http.NewRequest("GET", "https://api.proxyhat.com/v1/regular-options", nil)
req.Header.Set("Authorization", "Bearer __API_KEY__")
req.Header.Set("Accept", "application/json")

resp, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var plans []map[string]interface{}
json.NewDecoder(resp.Body).Decode(&plans)
for _, p := range plans {
    fmt.Printf("%s: %vGB at $%v\n", p["name"], p["gb"], p["price_total"])
}
Response 200
[
  {
    "id": "uuid",
    "name": "starter-10gb",
    "gb": 10,
    "price_per_gb": 5.00,
    "price_total": 50.00,
    "currency": "USD"
  }
]
GET /v1/plans/regular/{name} Requires Auth

Get Regular Plan

Get Regular Plan

Retrieve a single regular plan by its name. Returns the full plan object including pricing details.

Path Parameters
Name Type Required Description
name string Required The name identifier of the regular plan (e.g. "starter-10gb").
curl https://api.proxyhat.com/v1/plans/regular/starter-10gb \
  -H "Authorization: Bearer __API_KEY__" \
  -H "Accept: application/json"
import requests

plan_name = "starter-10gb"

response = requests.get(
    f"https://api.proxyhat.com/v1/plans/regular/{plan_name}",
    headers={
        "Authorization": "Bearer __API_KEY__",
        "Accept": "application/json",
    },
)

plan = response.json()
print(f"{plan[\"name\"]}: {plan[\"gb\"]}GB at ${plan[\"price_total\"]}")
const planName = "starter-10gb";

const response = await fetch(`https://api.proxyhat.com/v1/plans/regular/${planName}`, {
  headers: {
    "Authorization": "Bearer __API_KEY__",
    "Accept": "application/json",
  },
});

const plan = await response.json();
console.log(`${plan.name}: ${plan.gb}GB at $${plan.price_total}`);
planName := "starter-10gb"
url := fmt.Sprintf("https://api.proxyhat.com/v1/plans/regular/%s", planName)

req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer __API_KEY__")
req.Header.Set("Accept", "application/json")

resp, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var plan map[string]interface{}
json.NewDecoder(resp.Body).Decode(&plan)
fmt.Printf("%s: %vGB at $%v\n", plan["name"], plan["gb"], plan["price_total"])
Response 200
{
  "id": "uuid",
  "name": "starter-10gb",
  "gb": 10,
  "price_per_gb": 5.00,
  "price_total": 50.00,
  "currency": "USD"
}

Subscription Plans

GET /v1/subscription-plans Requires Auth

List Subscription Plans

List Subscription Plans

Retrieve all available subscription plans. Optionally filter by billing period. Returns plan names, traffic allowances, pricing, billing period, and rollover status.

Query Parameters
Name Type Required Description
period string Optional Filter by billing period: "monthly" or "annual".
curl "https://api.proxyhat.com/v1/subscription-plans?period=monthly" \
  -H "Authorization: Bearer __API_KEY__" \
  -H "Accept: application/json"
import requests

response = requests.get(
    "https://api.proxyhat.com/v1/subscription-plans",
    headers={
        "Authorization": "Bearer __API_KEY__",
        "Accept": "application/json",
    },
    params={
        "period": "monthly",
    },
)

plans = response.json()
for plan in plans:
    print(f"{plan[\"name\"]}: {plan[\"gb\"]}GB at ${plan[\"price_total\"]}/{plan[\"period\"]}")
const params = new URLSearchParams({ period: "monthly" });

const response = await fetch(`https://api.proxyhat.com/v1/subscription-plans?${params}`, {
  headers: {
    "Authorization": "Bearer __API_KEY__",
    "Accept": "application/json",
  },
});

const plans = await response.json();
plans.forEach(p => console.log(`${p.name}: ${p.gb}GB at $${p.price_total}/${p.period}`));
req, _ := http.NewRequest("GET", "https://api.proxyhat.com/v1/subscription-plans?period=monthly", nil)
req.Header.Set("Authorization", "Bearer __API_KEY__")
req.Header.Set("Accept", "application/json")

resp, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var plans []map[string]interface{}
json.NewDecoder(resp.Body).Decode(&plans)
for _, p := range plans {
    fmt.Printf("%s: %vGB at $%v/%s\n", p["name"], p["gb"], p["price_total"], p["period"])
}
Response 200
[
  {
    "id": "uuid",
    "name": "pro-monthly",
    "gb": 100,
    "price_per_gb": 3.00,
    "price_total": 300.00,
    "period": "monthly",
    "rollover_enabled": false
  }
]
GET /v1/plans/subscription/{name} Requires Auth

Get Subscription Plan

Get Subscription Plan

Retrieve a single subscription plan by its name. Returns the full plan object including pricing, billing period, and rollover configuration.

Path Parameters
Name Type Required Description
name string Required The name identifier of the subscription plan (e.g. "pro-monthly").
curl https://api.proxyhat.com/v1/plans/subscription/pro-monthly \
  -H "Authorization: Bearer __API_KEY__" \
  -H "Accept: application/json"
import requests

plan_name = "pro-monthly"

response = requests.get(
    f"https://api.proxyhat.com/v1/plans/subscription/{plan_name}",
    headers={
        "Authorization": "Bearer __API_KEY__",
        "Accept": "application/json",
    },
)

plan = response.json()
print(f"{plan[\"name\"]}: {plan[\"gb\"]}GB at ${plan[\"price_total\"]}/{plan[\"period\"]}")
const planName = "pro-monthly";

const response = await fetch(`https://api.proxyhat.com/v1/plans/subscription/${planName}`, {
  headers: {
    "Authorization": "Bearer __API_KEY__",
    "Accept": "application/json",
  },
});

const plan = await response.json();
console.log(`${plan.name}: ${plan.gb}GB at $${plan.price_total}/${plan.period}`);
planName := "pro-monthly"
url := fmt.Sprintf("https://api.proxyhat.com/v1/plans/subscription/%s", planName)

req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer __API_KEY__")
req.Header.Set("Accept", "application/json")

resp, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var plan map[string]interface{}
json.NewDecoder(resp.Body).Decode(&plan)
fmt.Printf("%s: %vGB at $%v/%s\n", plan["name"], plan["gb"], plan["price_total"], plan["period"])
Response 200
{
  "id": "uuid",
  "name": "pro-monthly",
  "gb": 100,
  "price_per_gb": 3.00,
  "price_total": 300.00,
  "period": "monthly",
  "rollover_enabled": false
}

Public Pricing

GET /v1/pricing/regular

Public Regular Pricing

Public Regular Pricing

Public endpoint, no auth required. For use on landing pages. Retrieve all available regular plan pricing without authentication.

curl https://api.proxyhat.com/v1/pricing/regular \
  -H "Accept: application/json"
import requests

response = requests.get(
    "https://api.proxyhat.com/v1/pricing/regular",
    headers={
        "Accept": "application/json",
    },
)

plans = response.json()
for plan in plans:
    print(f"{plan[\"name\"]}: {plan[\"gb\"]}GB at ${plan[\"price_total\"]}")
const response = await fetch("https://api.proxyhat.com/v1/pricing/regular", {
  headers: {
    "Accept": "application/json",
  },
});

const plans = await response.json();
plans.forEach(p => console.log(`${p.name}: ${p.gb}GB at $${p.price_total}`));
req, _ := http.NewRequest("GET", "https://api.proxyhat.com/v1/pricing/regular", nil)
req.Header.Set("Accept", "application/json")

resp, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var plans []map[string]interface{}
json.NewDecoder(resp.Body).Decode(&plans)
for _, p := range plans {
    fmt.Printf("%s: %vGB at $%v\n", p["name"], p["gb"], p["price_total"])
}
Response 200
[
  {
    "id": "uuid",
    "name": "starter-10gb",
    "gb": 10,
    "price_per_gb": 5.00,
    "price_total": 50.00,
    "currency": "USD"
  }
]
GET /v1/pricing/subscriptions

Public Subscription Pricing

Public Subscription Pricing

Public endpoint, no auth required. Retrieve all available subscription plan pricing without authentication. Returns the same data as the authenticated subscription plans endpoint.

curl https://api.proxyhat.com/v1/pricing/subscriptions \
  -H "Accept: application/json"
import requests

response = requests.get(
    "https://api.proxyhat.com/v1/pricing/subscriptions",
    headers={
        "Accept": "application/json",
    },
)

plans = response.json()
for plan in plans:
    print(f"{plan[\"name\"]}: {plan[\"gb\"]}GB at ${plan[\"price_total\"]}/{plan[\"period\"]}")
const response = await fetch("https://api.proxyhat.com/v1/pricing/subscriptions", {
  headers: {
    "Accept": "application/json",
  },
});

const plans = await response.json();
plans.forEach(p => console.log(`${p.name}: ${p.gb}GB at $${p.price_total}/${p.period}`));
req, _ := http.NewRequest("GET", "https://api.proxyhat.com/v1/pricing/subscriptions", nil)
req.Header.Set("Accept", "application/json")

resp, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var plans []map[string]interface{}
json.NewDecoder(resp.Body).Decode(&plans)
for _, p := range plans {
    fmt.Printf("%s: %vGB at $%v/%s\n", p["name"], p["gb"], p["price_total"], p["period"])
}
Response 200
[
  {
    "id": "uuid",
    "name": "pro-monthly",
    "gb": 100,
    "price_per_gb": 3.00,
    "price_total": 300.00,
    "period": "monthly",
    "rollover_enabled": false
  }
]