Catalog

A list of all publicly available methods for interacting with the API.

GET

Get the catalog and price sheet

New/catalog/config
Replaces older v2 methods

This API v3 method replaces these API v2 methods (they still work):

Catalog and price sheet

Everything a calculator needs in one request: products with their options and rules, period lengths for today, exchange rates and the full price sheet.

Notes

  • Compute a price on your side from pricing, then get the exact server price with Create an order.
  • Send your token to get your own sale and bonuses in user; without one, prices are public.
  • fx.approx_expires_at is when rates and period lengths next change — fetch again after it.
  • The response carries an ETag: send If-None-Match and you get 304 when nothing changed.
  • Numbers in pricing are numbers; rates and user values are decimal strings.

Query method

GEThttps://api.stableproxy.com/v3/catalog/config

Code examples

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/catalog/config", {
3 method: "GET",
4 headers: {
5 "Content-Type": "application/json"
6 }
7});
8const data = await response.json();

Examples of answers

Catalog — one product shown200application/json
{
  "data": {
    "version": "2026-10-06.426930f8",
    "currency": "USD",
    "fx": {
      "rates": {
        "USD": "1",
        "UAH": "45.59",
        "EUR": "0.87",
        "PLN": "3.7"
      },
      "fetched_at": "2026-03-18T00:00:58+02:00",
      "approx_expires_at": "2026-10-07T00:10:00+03:00"
    },
    "user": {
      "sale_divisor": "1",
      "bonuses": []
    },
    "categories": [
      {
        "key": "datacenter",
        "label_key": "common.proxy-types.datacenter",
        "products": [
          "shared",
          "private",
          "datacenter_gb"
        ]
      }
    ],
    "products": {
      "shared": {
        "category": "datacenter",
        "label_key": "common.proxy-types-pay-for.shared",
        "name_key": "common.proxy-types.shared",
        "pay_for": "ip",
        "links": [
          "private",
          "datacenter_gb"
        ],
        "lists": {
          "countries": "/v3/catalog/countries/shared"
        },
        "options": {
          "count": {
            "type": "int",
            "unit": "ip",
            "min": 1,
            "max": 2000,
            "default": 10,
            "presets": [
              1,
              10,
              25,
              50,
              100,
              250
            ]
          },
          "period": {
            "type": "period",
            "select": true,
            "default": "1m",
            "values": [
              {
                "key": "1w",
                "unit": "weeks",
                "amount": 1,
                "days": 7
              },
              {
                "key": "2w",
                "unit": "weeks",
                "amount": 2,
                "days": 14
              },
              {
                "key": "1m",
                "unit": "months",
                "amount": 1,
                "days": 31
              },
              {
                "key": "1y",
                "unit": "years",
                "amount": 1,
                "days": 365
              }
            ]
          },
          "traffic": {
            "type": "int",
            "unit": "gb",
            "select": true,
            "min": 25,
            "max": 5000,
            "step": 1,
            "default": 100,
            "presets": [
              25,
              100,
              400,
              800,
              5000
            ]
          },
          "countries": {
            "type": "country_map",
            "sum_equals": "count",
            "random_allowed": true,
            "preselect_all": false,
            "list": "/v3/catalog/countries/shared"
          },
          "geo_service": {
            "type": "enum",
            "default": "overall",
            "list": "/v3/catalog/geo-services"
          },
          "ip_score": {
            "type": "int",
            "min": 0,
            "max": 100,
            "default": 0
          },
          "unlimited_ips": {
            "type": "bool",
            "default": false
          }
        },
        "rules": [
          {
            "when": {
              "days": [
                "<",
                7
              ]
            },
            "limit": {
              "count": {
                "max": 25
              }
            }
          },
          {
            "when": {
              "days": [
                "<",
                14
              ]
            },
            "limit": {
              "count": {
                "max": 50
              }
            }
          },
          {
            "when": {
              "days": [
                "<",
                28
              ]
            },
            "limit": {
              "count": {
                "max": 100
              }
            }
          },
          {
            "when": {
              "count": [
                ">=",
                100
              ]
            },
            "hide": {
              "traffic": [
                25
              ]
            }
          }
        ]
      }
    },
    "pricing": {
      "unlimited_ips_fee": {
        "default": 2,
        "mobile": 1,
        "payasgo": 1,
        "peer": 1
      },
      "referral_sale": 0.05
    }
  },
  "meta": []
}
GET

List countries of a product

New/catalog/countries/{product}
Replaces older v2 methods

This API v3 method replaces these API v2 methods (they still work):

Countries of a product

Where a product can be delivered, with how many addresses are free now (available) and can be handed out at once (instant).

Notes

  • ZZ means "any country".

  • surcharge: true marks a country priced with a multiplier (see pricing.country_multiplier).

  • geo_service changes which database decides a country (shared and private only).

"data": {

"product": "shared",

"geo_service": "overall",

"countries": [

{

"code": "ZZ",

"available": 184,

"instant": 184,

"surcharge": false

},

{

"code": "DK",

"available": 1,

"instant": 1,

"surcharge": false

},

{

"code": "LT",

"available": 1,

"instant": 1,

"surcharge": false

}

]

},

"meta": {}

}

"error": {

"code": "not_found",

"message": "Not found.",

"details": {}

}

}

Query method

GEThttps://api.stableproxy.com/v3/catalog/countries/{product}

Query parameters

IdentifierRegulationsExample
geo_serviceNot necessarilynullablestringoverall
product1requiredstringshared

Code examples

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/catalog/countries/{product}", {
3 method: "GET",
4 headers: {
5 "Content-Type": "application/json"
6 }
7});
8const data = await response.json();

Examples of answers

Countries — first three200application/json
 {
Unknown product404application/json
 {
GET

List cities of a country

New/catalog/cities/{product}

Cities of a country

Cities you can target with a residential product, largest first, with the number of addresses in each.

Notes

  • supported: false means the product's pool has no city data — order without cities.

  • Cities are optional: pass them when you generate proxies for a package, not when you buy it.

"data": {

"product": "residential_gb",

"country": "US",

"supported": true,

"cities": [

{

"code": "ashburn",

"name": "Ashburn",

"count": 16611

},

{

"code": "dallas",

"name": "Dallas",

"count": 13999

},

{

"code": "newyork",

"name": "New York",

"count": 5300

}

]

},

"meta": {}

}

"error": {

"code": "validation_failed",

"message": "Some fields are invalid.",

"details": {

"country": [

"The country field is required."

]

}

}

}

Query method

GEThttps://api.stableproxy.com/v3/catalog/cities/{product}

Query parameters

IdentifierRegulationsExample
countryrequiredstringsize:2alphaUS
product1requiredstringresidential_gb

Code examples

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/catalog/cities/{product}", {
3 method: "GET",
4 headers: {
5 "Content-Type": "application/json"
6 }
7});
8const data = await response.json();

Examples of answers

Cities — first three200application/json
 {
Missing country422application/json
 {
GET

List geo-location services

New/catalog/geo-services
Replaces older v2 methods

This API v3 method replaces these API v2 methods (they still work):

Geo-location services

Which IP database decides a proxy's country. overall combines them and is the default.

Notes

  • Only the products in products accept a service other than overall.

"data": {

"default": "overall",

"products": [

"shared",

"private"

],

"services": [

{

"key": "overall",

"label_key": "common.words.geo-service.overall"

},

{

"key": "ip2location",

"label_key": "common.words.geo-service.ip2location"

},

{

"key": "adspower",

"label_key": "common.words.geo-service.adspower"

},

{

"key": "dolphin",

"label_key": "common.words.geo-service.dolphin"

}

]

},

"meta": {}

}

Query method

GEThttps://api.stableproxy.com/v3/catalog/geo-services

Code examples

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/catalog/geo-services", {
3 method: "GET",
4 headers: {
5 "Content-Type": "application/json"
6 }
7});
8const data = await response.json();

Examples of answers

Services200application/json
 {