> This is part 1 of 2 of the full documentation (pages 1–100 of 136).
> The content is paginated: fetch every part to see all of it.
> Next part: https://docs.goproxies.com/llms-full.txt/1
> Page index: https://docs.goproxies.com/llms.txt

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
This site has an agentic ask interface you may use to query the documentation dynamically by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.goproxies.com/index.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

---

# Getting Started

### Getting Started with GoProxies

Our documentation provides comprehensive setup instructions for all proxy types we offer. It includes guidance on basic HTTP queries, detailed integration processes with recommended third-party tools, and most popular library code examples.

{% hint style="info" %}
Choose the proxy type that best suits your needs for smooth integration process.
{% endhint %}

{% columns %}
{% column %}
{% content-ref url="/pages/dopPBksaCwwoicLn7aOy" %}
[Rotating Residential Proxies](/proxies/rotating-residential-proxies/rotating-residential-proxies)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
{% content-ref url="/pages/eoOP6AvBSuCdG7PhKl6E" %}
[ISP Residential Proxies](/proxies/isp-residential-proxies)
{% endcontent-ref %}
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/y2yEZCf7QvuxQmU9SqiM" %}
[Shared DataCenter Proxies](/proxies/shared-datacenter-proxies/shared-datacenter-proxies)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
{% content-ref url="/pages/1nwHGGprsLsB1FzLhA8s" %}
[Dedicated DataCenter Proxies](/proxies/dedicated-datacenter-proxies/dedicated-datacenter-proxies)
{% endcontent-ref %}
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/UKLorhejoUHWY1z7PyBU" %}
[Mobile Proxies](/proxies/mobile-proxies)
{% endcontent-ref %}
{% endcolumn %}

{% column %}

{% endcolumn %}
{% endcolumns %}


# Rotating Residential Proxies

Our Rotating Residential Proxies use genuine IP addresses issued by ISPs to real devices worldwide. These proxies are ideal for simulating real browser activity, minimizing the chances of detection and blocking.

**Key Features**

* **Seamless Integration**: Easily incorporate our proxies into your system.
* **Automatic IP Rotation**: Enjoy consistent IP changes without manual intervention.
* **Session Stickiness**: Maintain the same IP if required for up to 10 minutes.
* **Easy Implementation**: Simple setup to get started quickly.


# Rotating Residential Proxies

Rotating Residential Proxies Quick Start

Goproxies.com supports:

* HTTPS proxy protocol (a.k.a. HTTP proxy with CONNECT method)
* HTTP proxy protocol

Service is accessed using following entry data:

* **Host:** proxy.goproxies.com - All countries.&#x20;

{% hint style="info" %}
Although we have an automatic routing, you may manually target preferred regions to reduce latency:&#x20;

* proxy-asia.goproxies.com - for Asia and Oceania

* proxy-europe.goproxies.com - for Europe and Africa

* proxy-america.goproxies.com - for both Americas
  {% endhint %}

* **Port:** 1080

* **Authorisation:** Basic

* **Username/Password:** *\[provided separately].*&#x20;

There are two types of credentials:

1. **Dashboard user** - used to access the [GoProxies dashboard](https://dashboard.goproxies.com/).
2. **Proxy user** - used to access our proxy pool. Please ensure you use the proxy user credentials when sending requests to our proxy network.

Below are a few basic request examples in various programming languages. You can test it via any application that has HTTP(s) proxy feature or simply a terminal command:

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" expandable="true" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const proxyAuth = encodeURIComponent('customer-USERNAME') + ':' + encodeURIComponent('PASSWORD');
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`; // use http:// here for CONNECT proxy auth
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

username = "customer-USERNAME"
password = "PASSWORD"

proxy = f"https://{username}:{password}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)

print(resp.status_code)
print(resp.text)

```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"net/http"
	"net/url"
	"time"
	"io"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		// Optional: tune TLSHandshakeTimeout, IdleConnTimeout, etc.
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}

```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort), new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {
      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby Net::HTTP" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME:PASSWORD');
// Use tunnel for HTTPS so CONNECT is used
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

#### Control Your Connection <a href="#control-your-connection" id="control-your-connection"></a>

* You can refine your proxy request by including parameters that manage IP selection.&#x20;
* Continue reading our step-by-step guide for more information on additional proxy parameters, along with detailed examples.

{% hint style="info" %}
If you cannot find something or need help, contact us at <support@goproxies.com> or start an Intercom chat.
{% endhint %}


# Proxy parameters

This section describes IP targeting and controlling via parameters in Username.

GoProxies Residential Proxies provide access to over 160 different locations and support country, city, and state targeting.

### Country, City, State mapping

We currently use ip2location.com and ipinfo.io databases to assign exit values of `country`, `city` and `state` to our nodes.

Other public databases might show different locations due to database differences. If location mismatches cannot occur, please first ensure the IP assigned by the proxy matches the target website's database location.


# Country

To target a specific country's IP, add the `country` header to the username. The value should be a case-insensitive 2-letter country code in **ISO 3166-1 alpha-2** format, such as `DE` for Germany, `GB` for the United Kingdom, and `ES` for Spain. Example below with more details.\
\
Examples of a few countries that you can target in the `country` parameter:

| Country        | Country parameter |
| -------------- | ----------------- |
| United States  | `country-us`      |
| United Kingdom | `country-gb`      |
| Japan          | `country-jp`      |

The full list for country abbreviations may be found here: [Full Country List](https://docs.goproxies.com/proxies/faq/list-of-all-countries-with-their-2-digit-codes-iso-3166-1)

### Request example

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" expandable="true" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-country-us:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-country-us'; // or -country-gb, -country-jp
const password = 'PASSWORD';

// percent-encode username/password if they contain special chars
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
  console.log(res.status, res.data);
})();

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-country-gb"  # country-gb example
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	// country example: -country-jp
	proxyURL, _ := url.Parse("http://customer-USERNAME-country-jp:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyCountry {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-country-gb"; // example
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby — Net::HTTP" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-country-jp'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-country-us:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true); // use CONNECT for HTTPS

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# State

To receive proxy IP address from a specific state, you would need to use the state header together with the 2-letter **ISO 3166-1 alpha-2** country code. For example `state-us_illinois` , `state-us_ohio` , `state-us_california .`

Below is a few examples with the `state` targeting in the username.

| State    | State parameter     |
| -------- | ------------------- |
| Alabama  | `state-us_alabama`  |
| Colorado | `state-us_colorado` |
| Florida  | `state-us_florida`  |

### Request example

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-state-us_idaho:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-state-us_florida'; // example
const password = 'PASSWORD';
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-state-us_colorado"
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-state-us_alabama:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyStateExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-state-us_florida";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-state-us_alabama'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-state-us_colorado:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

> Note: State parameter will have priority against Country, so if used together those headers will be ignored.


# City

You can add a city header parameter together with the 2-letter **ISO 3166-1 alpha-2** country code to target a specific city. For example, using `customer-USERNAME-city-us_chicago` will request a proxy specifically from Chicago, United States.

Examples of a few cities that you can target in the `city` parameter:

| City        | City parameter        |
| ----------- | --------------------- |
| Los Angeles | `city-us_los_angeles` |
| London      | `city-gb_london`      |
| Munich      | `city-de_munich`      |

### Request example

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-city-us_chicago:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-city-us_chicago'; // example
const password = 'PASSWORD';
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-city-us_chicago"
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-city-us_chicago:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-city-us_newyork'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyCityExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-city-us_losangeles";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-city-us_chicago:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

> Note: City header will have priority against State and Country, so if used together those headers will be ignored.


# Session Stickiness

### Establishing a session

The `sessionid` proxy header maintains the same IP address for a session up to 10 minutes, as long as the IP remains in the pool. If not, a new IP is assigned. To reuse an IP, use the same `sessionid` header with a unique identifier of 4 to 10 digits, e.g., `sessionid-42831931` .&#x20;

For session duration adjustments, contact us at <support@goproxies.com>.

### Credentials list of examples for different sessions

Examples below contain a list of credentials that establish a new unique session.

`customer-USERNAME-sessionid-7129391:PASSWORD`\
`customer-USERNAME-sessionid-8128311:PASSWORD`\
`customer-USERNAME-sessionid-1812819:PASSWORD`\
`customer-USERNAME-sessionid-289301:PASSWORD`\
`customer-USERNAME-sessionid-3916211:PASSWORD`<br>

### Understanding sessionid header

When using a session ID, such as `customer-USERNAME-sessionid-7129391:PASSWORD`, the proxy assigns you an IP address (e.g., 1.1.1.1), valid for 10 minutes. Any requests using the same `sessionid` will return the same IP. If there's no activity with the session ID for 10 minutes, you may be assigned a new IP (e.g., 1.1.1.2), or if the old IP is unavailable, it will be replaced as well.

### Request example

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-sessionid-7182391:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-sessionid-7182391';
const password = 'PASSWORD';
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-sessionid-7182391"
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-sessionid-7182391:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxySessionExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-sessionid-7182391";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-sessionid-7182391'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-sessionid-7182391:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# ASN targeting

ASN targeting is not compatible with any random continent, therefore the examples will vary from other targeting methods. This is because ASN targeting only uses region-based endpoints.

use one of these region endpoints depending on ASN:

* America: proxy-america.goproxies.com:1080
* Europe: proxy-europe.goproxies.com:1080
* Asia: proxy-asia.goproxies.com:1080

Format for username: customer-USERNAME-asn-XXXX (replace XXXX with the ASN).

Below are short snippet examples. Please see their comments too where applicable:

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}

```bash
# America
curl --proxytunnel --proxy "https://customer-USERNAME-asn-12345:PASSWORD@proxy-america.goproxies.com:1080" https://ip.goproxies.com

# Europe
curl --proxytunnel --proxy "https://customer-USERNAME-asn-54321:PASSWORD@proxy-europe.goproxies.com:1080" https://ip.goproxies.com

# Asia
curl --proxytunnel --proxy "https://customer-USERNAME-asn-99999:PASSWORD@proxy-asia.goproxies.com:1080" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-asn-12345';
const password = 'PASSWORD';
const proxyHost = 'proxy-america.goproxies.com:1080'; // or proxy-europe..., proxy-asia...
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@${proxyHost}`;
const agent = new HttpsProxyAgent(proxyUrl);

await axios.get('https://ip.goproxies.com', { httpsAgent: agent });
```

{% endtab %}

{% tab title="Python" %}

```python
from urllib.parse import quote
import requests

username = "customer-USERNAME-asn-12345"
password = "PASSWORD"
proxy_host = "proxy-europe.goproxies.com:1080"  # choose region
proxy = f"http://{quote(username)}:{quote(password)}@{proxy_host}"

proxies = {"http": proxy, "https": proxy}
print(requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10).text)
```

{% endtab %}

{% tab title="Go" %}

```go
proxyURL, _ := url.Parse("http://customer-USERNAME-asn-99999:PASSWORD@proxy-asia.goproxies.com:1080")
transport := &http.Transport{Proxy: http.ProxyURL(proxyURL)}
client := &http.Client{Transport: transport}
resp, _ := client.Get("https://ip.goproxies.com")
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body)
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-asn-54321'
password = 'PASSWORD'
proxy_addr = 'proxy-asia.goproxies.com'
proxy_port = 1080

uri = URI('https://ip.goproxies.com')
Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  puts http.get(uri).body
end
```

{% endtab %}

{% tab title="Java" %}

```java
// assume Apache HttpClient on the classpath
String proxyHost = "proxy-america.goproxies.com";
int proxyPort = 1080;
String user = "customer-USERNAME-asn-12345";
String pass = "PASSWORD";

// (CredentialsProvider + HttpHost + RequestConfig same as previous examples)
```

{% endtab %}

{% tab title="PHP" %}

```php
$ch = curl_init('https://ip.goproxies.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy-europe.goproxies.com:1080'); // region
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-asn-54321:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
echo curl_exec($ch);
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# Dedicated DataCenter Proxies

GoProxies' Dedicated DataCenter proxies provide an ideal solution for overcoming blocks, offering private and exclusive access just for you. Since these proxies are not shared, they ensure enhanced privacy, improved performance, and reliable, uninterrupted access.

Discover our Dedicated DataCenter proxies in this guide and start your journey today.


# Dedicated DataCenter Proxies

Dedicated DataCenter Proxies Quick Start

Service is accessed using following entry data:

* **Host:** hosting.goproxies.com - All countries.&#x20;
* **Port:** 1080
* **Authorisation:** Basic
* **Username/Password:** *\[provided separately]*

There are two types of credentials:

1. **Dashboard user** - used to access the [GoProxies dashboard](https://dashboard.goproxies.com/).
2. **Proxy user** - used to access our proxy pool. Please ensure you use the proxy user credentials when sending requests to our proxy network.

You can test it via any application that has HTTP(s) proxy feature (Chrome, SwitchyOmega, Profixier, Foxy Proxy, Proxy Switcher etc.) or simply a terminal command:

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME:PASSWORD@hosting.goproxies.com:1080" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME';
const password = 'PASSWORD';
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@hosting.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

username = "customer-USERNAME"
password = "PASSWORD"

proxy = f"https://{username}:{password}@hosting.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)

print(resp.status_code)
print(resp.text)

```

{% endtab %}

{% tab title="Go" %}

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class SharedDatacenterProxy {
    public static void main(String[] args) throws Exception {
        String proxyHost = "hosting.goproxies.com";
        int proxyPort = 1080;
        String user = "customer-USERNAME";
        String pass = "PASSWORD";

        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
                new UsernamePasswordCredentials(user, pass));

        HttpHost proxy = new HttpHost(proxyHost, proxyPort);
        RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

        try (CloseableHttpClient httpclient = HttpClients.custom()
                .setDefaultCredentialsProvider(credsProvider)
                .build()) {

            HttpGet httpget = new HttpGet("https://ip.goproxies.com");
            httpget.setConfig(config);

            try (CloseableHttpResponse response = httpclient.execute(httpget)) {
                System.out.println(response.getStatusLine());
                System.out.println(new String(response.getEntity().getContent().readAllBytes()));
            }
        }
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'hosting.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'hosting.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

#### Control Your Connection <a href="#control-your-connection" id="control-your-connection"></a>

* You can refine your proxy request by including parameters that manage IP selection.&#x20;
* Continue reading our step-by-step guide for more information on additional proxy parameters, along with detailed examples.


# Proxy parameters

### Establishing a session

To maintain a consistent IP address, use the `sessionid` proxy header. The same IP will be assigned as long as possible, if it's in the pool. If the IP is no longer available or removed due to quality issues, a new IP is assigned. To reuse an IP, apply the same `sessionid` header alongside a unique identifier comprising 4 to 10 digits, like.&#x20;


# Country

To target a specific country's IP, add the `country` header to the username. The value should be a case-insensitive 2-letter country code in **ISO 3166-1 alpha-2** format, such as `DE` for Germany, `GB` for the United Kingdom, and `ES` for Spain. Example below with more details.\
\
Examples of a few countries that you can target in the `country` parameter:

| United States  | `country-us` |
| -------------- | ------------ |
| United Kingdom | `country-gb` |
| Japan          | `country-jp` |

The full list of country abbreviations may be found here: [Full Country List](https://docs.goproxies.com/proxies/faq/list-of-all-countries-with-their-2-digit-codes-iso-3166-1)

### Request example

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-country-us:PASSWORD@hosting.goproxies.com" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// country-example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-country-gb'; // e.g. country-gb
const password = 'PASSWORD';
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@hosting.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
# country_example.py
import requests
from urllib.parse import quote

username = "customer-USERNAME-country-jp"  # e.g. country-jp
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@hosting.goproxies.com:1080"

proxies = {"http": proxy, "https": proxy}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-country-jp:PASSWORD@hosting.goproxies.com:1080") // e.g. country-jp
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class CountrySharedDatacenter {
  public static void main(String[] args) throws Exception {
    String proxyHost = "hosting.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-country-gb"; // e.g. country-gb
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}

```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# country_example.rb
require 'net/http'
require 'uri'

username = 'customer-USERNAME-country-us' # e.g. country-us
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'hosting.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
// country_example.php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'hosting.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-country-us:PASSWORD'); // e.g. country-us
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# State

To receive proxy IP address from a specific state, you would need to use the state header together with the 2-letter **ISO 3166-1 alpha-2** country code. For example `state-us_illinois` , `state-us_ohio` , `state-us_california .`

Below is a few examples with the `state` targeting in the username.

| Alabama  | `state-us_alabama`  |
| -------- | ------------------- |
| Colorado | `state-us_colorado` |
| Florida  | `state-us_florida`  |

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-state-us_idaho:PASSWORD@hosting.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// state-example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-state-us_florida'; // e.g. state-us_florida
const password = 'PASSWORD';
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@hosting.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
# state_example.py
import requests
from urllib.parse import quote

username = "customer-USERNAME-state-us_colorado"  # e.g. state-us_colorado
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@hosting.goproxies.com:1080"

proxies = {"http": proxy, "https": proxy}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-state-us_florida:PASSWORD@hosting.goproxies.com:1080") // e.g. state-us_florida
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}

```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# state_example.rb
require 'net/http'
require 'uri'

username = 'customer-USERNAME-state-us_alabama' # e.g. state-us_alabama
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'hosting.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class StateSharedDatacenter {
  public static void main(String[] args) throws Exception {
    String proxyHost = "hosting.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-state-us_florida"; // e.g. state-us_florida
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
// state_example.php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'hosting.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-state-us_colorado:PASSWORD'); // e.g. state-us_colorado
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

> Note: State parameter will have priority against Country, so if used together those headers will be ignored.


# City

You can add a city header parameter together with the 2-letter **ISO 3166-1 alpha-2** country code to target a specific city. For example, using `customer-USERNAME-city-us_chicago` will request a proxy specifically from Chicago, United States.

Examples of a few cities that you can target in the `city` parameter:

| Los Angeles | `city-us_los_angeles` |
| ----------- | --------------------- |
| London      | `city-gb_london`      |
| Munich      | `city-de_munich`      |

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-city-us_chicago:PASSWORD@hosting.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// city-example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-city-us_los_angeles'; // e.g. city-us_los_angeles
const password = 'PASSWORD';
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@hosting.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
# city_example.py
import requests
from urllib.parse import quote

username = "customer-USERNAME-city-gb_london"  # e.g. city-gb_london
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@hosting.goproxies.com:1080"

proxies = {"http": proxy, "https": proxy}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-city-us_los_angeles:PASSWORD@hosting.goproxies.com:1080") // e.g. city-us_los_angeles
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class CitySharedDatacenter {
  public static void main(String[] args) throws Exception {
    String proxyHost = "hosting.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-city-us_los_angeles"; // e.g. city-us_los_angeles
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}

```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# city_example.rb
require 'net/http'
require 'uri'

username = 'customer-USERNAME-city-de_munich' # e.g. city-de_munich
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'hosting.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
// city_example.php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'hosting.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-city-de_munich:PASSWORD'); // e.g. city-de_munich
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

> Note: City header will have priority against State and Country, so if used together those headers will be ignored.


# Session Stickiness

### Establishing a session

To maintain a consistent IP address with the `sessionid` proxy header, the same IP can be used for up to 10 minutes, provided it stays in the available pool. If the IP is no longer available or removed due to quality issues, a new IP is assigned. To reuse an IP, apply the same `sessionid` header alongside a unique identifier comprising 4 to 10 digits, like.&#x20;

For session duration adjustments in case it is needed, contact us at <support@goproxies.com>.

### Credentials list of examples for different sessions

Examples below contain a list of credentials that establish a new unique session.

`customer-USERNAME-sessionid-3821319:PASSWORD`\
`customer-USERNAME-sessionid-192938:PASSWORD`\
`customer-USERNAME-sessionid-489582:PASSWORD`\
`customer-USERNAME-sessionid-283881:PASSWORD`\
`customer-USERNAME-sessionid-891928:PASSWORD`<br>

### Understanding sessionid header

When using a session ID like `customer-USERNAME-sessionid-128338:PASSWORD`, the proxy assigns an IP address (e.g., 1.1.1.1), which is valid for technicaly as long as the server is active, but if the old IP actually becomes unavailable, it will be replaced.

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-sessionid-128338:PASSWORD@hosting.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// sessionid-example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-sessionid-3821319'; // unique session ID
const password = 'PASSWORD';
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@hosting.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
# sessionid_example.py
import requests
from urllib.parse import quote

username = "customer-USERNAME-sessionid-489582"  # unique session ID
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@hosting.goproxies.com:1080"

proxies = {"http": proxy, "https": proxy}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-sessionid-3821319:PASSWORD@hosting.goproxies.com:1080") // unique session ID
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# sessionid_example.rb
require 'net/http'
require 'uri'

username = 'customer-USERNAME-sessionid-283881' # unique session ID
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'hosting.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class SessionidSharedDatacenter {
  public static void main(String[] args) throws Exception {
    String proxyHost = "hosting.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-sessionid-891928"; // unique session ID
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
// sessionid_example.php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'hosting.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-sessionid-192938:PASSWORD'); // unique session ID
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# List of client's IPs

To view list of IPs client has:

{% tabs %}
{% tab title="cURL" %}

```bash
curl https://username:password@hosting.goproxies.com/ip-list
```

{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios
```

```javascript
// ip_list.js
const axios = require('axios');

(async () => {
  try {
    const res = await axios.get('https://hosting.goproxies.com/ip-list', {
      auth: { username: 'username', password: 'password' },
      timeout: 10000
    });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
    if (err.response) console.error('status code:', err.response.status);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
# ip_list.py
import requests

username = "username"
password = "password"

resp = requests.get("https://hosting.goproxies.com/ip-list", auth=(username, password), timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, _ := http.NewRequest("GET", "https://hosting.goproxies.com/ip-list", nil)
	req.SetBasicAuth("username", "password")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("request error:", err)
		os.Exit(1)
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Base64;

public class IpList {
  public static void main(String[] args) throws Exception {
    String username = "username";
    String password = "password";
    String auth = Base64.getEncoder().encodeToString((username + ":" + password).getBytes());

    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://hosting.goproxies.com/ip-list"))
        .header("Authorization", "Basic " + auth)
        .GET()
        .build();

    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.statusCode());
    System.out.println(response.body());
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# ip_list.rb
require 'net/http'
require 'uri'

uri = URI('https://hosting.goproxies.com/ip-list')
req = Net::HTTP::Get.new(uri)
req.basic_auth('username', 'password')

res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(req)
end

puts res.code
puts res.body
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://hosting.goproxies.com/ip-list');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'username:password'); // basic auth
$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# Mobile Proxies

Mobile Proxies Quick Start

GoProxies Mobile Proxies provide high-anonymity mobile IPs that originate from real cellular networks. You can successfully avoid rate limits and geo-restrictions while staying completely anonymous. These IPs behave like real mobile device connections, making them ideal for app testing, ad verification, mobile emulation, and geo-sensitive data collection.&#x20;

**Key benefits:**

* Authentic 4G/5G mobile IPs
* Fast response times
* High success rate
* Precise geo-targeting by country, state, city or ASN
* Dynamic IP rotation and sticky sessions

### Endpoints and Protocols

Service is accessed using following entry data:

* **Host:** proxy.goproxies.com - All countries.&#x20;

{% hint style="info" %}
Although we have an automatic routing, you may manually target preferred regions to reduce latency:&#x20;

* proxy-asia.goproxies.com - for Asia and Oceania

* proxy-europe.goproxies.com - for Europe and Africa

* proxy-america.goproxies.com - for both Americas
  {% endhint %}

* **Port:** 1080

* **Authorisation:** Basic

* **Username/Password:** *\[provided separately].*&#x20;

There are two types of credentials:

1. **Dashboard user** - used to access the [GoProxies dashboard](https://dashboard.goproxies.com/).
2. **Proxy user** - used to access our proxy pool. Please ensure you use the proxy user credentials when sending requests to our proxy network.

Example test:

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const proxyAuth = encodeURIComponent('customer-USERNAME') + ':' + encodeURIComponent('PASSWORD');
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`; // use http:// here for CONNECT proxy auth
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

username = "customer-USERNAME"
password = "PASSWORD"

proxy = f"https://{username}:{password}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)

print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"net/http"
	"net/url"
	"time"
	"io"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		// Optional: tune TLSHandshakeTimeout, IdleConnTimeout, etc.
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}

```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort), new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {
      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby Net::HTTP" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME:PASSWORD');
// Use tunnel for HTTPS so CONNECT is used
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

#### Control Your Connection <a href="#control-your-connection" id="control-your-connection"></a>

* You can refine your proxy request by including parameters that manage IP selection.&#x20;
* Continue reading our step-by-step guide for more information on additional proxy parameters, along with detailed examples.


# Proxy parameters

This section describes IP targeting and controlling via parameters in Username.

Country, City, State mapping

We currently use ip2location.com and ipinfo.io databases to assign exit values of `country`, `city` and `state` to our nodes.

Other public databases might show different locations due to database differences. If location mismatches cannot occur, please first ensure the IP assigned by the proxy matches the target website's database location.

If you have any additional questions, please contact your account manager or our support team at <support@goproxies.com> .


# Country

To target a specific country's IP, add the `country` header to the username. The value should be a case-insensitive 2-letter country code in **ISO 3166-1 alpha-2** format, such as `DE` for Germany, `GB` for the United Kingdom, and `ES` for Spain. Example below with more details.\
\
Examples of a few countries that you can target in the `country` parameter:

| Country        | Country parameter |
| -------------- | ----------------- |
| United States  | `country-us`      |
| United Kingdom | `country-gb`      |
| Japan          | `country-jp`      |

The full list for country abbreviations may be found here: [Full Country List](https://docs.goproxies.com/proxies/faq/list-of-all-countries-with-their-2-digit-codes-iso-3166-1)

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-country-us:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-country-us'; // or -country-gb, -country-jp
const password = 'PASSWORD';

// percent-encode username/password if they contain special chars
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
  console.log(res.status, res.data);
})();

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-country-gb"  # country-gb example
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	// country example: -country-jp
	proxyURL, _ := url.Parse("http://customer-USERNAME-country-jp:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyCountry {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-country-gb"; // example
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby — Net::HTTP" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-country-jp'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-country-us:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true); // use CONNECT for HTTPS

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# State

To receive proxy IP address from a specific state, you would need to use the state header together with the 2-letter **ISO 3166-1 alpha-2** country code. For example `state-us_illinois` , `state-us_ohio` , `state-us_california .`

Below is a few examples with the `state` targeting in the username.

| State    | State parameter     |
| -------- | ------------------- |
| Alabama  | `state-us_alabama`  |
| Colorado | `state-us_colorado` |
| Florida  | `state-us_florida`  |

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-state-us_idaho:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-state-us_florida'; // example
const password = 'PASSWORD';
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-state-us_colorado"
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-state-us_alabama:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyStateExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-state-us_florida";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-state-us_alabama'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-state-us_colorado:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

> Note: State parameter will have priority against Country, so if used together those headers will be ignored.


# City

You can add a city header parameter together with the 2-letter **ISO 3166-1 alpha-2** country code to target a specific city. For example, using `customer-USERNAME-city-us_chicago` will request a proxy specifically from Chicago, United States.

Examples of a few cities that you can target in the `city` parameter:

| City        | City parameter        |
| ----------- | --------------------- |
| Los Angeles | `city-us_los_angeles` |
| London      | `city-gb_london`      |
| Munich      | `city-de_munich`      |

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-city-us_chicago:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-city-us_chicago'; // example
const password = 'PASSWORD';
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-city-us_chicago"
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-city-us_chicago:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-city-us_newyork'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyCityExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-city-us_losangeles";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-city-us_chicago:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

> Note: City header will have priority against State and Country, so if used together those headers will be ignored.


# Session Stickiness

### Establishing a session

The `sessionid` proxy header maintains the same IP address for a session up to 10 minutes, as long as the IP remains in the pool. If not, a new IP is assigned. To reuse an IP, use the same `sessionid` header with a unique identifier of 4 to 10 digits, e.g., `sessionid-42831931` .&#x20;

For session duration adjustments, contact us at <support@goproxies.com>.

### Credentials list of examples for different sessions

Examples below contain a list of credentials that establish a new unique session.

`customer-USERNAME-sessionid-7129391:PASSWORD`\
`customer-USERNAME-sessionid-8128311:PASSWORD`\
`customer-USERNAME-sessionid-1812819:PASSWORD`\
`customer-USERNAME-sessionid-289301:PASSWORD`\
`customer-USERNAME-sessionid-3916211:PASSWORD`<br>

### Understanding sessionid header

When using a session ID, such as `customer-USERNAME-sessionid-7129391:PASSWORD`, the proxy assigns you an IP address (e.g., 1.1.1.1), valid for 10 minutes. Any requests using the same `sessionid` will return the same IP. If there's no activity with the session ID for 10 minutes, you may be assigned a new IP (e.g., 1.1.1.2), or if the old IP is unavailable, it will be replaced as well.

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-sessionid-7182391:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-sessionid-7182391';
const password = 'PASSWORD';
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-sessionid-7182391"
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-sessionid-7182391:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxySessionExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-sessionid-7182391";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-sessionid-7182391'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-sessionid-7182391:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# ASN targeting

ASN targeting is not compatible with any random continent, therefore the examples will vary from other targeting methods. This is because ASN targeting only uses region-based endpoints.

use one of these region endpoints depending on ASN:

* America: proxy-america.goproxies.com:1080
* Europe: proxy-europe.goproxies.com:1080
* Asia: proxy-asia.goproxies.com:1080

Format for username: customer-USERNAME-asn-XXXX (replace XXXX with the ASN).

Below are short snippet examples. Please see their comments too where applicable:

{% tabs %}
{% tab title="cURL" %}

```bash
# America
curl --proxytunnel --proxy "https://customer-USERNAME-asn-12345:PASSWORD@proxy-america.goproxies.com:1080" https://ip.goproxies.com

# Europe
curl --proxytunnel --proxy "https://customer-USERNAME-asn-54321:PASSWORD@proxy-europe.goproxies.com:1080" https://ip.goproxies.com

# Asia
curl --proxytunnel --proxy "https://customer-USERNAME-asn-99999:PASSWORD@proxy-asia.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-asn-12345';
const password = 'PASSWORD';
const proxyHost = 'proxy-america.goproxies.com:1080'; // or proxy-europe..., proxy-asia...
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@${proxyHost}`;
const agent = new HttpsProxyAgent(proxyUrl);

await axios.get('https://ip.goproxies.com', { httpsAgent: agent });
```

{% endtab %}

{% tab title="Python" %}

```python
from urllib.parse import quote
import requests

username = "customer-USERNAME-asn-12345"
password = "PASSWORD"
proxy_host = "proxy-europe.goproxies.com:1080"  # choose region
proxy = f"http://{quote(username)}:{quote(password)}@{proxy_host}"

proxies = {"http": proxy, "https": proxy}
print(requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10).text)
```

{% endtab %}

{% tab title="Go" %}

```go
proxyURL, _ := url.Parse("http://customer-USERNAME-asn-99999:PASSWORD@proxy-asia.goproxies.com:1080")
transport := &http.Transport{Proxy: http.ProxyURL(proxyURL)}
client := &http.Client{Transport: transport}
resp, _ := client.Get("https://ip.goproxies.com")
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body)
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-asn-54321'
password = 'PASSWORD'
proxy_addr = 'proxy-asia.goproxies.com'
proxy_port = 1080

uri = URI('https://ip.goproxies.com')
Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  puts http.get(uri).body
end
```

{% endtab %}

{% tab title="Java" %}

```java
// assume Apache HttpClient on the classpath
String proxyHost = "proxy-america.goproxies.com";
int proxyPort = 1080;
String user = "customer-USERNAME-asn-12345";
String pass = "PASSWORD";

// (CredentialsProvider + HttpHost + RequestConfig same as previous examples)
```

{% endtab %}

{% tab title="PHP" %}

```php
$ch = curl_init('https://ip.goproxies.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy-europe.goproxies.com:1080'); // region
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-asn-54321:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
echo curl_exec($ch);
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# ISP Residential Proxies

ISP Residential Proxies Quick Start

### Introduction to ISP Residential Proxies

Explore the comprehensive details of our ISP Residential Proxies in this documentation. Begin your journey with:

* **Easy Implementation**: Set up quickly with minimal effort.
* **Session Stickiness**: Retain the same IP for an unlimited session duration.
* **Seamless Integration**: Easily integrate our proxies into your system.

#### Key Features

ISP Residential Proxies provide robust solutions for data collection. With unlimited session durations and bandwidth, these proxies offer reliable and efficient connections suitable for high-traffic tasks. Our ISP Proxies ensure high-quality and stable connections.


# ISP Residential Proxies

ISP Residential Proxies Quick Start

Service is accessed using following entry data:

* **Host:** proxy.goproxies.com - All countries.&#x20;

{% hint style="info" %}
Although we have an automatic routing, you may manually target preferred regions to reduce latency:&#x20;

* proxy-asia.goproxies.com - for Asia and Oceania

* proxy-europe.goproxies.com - for Europe and Africa

* proxy-america.goproxies.com - for both Americas
  {% endhint %}

* **Port:** 1080

* **Authorisation:** Basic

* **Username/Password:** *\[provided separately].*&#x20;

There are two types of credentials:

1. **Dashboard user** - used to access the [GoProxies dashboard](https://dashboard.goproxies.com/).
2. **Proxy user** - used to access our proxy pool. Please ensure you use the proxy user credentials when sending requests to our proxy network.

Below are a few basic request examples in various programming languages. You can test it via any application that has HTTP(s) proxy feature or simply a terminal command:

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" expandable="true" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const proxyAuth = encodeURIComponent('customer-USERNAME') + ':' + encodeURIComponent('PASSWORD');
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`; // use http:// here for CONNECT proxy auth
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

username = "customer-USERNAME"
password = "PASSWORD"

proxy = f"https://{username}:{password}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)

print(resp.status_code)
print(resp.text)

```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"net/http"
	"net/url"
	"time"
	"io"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		// Optional: tune TLSHandshakeTimeout, IdleConnTimeout, etc.
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}

```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort), new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {
      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby Net::HTTP" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME:PASSWORD');
// Use tunnel for HTTPS so CONNECT is used
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

#### Control Your Connection <a href="#control-your-connection" id="control-your-connection"></a>

* You can refine your proxy request by including parameters that manage IP selection.&#x20;
* Continue reading our step-by-step guide for more information on additional proxy parameters, along with detailed examples.

{% hint style="info" %}
If you cannot find something or need help, contact us at <support@goproxies.com> or start an Intercom chat.
{% endhint %}


# Proxy parameters

This section describes IP targeting and controlling via parameters in Username.

GoProxies ISP Residential Proxies provide access to over 160 different locations and support country, city, and state targeting.

### Country, City, State mapping

We currently use ip2location.com and ipinfo.io databases to assign exit values of `country`, `city` and `state` to our nodes.

Other public databases might show different locations due to database differences. If location mismatches cannot occur, please first ensure the IP assigned by the proxy matches the target website's database location.

If you have any additional questions, please contact your account manager or our support team at <support@goproxies.com> .


# Session Stickiness

### Establishing a session

The `sessionid` proxy header maintains the same IP address for unlimited time duration, as long as the IP remains in the pool. If the IP is no longer available or was removed due to quality problems, a new IP is assigned. To reuse an IP, use the same `sessionid` header with a unique identifier of 4 to 12 digits, e.g., `sessionid-42831931` .&#x20;

For session duration adjustments in case it is needed, contact us at <support@goproxies.com>.

### Credentials list of examples for different sessions

Examples below contain a list of credentials that establish a new unique session.

`customer-USERNAME-sessionid-1293812:PASSWORD`\
`customer-USERNAME-sessionid-2837218:PASSWORD`\
`customer-USERNAME-sessionid-3832892:PASSWORD`\
`customer-USERNAME-sessionid-585896:PASSWORD`\
`customer-USERNAME-sessionid-789129:PASSWORD`<br>

### Understanding sessionid header

When using a session ID like `customer-USERNAME-sessionid-912937:PASSWORD`, the proxy assigns an IP address (e.g., 1.1.1.1), which is valid indefinitely. Requests with the same `sessionid` will consistently return the same IP. A rare IP change might occur only if the current IP is no longer available in our pool.

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-sessionid-7182391:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-sessionid-7182391';
const password = 'PASSWORD';
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-sessionid-7182391"
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-sessionid-7182391:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxySessionExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-sessionid-7182391";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-sessionid-7182391'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-sessionid-7182391:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# Country

To target a specific country's IP, add the `country` header to the username. The value should be a case-insensitive 2-letter country code in **ISO 3166-1 alpha-2** format, such as `DE` for Germany, `GB` for the United Kingdom, and `ES` for Spain. Example below with more details.\
\
Examples of a few countries that you can target in the `country` parameter:

| Country        | Country parameter |
| -------------- | ----------------- |
| United States  | `country-us`      |
| United Kingdom | `country-gb`      |
| Japan          | `country-jp`      |

The full list of country abbreviations may be found here: [Full Country List](https://docs.goproxies.com/proxies/faq/list-of-all-countries-with-their-2-digit-codes-iso-3166-1)

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-country-us:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-country-us'; // or -country-gb, -country-jp
const password = 'PASSWORD';

// percent-encode username/password if they contain special chars
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
  console.log(res.status, res.data);
})();

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-country-gb"  # country-gb example
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	// country example: -country-jp
	proxyURL, _ := url.Parse("http://customer-USERNAME-country-jp:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyCountry {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-country-gb"; // example
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby — Net::HTTP" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-country-jp'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-country-us:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true); // use CONNECT for HTTPS

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# State

To receive proxy IP address from a specific state, you would need to use the state header together with the 2-letter **ISO 3166-1 alpha-2** country code. For example `state-us_illinois` , `state-us_ohio` , `state-us_california .`

Below is a few examples with the `state` targeting in the username.

| State    | State parameter     |
| -------- | ------------------- |
| Alabama  | `state-us_alabama`  |
| Colorado | `state-us_colorado` |
| Florida  | `state-us_florida`  |

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-state-us_idaho:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-state-us_florida'; // example
const password = 'PASSWORD';
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-state-us_colorado"
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-state-us_alabama:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyStateExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-state-us_florida";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-state-us_alabama'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-state-us_colorado:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

> Note: State parameter will have priority against Country, so if used together those headers will be ignored.


# City

You can add a city header parameter together with the 2-letter **ISO 3166-1 alpha-2** country code to target a specific city. For example, using `customer-USERNAME-city-us_chicago` will request a proxy specifically from Chicago, United States.

Examples of a few cities that you can target in the `city` parameter:

| City        | City parameter        |
| ----------- | --------------------- |
| Los Angeles | `city-us_los_angeles` |
| London      | `city-gb_london`      |
| Munich      | `city-de_munich`      |

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-city-us_chicago:PASSWORD@proxy.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-city-us_chicago'; // example
const password = 'PASSWORD';
const proxyAuth = encodeURIComponent(username) + ':' + encodeURIComponent(password);
const proxyUrl = `http://${proxyAuth}@proxy.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from urllib.parse import quote

username = "customer-USERNAME-city-us_chicago"
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@proxy.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-city-us_chicago:PASSWORD@proxy.goproxies.com:1080")
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME-city-us_newyork'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'proxy.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class ProxyCityExample {
  public static void main(String[] args) throws Exception {
    String proxyHost = "proxy.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-city-us_losangeles";
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-city-us_chicago:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

> Note: City header will have priority against State and Country, so if used together those headers will be ignored.


# Shared DataCenter Proxies

Shared DataCenter Proxies Quick Start

Explore the comprehensive details of our Shared DataCenter Proxies in this documentation. Begin your journey with:

* **Easy Implementation**: Set up quickly with minimal effort.
* **Session Stickiness**: Retain the same IP for up to 10 minutes.
* **Seamless Integration**: Easily integrate our proxies into your system.

#### Key Features

ISP Residential Proxies provide robust solutions for data collection. With unlimited session durations and bandwidth, these proxies offer reliable and efficient connections suitable for high-traffic tasks. Our ISP Proxies ensure high-quality and stable connections.


# Shared DataCenter Proxies

Shared DataCenter Proxies Quick Start

Service is accessed using following entry data:

* **Host:** hosting.goproxies.com - All countries.&#x20;
* **Port:** 1080
* **Authorisation:** Basic
* **Username/Password:** *\[provided separately]*

There are two types of credentials:

1. **Dashboard user** - used to access the [GoProxies dashboard](https://dashboard.goproxies.com/).
2. **Proxy user** - used to access our proxy pool. Please ensure you use the proxy user credentials when sending requests to our proxy network.

You can test it via any application that has HTTP(s) proxy feature (Chrome, SwitchyOmega, Profixier, Foxy Proxy, Proxy Switcher etc.) or simply a terminal command:

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME:PASSWORD@hosting.goproxies.com:1080" https://ip.goproxies.com
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME';
const password = 'PASSWORD';
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@hosting.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log(res.status, res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

username = "customer-USERNAME"
password = "PASSWORD"

proxy = f"https://{username}:{password}@hosting.goproxies.com:1080"

proxies = {
    "http": proxy,
    "https": proxy,
}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)

print(resp.status_code)
print(resp.text)

```

{% endtab %}

{% tab title="Go" %}

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class SharedDatacenterProxy {
    public static void main(String[] args) throws Exception {
        String proxyHost = "hosting.goproxies.com";
        int proxyPort = 1080;
        String user = "customer-USERNAME";
        String pass = "PASSWORD";

        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
                new UsernamePasswordCredentials(user, pass));

        HttpHost proxy = new HttpHost(proxyHost, proxyPort);
        RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

        try (CloseableHttpClient httpclient = HttpClients.custom()
                .setDefaultCredentialsProvider(credsProvider)
                .build()) {

            HttpGet httpget = new HttpGet("https://ip.goproxies.com");
            httpget.setConfig(config);

            try (CloseableHttpResponse response = httpclient.execute(httpget)) {
                System.out.println(response.getStatusLine());
                System.out.println(new String(response.getEntity().getContent().readAllBytes()));
            }
        }
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'

username = 'customer-USERNAME'
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'hosting.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'hosting.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME:PASSWORD');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

#### Control Your Connection <a href="#control-your-connection" id="control-your-connection"></a>

* You can refine your proxy request by including parameters that manage IP selection.&#x20;
* Continue reading our step-by-step guide for more information on additional proxy parameters, along with detailed examples.


# Proxy parameters

This section describes IP targeting and controlling via parameters in Username.

GoProxies Shared DataCenter Proxies provide access to over 160 different locations and support country, city, and state targeting.

### Country, City, State mapping

We currently use ip2location.com and ipinfo.io databases to assign exit values of `country`, `city` and `state` to our nodes.

Other public databases might show different locations due to database differences. If location mismatches cannot occur, please first ensure the IP assigned by the proxy matches the target website's database location.

If you have any additional questions, please contact your account manager or our support team at <support@goproxies.com> .


# Country

To target a specific country's IP, add the `country` header to the username. The value should be a case-insensitive 2-letter country code in **ISO 3166-1 alpha-2** format, such as `DE` for Germany, `GB` for the United Kingdom, and `ES` for Spain. Example below with more details.\
\
Examples of a few countries that you can target in the `country` parameter:

| Country        | Country parameter |
| -------------- | ----------------- |
| United States  | `country-us`      |
| United Kingdom | `country-gb`      |
| Japan          | `country-jp`      |

The full list of country abbreviations may be found here: [Full Country List](https://docs.goproxies.com/proxies/faq/list-of-all-countries-with-their-2-digit-codes-iso-3166-1)

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-country-us:PASSWORD@hosting.goproxies.com" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// country-example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-country-gb'; // e.g. country-gb
const password = 'PASSWORD';
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@hosting.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
# country_example.py
import requests
from urllib.parse import quote

username = "customer-USERNAME-country-jp"  # e.g. country-jp
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@hosting.goproxies.com:1080"

proxies = {"http": proxy, "https": proxy}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-country-jp:PASSWORD@hosting.goproxies.com:1080") // e.g. country-jp
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class CountrySharedDatacenter {
  public static void main(String[] args) throws Exception {
    String proxyHost = "hosting.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-country-gb"; // e.g. country-gb
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}

```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# country_example.rb
require 'net/http'
require 'uri'

username = 'customer-USERNAME-country-us' # e.g. country-us
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'hosting.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
// country_example.php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'hosting.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-country-us:PASSWORD'); // e.g. country-us
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# State

To receive proxy IP address from a specific state, you would need to use the state header together with the 2-letter **ISO 3166-1 alpha-2** country code. For example `state-us_illinois` , `state-us_ohio` , `state-us_california .`

Below is a few examples with the `state` targeting in the username.

| State    | State parameter     |
| -------- | ------------------- |
| Alabama  | `state-us_alabama`  |
| Colorado | `state-us_colorado` |
| Florida  | `state-us_florida`  |

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-state-us_idaho:PASSWORD@hosting.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// state-example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-state-us_florida'; // e.g. state-us_florida
const password = 'PASSWORD';
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@hosting.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
# state_example.py
import requests
from urllib.parse import quote

username = "customer-USERNAME-state-us_colorado"  # e.g. state-us_colorado
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@hosting.goproxies.com:1080"

proxies = {"http": proxy, "https": proxy}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-state-us_florida:PASSWORD@hosting.goproxies.com:1080") // e.g. state-us_florida
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}

```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# state_example.rb
require 'net/http'
require 'uri'

username = 'customer-USERNAME-state-us_alabama' # e.g. state-us_alabama
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'hosting.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class StateSharedDatacenter {
  public static void main(String[] args) throws Exception {
    String proxyHost = "hosting.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-state-us_florida"; // e.g. state-us_florida
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
// state_example.php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'hosting.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-state-us_colorado:PASSWORD'); // e.g. state-us_colorado
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

> Note: State parameter will have priority against Country, so if used together those headers will be ignored.


# City

You can add a city header parameter together with the 2-letter **ISO 3166-1 alpha-2** country code to target a specific city. For example, using `customer-USERNAME-city-us_chicago` will request a proxy specifically from Chicago, United States.

Examples of a few cities that you can target in the `city` parameter:

| City        | City parameter        |
| ----------- | --------------------- |
| Los Angeles | `city-us_los_angeles` |
| London      | `city-gb_london`      |
| Munich      | `city-de_munich`      |

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-city-us_chicago:PASSWORD@hosting.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// city-example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-city-us_los_angeles'; // e.g. city-us_los_angeles
const password = 'PASSWORD';
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@hosting.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
# city_example.py
import requests
from urllib.parse import quote

username = "customer-USERNAME-city-gb_london"  # e.g. city-gb_london
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@hosting.goproxies.com:1080"

proxies = {"http": proxy, "https": proxy}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-city-us_los_angeles:PASSWORD@hosting.goproxies.com:1080") // e.g. city-us_los_angeles
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class CitySharedDatacenter {
  public static void main(String[] args) throws Exception {
    String proxyHost = "hosting.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-city-us_los_angeles"; // e.g. city-us_los_angeles
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}

```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# city_example.rb
require 'net/http'
require 'uri'

username = 'customer-USERNAME-city-de_munich' # e.g. city-de_munich
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'hosting.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
// city_example.php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'hosting.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-city-de_munich:PASSWORD'); // e.g. city-de_munich
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}

> Note: City header will have priority against State and Country, so if used together those headers will be ignored.


# Session Stickiness

### Establishing a session

To maintain a consistent IP address with the `sessionid` proxy header, the same IP can be used for up to 10 minutes, provided it stays in the available pool. If the IP is no longer available or removed due to quality issues, a new IP is assigned. To reuse an IP, apply the same `sessionid` header alongside a unique identifier comprising 4 to 10 digits, like.&#x20;

For session duration adjustments in case it is needed, contact us at <support@goproxies.com>.

### Credentials list of examples for different sessions

Examples below contain a list of credentials that establish a new unique session.

`customer-USERNAME-sessionid-3821319:PASSWORD`\
`customer-USERNAME-sessionid-192938:PASSWORD`\
`customer-USERNAME-sessionid-489582:PASSWORD`\
`customer-USERNAME-sessionid-283881:PASSWORD`\
`customer-USERNAME-sessionid-891928:PASSWORD`<br>

### Understanding sessionid header

When using a session ID like `customer-USERNAME-sessionid-128338:PASSWORD`, the proxy assigns an IP address (e.g., 1.1.1.1), which is valid for 10 minutes. If there's no activity with the session ID for 10 minutes, you may be assigned a new IP (e.g., 1.1.1.2), or if the old IP is unavailable, it will be replaced as well.

### Request example

{% tabs %}
{% tab title="cURL" %}

```bash
curl --proxytunnel --proxy "https://customer-USERNAME-sessionid-128338:PASSWORD@hosting.goproxies.com:1080" https://ip.goproxies.com
```

{% endtab %}

{% tab title="JavaScript" %}

```bash
npm install axios https-proxy-agent
```

```javascript
// sessionid-example.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const username = 'customer-USERNAME-sessionid-3821319'; // unique session ID
const password = 'PASSWORD';
const proxyUrl = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@hosting.goproxies.com:1080`;
const agent = new HttpsProxyAgent(proxyUrl);

(async () => {
  try {
    const res = await axios.get('https://ip.goproxies.com', { httpsAgent: agent, timeout: 10000 });
    console.log('status:', res.status);
    console.log('body:', res.data);
  } catch (err) {
    console.error('request error:', err.message);
  }
})();
```

{% endtab %}

{% tab title="Python" %}

```python
# sessionid_example.py
import requests
from urllib.parse import quote

username = "customer-USERNAME-sessionid-489582"  # unique session ID
password = "PASSWORD"
proxy = f"http://{quote(username)}:{quote(password)}@hosting.goproxies.com:1080"

proxies = {"http": proxy, "https": proxy}

resp = requests.get("https://ip.goproxies.com", proxies=proxies, timeout=10)
print(resp.status_code)
print(resp.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://customer-USERNAME-sessionid-3821319:PASSWORD@hosting.goproxies.com:1080") // unique session ID
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
		TLSHandshakeTimeout: 10 * time.Second,
	}
	client := &http.Client{Transport: transport, Timeout: 15 * time.Second}

	resp, err := client.Get("https://ip.goproxies.com")
	if err != nil {
		fmt.Println("request error:", err)
		return
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println("status:", resp.Status)
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# sessionid_example.rb
require 'net/http'
require 'uri'

username = 'customer-USERNAME-sessionid-283881' # unique session ID
password = 'PASSWORD'

uri = URI('https://ip.goproxies.com')
proxy_addr = 'hosting.goproxies.com'
proxy_port = 1080

Net::HTTP::Proxy(proxy_addr, proxy_port, username, password).start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  res = http.request(req)
  puts res.code
  puts res.body
end
```

{% endtab %}

{% tab title="Java" %}

```java
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;

public class SessionidSharedDatacenter {
  public static void main(String[] args) throws Exception {
    String proxyHost = "hosting.goproxies.com";
    int proxyPort = 1080;
    String user = "customer-USERNAME-sessionid-891928"; // unique session ID
    String pass = "PASSWORD";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort),
        new UsernamePasswordCredentials(user, pass));

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

    try (CloseableHttpClient httpclient = HttpClients.custom()
             .setDefaultCredentialsProvider(credsProvider)
             .build()) {

      HttpGet httpget = new HttpGet("https://ip.goproxies.com");
      httpget.setConfig(config);

      try (CloseableHttpResponse response = httpclient.execute(httpget)) {
        System.out.println(response.getStatusLine());
        System.out.println(new String(response.getEntity().getContent().readAllBytes()));
      }
    }
  }
}

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
// sessionid_example.php
$ch = curl_init('https://ip.goproxies.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, 'hosting.goproxies.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'customer-USERNAME-sessionid-192938:PASSWORD'); // unique session ID
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

$response = curl_exec($ch);
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'Response: ' . $response . PHP_EOL;
}
curl_close($ch);
```

{% endtab %}
{% endtabs %}


# Self-Service Dashboard

### Intro

The purpose of this article is to explain how to correctly interpret the usage data that is displayed on the self-service

### Home

The Product you’ve purchased will be displayed as “Active” on the Dashboard page. This is the landing page you first see when you navigate to your self-service.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FMYn7eMqXHG3RaTYHwyVL%2Funknown.png?alt=media&amp;token=20858093-aaf8-4bec-86f7-7170b2389b6d" alt=""><figcaption></figcaption></figure>

### Dashboard

The dashboard page displays your traffic usage history. Please note that it takes a couple of hours for your usage data to synchronize with the dashboard.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FAyels7qspkult2voMsyk%2Funknown.png?alt=media&amp;token=7fc07f1d-9116-415e-9c95-3eb116711734" alt=""><figcaption></figcaption></figure>

It is divided into a few key sections, namely:

#### Filtering Tools:

The top of the page allows you to select the date, proxy API users that you connect to the proxy with, and the country that was targeted with:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FQxMnY9CLSHqK6GCcsMGZ%2Funknown.png?alt=media&amp;token=8058556e-85fe-4fd5-9d76-acc5cb038feb" alt=""><figcaption></figcaption></figure>

#### Subusers

This page takes you to the proxy API users page. Check out our [Creating Subusers](https://docs.goproxies.com/proxies/self-service-dashboard/creating-subusers) page for how to create them.<br>

#### Documentation:

This a the link to the same help docs page you're currently navigating.

#### Traffic History:

This is where you see how many requests were made at a selected time period:

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FqGF4MMUgKBftYaqTp5jl%2Funknown.png?alt=media&amp;token=c65fa456-3f2a-4ab3-b49a-593f7a19c057" alt=""><figcaption></figcaption></figure>

#### Traffic Usage:

This section allows you to see what is your remaining traffic per your plan. Currently, we do not support upgrading your plan directly from the self-service dashboard while the previous traffic is still available. If you're interested in upgrading your plan or topping up your traffic - please contact our Sales Team at <sales@goproxies.com>.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FpZHRq2PJeJ00y0Kt56Ot%2Funknown.png?alt=media&amp;token=3a42665a-73a7-4e35-9ce4-0148b0c6b7d6" alt=""><figcaption></figcaption></figure>

#### Successful and Failed Requests:

These sections list all of your requests per domain in the selected time period (“Total traffic” is the amount of requests made to specific domain):

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FoHKWYtp3LhU9yx7pEU4v%2Funknown.png?alt=media&amp;token=a9351b9c-2b05-425c-a985-1c514c46231c" alt=""><figcaption></figcaption></figure>

### My Account

This Page lists your current dashboard account details.

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2Fob4N5PIrYzzRj3ObWZh8%2Funknown.png?alt=media&amp;token=90c49b07-987f-4611-888c-af50736ff100" alt=""><figcaption></figcaption></figure>

If you wish to change your account, you may do so by pressing the “Change” button, which will direct you to the password change page. Press “Confirm” once you’ve entered the new password per the requirements to save the changes:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F8NHz6lAlfQSPmKP0gTvg%2Funknown.png?alt=media&amp;token=029829ab-58cf-4c2a-bb7e-5115808d2799" alt=""><figcaption></figcaption></figure>

### Billing

The billing section contains your invoices with the product name, plan and price amount. You can download the invoice in pdf by pressing the “Download” button on the right side:

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FVT8THkiViyq6AmdXSxlo%2Funknown.png?alt=media&amp;token=88fa8dab-024e-4090-951e-07bf47806a66" alt=""><figcaption></figcaption></figure>

### Contact Us

This section Provides quick access to the support email.

### Help Center

This is a quick link to our support knowledge base. Please try using it to obtain initial answers to any technical questions you may have.


# Intro & Walkthrough

An introductory page to the GoProxies Self-Service Dashboard

### Intro

The purpose of this article is to explain how to correctly interpret the usage data that is displayed on the self-service

### Home

The Product you’ve purchased will be displayed as “Active” on the Dashboard page. This is the landing page you first see when you navigate to your self-service.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FMYn7eMqXHG3RaTYHwyVL%2Funknown.png?alt=media&amp;token=20858093-aaf8-4bec-86f7-7170b2389b6d" alt=""><figcaption></figcaption></figure>

### Dashboard

The dashboard page displays your traffic usage history. Please note that it takes a couple of hours for your usage data to synchronize with the dashboard.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FAyels7qspkult2voMsyk%2Funknown.png?alt=media&amp;token=7fc07f1d-9116-415e-9c95-3eb116711734" alt=""><figcaption></figcaption></figure>

It is divided into a few key sections, namely:

#### Filtering Tools:

The top of the page allows you to select the date, proxy API users that you connect to the proxy with, and the country that was targeted with:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FQxMnY9CLSHqK6GCcsMGZ%2Funknown.png?alt=media&amp;token=8058556e-85fe-4fd5-9d76-acc5cb038feb" alt=""><figcaption></figcaption></figure>

#### Subusers

This page takes you to the proxy API users page. Check out our [Creating Subusers](https://docs.goproxies.com/proxies/self-service-dashboard/creating-subusers) page for how to create them.<br>

#### Documentation:

This a the link to the same help docs page you're currently navigating.

#### Traffic History:

This is where you see how many requests were made at a selected time period:

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FqGF4MMUgKBftYaqTp5jl%2Funknown.png?alt=media&amp;token=c65fa456-3f2a-4ab3-b49a-593f7a19c057" alt=""><figcaption></figcaption></figure>

#### Traffic Usage:

This section allows you to see what is your remaining traffic per your plan. Currently, we do not support upgrading your plan directly from the self-service dashboard while the previous traffic is still available. If you're interested in upgrading your plan or topping up your traffic - please contact our Sales Team at <sales@goproxies.com>.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FpZHRq2PJeJ00y0Kt56Ot%2Funknown.png?alt=media&amp;token=3a42665a-73a7-4e35-9ce4-0148b0c6b7d6" alt=""><figcaption></figcaption></figure>

#### Successful and Failed Requests:

These sections list all of your requests per domain in the selected time period (“Total traffic” is the amount of requests made to specific domain):

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FoHKWYtp3LhU9yx7pEU4v%2Funknown.png?alt=media&amp;token=a9351b9c-2b05-425c-a985-1c514c46231c" alt=""><figcaption></figcaption></figure>

### My Account

This Page lists your current dashboard account details.

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2Fob4N5PIrYzzRj3ObWZh8%2Funknown.png?alt=media&amp;token=90c49b07-987f-4611-888c-af50736ff100" alt=""><figcaption></figcaption></figure>

If you wish to change your account, you may do so by pressing the “Change” button, which will direct you to the password change page. Press “Confirm” once you’ve entered the new password per the requirements to save the changes:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F8NHz6lAlfQSPmKP0gTvg%2Funknown.png?alt=media&amp;token=029829ab-58cf-4c2a-bb7e-5115808d2799" alt=""><figcaption></figcaption></figure>

### Billing

The billing section contains your invoices with the product name, plan and price amount. You can download the invoice in pdf by pressing the “Download” button on the right side:

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FVT8THkiViyq6AmdXSxlo%2Funknown.png?alt=media&amp;token=88fa8dab-024e-4090-951e-07bf47806a66" alt=""><figcaption></figcaption></figure>

### Contact Us

This section Provides quick access to the support email.

### Help Center

This is a quick link to our support knowledge base. Please try using it to obtain initial answers to any technical questions you may have.


# Purchase Flow

Article explaining how to purchase GoProxies proxy products

### Intro

The purpose of this article is to explain and guide how to purchase a plan in GoProxies while on the self-service dashboard.

### Walkthrough

When opening the GoProxies dashboard, you will first be met with the Home screen that lists your currently purchased plans, where the one being purchased will be visible as “Active” instead of “Buy Now”:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FvrzBdwSuCAdzz8947Vwv%2Funknown.png?alt=media&amp;token=d7f774bb-dcce-4de1-b7db-256976094ba0" alt=""><figcaption></figcaption></figure>

\
Press the “Buy now” button for the plan of your choice and you will be directed to the plan selection page. In this example, we’re going to purchase Rotating Residential Proxies. Press “Buy Now” for the plan of your choice:\ <br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FY9ZwUCyhfO5ndmrfiFWe%2Funknown.png?alt=media&amp;token=99fff008-d7f9-43e0-96b9-78e65a61c9de" alt=""><figcaption></figcaption></figure>

You will now be at the Payment selection screen. Select the available payment methods (currently limited to credit cards). If you have a discount coupon code, enter it into the “Add coupon code” field and press Apply.

Finally, after entering your billing details, check “Agree to Terms and Conditions” and press “Continue” on the bottom:\ <br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FiUDx83Db8BXIISESUh0y%2Funknown.png?alt=media&amp;token=03fb9212-53ba-44fa-a022-79680799da61" alt=""><figcaption></figcaption></figure>

After pressing “Continue” you will be directed to the payment screen. Enter your payment details and press “Pay and subscribe” to finish the subscription:

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FqZIPImA4hIAi8sja94qk%2Funknown.png?alt=media&amp;token=b178a12c-fed6-416b-b3bd-fdebe8aae661" alt=""><figcaption></figcaption></figure>

If your payment is successful, you will be directed to the order confirmed screen.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FAg5TmC4L0kA2lSwE17hz%2Funknown.png?alt=media&amp;token=5e544a2c-4ed4-4cce-aeab-01aead6de6cb" alt=""><figcaption></figcaption></figure>

<br>

Alternatively, if the payment fails, you will receive this message and be allowed to start over:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FEHnCNO6y1gIa7NXsNm8n%2Funknown.png?alt=media&amp;token=00682242-a3c1-422c-99e0-99c1ba40e51c" alt=""><figcaption></figcaption></figure>

<br>

Press “Access Proxies” and either proceed to documentation, or return to the dashboard by pressing “Go to Dashboard”:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2Fal98Ia2fViRhHF32CNh3%2Funknown.png?alt=media&amp;token=84c44d27-55a8-4c8a-a5e4-430dc9421a9e" alt=""><figcaption></figcaption></figure>

### Additional notes:

The invoice for the purchased proxy will be listed and available for download as a .pdf file in the Billing page, which you can access by pressing the “Billing” button in the navigation bar on the left.\ <br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FawwhE44KRugcpKprTv5V%2Funknown.png?alt=media&amp;token=b899fd92-3078-4e11-83d2-cb5eebe1219a" alt=""><figcaption></figcaption></figure>

<br>


# Creating Subusers

Article about creating and managing subusers

### Intro

This article will explain how to create and manage subusers (also called API Proxy Users). These are accounts that you use to connect to the proxy itself.

### Accessing the Subusers Page

Navigate to the "Dashobard" tab on the self-service dashboard:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FUG6wdLkJ8ucaJlcp7S2M%2Funknown.png?alt=media&amp;token=49786b0e-c4e1-4079-8efd-ec5a05ccd1aa" alt=""><figcaption></figcaption></figure>

Press the Subusers button to access the subusers list.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FVYzynFEQmX5g2gxxRuZs%2Funknown.png?alt=media&amp;token=78ef437f-0358-4e8d-a9e7-4d59732dffe1" alt=""><figcaption></figcaption></figure>

This will open the My Subusers page.  You can add up to 10 subusers per account.&#x20;

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FtwtIqQndY937nrJIzdtg%2Funknown.png?alt=media&amp;token=54031885-0990-411d-8907-0768b6d6688a" alt=""><figcaption></figcaption></figure>

Enter the username of your choice and press Create:<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FFBNghCRmxRrTLipDBWVy%2Funknown.png?alt=media&amp;token=538926da-5893-403d-93f9-1d8e6732a16e" alt=""><figcaption></figcaption></figure>

\
Make sure to copy the password that is generated in this window as it will not be displayed anywhere else! Afterward, either press “Add New Subuser” below  to repeat the process and add a new one, or press “Back to My Subusers” to return to the subuser list:

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FnVTI0na7qyboisv73Kff%2Funknown.png?alt=media&amp;token=8e2a4a73-589b-4e47-b14a-5610469ef6a5" alt=""><figcaption></figcaption></figure>

Once you return to the list of subusers, you will now see your created API proxy user(-s). You may create up to 10 of these per account. Likewise, you may reset their password by pressing “Reset Password”, which will generate a new pop up with the newly reset password (which you will need to copy again before closing!):

<br>

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F2ywcLu1Wgg5dQ90imEZS%2Funknown.png?alt=media&amp;token=9dc5ef80-1bc6-4492-b81b-c74aead3ad23" alt=""><figcaption></figcaption></figure>

Now you're ready to use the proxy users!


# Endpoint Generator

Article describing how to access and use the endpoint generator

### Intro

This article will explain how to use the endpoint generator - a tool which you can find on our self-service dashboard.

### Walkthrough

1. Navigate to the Dashboard page and select “Endpoint Generator” on the top of the page.&#x20;
2. In the selection fields below, select either HTTP or HTTPS as a protocol.
3. &#x20;Select the subuser (also called the proxy user) from the drop-down,&#x20;
4. &#x20;Enter the subuser’s password (which would’ve been provided for you in a separate window when you first generated the subuser. If you’ve lost it, please navigate to the subusers page on the top right and reset your password there for that subuser, but please be sure to copy the password once it is shown in the new window again).
5. Select the country you’d like to target (optional)
6. &#x20;Select the state from the state drop-down, which dynamically populates for the selected country. (optional)
7. Select the city from the city drop-down, which also dynamically populates for the selected state. (optional)
8. If you want to use session stickiness, check the “sticky” checkbox on the bottom right. (optional)
9. &#x20;Under “number of endpoints”, select how many separate codes you’d like to generate. This is only relevant if you’ve checked “sticky”, as each line will have its own unique session ID needed for stickiness.

\
And you’re done! The code in the “Generated Endpoints” window will be auto generated based on the info you’ve entered earlier. Likewise, the “Integration Snippets” window gives you the code in various programming languages:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FkGaw6RlvWGh4Djpc4REL%2Funknown.png?alt=media&amp;token=f74153a1-8a4c-4b28-9e22-c822c5c60649" alt=""><figcaption></figcaption></figure>


# Integrations

{% content-ref url="/pages/LbpJrXaw9HzIwlbNAwrT" %}
[How to rotate proxies in Python?](/proxies/integrations/how-to-rotate-proxies-in-python)
{% endcontent-ref %}

{% content-ref url="/pages/JvGYKQUCuLy5KLlxM817" %}
[SmartProxy](/proxies/integrations/browsers/smartproxy)
{% endcontent-ref %}

{% content-ref url="/pages/qzDCNVUFoE1vn6ueQX1E" %}
[ZeroOmega (Proxy SwitchyOmega 3)](/proxies/integrations/browsers/zeroomega-proxy-switchyomega-3)
{% endcontent-ref %}

{% content-ref url="/pages/U7K7P8GrvPMryO7Ce3ca" %}
[Selenium](/proxies/integrations/browsers/selenium)
{% endcontent-ref %}

{% content-ref url="/spaces/WiMBYtzwiSH61Xlgx0W1/pages/OTagRcy3f70e1WKnAcMk" %}
[IP Burger](/proxies/integrations/browsers/ip-burger)
{% endcontent-ref %}

{% content-ref url="/spaces/WiMBYtzwiSH61Xlgx0W1/pages/MRHhcy6B0cEOt8E3wQ2t" %}
[Puppeteer](/proxies/integrations/browsers/puppeteer)
{% endcontent-ref %}

{% content-ref url="/spaces/WiMBYtzwiSH61Xlgx0W1/pages/zdKvuD2l2qDSyUt4TUuf" %}
[FoxyProxy](/proxies/integrations/browsers/foxyproxy)
{% endcontent-ref %}


# AI Integrations

Connect GoProxies with AI frameworks and automation tools to power your workflows. Whether you're building scraping pipelines, orchestrating agents, or feeding data into LLM-driven applications, this section covers how to get GoProxies working within those setups.

#### Available Integrations

* **n8n** — A workflow automation platform that blends no-code simplicity with the flexibility of code, with native AI capabilities and a wide range of integrations. Read here.
* **Flowise** — A no-code platform for building LLM-powered workflows and AI agents. Read here.
* **LangChain** — A framework for building LLM-powered applications and agents. Read here.


# Flowise

Flowise is a no-code platform for building LLM-powered workflows and AI agents. This guide shows how to route Flowise's backend requests through GoProxies using environment variables.

#### Requirements

Before getting started, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.
* Flowise is installed and running. If not, you can get started [here](https://docs.flowiseai.com/getting-started).

#### Proxy Setup

Flowise routes all backend requests through a proxy via environment variables. Set the following when starting Flowise:

```
GLOBAL_AGENT_HTTP_PROXY=http://customer-your_username_here:your_password@proxy.goproxies.com:1080
GLOBAL_AGENT_HTTPS_PROXY=http://customer-your_username_here:your_password@proxy.goproxies.com:1080
```

{% hint style="info" %}
To target a specific country, append `-country-country_abbreviation` after your username, e.g. `customer-exampleuser-country-us`, as covered in our [proxy parameters article](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters).
{% endhint %}

If you're running Flowise via **npx**, pass the variables inline:

```
GLOBAL_AGENT_HTTP_PROXY=http://customer-your_username_here:your_password@proxy.goproxies.com:1080 npx flowise start
```

If you're running Flowise via **Docker**, add them to your `.env` file inside the docker folder:

```
GLOBAL_AGENT_HTTP_PROXY=http://customer-your_username_here:your_password@proxy.goproxies.com:1080
GLOBAL_AGENT_HTTPS_PROXY=http://customer-your_username_here:your_password@proxy.goproxies.com:1080
```

#### Verify the Connection

In Flowise, add an **HTTP Request** node to a workflow and set the URL to `https://ip.goproxies.com`. Run the flow — if the response returns an IP that reflects your proxy location, you're all set.


# LangChain

LangChain is a popular framework for building LLM-powered applications and agents. This guide shows how to route your LangChain requests through GoProxies, which is particularly useful for web scraping tools, search integrations, and agent workflows.

#### Requirements

Before getting started, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.
* Python is installed on your machine.

#### Proxy Setup

LangChain picks up proxy settings from environment variables. Set these before running your application:

```
HTTP_PROXY=http://customer-your_username_here:your_password@proxy.goproxies.com:1080
HTTPS_PROXY=http://customer-your_username_here:your_password@proxy.goproxies.com:1080
```

Or set them directly in your Python script before importing LangChain:

python

```python
import os
os.environ["HTTP_PROXY"] = "http://customer-your_username_here:your_password@proxy.goproxies.com:1080"
os.environ["HTTPS_PROXY"] = "http://customer-your_username_here:your_password@proxy.goproxies.com:1080"
```

{% hint style="info" %}
To target a specific country, append `-country-country_abbreviation` after your username, e.g. `customer-exampleuser-country-us`, as covered in our [proxy parameters article](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters).
{% endhint %}

#### Verify the Connection

Add a quick request to `https://ip.goproxies.com` in your script using LangChain's `RequestsGetTool` or a simple `requests` call — if the returned IP reflects your proxy location, you're all set.


# n8n

n8n is a workflow automation platform that lets you connect apps, APIs, and AI tools into automated pipelines — with or without code. This guide shows how to route your n8n HTTP requests through GoProxies.

#### Requirements

Before getting started, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.

#### Proxy Setup

1. Create an account and log into [n8n](https://n8n.io/).
2. Open an existing workflow or create a new one.
3. Add an **HTTP Request** node.
4. Configure the node with the URL you want to send requests to.
5. Scroll down to **Options** and find the **Proxy** field.
6. Enter your proxy in the following format:

```
http://customer-your_username_here:your_password@proxy.goproxies.com:1080
```

{% hint style="info" %}
To target a specific country, append `-country-country_abbreviation` after your username, e.g. `customer-exampleuser-country-us:your_password@proxy.goproxies.com:1080`, as covered in our [proxy parameters article](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters).
{% endhint %}

7. Click **Execute node** to run a test request.

#### Verify the Connection

Set the HTTP Request node URL to `https://ip.goproxies.com` and execute it. If the response returns an IP that reflects your proxy location, you're all set.


# Operating Systems


# Android

How to set up GoProxies with your Android.

#### Requirements

Before getting started, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.

#### Wi-Fi Setup

{% hint style="info" %}
&#x20;Steps may vary slightly depending on your Android version and device model.
{% endhint %}

{% hint style="info" %}
This method only works with browsers. If you need apps to route through the proxy, use the Mobile Data Setup below.
{% endhint %}

1. Open **Settings** and go to **Connections** or **Network & Internet**. ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FhOMCpAuGo8iKgcS10Gfu%2Fimage.png?alt=media\&token=0b7a75f7-64a9-49cf-ab0d-0e04b261d07a)![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FLRGWlLlEyoVxboildYtG%2Fimage.png?alt=media\&token=2db9eac1-dff5-4d1a-8522-1a648e2b05e2)
2. Tap **Wi-Fi**, select your connected network, then tap the gear icon.![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FOZAyyG7T4jGVUSh9XM07%2Fimage.png?alt=media\&token=e221ff41-30c3-4d40-8004-0583855bb3da)
3. Open **Advanced Settings** — this may also appear as **Modify network** or **View more** depending on your device.
4. Under **Proxy**, select **Manual**.\
   ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F97IiFaYbZN0YNz5V5VL9%2Fimage.png?alt=media\&token=59752739-9bd8-4784-bf57-9d583365d90b)
5. Fill in the following:
   * **Proxy hostname:** `proxy.goproxies.com`
   * **Proxy port:** `1080`
6. Tap **Save**.

#### Verify the Connection

Open a browser and go to [ip.goproxies.com](https://ip.goproxies.com). If prompted for credentials, enter your subuser username and password and tap **Sign In**. If the IP shown reflects your proxy location, you're all set.\
![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F4C7O3YSXVQHr9CZRku44%2Fimage.png?alt=media\&token=1b5b5ad5-90cb-4f24-8525-3be171fd756f)![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FSoWO7mS05yXawU6c19x2%2Fimage.png?alt=media\&token=a7e681fa-b6ee-4b5a-aad1-74ac696af35f)

***

#### Mobile Data Setup

{% hint style="info" %}
Steps may varyslightly depending on your Android version and device model.
{% endhint %}

1. Go to **Settings → Connections** (or **Network & Internet**) **→ Mobile Networks**.
2. Tap **Access Point Names (APN)** and select your active APN.
3. Fill in the following:
   * **Proxy:** `proxy.goproxies.com`
   * **Port:** `1080`
4. Enter your credentials:
   * **Username:** `customer-your_username_here`
   * **Password:** your proxy password
5. Tap the three vertical dots in the top-right corner and select **Save**.
6. Toggle **Mobile Data** off and back on to apply the changes.

#### Verify the Connection

Open a browser and go to [ip.goproxies.com](https://ip.goproxies.com). Enter your credentials if prompted, then confirm the IP reflects your proxy location.


# iOS

This guide covers how to set up a proxy on Wi-Fi for iPhone and iPad.

### Requirements

Before getting started, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.

### Wi-Fi Setup

{% hint style="info" %}
This method only works with browsers. Apps won't route through the proxy this way. iOS also only supports `HTTP` proxies on Wi-Fi.
{% endhint %}

1. Make sure you're connected to a Wi-Fi network and open **Settings**.
2. Tap **Wi-Fi** and select your connected network.
3. Scroll down to the **HTTP Proxy** section and tap **Configure Proxy**.
4. Switch to **Manual**.
5. Fill in the following:
   * **Server:** `proxy.goproxies.com`
   * **Port:** `1080`
6. Enable **Authentication** and enter your credentials:
   * **Username:** `customer-your_username_here`
   * **Password:** your proxy password

{% hint style="info" %}
&#x20;If you're using IP whitelisting, you can skip the authentication step entirely.
{% endhint %}

7. Tap **Save**.
8. If a pop-up appears asking for credentials, tap **Settings** and re-enter your proxy authentication details.

#### Verify the Connection

Open a browser and go to [ip.goproxies.com](https://ip.goproxies.com). If the IP shown reflects your proxy location, you're all set.

#### Disable the Proxy

To turn the proxy off, go back to **Configure Proxy**, select **Off**, and tap **Save**.


# Linux

Linux comes in many distributions, so this guide focuses on a system-wide proxy setup that applies broadly across them.

### Requirements

Before getting started, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.

### Proxy Setup

1. Open **Terminal**.
2. Sign in as a root user.
3. Open the `/etc/environment` file with `nano`.
4. In the text editor, configure your proxy as follows:

```
http_proxy="http://proxy.goproxies.com:1080"
https_proxy="http://proxy.goproxies.com:1080"
no_proxy="localhost"
```

{% hint style="info" %}
If you need authentication, use the format `http://username:password@proxy.goproxies.com:1080`. You can also target a specific country by appending `-country-country_abbreviation` to your username, e.g. `customer-exampleuser-country-us`, as covered in our [proxy parameters article](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters).
{% endhint %}

5. Press `CTRL + X`, then `Y` to save, and `ENTER` to confirm the file location.
6. Lock the file with `chattr +i /etc/environment` and reboot your machine. Skipping this step may cause your proxy settings to reset.

{% hint style="info" %}
To unlock the file later, use `chattr -i /etc/environment`.
{% endhint %}

### Verify the Connection

Open a browser and go to [ip.goproxies.com](https://ip.goproxies.com). If the IP shown reflects your proxy location, you're all set.


# macOS

Set up proxies directly on macOS for Apple laptops and desktops.

### Requirements

Before getting started, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.

### Proxy Setup

1. Click the **Apple** icon in the top-left corner and select **System Settings**.
2. Navigate to **Network** and select **Wi-Fi**.
3. Choose your Wi-Fi connection and click **Details**.
4. Select **Proxies** from the left panel.
5. Choose your protocol — `HTTP`, `HTTPS`, or `SOCKS`.
6. Fill in the following:
   * **Server:** `proxy.goproxies.com`
   * **Port:** `1080`
7. Toggle on **Proxy server requires password** and enter your credentials:
   * **Username:** `customer-your_username_here` — to target a specific country, append `-country-country_abbreviation` after your username, e.g. `customer-exampleuser-country-us`, as covered in our [proxy parameters article](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters)
   * **Password:** your proxy password
8. Click **OK**.

### Verify the Connection

Open a browser and go to [ip.goproxies.com](https://ip.goproxies.com). If prompted for credentials, enter your subuser username and password. If the IP shown reflects your proxy location, you're all set.


# Windows

Set up proxies directly on the Windows operating system.

### Requirements

Before getting started, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.

### Proxy Setup

{% hint style="info" %}
This guide covers both Windows 10 and Windows 11.
{% endhint %}

1. Press `Windows + I` to open **Settings**.
2. Navigate to **Network & Internet**.
3. Click **Set up** under the **Manual proxy setup** section.
4. Enable **Use a proxy server**.
5. Fill in the following:
   * **Proxy IP address:** `proxy.goproxies.com`
   * **Port:** `1080`
6. Check **Don't use the proxy server for local (intranet) addresses**.
7. Click **Save**.

#### Verify the Connection

Open a browser and go to [ip.goproxies.com](https://ip.goproxies.com). If prompted for credentials, enter your subuser username and password. If the IP shown reflects your proxy location, you're all set.

#### Common Issues

{% hint style="info" %}
**SOCKS5:** Windows 10 and 11 don't support `SOCKS5` natively. If you need SOCKS5, use a browser or third-party tool that supports it, such as [Mozilla Firefox](https://www.mozilla.org/firefox/) or the [FoxyProxy extension](https://getfoxyproxy.org/).
{% endhint %}


# Browsers


# Chrome

Chrome Browser's GoProxies Proxy Setup Guide

### Intro

This page will explain how to connect your proxies directly on your Chrome Web browser settings without the need of any addons.

### Requirements

To have GoProxies work in your browser, ensure that:<br>

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Setup

1. Open Google Chrome.
2. Click the three vertical dots ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FSSc9Vkre6LA7UCsFicUm%2Fimage.png?alt=media\&token=09bd3efa-9af9-48f2-8e39-acacf3f3ea1f) in the top right of the browser.
3. Select Settings.
4. Go to the Systems tab on the left.
5. Click "Open your computer's proxy settings"

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2Fg3PzciPNJZuHs4JtWKjE%2Fimage.png?alt=media&amp;token=a8c9fc47-c51c-4f60-9138-487d43342724" alt=""><figcaption></figcaption></figure>

You will be redirected to the system configuration screen. This step will vary depending on your operating system (Windows or MacOS)

### macOS Setup

1. Select HTTP, HTTPS, or SOCS protocol
2. Fill in the following fiellds:

* Server: proxy.goproxies.com, or replace 'proxy' with one of the regions: proxy-america, proxy-europe, proxy-asia for Americas, Europe and Africa, Asia and Oceania, respectively.
* Port: 1080

3. Set up the Authentication

* Toggle on Proxy server requires password
* Username: Proxy username
* Password: Proxy password

4. Click OK.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FKF0fofjTNuOj2pZsrs2J%2Fimage.png?alt=media&amp;token=82fdc831-e0e5-4494-8129-899b9386e561" alt=""><figcaption></figcaption></figure>

### Windows Setup

{% hint style="info" %}
SOCKS5 Support\
\
Windows 10 and Windows 11 don't support SOCKS5 natively. You may alternatively use a web browser or a third-party tool that includes SOCKS5 support, e.g Mozilla Firefox or FoxyProxy Extension
{% endhint %}

1. Enable Use a proxy server
2. Fill in the following fields:

* Proxy IP Address - proxy.goproxies.com, or replace 'proxy' with one of the regions: proxy-america, proxy-europe, proxy-asia for Americas, Europe and Africa, Asia and Oceania, respectively.&#x20;
* Port: 1080

3. Check "Don't use the proxy server for local (intranet addresses)
4. Click Save.

### Verify The Connection

* Open the Chrome browser and visit ip.goproxies.com
* You may be prompted to enter credentials. Enter the previously specified proxy username and password.
* If successful, your IP address will reflect the location of the proxy.


# Edge

Edge Browser's Proxy Setup Guide

Intro

This page will explain how to use proxies through the Microsoft Edge browser without the need of any add

### Requirements

* Make sure no other VPNs or proxies are active.
* Our proxy endpoint and port, which is proxy.goproxies.com:1080, or instead of 'proxy', make it proxy-america, proxy-europe or proxy-asia for Americas, Europe and Africa, and Oceania respectively if you're only planning to use those regions, as automatic routing of 'proxy' endpoint will be redundant for you then.
* Your goproxies API User (Also called sub-user) username and password.

### Edge System Settings

{% hint style="info" %}
Navigate to the System and performance / System section using this link in the Edge browser's URL field (also called the address field).<br>

> ```undefined
> edge://settings/system/manageSystem#ProxySettings&1
> ```

{% endhint %}

1. Open Microsoft Edge
2. Click the **three horizontal dots** <img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FKWcKc5s9XPnVDC4vfjOr%2Fimage.png?alt=media&amp;token=89beba19-bf57-457f-8521-39a161aa23f6" alt="" data-size="line">in the top right.
3. Select **Settings**.
4. Go to the **System and performance** tab.
5. Select **Proxy Settings**.
6. Finally, click **Open proxy settings.**

* You will be redirected to the system configuration screen. This step will vary depending on your operating system - **Windows** or **macOS**

### macOS Setup

1. Select HTTP, HTTPS, or SOCS protocol
2. Fill in the following fiellds:

* Server: proxy.goproxies.com, or replace 'proxy' with one of the regions: proxy-america, proxy-europe, proxy-asia for Americas, Europe and Africa, Asia and Oceania, respectively.
* Port: 1080

3. Set up the Authentication

* Toggle on Proxy server requires password
* Username: Proxy username
* Password: Proxy password

4. Click OK.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FKF0fofjTNuOj2pZsrs2J%2Fimage.png?alt=media&amp;token=82fdc831-e0e5-4494-8129-899b9386e561" alt=""><figcaption></figcaption></figure>

### Windows Setup

{% hint style="info" %}
SOCKS5 Support\
\
Windows 10 and Windows 11 don't support SOCKS5 natively. You may alternatively use a web browser or a third-party tool that includes SOCKS5 support, e.g Mozilla Firefox or FoxyProxy Extension
{% endhint %}

1. Enable Use a proxy server
2. Fill in the following fields:

* Proxy IP Address - proxy.goproxies.com, or replace 'proxy' with one of the regions: proxy-america, proxy-europe, proxy-asia for Americas, Europe and Africa, Asia and Oceania, respectively.&#x20;
* Port: 1080

3. Check "Don't use the proxy server for local (intranet addresses)
4. Click Save.

### Verify The Connection

* Open the Edge browser and visit ip.goproxies.com
* You may be prompted to enter credentials. Enter the previously specified proxy username and password.
* If successful, your IP address will reflect the location of the proxy.


# Firefox

Firefox Browser Proxy Setup

Set up GoProxies directly from your Firefox browser.

### Requirements

* Make sure no other VPNs or proxies are active.
* Our proxy endpoint and port, which is proxy.goproxies.com:1080, or instead of 'proxy', make it proxy-america, proxy-europe or proxy-asia for Americas, Europe and Africa, and Oceania respectively if you're only planning to use those regions, as automatic routing of 'proxy' endpoint will be redundant for you then.
* Your goproxies API User (Also called sub-user) username and password.

### Proxy Setup

**Step 1.** Open Firefox.

**Step 2.** Click the **three horizontal bars** in the top right.

**Step 3.** Then, click **Settings**.

\
![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FbUBZs3ZAzKW2vgdkA2nD%2Fimage.png?alt=media\&token=31ce84ad-7796-44d1-b6f1-4ee716ffaf0d)

**Step 4.** In the **General** tab, scroll down to the **Network Settings** section and click **Settings...**.

**Step 5.** Select **Manual proxy configuration**.

**Step 6.** Fill in the following fields:

* **HTTP Proxy - proxy.goproxies.com**
* **Port** - 1080
* Check **Also use this proxy for HTTPS**.

{% hint style="info" %}
Alternatively, you can set up a **`SOCKS5`** proxy in the **SOCKS Host** field.

* If so, also check **SOCKS v5**.
  {% endhint %}

**Step 8.** You'll be prompted to enter credentials

* **Username**: Proxy username, in this case appended with "customer-", so customer-yourusername
* **Password**: Proxy password.

> #### Verify the Connection
>
> * Open the Firefox browser and visit [ip.goproxies.com](https://ip.goproxies.com/). If successful, your IP address will reflect the location of the proxy.
>
> #### <br>


# Safari

Safari Browser Proxy Setup GUide

Use GoProxies through the **Safari** browser by setting them up directly on your device.<br>

### Requirements

* Make sure no other VPNs or proxies are active.
* Our proxy endpoint and port, which is proxy.goproxies.com:1080, or instead of 'proxy', make it proxy-america, proxy-europe or proxy-asia for Americas, Europe and Africa, and Oceania respectively if you're only planning to use those regions, as automatic routing of 'proxy' endpoint will be redundant for you then.
* Your goproxies API User (Also called sub-user) username and password.

### Safari Advanced Settings

**Step 1.** Open Safari.

**Step 2.** Click **Safari** in the top left.

**Step 3.** Then, click **Settings**.

**Step 4.** In the **Advanced** tab, next to **Proxies:**, click **Change Settings...**.

**Step 5.** Select the protocol: **`HTTP`**, **`HTTPS`**, or **`SOCKS`**.

**Step 6.** Fill in the following fields:

* **Server** field - proxy.goproxies.com, or the continent ones mentioned in Requirements earlier.
* **Port** - 1080

**Step 7.** Set up the authentication

* Toggle on **Proxy server requires password**.
* **Username**: Proxy username.
* **Password**: Proxy password.

**Step 8.** Click **OK**.

#### Verify the Connection

* Open the Safari browser and visit [ip.goproxies.com](https://ip.goproxies.com).
* You may be asked to enter credentials if you're not on a whitelisted IP. Enter the proxy username and password you previously specified.
* If successful, your IP address will reflect the location of the proxy

### <br>


# Opera

Opera Proxy Setup Guide

### Requirements

* Make sure no other VPNs or proxies are active.
* Our proxy endpoint and port, which is proxy.goproxies.com:1080, or instead of 'proxy', make it proxy-america, proxy-europe or proxy-asia for Americas, Europe and Africa, and Oceania respectively if you're only planning to use those regions, as automatic routing of 'proxy' endpoint will be redundant for you then.
* Your goproxies API User (Also called sub-user) username and password.

### Proxy Setup

1. Open Opera on your computer.
2. Click on **Settings**☰ icon, scroll down, and click **Go to full browser settings**.
3. Scroll down, and click on the **Advanced** button.
4. Scroll down to **System**, and click on **Open your computer's proxy settings**.
5. **Edit your proxy settings.** This step will vary depending on your operating system: **Windows** or **macOS**.

### **Windows**

* Turn on the **Use a proxy server** slider.
* Check **Don't use the proxy server for your local (intranet) network** under **Proxy server**.
* Add endpoint in the **Address section** - proxy.goproxies.com
* Add port in the **Port section -** 1080
* Click **Save**.
* When accessing a website, enter your proxy user credentials.
* Visit [ip.goproxies.com](https://ip.goproxies.com) to check the current IP address and location.

### macOS

* Select the proxy you want to edit on the left side of the page (HTTP/S).
* Add endpoint in the **Address** field - proxy.goproxies.com
* (Optional) Insert proxy **subuser username and password** in the **Username** and **Password** fields.
* Click **OK**.
* Select **Apply**.
* Visit [ip.goproxies.com ](https://ip.goproxies.com)to check the current IP address and location.

\
\ <br>


# Selenium

How to connect to GoProxies using Selenium

Selenium is a tool that helps automate web browser interactions for website testing and more.

To integrate Selenium with GoProxies, you would need to follow the steps below:

* Firstly, you would need to install [**Selenium Wire**](https://github.com/wkeeling/selenium-wire) to extend Selenium's Python bindings, since using the default Selenium module for implementing proxies that require authentication makes it complicated.
* Another package which is recommended for this integration is webdriver-manager. It's a package that simplifies the management of binary drivers for different browsers. In this case, there's no need to manually download a new version of a web driver after each update.

You can install both packages using the following command:

```bash
pip install selenium selenium-wire webdriver-manager
```

{% hint style="info" %}
Note: if using Python 3.13 and you encounter a `blinker._saferef` error, install:

```bash
pip install blinker==1.6.2
```

{% endhint %}

* Specify your account credentials for proxies to work:
  * Firstly, you would need to replace 'your\_username' and 'your\_password' with your credentials.
  * Then you need to specify the endpoint, in this example we're using '`proxy.goproxies.com:1080`'
* The full example of a code should look like this:

```python
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from seleniumwire import webdriver
from webdriver_manager.chrome import ChromeDriverManager

# =========================
# Replace with your details
# =========================
USERNAME = "customer-your_username"
PASSWORD = "your_password"
ENDPOINT = "proxy.goproxies.com:1080"
# =========================


def get_proxy_options(user: str, password: str, endpoint: str) -> dict:
    return {
        "proxy": {
            "http": f"http://{user}:{password}@{endpoint}",
            "https": f"http://{user}:{password}@{endpoint}",
        }
    }


def create_driver():
    chrome_options = webdriver.ChromeOptions()

    # Visible browser is recommended for testing
    # Uncomment the line below if you want headless mode
    # chrome_options.add_argument("--headless=new")

    chrome_options.add_argument("--window-size=1920,1080")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")

    # Optional: reduce page load hanging on heavy JS sites
    chrome_options.page_load_strategy = "eager"

    service = Service(ChromeDriverManager().install())

    driver = webdriver.Chrome(
        service=service,
        options=chrome_options,
        seleniumwire_options=get_proxy_options(USERNAME, PASSWORD, ENDPOINT),
    )

    return driver


def test_proxy():
    driver = create_driver()

    try:
        driver.get("https://ip.goproxies.com/")
        ip = driver.find_element(By.TAG_NAME, "body").text.strip()
        print(f"Your IP is: {ip}")

    finally:
        driver.quit()


if __name__ == "__main__":
    test_proxy()
```

That's it! You've set-up GoProxies via Selenium.

Now run the script by entering the following into your command prompt where the python file is located:

```bash
python your_script_name.py
```

If configured correctly, the script will print the residential IP assigned by GoProxies.

{% hint style="info" %}

* This example uses an HTTP proxy endpoint (:1080)
* For SOCKS5 proxies, use port 10003 and change the scheme to socks5:// .
* Some websites apply advanced bot mitigation. In such cases, using a full browser automation framework (Selenium, Playwright) is recommended over direct HTTP libraries like python's `requests`.
  {% endhint %}


# SmartProxy

How to connect to GoProxies proxy via SmartProxy?

**SmartProxy can be installed -** [**here**](https://chrome.google.com/webstore/detail/smartproxy/jogcnplbkgkfdakgdenhlpcfhjioidoj/related)**.**

Open the SmartProxy extension Settings -> click on "Proxy Servers" and then "Add Server". Give a name to your server, then fill in the rest of the proxy details and click "Save".

{% embed url="<https://www.youtube.com/watch?v=OjGXuySfbQk>" %}

Now your proxy server should be set as default server, so now click on SmartProxy extension icon and choose "Always Enable".

Open our [IP checker](https://ip.goproxies.com/) and see if your IP changed.

{% embed url="<https://www.youtube.com/watch?v=ag7G-yFK68k>" %}

That's it, you're all set!


# IP Burger

How to connect to GoProxies via IP Burger extension?

**IP Burger extension for Chrome can be installed** [**here.**](https://chrome.google.com/webstore/detail/ipburger-proxy-vpn/kchocjcihdgkoplngjemhpplmmloanja)

Click on the IP Burger extension icon in your toolbar and select "Settings" .

In the window that opens up enter your proxy credentials and click "Save".

After that you will see that the status changed to "Protected" and you can also see the new IP address in the same window.

{% embed url="<https://www.youtube.com/watch?v=qnaqY6PlMok>" %}

And that's it, you've successfully connected!


# Puppeteer

How to connect to GoProxies via Puppeteer

Puppeteer is a popular tool for web scraping and parsing.

Below you can find an example of the set-up process

* In Puppeteer, under the ‘proxy-server’, update the proxy server IP and port number (i.e. <https://proxy.goproxies.com:1080>).
* Replace the 'USERNAME' and 'PASSWORD' with your credentials

Here's how a full example of a code should look like:

```
const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    args: ['--proxy-server=https://proxy.goproxies.com:1080']  
});
  const page = await browser.newPage();
    await page.authenticate({
        username: 'USERNAME',
        password: 'PASSWORD'
    });
    await page.goto('https://ip.goproxies.com');
})();
```

And that's it! You've successfully integrated GoProxies on Puppeteer.


# FoxyProxy

**FoxyProxy Standard extension can be installed -** [**here.**](https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/)

Open the FoxyProxy extension and click "Add +". Give a name to your profile and enter your proxy credentials and click "Save".

{% embed url="<https://www.youtube.com/watch?v=-8tEOAl11Wo>" %}

Choose your proxy profile or click on the extension icon and choose a proxy from the list.

Open our [IP checker](https://ip.goproxies.com/) and see what IP you got.

{% embed url="<https://www.youtube.com/watch?v=gxZzg35uqvA>" %}

That's it, you're all set!


# ZeroOmega (Proxy SwitchyOmega 3)

How to connect to GoProxies proxy via  ZeroOmega (Proxy SwitchyOmega 3)

Proxy SwitchyOmega is no longer available because it doesn't follow best practices for Chrome extensions. **Please note** that SwitchyOmega can be found now under the new brand name - **ZeroOmega**.

ZeroOmega (Proxy SwitchyOmega 3) **extension can be installed -** [**here.**](https://chromewebstore.google.com/detail/proxy-switchyomega-3-zero/pfnededegaaopdmhkdmcofjmoldfiped?hl=en)

After the installation open the extension and click "New profile". Give a name to your profile and click "Create".

Then choose protocol HTTP, add the host and port.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FmwqN8hxQHisw7rnDkg0w%2FScreen%20Shot%202025-05-17%20at%2011.24.31.png?alt=media&amp;token=ff4abbe1-5e13-4b79-971b-41e5f2c26acd" alt=""><figcaption></figcaption></figure>

Afterwards click on the lock sign on your right, enter Username (replace the word username in the first line) and Password.

Click Save changes and Apply changes.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FQ4Kjy0Ea0Kk1EvjvXGWK%2FScreen%20Shot%202025-05-17%20at%2011.22.30.png?alt=media&amp;token=13808d78-955b-4365-b3c3-8ced0fced7c2" alt=""><figcaption></figcaption></figure>

To enable proxy, you will need to click on the extension icon and select your profile.

Open our [IP checker](https://ip.goproxies.com/) and you will see the IP you got.

{% embed url="<https://www.youtube.com/watch?embeds_referring_euri=https://www.goproxies.com/&source_ve_path=MjM4NTE&v=-fVr42xEDOs>" %}

Congratulations, you're all set!


# Proxy Managers


# AdsPower

This Page will show how to integrate with AdsPower

Configure your anti-detect browser with GoProxies in minutes. Secure, scale, and make your browsing environments safeguarded against blacklisting or getting your IP address banned.

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Proxy Setup

**Step 1.** [**create**](https://app.adspower.com/registration) an account, and then [**download**](https://www.adspower.com/download/) AdsPower.

**Step 2.** Open the AdsPower app and select **New Profile**.

<img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FhrePGRvc5TvnoVXCoveK%2Fimage.png?alt=media&amp;token=9122f9bd-bd69-4981-9938-8ea1f22426ac" alt="" data-size="original"><br>

**Step 3.** **Name** the profile.

**Step 4.** Select the preferred **Browser** and **OS** type for your profile.

<img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FRJBwjkflM56NnOk0iMH7%2Fimage.png?alt=media&amp;token=f52b1467-a674-424a-9ee8-c1f4ade6ad18" alt="" data-size="original"><br>

**Step 5.** Select the **Proxy type**: **`HTTP`**, **`HTTPS`** or **`SOCKS5`**.

<img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FYQDP0EKR0K3RLVwzw8Re%2Fimage.png?alt=media&amp;token=e81b2fdc-3b65-43e0-97f3-fb2f87c40805" alt="" data-size="original"><br>

**Step 6.** Fill in the **Host:Port, which is proxy.goproxies.com:1080**

**Step 7.** Set up the authentication:

* **Username**: Proxy username. (just remember to add customer- before your username)
* **Password**: Proxy password.

**Step 8.** You can also click **Check Proxy** to test the connection.

**Step 9.** When you're done, click **OK** to save the profile.

<img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FmFcLbZ0n1PORDbuPzDSz%2Fimage.png?alt=media&amp;token=766d9215-cfd1-4e0b-8794-6e4ec9bc3aec" alt="" data-size="original"><br>

**Step 10.** In the Profile tab press **Open** to launch the Browser profile.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FWkfJD66IFOwduFkqSGqK%2Fimage.png?alt=media&amp;token=e54a58b4-d909-4624-9ca4-666608285753" alt=""><figcaption></figcaption></figure>

#### Verify the Connection

* Once you launch a profile, AdsPower will open a webpage displaying the proxy IP, profile details, and browser fingerprint details. To get the latest IP information, please visit [ip.goproxies.com](https://ip.goproxies.com). If successful, your IP address will display the proxy's location.

<br>


# BitBrowser

BitBrowser Proxy Setup Guide

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Proxy Setup

1. Create an account [**on this page**](https://client.bitbrowser.cn/register?lang=en).
2. [**Download**](https://www.bitbrowser.net/download/) BitBrowser on your device.
3. Open up the **BitBrowser** app and log into your BitBrowser account.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F6ZpE2aLmR1PBezvM9HIY%2Fimage.png?alt=media&amp;token=df54bdef-e5a1-48d1-aeb2-78b2a2f00d8f" alt=""><figcaption></figcaption></figure>

4. Navigate to the Browser Profiles tab and click **"Add"** to add a new profile/proxy:
5. The settings tab will appear on the right side; scroll down until you find **Proxy** and select the appropriate proxy type:

* All the special settings you can select for this browser can be viewed on this page [**here**](https://doc.bitbrowser.net/).

6. Input the proxy details/endpoint into the correct fields, and choose the **Proxy Type** (`HTTP`, `HTTPS`, or `SOCKS5`). Next, the proxy details can be found on your Decodo dashboard. Here's an example for **residential** proxies:
   * **Host:** `proxy.goproxies.com`
   * **Port:** `1080`
   * **Username:** Input your proxy username (just make sure to add customer- before your username)    &#x20;
   * **Password:** Input your proxy password
   * You can go into advanced options and customize your browser fingerprint if needed.
7. Once input, you can double-check if the proxy works by clicking **"Check proxy"**:
8. Click **"Confirm"** in the bottom right corner. The profile should be saved, and that's it.

### Verify the Connection

Visit ip.goproxies.com. If proxy setup was successful, your IP address will display the proxy IP adddress.<br>


# Dolphin Anty

How to connect to GoProxies using Dolphin Anty

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Walkthrough

1. Create an account on [this page](https://dolphin-anty.com/panel/#/auth/registration) and then download Dolphin Anty app from [here](https://dolphin-anty.com/download/).

2. Open the app and click **Create Profile** or the Plus **(+)** button on the top.

3. Give a name to your browser profile under "Profile name".

4. Click **New Proxy** on the bottom of the window.                   &#x20;

   <figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2Fm03G7uWHlUMT2We4Ip2C%2Fimage.png?alt=media&amp;token=41b8438f-5a2c-4368-bcd6-3436e0ea6e08" alt=""><figcaption></figcaption></figure>

5. Select HTTP or SOCKS5

6. Populate the proxy and authentication fields with&#x20;

* <http://customer-username:password@proxy.goproxies.com:1080> or socks5://customer-username:<password@proxy.goproxies.com>:10003 (if needed, appending the country tag to username as per our country [guide](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters/country)

7. Click **Create Profile** on the bottom right\
   ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FcYYukWl2BcckqizAJmHH%2Fimage.png?alt=media\&token=07c28e4a-6194-4667-ae42-c7b0fe1d8b43)
8. In the All profiles section, select ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FxKd0jR8RayFYQAo78UL7%2Fimage.png?alt=media\&token=87e12982-3699-4263-9a6d-eb34103520ce) next to your new profile name to open it.

### Verifying Connection

Visit [ip.goproxies.com](/proxies/faq/static-residential-proxies/which-locations-goproxies-covers-with-static-residential-proxies) and if successful, your new IP will display the location of the proxy.


# Geelark

How to connect to GoProxies using Geelark?

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Walkthrough

1. Sign up to their service [here](https://app.geelark.com/#/register).
2. Download the app [on this page](https://www.geelark.com/download-center/).
3. Open the app.
4. Click Profiles on the top left to see your current profiles.&#x20;
5. On the top right, choose New Profile

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FwPpWBl427gAS0Q1iGqv0%2Fimage.png?alt=media&amp;token=045edebc-b03e-41bd-8080-c80d03a7dbda" alt=""><figcaption></figcaption></figure>

6. Name the profile and choose the operating system
7. Scroll down to **Proxy Settings** and select **Custom**
8. Pick **Type** as HTTP or Socks5

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FTxoD5KMOVm34wkbVkux5%2Fimage.png?alt=media&amp;token=0a2be821-f94c-418f-9d03-64520c5413e2" alt=""><figcaption></figcaption></figure>

9. Scroll down and input the proxy details:

* ip/Host: proxy.goproxies.com:1080, or instead of 'proxy', make it proxy-america, proxy-europe or proxy-asia for Americas, Europe and Africa, and Oceania respectively if you're only planning to use only that specific regions, otherwise automatic routing of global 'proxy' endpoint will be adding unnecessary latency for you.
* Port: 1080
* Username: enter customer-your\_username\_here (if you want to target specific countries or states as per our [proxy parameters articles](/proxies/rotating-residential-proxies/proxy-parameters), append -country-country\_abbreviation **after** the username, e.g customer-exampleuser-country-us
* Press **Check Proxy a**nd see if you're receiving an IP address as per the screenshot below:

  <figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FTLyrhxoP65LUYMl6VYwW%2Fimage.png?alt=media&amp;token=f39207a3-0102-42dd-9a71-a32333d9c6c9" alt=""><figcaption></figcaption></figure>

10. Click **OK** at the bottom to save the settings of your profile.You Should be redirected back to the **Profiles** page whre you'll see your newly created profile as a tile.&#x20;
11. Hover over the tile and press the **Start** button that appears there.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FDjK6hGZkrB3o5tBml6Om%2Fimage.png?alt=media&amp;token=7c68dcc4-ac25-4be4-9db5-0be87d884533" alt=""><figcaption></figcaption></figure>

And you're done! Verify the connection by going to ip.goproxies.com where you should receive a proxy IP address.


# GoLogin

How to setup GoLogin to work with GoProxies

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Proxy Setup

1. Go to GoLogin website and create an account [here](https://gologin.com/).
2. Open GoLogin and click **Add profile** on the top-left of the screen.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2Fs4igxhVMDOoSYzPPaMIk%2Fimage.png?alt=media&amp;token=f903b0a2-1606-4bdd-83b0-5d1085940b9f" alt=""><figcaption></figcaption></figure>

3. Give a name to your profile.
4. Select Your Proxy below.
5. Skip **Auto** for now, and enter:

* IP Address: proxy.goproxies.com
* Port: 1080
* Login: enter customer-your\_username\_here (if you want to target specific countries or states as per our [proxy parameters articles](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters), append -country-country\_abbreviation **after** the username, e.g customer-exampleuser-country-us
* Password: proxypassword

6. Press **Check Proxy** at the bottom

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FRFy0PlnqQt2mPE9SOp5j%2Fimage.png?alt=media&amp;token=ac3dbd46-f405-417e-833b-5598ff190afd" alt=""><figcaption></figcaption></figure>

7. You should be able to switch the proxy type now:\
   ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FUVCPZp2d5ia43EOMBRWG%2Fimage.png?alt=media\&token=38f3bfb1-abc7-4a3e-9138-6963546bca12)
8. Click **Create Profile**
9. You should be directed back to the Profile Management section. Here, press the **Run** button next to the profile name as it appears in the proxy list:

   <figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F05hxngm6hp2ZDQjdHAEm%2Fimage.png?alt=media&amp;token=fa5abde7-37a3-421b-bdf6-a62902dcab3e" alt=""><figcaption></figcaption></figure>

### Verify the Connection

Open the browser and go to [ip.goproxies.com](https://ip.goproxies.com). If you've done everything correctly, the IP address should now display the proxy location.&#x20;


# Hidemyacc

How to connect to GoProxies using Hidemyacc

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Walkthrough

1. Download the Hidemyacc app and create an account through it.
2. Sign in to your Hidemyacc
3. Click **Create new profile at the center of the screen, since you don't have any listed here. Otherwise, click the**![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FngPln74YheRSosYUMzq6%2Fimage.png?alt=media\&token=98760c21-582e-4a96-90d6-2cb4a749c2c0) **sign on the top left**:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FN0yYk3P73pT9dpVUWOX9%2Fimage.png?alt=media&amp;token=4e73b324-9168-4266-a1aa-8b4bda82c117" alt=""><figcaption></figcaption></figure>

4. The Overview page will display the settings for your operating system and browser. Select the appropriate ones. For the documentation on advanced features, see their [official documentaion page](https://docs.hidemyacc.com/?_gl=1*33wbwq*_gcl_au*MzAwMTI1NDEuMTcyNjIwMTA3Nw..*_ga*NjA4MDk0NzM3LjE3MjYyMDEwNzc.*_ga_N9X6D2Y20T*MTcyODg3NjMzMi4yLjEuMTcyODg3Njk0NC41OS4wLjA.):\
   ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FcqeXqKQ01KiTdlHULDx6%2Fimage.png?alt=media\&token=74a23eae-2f40-4203-a8b3-5f5e22447742)
5. Go to **Proxy** on the top left
6. Select **Your Proxy** on the top.
7. Populate these fields:

* Connection type: **HTTP**, or **Socks5**.
* Quick Add: proxy.goproxies.com:1080:your\_proxy\_username:your\_proxy\_password (username has to have customer- prefixed, fro example: customer-your\_proxy\_username)
* Enter Proxy information below:&#x20;
  * IP Address/Host: proxy.goproxies.com
  * Port: 1080 (or 10003 for Socks5)
  * Username: enter customer-your\_username\_here (if you want to target specific countries or states as per our [proxy parameters articles](/proxies/rotating-residential-proxies/proxy-parameters), append -country-country\_abbreviation **after** the username, e.g customer-exampleuser-country-us
  * Password: your\_proxy\_password

8. Press **Check Proxy**. If you've entered the correct credentials and your proxy is valid, it will display the proxy IP address next to it at the bottom:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FPv0tRSIihtoWU5Q2I7KZ%2Fimage.png?alt=media&amp;token=34d92b27-10fa-4170-920e-6d2f9d38e888" alt=""><figcaption></figcaption></figure>

9. Press **+ Create** on the top right.
10. You'll be redirected to the **Profiles** page again where you will see the newly created profile now. Press ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FWes9PlC2SCsVyPzjyEy8%2Fimage.png?alt=media\&token=bdbd9a13-1962-43ee-bcbc-e40aa5ec0290) at the right edge of the profile to start your proxy:

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FnPz2lxXxlovIQOROgPra%2Fimage.png?alt=media&amp;token=b6980b5d-1d04-4c24-afad-bbeb154108b9" alt=""><figcaption></figcaption></figure>

11. It will say ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2Fh0efugSYqe0ND1nbnovg%2Fimage.png?alt=media\&token=2fc6ce0d-78a9-4ade-b8bb-cf05b5bb70ec) and prepare everything before opening up your browser that you selected back in the **Overview** page.

### Verify the connection

Navigate to ip.goproxies.com. If you've connected to the proxy correctly, it should show you the new proxy address.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FHammumQbkLEQHCOoRHZk%2Fimage.png?alt=media&amp;token=9e3b06e7-0351-41f1-9b10-4cc0252fa857" alt=""><figcaption></figcaption></figure>


# Incognition

How to use GoProxies with Incognition

Incognition is a proxy manager that allows you to manage many profiles that launch their own cutom and independent browsers with it's own cookies and other website data.

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Walkthrough

1. [Sign up](https://incogniton.com/my-account/) on the Incognition signup page.
2. Download the Incognition proxy manager here: [download](https://incogniton.com/download-incogniton/)
3. Install and launch the app.
4. Go to Profile Management and press&#x20;
5. at the top of the screen.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FfDO1Yfj0mvJZQWH4ABp9%2Fimage.png?alt=media&amp;token=490a74de-0b3a-4d22-80eb-7d311a9c4375" alt=""><figcaption></figcaption></figure>

6. On the left, go to the Proxy -> Custom Proxy
7. Set HTTP or Socks5
8. Proxy: (ip:port): proxy.goproxies.com:1080, or instead of 'proxy', make it proxy-america, proxy-europe or proxy-asia for Americas, Europe and Africa, and Oceania respectively if you're only planning to use only that specific regions, otherwise automatic routing of global 'proxy' endpoint will be adding unnecessary latency for you. You also need to specify the country and session stickiness here if you're using those as per [Proxy Parameters](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters) guide.
9. Proxy username: customer-your\_proxy\_username
10. Proxy password: your proxy password
11. (Optional) Click **Check Proxy** on the bottom to see if you've configured it correctly and you're receiving a proxy IP Address (it's going to be shown on the right)\
    \
    ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FPuEIWH3HeifI8olyAgOp%2Fimage.png?alt=media\&token=374e7a4e-3893-45fe-957a-f42373502d98)
12. Check the other options on the left, for example **Overview** where you can specify what operating system you're using
13. Once you're finished, press "Create Profile" on the very right of the page

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FnDcaEmERj0UHMSRkUeRD%2Fimage.png?alt=media&amp;token=72ae0fec-008b-4e29-a765-c5d35e8c6c73" alt=""><figcaption></figcaption></figure>

14. You Will be redirected to the **Profile Management** Screen where you will see your newly-created profile. Press **Start** on it's right end to launch it.

### Confirm Connectivity

When in the new browser, go to [ip.goproxies.com.](https://ip.goproxies.com) If you've correctly set it up, you will see a proxy ip there.


# ixBrowser

How to set up GoProxies with ixBrowser

In this guide, we'll cover how to configure your GoProxies proxies within IXBrowser, ensuring each browser profile is assigned its own dedicated IP address.

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Proxy Setup

1. Sign up to their service by creating an account [here](https://ixbrowser.com/register)
2. Download ixBrowser to your device [here](https://ixbrowser.com/en)
3. Log into your account and click on the Browser Profile on the top left.
4. Select **Create Profile**
5. Click **Proxy Configuration**
6. Under **Proxy Method** Select **Custom**
7. Choose **Proxy Type** as **HTTP, HTTPS** or **Socks5**

* **Host:** proxy.goproxies.com
* **Port:** 1080 (or 10003 if Socks5)
* **Proxy Account:** customer-your\_proxy\_account
* **Proxy Password:** your proxy password

8. Press Create on the bottom-right
9. You should be redirected to the **Profile list** page.
10. Press **Open** on the right end of your newly-created profile.

### Confirm Connectivity

When in the new browser, go to [ip.goproxies.com.](https://ip.goproxies.com) If you've correctly set it up, you will see a proxy ip there.


# MoreLogin

How to integrate GoProxies with MoreLogin

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Walkthrough

1. Create an account on their website [here](https://www.morelogin.com/register/).
2. Download MoreLogin to your device [here](https://www.morelogin.com/download/).
3. Open the MoreLogin app.
4. Click on the **+ New Profile** button on the top left.                  ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F9RRuOb9zisg5qo9i6fnX%2Fimage.png?alt=media\&token=74c42712-0d3b-4603-956e-c36ae512df05)
5. At the top, click the **Advanced create** tab and pick the wanted options for your proxy connection to configure the browser (or leave the default settings).      ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F0LPBFlXAbVtCL6kMiLU8%2Fimage.png?alt=media\&token=7de06f7d-66b8-4b01-ac1f-39138ec476e2)
6. Scroll down to the proxy actions section and select **New proxy**.
7. Choose the Proxy Type as HTTPS, HTTP or SOCKS5, then enter the proxy details (your API Username and password, appended with 'customer-', so e.g customer-username.

* Host: proxy.goproxies.com
* Port: 1080
* Proxy Account: customer-yourproxyusername (any country needs to be appended here, e.g customer-yourproxyusername-country-us)
* Proxy Password: enter your proxy password
* &#x20;You can head to the advanced options to customize your settings further if needed.

8. When finished, click **OK** to save the created profile.
9. Go Back to the profile tab and click **Start** to launch your profile and establish a proxy connection, and you're done!

Try visiting ip.goproxies.com to confirm your IP address is now changed.


# Multilogin

How to connect with GoProxies using Multilogin

Multilogin is a paid service tool that allows you to manage many unique browsing profiles.

### Requirements

To have GoProxies work properly in this setup, ensure that:<br>

* No other VPN or proxies are active.
* You have the GoProxies endpoints ready, e.g proxy.goproxies.com:1080, or proxy-america.goproxies.com:1080
* Your GoProxies subuser (also called API User)  username and password.

### Setup

1. Navigate to the Multilogin [**website**](https://multilogin.com/), log in, and click **+ Create**.![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F4h8u3pHEZ2indo6uBESn%2Fimage.png?alt=media\&token=8fcd7e85-641f-4321-98e2-a8aab1e06153)
2. **Give a name to** your browser profile. &#x20;
3. Under **Proxy,** select **Custom.**
4. Choose HTTPS, HTTP or SOCKS5.
5. Fill in the proxy and authentication field:
   * Add Proxy Details: proxy.goproxies.com:1080:username:password;
   * Add more details if needed by pressing **Advanced mode**.
6. Click C**reate Profile**
7. In the **All profiles** section, click **Start** next to your new profile to open it.
8. Once you Start the profile, Multilogin will open a webpage displaying the proxy IP and fingerprint details. To see your IP address, please visit [ip.goproxies.com.](https://ip.goproxies.com) If successful, your IP address will display the proxy's location.

<figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2F2NhGfvV9nDHr98SBNgj3%2Fimage.png?alt=media&amp;token=56a4cc5f-146a-41d6-b05b-d425a32713fe" alt=""><figcaption></figcaption></figure>


# Octo Browser

How to setup Octo Browser to work with GoProxies

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.

### Proxy Setup

1. Download Octo Browser and create an account [here](https://octobrowser.net/).
2. Open the application and click **Create Profile** from the Profiles section.
3. In the **General** tab, give your profile a name.
4. click the **Proxy** field, and select **+ Set a new proxy**.\
   ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FQqexRejNSk3yYl9mnhy3%2Fimage.png?alt=media\&token=dc1b1220-fc93-4cdb-9cca-9a5b5c6031aa)
5. Set the proxy type to **HTTP** and enter the following:
   * **Host:** `proxy.goproxies.com`
   * **Port:** `1080`
   * **Login:** `customer-your_username_here` — to target a specific country, append `-country-country_abbreviation` after your username, e.g. `customer-exampleuser-country-us`, as covered in our [proxy parameters article](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters)
   * **Password:** your proxy password
6. Hit **Check Proxy** to make sure everything is set up correctly, then click **Confirm**.\
   ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FX62Xnars7uNifuu0hZc9%2Fimage.png?alt=media\&token=fd19eff0-edd1-42a9-a485-971b4e5f2f09)
7. Click **Create Profile**, then press ![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FpvG2qWILbo2w6cnPzwzB%2Fimage.png?alt=media\&token=b0a6c234-8c6d-4567-a37e-92afa0adc736) next to the profile to launch the browser:<br>

   <figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FUWizqtFNbk4E5PQ4QLgq%2Fimage.png?alt=media&amp;token=6dbef6c4-6970-46d3-9d8a-04568ec6db1a" alt="" width="563"><figcaption></figcaption></figure>

   \
   \
   This will start up the Octo Browser for you:<br>

   <figure><img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FVQTK5PiSYC70jFmyBx57%2Fimage.png?alt=media&amp;token=d09ff109-9961-4e10-808e-be7f626652f5" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
&#x20;Tick **Save to Proxy Manager** before confirming to save this proxy for future profiles.
{% endhint %}

### Verify the Connection

While using the opened Octo browser, go to [ip.goproxies.com](https://ip.goproxies.com). If the IP shown reflects your proxy location, you're all set.


# VMLogin

### Requirements

To have GoProxies work properly in this setup, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.

### Proxy Setup

1. Download VMLogin and create an account [here](https://www.vmlogin.us/).
2. Open the application and click **New browser profile** from the left-hand menu.<img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FwZGV0IQtmSaXNauPWYdJ%2Fimage.png?alt=media&amp;token=cb38a010-1092-419d-b675-34fd09f5fe20" alt="" data-size="original">
3. Enter a name for your profile in the **Display name** field, then click **Setting proxy server**.![](https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FsU2YSw0AruLkCwtO9p9A%2Fimage.png?alt=media\&token=8fa0b67f-d546-4bd4-86b4-35b872a3bfaf)\ <img src="https://1557565468-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWiMBYtzwiSH61Xlgx0W1%2Fuploads%2FtWC03S6R5GAhNiUZzDUx%2Fimage.png?alt=media&amp;token=d4f9aa3c-a0fc-4b9e-ae42-920d47ca4026" alt="" data-size="original">
4. Select **HTTP** from the proxy type dropdown and fill in the following:
   * **IP address:** `proxy.goproxies.com`
   * **Port:** `1080`
   * **Username:** `customer-your_username_here` — to target a specific country, append `-country-country_abbreviation` after your username, e.g. `customer-exampleuser-country-us`, as covered in our [proxy parameters article](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters)
   * **Password:** your proxy password
5. Click **Test Proxy** — if it returns IP details, you're good. Click **Confirm**, then **Save** to finalize the proxy settings.
6. Once you're happy with the rest of your profile settings, click **Save profile**.

### Verify the Connection

Open the browser and go to [ip.goproxies.com](https://ip.goproxies.com). If the IP shown reflects your proxy location, you're all set.


# Proxifiler

How set up Proxifiler with GoProxies

Proxifier is a network utility for Windows and macOS that routes application traffic through `SOCKS5` and `HTTPS` proxies. It's useful for bypassing firewalls, masking your IP, and controlling exactly which connections go through the proxy.

### Requirements

Before getting started, ensure that:

* No other VPN or proxies are active.
* You have your GoProxies endpoint ready, e.g. `proxy.goproxies.com:1080`
* Your GoProxies subuser (also called API User) username and password.

### Windows Proxy Setup

1. Download Proxifier [here](https://www.proxifier.com/).
2. Open the application and go to **Proxy Servers**.
3. Click **Add** to create a new proxy server.
4. Select the proxy type — `HTTPS` or `SOCKS5`.
5. Enter `proxy.goproxies.com` as the host and `1080` as the port.
6. Check the **Enable** box to set up authentication.
7. Fill in your credentials:
   * **Username:** `customer-your_username_here` — to target a specific country, append `-country-country_abbreviation` after your username, e.g. `customer-exampleuser-country-us`, as covered in our [proxy parameters article](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters)
   * **Password:** your proxy password
8. Click **OK** to save, then **OK** again on the next window.

### Troubleshooting

If you're running into connection issues, try enabling leak prevention:

1. Go to **Profile → Advanced** and enable **DNS and IP Leak Prevention** mode.
2. Click **Yes** to confirm.

### Verify the Connection

Open a browser and go to [ip.goproxies.com](https://ip.goproxies.com). If the IP shown reflects your proxy location, you're all set. If not, try restarting the application.

***

### macOS Proxy Setup

1. Open Proxifier and go to **Proxies**.
2. Click **Add** to create a new proxy server.
3. Enter `proxy.goproxies.com` as the host and `1080` as the port.
4. Select the proxy type — `HTTPS` or `SOCKS5`.
5. Check the **Enable** box to set up authentication.
6. Fill in your credentials:
   * **Username:** `customer-your_username_here` — to target a specific country, append `-country-country_abbreviation` after your username, e.g. `customer-exampleuser-country-us`, as covered in our [proxy parameters article](https://docs.goproxies.com/proxies/rotating-residential-proxies/proxy-parameters)
   * **Password:** your proxy password
7. Click **Save**.

### Verify the Connection

Open a browser and go to [ip.goproxies.com](https://ip.goproxies.com). If the IP shown reflects your proxy location, you're all set. If not, try restarting the application.


# How to rotate proxies in Python?

In this article we will explain how to rotate proxies for web scraping. Rotating proxies will ensure stable sessions so you can reach your desired targets without issues.

### How to start with rotating proxies in Python - installing prerequisites

To get started, you can create a virtual environment by running the following command:

```
virtualenv venv
```

Use the source command to activate your environment on Unix-like operating systems, including Linux and macOS:

```
source venv/bin/activate
```

Install requests module in the current virtual environment you are using:

```
pip install requests
```

Congratulations! You have finished all the steps for  the installation of the requests module!

### Sending GET requests through a proxy

Now, let’s start with the basics. In some cases you might need to connect and use one single IP address or proxy. How do we use a single proxy?These are the essential things that you will need:

* Scheme (e.g., http);
* Endpoint;
* Port (e.g., 1080);
* Username and password to connect to the proxy.

Here is an example how the proxy request should look in this case:

```
https://customer-username:password@proxy.goproxies.com:1080
```

You can also select multiple protocols, as well as specify domains where you would like to use a separate proxy.

Replace `PROXY1`, `PROXY2` with your proxy format as shown in the example below:

```
proxies = {
    'http': 'PROXY1',
    'https': 'PROXY2'
}
```

Make a request using requests.get while providing the variables we created previously:

```
try:
    response = requests.get('https://ip.goproxies.com', proxies=proxies, timeout=10)
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"An error occurred: {e}")
```

Your full script which returns back the IP address should look like this:

```
import requests

proxies = {
    'http': 'http://customer-username:password@proxy.goproxies.com:1080',
    'https': 'https://customer-username:password@proxy.goproxies.com:1080'
}

try:
    response = requests.get('https://ip.goproxies.com', proxies=proxies, timeout=10)
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"An error occurred: {e}")
```

The result of this script will provide you with the IP address of your proxy:

You have now taken care of hiding behind a proxy when making requests through the Python script.\
Let's learn how to rotate through a list of proxies instead of just using one.

```
% python proxy.py 
45.42.JKL.MNO
```

### Rotating proxies using proxy pool

You will work with a list of proxy servers saved as a CSV file called proxies.csv, in which you will list proxy servers as shown below:

```
http://customer-username:password@proxy.goproxies.com:1080
https://customer-username:password@proxy.goproxies.com:1080
http://customer-username:password@proxy-america.goproxies.com:1080
http://customer-username:password@proxy-asia.goproxies.com:1080
http://customer-username:password@proxy-europe.goproxies.com:1080
```

If you want to add more proxies in the file, add each of them in a separate line.

After that, create a Python file and specify the file name and the timeout duration for each single proxy response.

```
TIMEOUT_IN_SECONDS = 10
CSV_FILENAME = 'proxies.csv'
```

Using the code provided, open the CSV file, read each line of proxy servers into the csv\_row variable, and build the scheme\_proxy\_map configuration.&#x20;

This is an example of how it should look:

```
with open(CSV_FILENAME) as open_file:
    reader = csv.reader(open_file)
    for csv_row in reader:
        scheme_proxy_map = {
            'https': csv_row[0],
        }
```

To ensure that everything runs efficiently, we'll use the same scraping code as before, to access the site with proxies.

```
with open(CSV_FILENAME) as open_file:
    reader = csv.reader(open_file)
    for csv_row in reader:
        proxies = {
            'https': csv_row[0],
        }

        try:
            response = requests.get('https://ip.goproxies.com', proxies=proxies, timeout=TIMEOUT_IN_SECONDS)
            print(response.text)
        except requests.exceptions.RequestException as e:
            print(f"An error occurred with proxy {csv_row[0]}: {e}")
```

If you want to scrape content using any working proxy from the list and stop the script after a successful attempt, just add a break after print line to stop going through the proxies in the CSV file:

```
response = requests.get('https://ip.goproxies.com', 
proxies=proxies, timeout=TIMEOUT_IN_SECONDS)
        print(response.text)
        break  # break here to stop going through the proxies
```

Your full updated code should look like this:

```
import requests
import csv

TIMEOUT_IN_SECONDS = 10
CSV_FILENAME = 'proxies.csv'

with open(CSV_FILENAME) as open_file:
    reader = csv.reader(open_file)
    for csv_row in reader:
        proxies = {
            'https': csv_row[0],
        }

        try:
            response = requests.get('https://ip.goproxies.com', proxies=proxies, timeout=TIMEOUT_IN_SECONDS)
            print(response.text)
            break  # Break the loop after a successful request
        except requests.exceptions.RequestException as e:
            print(f"An error occurred with proxy {csv_row[0]}: {e}")
```

That's it! Congratulations, you have successfully learned how to rotate proxies using Python.


# How to use GoProxies in Ruby?

## Using Ruby to Route Traffic Via GoProxies

In this guide, you'll learn how to utilize Ruby for sending traffic through GoProxies. Follow the steps below to efficiently manage your network traffic

Below you will find a straightforward example of sending a request through GoProxies in Ruby:

```
require 'uri'
require 'net/http'

uri = URI.parse('http://ipinfo.io')
proxy = Net::HTTP::Proxy('proxy.goproxies.com', 1080, 'customer-USERNAME-country-au', 'PASSWORD')

req = Net::HTTP::Get.new(uri)

result = proxy.start(uri.host, uri.port) do |http|
    http.request(req)
end

puts result.body
```

\
Congratulations! You have successfully sent a request through our proxy. To change the country, select a different country code in ISO 3166-1 alpha-2 format, like GB or DE.


# Resellers API legacy

{% hint style="warning" %}
**This API is deprecated.** It is kept for existing integrations only and will be removed in the future. Please use the [Resellers API](/proxies/resellers-api-v3) for all new integrations.
{% endhint %}

{% hint style="info" %}
**Migrating to the new API?** Contact our support at <support@goproxies.com> to have your account migrated. See also [Contact Support](/proxies/contact-support).
{% endhint %}

GoProxies offers a highly customisable Reseller API. Further instructions and settable parameters can be found on our extensive documentation here.


# Getting started

Guides for the legacy Resellers API.


# How to login into GoProxies API and list your current sub-users?

### How to login into GoProxies API?

To login into GoProxies API and receive auth token, you will need to use email address and password that you used to register to our self-service dashboard.

Here is example of the curl request that will return you your login token:

```shellscript
curl -X POST https://api.goproxies.com/api/v1/login \
     -H "Content-Type: application/json" \
     -d '{"username": "{YOUR_USERNAME}", "password": "{YOUR_PASSOWRD}"}'
```

### How to list all current sub-users?

To list current sub-users you'd need to call this [request](https://api.goproxies.com/swagger/resellers/ui/#/Resellers/resellerGetSubusers), here's the example which would list all your sub-users, all you need to do is replace`YOUR_TOKEN_FROM_LOGIN` with your login token.

```shellscript
curl -X GET https://api.goproxies.com/api/v1/reseller/subusers \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_TOKEN_FROM_LOGIN"
```


# How to create a sub-user via GoProxies API?

To add an additional sub-user under your main user, you would need to use the auth token that you received from [login step](/proxies/resellers-api/getting-started/how-to-login-into-goproxies-api-and-list-your-current-sub-users#how-to-login-into-goproxies-api) and add it into this request. Example below:

```shellscript
curl -X POST https://api.goproxies.com/api/v1/reseller/subusers \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer {YOUR_TOKEN_FROM_LOGIN}" \
     -d '{"username": "MY_USER", "enabled": true, "traffic_limit_amount": 10, "period_seconds": 99999, "recurring": true}'
```

In this request these are variable options:

* `username` - replace `MY_USER` with the username that you want to give to your sub-user.
* `enabled` - `true/false`, if you want to the sub-user to be enabled to get traffic set to true if not - false.
* `traffic_limit_amount` - amount of traffic in GBs that the sub-user is allowed to use.
* `period_seconds` - how long the sub-user will be active in seconds.
* `recurring` - `true/false`, if you want sub-user to automatically renew once it expires due to `"period_seconds"` set it to true, otherwise to false.

Once a sub-user is created you will receive a similar output, which means the sub-user was successfully created:\
`{"enabled":true,"period_seconds":99999,"period_started_at":"2025-01-01T00:00:00.0Z","recurring":true,"secret":"b09bac352778f29sb1cb55ab255c6def","traffic_limit_amount":10,"traffic_limit_unit":"GB","traffic_used":0,"username":"MY_USER"}`

**Note:** Remember the "secret" provided, as it will serve as the password for directing proxy traffic via the sub-user.


# How to check usage traffic of the sub-user?

To check statistics of your sub-users, firstly you would need to log into GoProxies API and receive auth token. You can use the same token in the place of `{YOUR_TOKEN}`, as you got from this [login step](/proxies/resellers-api/getting-started/how-to-login-into-goproxies-api-and-list-your-current-sub-users#how-to-login-into-goproxies-api) .

Below you will find an example of how the request should look like:

```shellscript
curl -X GET "https://api.goproxies.com/api/v1/stats/traffic?country=US&start_at=2025-01-27T23:59:59Z&end_at=2025-02-27T23:59:59Z&username=MY_USER" \
     -H "Authorization: Bearer {YOUR_TOKEN}"
```

You can edit `country=US` to a country that you require or completely remove it, if you want to include all countries for the statistics.

`start_at= and` end\_at= they need a value of the start and end date, example as shown: 2025-01-27T23:59:59Z (if nothing is specified in both fields, it will show traffic for the current month)

`username=` you need to enter your sub-user username in place of "MY\_USER", if you want to see traffic of all the subusers combined, don't specify this header.

Link to GoProxies API TrafficStats:\
<https://api.goproxies.com/swagger/resellers/ui/#/Statistics/getTrafficStats>


# Login

## POST /api/v1/login

> Login

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"paths":{"/api/v1/login":{"post":{"summary":"Login","operationId":"login","tags":["Login"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"LoginRequest":{"properties":{"username":{"type":"string"},"password":{"type":"string"}},"required":["username","password"]},"Token":{"properties":{"token":{"type":"string"}},"required":["token"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Statistics

## GET /api/v1/stats/traffic

> Get user traffic stats

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"TrafficStats":{"properties":{"bytes":{"type":"number"},"filter":{"$ref":"#/components/schemas/TrafficStatsQuery"}},"required":["bytes","filter"]},"TrafficStatsQuery":{"properties":{"country":{"type":"string"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"username":{"type":"string"}},"required":["start_at","end_at"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/stats/traffic":{"get":{"summary":"Get user traffic stats","operationId":"getTrafficStats","tags":["Statistics"],"parameters":[{"name":"country","in":"query","description":"Filter by country","required":false,"schema":{"type":"string"}},{"name":"start_at","in":"query","description":"Filter by start date","required":false,"schema":{"type":"string","format":"date-time","default":"end of current day"}},{"name":"end_at","in":"query","description":"Filter by end date","required":false,"schema":{"type":"string","format":"date-time","default":"start of the current month"}},{"name":"username","in":"query","description":"Filter by username of subuser.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrafficStats"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## GET /api/v1/stats/traffic/history

> Get user traffic stats history

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"TrafficHistoryInterval":{"type":"string","enum":["hour","day","week","auto"]},"TrafficHistoryStats":{"properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/TrafficHistoryStat"}},"filter":{"$ref":"#/components/schemas/TrafficHistoryStatsQuery"}},"required":["values","filter"]},"TrafficHistoryStat":{"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"bytes":{"type":"number"}},"required":["start_at","end_at","bytes"]},"TrafficHistoryStatsQuery":{"properties":{"country":{"type":"string"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"interval":{"$ref":"#/components/schemas/TrafficHistoryInterval"},"username":{"type":"string"}},"required":["start_at","end_at"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/stats/traffic/history":{"get":{"summary":"Get user traffic stats history","operationId":"getTrafficStatsHistory","tags":["Statistics"],"parameters":[{"name":"country","in":"query","description":"Filter by country","required":false,"schema":{"type":"string"}},{"name":"start_at","in":"query","description":"Filter by start date","required":false,"schema":{"type":"string","format":"date-time","default":"end of current day"}},{"name":"end_at","in":"query","description":"Filter by end date","required":false,"schema":{"type":"string","format":"date-time","default":"start of the current month"}},{"name":"interval","in":"query","description":"Group history into values by given interval","required":false,"schema":{"$ref":"#/components/schemas/TrafficHistoryInterval"}},{"name":"username","in":"query","description":"Filter by username of subuser.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrafficHistoryStats"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## GET /api/v1/stats/requests/history

> Get user requests history

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"TrafficHistoryInterval":{"type":"string","enum":["hour","day","week","auto"]},"RequestsHistoryStats":{"properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/RequestsHistoryStat"}},"filter":{"$ref":"#/components/schemas/RequestsHistoryStatsQuery"}},"required":["values","filter"]},"RequestsHistoryStat":{"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"count":{"type":"integer"},"amount":{"type":"integer"}},"required":["start_at","end_at","amount"]},"RequestsHistoryStatsQuery":{"properties":{"country":{"type":"string"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"interval":{"$ref":"#/components/schemas/TrafficHistoryInterval"},"username":{"type":"string"},"status":{"type":"integer"},"status_not":{"type":"integer"}},"required":["start_at","end_at","interval"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/stats/requests/history":{"get":{"summary":"Get user requests history","operationId":"getRequestsHistory","tags":["Statistics"],"parameters":[{"name":"country","in":"query","description":"Filter by country","required":false,"schema":{"type":"string"}},{"name":"start_at","in":"query","description":"Filter by start date","required":false,"schema":{"type":"string","format":"date-time","default":"end of current day"}},{"name":"end_at","in":"query","description":"Filter by end date","required":false,"schema":{"type":"string","format":"date-time","default":"start of the current month"}},{"name":"interval","in":"query","description":"Group history into values by given interval","required":false,"schema":{"$ref":"#/components/schemas/TrafficHistoryInterval"}},{"name":"username","in":"query","description":"Filter by username of subuser.","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","description":"Filter by request status","required":false,"schema":{"type":"integer"}},{"name":"status_not","in":"query","description":"Filter by request status not equal to","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestsHistoryStats"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Get countries used in traffic

> Get list of countries used in traffic statistics (in country code in 2-letter 3166-1 alpha-2 format).

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"UsedCountriesStats":{"properties":{"countries":{"type":"array","items":{"type":"string"}}},"required":["countries"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/stats/countries":{"get":{"summary":"Get countries used in traffic","description":"Get list of countries used in traffic statistics (in country code in 2-letter 3166-1 alpha-2 format).","operationId":"getUsedCountriesStats","tags":["Statistics"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsedCountriesStats"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````


# Resellers

## List subusers

> Get a list of all subusers. Optionally filter by name to select a username.

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ResellerSubusers":{"properties":{"subusers":{"type":"array","items":{"$ref":"#/components/schemas/ResellerSubuser"}},"paging":{"$ref":"#/components/schemas/Paging"}},"required":["subusers","paging"]},"ResellerSubuser":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used"]},"Paging":{"properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["limit","offset"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/reseller/subusers":{"get":{"summary":"List subusers","description":"Get a list of all subusers. Optionally filter by name to select a username.","operationId":"resellerGetSubusers","tags":["Resellers"],"parameters":[{"name":"username","in":"query","description":"Filter by username","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Limit the number of results","required":false,"schema":{"type":"integer","default":1000}},{"name":"offset","in":"query","description":"Offset the results","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResellerSubusers"}}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Create a new subuser

> Create a subuser with optional limits. If limits are set the period starts at the time of the call.

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"NewResellerSubuser":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number","description":"Traffic limit amount in GB"},"traffic_limit_unit":{"type":"string","description":"Traffic limit unit","deprecated":true},"period_seconds":{"type":"integer","description":"Traffic limit period in seconds"},"recurring":{"type":"boolean","description":"Whether the traffic limit is recurring"}},"required":["username"]},"ResellerSubuserWithSecret":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"},"secret":{"type":"string"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used","secret"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/reseller/subusers":{"post":{"summary":"Create a new subuser","description":"Create a subuser with optional limits. If limits are set the period starts at the time of the call.","operationId":"resellerCreateSubuser","tags":["Resellers"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewResellerSubuser"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuserWithSecret"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Get details for a subuser

> Get a details of a subuser e.g. statistics of traffic usage.

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ResellerSubuser":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/reseller/subusers/{username}":{"get":{"summary":"Get details for a subuser","description":"Get a details of a subuser e.g. statistics of traffic usage.","operationId":"resellerGetSubuser","tags":["Resellers"],"parameters":[{"name":"username","in":"path","description":"Subuser's username","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuser"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Update a subuser

> Update a subuser limits. Set all to 0 to remove them. If the user already has limits set, the period start time stays the same, otherwise it is set to the time of the call.

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ResellerSubuserUpdate":{"properties":{"traffic_limit_amount":{"type":"number","description":"Traffic limit amount in GB"},"traffic_limit_unit":{"type":"string","description":"Traffic limit unit","deprecated":true},"period_seconds":{"type":"integer","description":"Traffic limit period in seconds"},"recurring":{"type":"boolean","description":"Whether the traffic limit is recurring"}}},"ResellerSubuser":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/reseller/subusers/{username}":{"put":{"summary":"Update a subuser","description":"Update a subuser limits. Set all to 0 to remove them. If the user already has limits set, the period start time stays the same, otherwise it is set to the time of the call.","operationId":"resellerUpdateSubuser","tags":["Resellers"],"parameters":[{"name":"username","in":"path","description":"Subuser's username","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuserUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuser"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## DELETE /api/v1/reseller/subusers/{username}

> Delete a subuser

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/reseller/subusers/{username}":{"delete":{"summary":"Delete a subuser","operationId":"resellerDeleteSubuser","tags":["Resellers"],"parameters":[{"name":"username","in":"path","description":"Subuser's username","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Reset a subuser's limits

> Resets the current limit for an subuser, starting a new period. If a subuser has no limit this call will fail.

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ResellerSubuser":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/reseller/subusers/{username}/reset-limits":{"put":{"summary":"Reset a subuser's limits","description":"Resets the current limit for an subuser, starting a new period. If a subuser has no limit this call will fail.","operationId":"resellerResetSubuserLimits","tags":["Resellers"],"parameters":[{"name":"username","in":"path","description":"Subuser's username","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuser"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Reset a subuser's secret

> Reset a subuser's secret with a randomly generated password.

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ResellerSubuserWithSecret":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"},"secret":{"type":"string"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used","secret"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/reseller/subusers/{username}/reset-secret":{"put":{"summary":"Reset a subuser's secret","description":"Reset a subuser's secret with a randomly generated password.","operationId":"resellerResetSubuserSecret","tags":["Resellers"],"parameters":[{"name":"username","in":"path","description":"Subuser's username","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuserWithSecret"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## PUT /api/v1/reseller/subusers/{username}/enable

> Enable a subuser

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ResellerSubuser":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/reseller/subusers/{username}/enable":{"put":{"summary":"Enable a subuser","operationId":"resellerEnableSubuser","tags":["Resellers"],"parameters":[{"name":"username","in":"path","description":"Subuser's username","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuser"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## PUT /api/v1/reseller/subusers/{username}/disable

> Disable a subuser

````json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\"}' -H \"Content-Type: application/json\" -X POST -s https://api.goproxies.com/api/v1/login | jq -r '.token'\n```\n\nSubstitute `<username>` and `<password>` with your credentials.\n","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ResellerSubuser":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v1/reseller/subusers/{username}/disable":{"put":{"summary":"Disable a subuser","operationId":"resellerDisableSubuser","tags":["Resellers"],"parameters":[{"name":"username","in":"path","description":"Subuser's username","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuser"}}}},"default":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````


# Health

## GET /api/v1/status

> Get status

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"servers":[{"url":"/"}],"paths":{"/api/v1/status":{"get":{"summary":"Get status","operationId":"getStatus","tags":["Health"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}}}}}},"components":{"schemas":{"Status":{"properties":{"db_status":{"type":"string"}},"required":["db_status"]}}}}
```


# Models

## The LoginRequest object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"LoginRequest":{"properties":{"username":{"type":"string"},"password":{"type":"string"}},"required":["username","password"]}}}}
```

## The Token object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"Token":{"properties":{"token":{"type":"string"}},"required":["token"]}}}}
```

## The TrafficStats object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"TrafficStats":{"properties":{"bytes":{"type":"number"},"filter":{"$ref":"#/components/schemas/TrafficStatsQuery"}},"required":["bytes","filter"]},"TrafficStatsQuery":{"properties":{"country":{"type":"string"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"username":{"type":"string"}},"required":["start_at","end_at"]}}}}
```

## The TrafficStatsQuery object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"TrafficStatsQuery":{"properties":{"country":{"type":"string"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"username":{"type":"string"}},"required":["start_at","end_at"]}}}}
```

## The TrafficHistoryStats object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"TrafficHistoryStats":{"properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/TrafficHistoryStat"}},"filter":{"$ref":"#/components/schemas/TrafficHistoryStatsQuery"}},"required":["values","filter"]},"TrafficHistoryStat":{"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"bytes":{"type":"number"}},"required":["start_at","end_at","bytes"]},"TrafficHistoryStatsQuery":{"properties":{"country":{"type":"string"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"interval":{"$ref":"#/components/schemas/TrafficHistoryInterval"},"username":{"type":"string"}},"required":["start_at","end_at"]},"TrafficHistoryInterval":{"type":"string","enum":["hour","day","week","auto"]}}}}
```

## The TrafficHistoryStat object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"TrafficHistoryStat":{"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"bytes":{"type":"number"}},"required":["start_at","end_at","bytes"]}}}}
```

## The TrafficHistoryStatsQuery object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"TrafficHistoryStatsQuery":{"properties":{"country":{"type":"string"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"interval":{"$ref":"#/components/schemas/TrafficHistoryInterval"},"username":{"type":"string"}},"required":["start_at","end_at"]},"TrafficHistoryInterval":{"type":"string","enum":["hour","day","week","auto"]}}}}
```

## The RequestsHistoryStats object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"RequestsHistoryStats":{"properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/RequestsHistoryStat"}},"filter":{"$ref":"#/components/schemas/RequestsHistoryStatsQuery"}},"required":["values","filter"]},"RequestsHistoryStat":{"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"count":{"type":"integer"},"amount":{"type":"integer"}},"required":["start_at","end_at","amount"]},"RequestsHistoryStatsQuery":{"properties":{"country":{"type":"string"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"interval":{"$ref":"#/components/schemas/TrafficHistoryInterval"},"username":{"type":"string"},"status":{"type":"integer"},"status_not":{"type":"integer"}},"required":["start_at","end_at","interval"]},"TrafficHistoryInterval":{"type":"string","enum":["hour","day","week","auto"]}}}}
```

## The RequestsHistoryStat object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"RequestsHistoryStat":{"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"count":{"type":"integer"},"amount":{"type":"integer"}},"required":["start_at","end_at","amount"]}}}}
```

## The RequestsHistoryStatsQuery object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"RequestsHistoryStatsQuery":{"properties":{"country":{"type":"string"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"interval":{"$ref":"#/components/schemas/TrafficHistoryInterval"},"username":{"type":"string"},"status":{"type":"integer"},"status_not":{"type":"integer"}},"required":["start_at","end_at","interval"]},"TrafficHistoryInterval":{"type":"string","enum":["hour","day","week","auto"]}}}}
```

## The UsedCountriesStats object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"UsedCountriesStats":{"properties":{"countries":{"type":"array","items":{"type":"string"}}},"required":["countries"]}}}}
```

## The TrafficHistoryInterval object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"TrafficHistoryInterval":{"type":"string","enum":["hour","day","week","auto"]}}}}
```

## The NewResellerSubuser object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"NewResellerSubuser":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number","description":"Traffic limit amount in GB"},"traffic_limit_unit":{"type":"string","description":"Traffic limit unit","deprecated":true},"period_seconds":{"type":"integer","description":"Traffic limit period in seconds"},"recurring":{"type":"boolean","description":"Whether the traffic limit is recurring"}},"required":["username"]}}}}
```

## The ResellerSubuserUpdate object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"ResellerSubuserUpdate":{"properties":{"traffic_limit_amount":{"type":"number","description":"Traffic limit amount in GB"},"traffic_limit_unit":{"type":"string","description":"Traffic limit unit","deprecated":true},"period_seconds":{"type":"integer","description":"Traffic limit period in seconds"},"recurring":{"type":"boolean","description":"Whether the traffic limit is recurring"}}}}}}
```

## The ResellerSubuser object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"ResellerSubuser":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used"]}}}}
```

## The ResellerSubuserWithSecret object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"ResellerSubuserWithSecret":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"},"secret":{"type":"string"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used","secret"]}}}}
```

## The ResellerSubusers object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"ResellerSubusers":{"properties":{"subusers":{"type":"array","items":{"$ref":"#/components/schemas/ResellerSubuser"}},"paging":{"$ref":"#/components/schemas/Paging"}},"required":["subusers","paging"]},"ResellerSubuser":{"properties":{"username":{"type":"string"},"enabled":{"type":"boolean"},"traffic_limit_amount":{"type":"number"},"traffic_limit_unit":{"type":"string"},"period_seconds":{"type":"integer"},"period_started_at":{"type":"string","format":"date-time"},"recurring":{"type":"boolean"},"traffic_used":{"type":"number"}},"required":["username","enabled","traffic_limit_amount","traffic_limit_unit","period_seconds","recurring","traffic_used"]},"Paging":{"properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["limit","offset"]}}}}
```

## The Paging object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"Paging":{"properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["limit","offset"]}}}}
```

## The Status object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"Status":{"properties":{"db_status":{"type":"string"}},"required":["db_status"]}}}}
```

## The Error object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"status":{"type":"integer"},"path":{"type":"string"}}},"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}
```

## The Err object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"Err":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"detail":{"type":"string"},"fields":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FieldError"}}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}
```

## The FieldError object

```json
{"openapi":"3.0.3","info":{"title":"Resellers API specification","version":"1.0.0"},"components":{"schemas":{"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Resellers API

Manage subscriptions, sub-users and per sub-user quotas, and read traffic statistics.

Base URL: `https://api.goproxies.com`. Log in with `POST /api/v1/login` and send `Authorization: Bearer <token>` on every other request.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Getting started</strong></td><td>From login to a working sub-user.</td><td><a href="/proxies/resellers-api-v3/getting-started">Getting started</a></td></tr><tr><td><strong>How it works</strong></td><td>Subscriptions, sub-users, limits and sub-user quotas.</td><td><a href="/proxies/resellers-api-v3/how-it-works">How it works</a></td></tr><tr><td><strong>Reference</strong></td><td>All endpoints and models.</td><td><a href="/proxies/resellers-api-v3/reference">Reference</a></td></tr></tbody></table>


# Getting started

The typical flow once you have bought one or more subscriptions.

All requests go to `https://api.goproxies.com`. The examples use the shell variables `TOKEN`, `SUBSCRIPTION_ID` and `SUBUSER_ID`; each step shows where their values come from.

{% stepper %}
{% step %}

### Log in

Exchange your dashboard email and password for an API token.

```bash
curl -X POST https://api.goproxies.com/api/v1/login \
  -H "Content-Type: application/json" \
  -d '{"username": "you@example.com", "password": "YOUR_PASSWORD"}'
```

```json
{
  "token": "eyJhbGciOiJSUzI1NiIs..."
}
```

Store it as `TOKEN` and send it as `Authorization: Bearer $TOKEN` on every other request.
{% endstep %}

{% step %}

### List your subscriptions

Every product you bought is a separate subscription with its own quota and sub-user limit.

```bash
curl https://api.goproxies.com/api/v3/reseller/subscriptions \
  -H "Authorization: Bearer $TOKEN"
```

```json
[
  {
    "id": "3f6c2a1e-8b7d-4c5e-9a0f-1d2e3f4a5b6c",
    "plan_id": "static_custom",
    "active": true,
    "recurring": false,
    "quota_gb": 150,
    "quota_used_gb": 12.4,
    "quota_remaining_gb": 137.6,
    "quota_period_start": "2026-10-06T07:42:36Z",
    "quota_period_end": "2026-11-05T07:42:36Z",
    "sub_user_limit": 13,
    "sub_users_count": 2,
    "sub_users_available": 11
  }
]
```

Pick the subscription the new sub-user should draw traffic from and store its `id` as `SUBSCRIPTION_ID`.
{% endstep %}

{% step %}

### Create a sub-user

A sub-user is a proxy user. Create one per client, team or use case.

```bash
curl -X POST https://api.goproxies.com/api/v3/reseller/subscriptions/$SUBSCRIPTION_ID/subusers \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"username": "client-42"}'
```

```json
{
  "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "username": "client-42",
  "subscription_id": "3f6c2a1e-8b7d-4c5e-9a0f-1d2e3f4a5b6c",
  "enabled": true,
  "blocked": false,
  "quota_used_gb": 0,
  "created_at": "2026-10-07T06:20:19Z",
  "secret": "0123456789abcdef0123456789abcdef"
}
```

Store `id` as `SUBUSER_ID`.

{% hint style="warning" %}
`secret` is the sub-user's proxy password. It is returned only here and by reset-secret, so save it now.
{% endhint %}
{% endstep %}

{% step %}

### Connect through the proxy

Use the sub-user's username with the `customer-` prefix and its secret as the password.

```bash
curl --proxytunnel \
  --proxy "https://customer-client-42:0123456789abcdef0123456789abcdef@proxy.goproxies.com:1080" \
  https://ip.goproxies.com
```

The response is the IP address your request exited from. Endpoints for other products and targeting parameters (country, city, session) are in each product's quick start.
{% endstep %}

{% step %}

### Give the sub-user its own quota (optional)

Cap one sub-user on top of the subscription quota, here 5 GB per day, renewed automatically.

```bash
curl -X POST https://api.goproxies.com/api/v3/reseller/subuser-quotas \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"subuser_id": "'$SUBUSER_ID'", "quota_gb": 5, "period_seconds": 86400, "recurring": true}'
```

```json
{
  "subuser_id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "username": "client-42",
  "quota_gb": 5,
  "used_gb": 0,
  "period_start_at": "2026-10-07T06:20:22Z",
  "period_seconds": 86400,
  "recurring": true,
  "created_at": "2026-10-07T06:20:22Z",
  "updated_at": "2026-10-07T06:20:22Z"
}
```

Modes and rules: [How it works → Sub-user quotas](/proxies/resellers-api-v3/how-it-works#sub-user-quotas).
{% endstep %}

{% step %}

### Check a sub-user

Look up a sub-user by username across all subscriptions to see its usage and whether it is blocked.

```bash
curl "https://api.goproxies.com/api/v3/reseller/subusers?username=client-42" \
  -H "Authorization: Bearer $TOKEN"
```

```json
{
  "items": [
    {
      "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
      "username": "client-42",
      "subscription_id": "3f6c2a1e-8b7d-4c5e-9a0f-1d2e3f4a5b6c",
      "enabled": true,
      "blocked": false,
      "quota_used_gb": 1.73,
      "quota": {
        "quota_gb": 5,
        "period_start_at": "2026-10-07T06:20:22Z",
        "period_seconds": 86400,
        "recurring": true,
        "created_at": "2026-10-07T06:20:22Z",
        "updated_at": "2026-10-07T06:20:22Z"
      },
      "created_at": "2026-10-07T06:20:19Z"
    }
  ]
}
```

`quota_used_gb` is the traffic in the current period. When `blocked` is `true`, `blocked_reason` says why; see [Blocked reasons](/proxies/resellers-api-v3/how-it-works#blocked-reasons).
{% endstep %}

{% step %}

### Read traffic statistics

Get traffic for a date range, bucketed per day and broken down per sub-user.

```bash
curl "https://api.goproxies.com/api/v3/stats/traffic?from=2026-10-01&to=2026-10-07&interval=day&group_by=subuser" \
  -H "Authorization: Bearer $TOKEN"
```

```json
{
  "filter": {
    "from": "2026-10-01T00:00:00Z",
    "to": "2026-10-08T00:00:00Z",
    "interval": "day"
  },
  "bytes": 5368709120,
  "buckets": [
    {
      "start": "2026-10-01T00:00:00Z",
      "end": "2026-10-02T00:00:00Z",
      "bytes": 734003200,
      "partial": false
    },
    "..."
  ],
  "subusers": [
    {
      "username": "client-42",
      "bytes": 1857573355,
      "buckets": [
        "..."
      ]
    }
  ]
}
```

`from`/`to` accept dates or date-times (UTC, up to 100 days). Requests, domains and countries work the same way; see [Statistics](/proxies/resellers-api-v3/reference/statistics).
{% endstep %}

{% step %}

### Disable or enable the sub-user

A disabled sub-user can't use the proxy. Send `true` to enable it again.

```bash
curl -X PATCH https://api.goproxies.com/api/v3/reseller/subscriptions/$SUBSCRIPTION_ID/subusers/$SUBUSER_ID \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"enabled": false}'
```

```json
{
  "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "username": "client-42",
  "subscription_id": "3f6c2a1e-8b7d-4c5e-9a0f-1d2e3f4a5b6c",
  "quota_used_gb": 1.73,
  "created_at": "2026-10-07T06:20:19Z",
  "enabled": false,
  "blocked": true,
  "blocked_reason": "USER_DISABLED"
}
```

{% endstep %}

{% step %}

### Reset the secret

Issue a new proxy password, e.g. when it leaked. The old one stops working.

```bash
curl -X POST https://api.goproxies.com/api/v3/reseller/subscriptions/$SUBSCRIPTION_ID/subusers/$SUBUSER_ID/reset-secret \
  -H "Authorization: Bearer $TOKEN"
```

```json
{
  "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "username": "client-42",
  "subscription_id": "3f6c2a1e-8b7d-4c5e-9a0f-1d2e3f4a5b6c",
  "quota_used_gb": 1.73,
  "created_at": "2026-10-07T06:20:19Z",
  "enabled": true,
  "blocked": false,
  "secret": "fedcba9876543210fedcba9876543210"
}
```

{% endstep %}

{% step %}

### Delete the sub-user

Removes the sub-user and its quota. This can't be undone.

```bash
curl -X DELETE https://api.goproxies.com/api/v3/reseller/subscriptions/$SUBSCRIPTION_ID/subusers/$SUBUSER_ID \
  -H "Authorization: Bearer $TOKEN"
```

Returns an empty `200`.
{% endstep %}
{% endstepper %}


# How it works

Accounts, subscriptions, sub-users and quotas.

## Data model

```mermaid
erDiagram
    ACCOUNT ||--o{ SUBSCRIPTION : "0..N"
    SUBSCRIPTION ||--o{ SUB_USER : "0..N"
    SUB_USER ||--o| SUB_USER_QUOTA : "0..1"
```

* **Account**: you, the reseller. One login for the whole API.
* **Subscription**: one per purchased product (residential, mobile, ...). Has its own traffic quota, period and sub-user limit.
* **Sub-user**: a proxy user that draws traffic from exactly one subscription.
* **Sub-user quota** (optional): a personal cap for one sub-user. See [Sub-user quotas](#sub-user-quotas).

## Limits

A request through a sub-user is allowed only if every applicable limit has room:

```mermaid
flowchart LR
    R[Request] --> S{Subscription active<br/>and quota left?}
    S -- no --> X[Blocked]
    S -- yes --> Q{Sub-user has a quota?}
    Q -- no --> OK[Allowed]
    Q -- yes --> U{Quota left and<br/>period valid?}
    U -- yes --> OK
    U -- no --> X
```

All sub-users of a subscription share its quota. A sub-user quota only adds a cap; it never extends the subscription.

## Blocked reasons

| `blocked_reason`        | Meaning                                                                                    |
| ----------------------- | ------------------------------------------------------------------------------------------ |
| `USER_DISABLED`         | Sub-user disabled by you                                                                   |
| `USER_QUOTA_EXCEEDED`   | Sub-user or subscription quota used up, or a non-recurring sub-user quota period has ended |
| `SUBSCRIPTION_INACTIVE` | Subscription expired or cancelled                                                          |
| `SUBSCRIPTION_MISSING`  | Subscription no longer exists                                                              |
| `PARENT_BLOCKED`        | Your account is blocked                                                                    |

## Usage

`quota_used_gb` on a sub-user is its traffic in the current period: the sub-user quota period if it has one, otherwise the subscription period. Refreshed every few minutes.

## Sub-user quotas

A sub-user quota caps one sub-user on top of its subscription. Manage it with `/api/v3/reseller/subuser-quotas`.

### Settings

| Field             | Meaning                                                                |
| ----------------- | ---------------------------------------------------------------------- |
| `quota_gb`        | Cap in GB, greater than 0                                              |
| `period_start_at` | Start of the current period. Default now; not in the future            |
| `period_seconds`  | Period length, at least 3600. Omit for a lifetime quota                |
| `recurring`       | Start a new period automatically when one ends. Needs `period_seconds` |

### Modes

{% tabs %}
{% tab title="Lifetime" %}
Counts all traffic since `period_start_at` (up to 450 days back).

```json
{"subuser_id": "SUBUSER_ID", "quota_gb": 50}
```

{% endtab %}

{% tab title="One-off period" %}
Counts traffic within one period. After it ends the sub-user stays blocked until you change or remove the quota.

```json
{"subuser_id": "SUBUSER_ID", "quota_gb": 10, "period_seconds": 604800}
```

{% endtab %}

{% tab title="Recurring" %}
Counts traffic per period and starts a new one automatically; each new period counts only its own traffic.

```json
{"subuser_id": "SUBUSER_ID", "quota_gb": 5, "period_seconds": 86400, "recurring": true}
```

{% endtab %}
{% endtabs %}

### Lifecycle

```mermaid
stateDiagram-v2
    [*] --> Active: create
    Active --> Blocked: used ≥ quota_gb<br/>or one-off period ended
    Blocked --> Active: renewal (recurring)<br/>or raise quota_gb / change period
    Active --> [*]: delete
    Blocked --> [*]: delete
```

### Rules

* Usage is the sub-user's traffic from `period_start_at` until now (at most `period_seconds`). Changing `period_start_at` or `period_seconds` recalculates it for the new window, so it can go down or up (e.g. moving the start back counts older traffic). Changing `quota_gb` or `recurring` keeps current usage.
* `PATCH` with `period_seconds: 0` turns the quota into a lifetime quota.
* A blocked sub-user shows `blocked: true` and `blocked_reason: USER_QUOTA_EXCEEDED`.
* A quota larger than the subscription quota is allowed; the subscription limit applies first.
* Sub-users that still have a legacy API traffic limit can't get a quota (`409 legacy_limit`); remove the legacy limit first.


# Reference

Endpoint reference generated from the OpenAPI specification.


# Auth

## POST /api/v1/login

> Login

```json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Obtain an access token for the API.","name":"Auth"}],"servers":[{"url":"/"}],"paths":{"/api/v1/login":{"post":{"operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Login","tags":["Auth"]}}},"components":{"schemas":{"LoginRequest":{"properties":{"password":{"type":"string"},"username":{"type":"string"}},"required":["username","password"]},"Token":{"properties":{"token":{"type":"string"}},"required":["token"]},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Health

## GET /api/v1/status

> Get status

```json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Service availability.","name":"Health"}],"servers":[{"url":"/"}],"paths":{"/api/v1/status":{"get":{"operationId":"getStatus","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"OK"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal server error"}},"summary":"Get status","tags":["Health"]}}},"components":{"schemas":{"Status":{"properties":{"db_status":{"type":"string"}},"required":["db_status"]}}}}
```


# Resellers

## Subscriptions

## List reseller subscriptions

> Subscriptions owned by the caller with quota usage and sub-user capacity

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"ResellerSubscriptionV3":{"properties":{"active":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"id":{"type":"string"},"plan_id":{"type":"string"},"product_id":{"type":"string"},"quota_gb":{"type":"number"},"quota_period_end":{"format":"date-time","type":"string"},"quota_period_seconds":{"type":"integer"},"quota_period_start":{"format":"date-time","type":"string"},"quota_remaining_gb":{"type":"number"},"quota_used_gb":{"type":"number"},"recurring":{"type":"boolean"},"sub_user_limit":{"type":"integer"},"sub_users_available":{"type":"integer"},"sub_users_count":{"type":"integer"}},"required":["id","product_id","plan_id","active","recurring","quota_gb","quota_used_gb","quota_remaining_gb","quota_period_start","quota_period_end","quota_period_seconds","sub_user_limit","sub_users_count","sub_users_available","created_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subscriptions":{"get":{"description":"Subscriptions owned by the caller with quota usage and sub-user capacity","operationId":"resellerV3ListSubscriptions","parameters":[{"description":"Include inactive subscriptions","in":"query","name":"include_inactive","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResellerSubscriptionV3"},"type":"array"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"List reseller subscriptions","tags":["Resellers"]}}}}
````

## GET /api/v3/reseller/subscriptions/{subscription\_id}

> Get reseller subscription

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"ResellerSubscriptionV3":{"properties":{"active":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"id":{"type":"string"},"plan_id":{"type":"string"},"product_id":{"type":"string"},"quota_gb":{"type":"number"},"quota_period_end":{"format":"date-time","type":"string"},"quota_period_seconds":{"type":"integer"},"quota_period_start":{"format":"date-time","type":"string"},"quota_remaining_gb":{"type":"number"},"quota_used_gb":{"type":"number"},"recurring":{"type":"boolean"},"sub_user_limit":{"type":"integer"},"sub_users_available":{"type":"integer"},"sub_users_count":{"type":"integer"}},"required":["id","product_id","plan_id","active","recurring","quota_gb","quota_used_gb","quota_remaining_gb","quota_period_start","quota_period_end","quota_period_seconds","sub_user_limit","sub_users_count","sub_users_available","created_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subscriptions/{subscription_id}":{"get":{"operationId":"resellerV3GetSubscription","parameters":[{"in":"path","name":"subscription_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubscriptionV3"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Get reseller subscription","tags":["Resellers"]}}}}
````

## Sub-users

## List sub-users across all subscriptions

> All sub-users of the reseller, newest first. By default only sub-users assigned to a subscription are listed;\
> \`include\_unassigned=true\` also lists legacy sub-users that are not assigned to any subscription.<br>

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"ResellerSubusersV3Response":{"properties":{"cursor":{"type":"string"},"items":{"items":{"$ref":"#/components/schemas/ResellerSubuserV3"},"type":"array"}},"required":["items"],"type":"object"},"ResellerSubuserV3":{"properties":{"blocked":{"type":"boolean"},"blocked_reason":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"quota":{"$ref":"#/components/schemas/SubuserQuotaV3"},"quota_used_gb":{"description":"Traffic used by the sub-user (refreshed every few minutes).\nIf `quota` is present, counted within the quota's current period; otherwise within the account's current quota period.\n","type":"number"},"subscription_id":{"description":"Subscription the sub-user draws traffic from. `null` for unassigned (legacy) sub-users, which use the newest active subscription.","nullable":true,"type":"string"},"username":{"type":"string"}},"required":["id","username","subscription_id","enabled","blocked","created_at","quota_used_gb"],"type":"object"},"SubuserQuotaV3":{"properties":{"created_at":{"format":"date-time","type":"string"},"period_seconds":{"description":"Absent for a lifetime quota","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["quota_gb","period_start_at","recurring","created_at","updated_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subusers":{"get":{"description":"All sub-users of the reseller, newest first. By default only sub-users assigned to a subscription are listed;\n`include_unassigned=true` also lists legacy sub-users that are not assigned to any subscription.\n","operationId":"resellerV3ListAllSubusers","parameters":[{"description":"Exact username","in":"query","name":"username","required":false,"schema":{"type":"string"}},{"in":"query","name":"subscription_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"enabled","required":false,"schema":{"type":"boolean"}},{"description":"Also list sub-users not assigned to any subscription","in":"query","name":"include_unassigned","required":false,"schema":{"default":false,"type":"boolean"}},{"description":"default 100, max 1000","in":"query","name":"per_page","required":false,"schema":{"type":"integer"}},{"description":"Cursor obtained from previous response","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubusersV3Response"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"List sub-users across all subscriptions","tags":["Resellers"]}}}}
````

## GET /api/v3/reseller/subscriptions/{subscription\_id}/subusers

> List sub-users of a subscription

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"ResellerSubusersV3Response":{"properties":{"cursor":{"type":"string"},"items":{"items":{"$ref":"#/components/schemas/ResellerSubuserV3"},"type":"array"}},"required":["items"],"type":"object"},"ResellerSubuserV3":{"properties":{"blocked":{"type":"boolean"},"blocked_reason":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"quota":{"$ref":"#/components/schemas/SubuserQuotaV3"},"quota_used_gb":{"description":"Traffic used by the sub-user (refreshed every few minutes).\nIf `quota` is present, counted within the quota's current period; otherwise within the account's current quota period.\n","type":"number"},"subscription_id":{"description":"Subscription the sub-user draws traffic from. `null` for unassigned (legacy) sub-users, which use the newest active subscription.","nullable":true,"type":"string"},"username":{"type":"string"}},"required":["id","username","subscription_id","enabled","blocked","created_at","quota_used_gb"],"type":"object"},"SubuserQuotaV3":{"properties":{"created_at":{"format":"date-time","type":"string"},"period_seconds":{"description":"Absent for a lifetime quota","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["quota_gb","period_start_at","recurring","created_at","updated_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subscriptions/{subscription_id}/subusers":{"get":{"operationId":"resellerV3ListSubusers","parameters":[{"in":"path","name":"subscription_id","required":true,"schema":{"type":"string"}},{"description":"Exact username","in":"query","name":"username","required":false,"schema":{"type":"string"}},{"in":"query","name":"enabled","required":false,"schema":{"type":"boolean"}},{"description":"default 100, max 1000","in":"query","name":"per_page","required":false,"schema":{"type":"integer"}},{"description":"Cursor obtained from previous response","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubusersV3Response"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"List sub-users of a subscription","tags":["Resellers"]}}}}
````

## POST /api/v3/reseller/subscriptions/{subscription\_id}/subusers

> Create sub-user in a subscription

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"ResellerCreateSubuserV3Request":{"properties":{"username":{"type":"string"}},"required":["username"],"type":"object"},"ResellerSubuserV3WithSecret":{"allOf":[{"$ref":"#/components/schemas/ResellerSubuserV3"},{"properties":{"secret":{"type":"string"}},"required":["secret"],"type":"object"}]},"ResellerSubuserV3":{"properties":{"blocked":{"type":"boolean"},"blocked_reason":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"quota":{"$ref":"#/components/schemas/SubuserQuotaV3"},"quota_used_gb":{"description":"Traffic used by the sub-user (refreshed every few minutes).\nIf `quota` is present, counted within the quota's current period; otherwise within the account's current quota period.\n","type":"number"},"subscription_id":{"description":"Subscription the sub-user draws traffic from. `null` for unassigned (legacy) sub-users, which use the newest active subscription.","nullable":true,"type":"string"},"username":{"type":"string"}},"required":["id","username","subscription_id","enabled","blocked","created_at","quota_used_gb"],"type":"object"},"SubuserQuotaV3":{"properties":{"created_at":{"format":"date-time","type":"string"},"period_seconds":{"description":"Absent for a lifetime quota","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["quota_gb","period_start_at","recurring","created_at","updated_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subscriptions/{subscription_id}/subusers":{"post":{"operationId":"resellerV3CreateSubuser","parameters":[{"in":"path","name":"subscription_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerCreateSubuserV3Request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuserV3WithSecret"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Create sub-user in a subscription","tags":["Resellers"]}}}}
````

## GET /api/v3/reseller/subscriptions/{subscription\_id}/subusers/{subuser\_id}

> Get sub-user

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"ResellerSubuserV3":{"properties":{"blocked":{"type":"boolean"},"blocked_reason":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"quota":{"$ref":"#/components/schemas/SubuserQuotaV3"},"quota_used_gb":{"description":"Traffic used by the sub-user (refreshed every few minutes).\nIf `quota` is present, counted within the quota's current period; otherwise within the account's current quota period.\n","type":"number"},"subscription_id":{"description":"Subscription the sub-user draws traffic from. `null` for unassigned (legacy) sub-users, which use the newest active subscription.","nullable":true,"type":"string"},"username":{"type":"string"}},"required":["id","username","subscription_id","enabled","blocked","created_at","quota_used_gb"],"type":"object"},"SubuserQuotaV3":{"properties":{"created_at":{"format":"date-time","type":"string"},"period_seconds":{"description":"Absent for a lifetime quota","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["quota_gb","period_start_at","recurring","created_at","updated_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subscriptions/{subscription_id}/subusers/{subuser_id}":{"get":{"operationId":"resellerV3GetSubuser","parameters":[{"in":"path","name":"subscription_id","required":true,"schema":{"type":"string"}},{"in":"path","name":"subuser_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuserV3"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Get sub-user","tags":["Resellers"]}}}}
````

## PATCH /api/v3/reseller/subscriptions/{subscription\_id}/subusers/{subuser\_id}

> Update sub-user

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"ResellerUpdateSubuserV3Request":{"properties":{"enabled":{"type":"boolean"}},"required":["enabled"],"type":"object"},"ResellerSubuserV3":{"properties":{"blocked":{"type":"boolean"},"blocked_reason":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"quota":{"$ref":"#/components/schemas/SubuserQuotaV3"},"quota_used_gb":{"description":"Traffic used by the sub-user (refreshed every few minutes).\nIf `quota` is present, counted within the quota's current period; otherwise within the account's current quota period.\n","type":"number"},"subscription_id":{"description":"Subscription the sub-user draws traffic from. `null` for unassigned (legacy) sub-users, which use the newest active subscription.","nullable":true,"type":"string"},"username":{"type":"string"}},"required":["id","username","subscription_id","enabled","blocked","created_at","quota_used_gb"],"type":"object"},"SubuserQuotaV3":{"properties":{"created_at":{"format":"date-time","type":"string"},"period_seconds":{"description":"Absent for a lifetime quota","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["quota_gb","period_start_at","recurring","created_at","updated_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subscriptions/{subscription_id}/subusers/{subuser_id}":{"patch":{"operationId":"resellerV3UpdateSubuser","parameters":[{"in":"path","name":"subscription_id","required":true,"schema":{"type":"string"}},{"in":"path","name":"subuser_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerUpdateSubuserV3Request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuserV3"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Update sub-user","tags":["Resellers"]}}}}
````

## POST /api/v3/reseller/subscriptions/{subscription\_id}/subusers/{subuser\_id}/reset-secret

> Reset sub-user secret

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"ResellerSubuserV3WithSecret":{"allOf":[{"$ref":"#/components/schemas/ResellerSubuserV3"},{"properties":{"secret":{"type":"string"}},"required":["secret"],"type":"object"}]},"ResellerSubuserV3":{"properties":{"blocked":{"type":"boolean"},"blocked_reason":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"quota":{"$ref":"#/components/schemas/SubuserQuotaV3"},"quota_used_gb":{"description":"Traffic used by the sub-user (refreshed every few minutes).\nIf `quota` is present, counted within the quota's current period; otherwise within the account's current quota period.\n","type":"number"},"subscription_id":{"description":"Subscription the sub-user draws traffic from. `null` for unassigned (legacy) sub-users, which use the newest active subscription.","nullable":true,"type":"string"},"username":{"type":"string"}},"required":["id","username","subscription_id","enabled","blocked","created_at","quota_used_gb"],"type":"object"},"SubuserQuotaV3":{"properties":{"created_at":{"format":"date-time","type":"string"},"period_seconds":{"description":"Absent for a lifetime quota","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["quota_gb","period_start_at","recurring","created_at","updated_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subscriptions/{subscription_id}/subusers/{subuser_id}/reset-secret":{"post":{"operationId":"resellerV3ResetSubuserSecret","parameters":[{"in":"path","name":"subscription_id","required":true,"schema":{"type":"string"}},{"in":"path","name":"subuser_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResellerSubuserV3WithSecret"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Reset sub-user secret","tags":["Resellers"]}}}}
````

## DELETE /api/v3/reseller/subscriptions/{subscription\_id}/subusers/{subuser\_id}

> Delete sub-user

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subscriptions/{subscription_id}/subusers/{subuser_id}":{"delete":{"operationId":"resellerV3DeleteSubuser","parameters":[{"in":"path","name":"subscription_id","required":true,"schema":{"type":"string"}},{"in":"path","name":"subuser_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Delete sub-user","tags":["Resellers"]}}}}
````

## Sub-user quotas

## List sub-user quotas

> Sub-users that have their own quota. A sub-user without a quota only shares its subscription's quota.

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"SubuserQuotasV3Response":{"properties":{"cursor":{"type":"string"},"items":{"items":{"$ref":"#/components/schemas/SubuserQuotaDetailsV3"},"type":"array"}},"required":["items"],"type":"object"},"SubuserQuotaDetailsV3":{"allOf":[{"$ref":"#/components/schemas/SubuserQuotaV3"},{"properties":{"subuser_id":{"type":"string"},"used_gb":{"description":"Traffic used within the quota's current period (refreshed every few minutes)","type":"number"},"username":{"type":"string"}},"required":["subuser_id","username","used_gb"],"type":"object"}]},"SubuserQuotaV3":{"properties":{"created_at":{"format":"date-time","type":"string"},"period_seconds":{"description":"Absent for a lifetime quota","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["quota_gb","period_start_at","recurring","created_at","updated_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subuser-quotas":{"get":{"description":"Sub-users that have their own quota. A sub-user without a quota only shares its subscription's quota.","operationId":"resellerV3ListSubuserQuotas","parameters":[{"description":"Exact username","in":"query","name":"username","required":false,"schema":{"type":"string"}},{"in":"query","name":"recurring","required":false,"schema":{"type":"boolean"}},{"description":"Quota used up, or a non-recurring period has ended","in":"query","name":"exceeded","required":false,"schema":{"type":"boolean"}},{"description":"default 100, max 1000","in":"query","name":"per_page","required":false,"schema":{"type":"integer"}},{"description":"Cursor obtained from previous response","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubuserQuotasV3Response"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"List sub-user quotas","tags":["Resellers"]}}}}
````

## Give a sub-user its own quota

> The sub-user is blocked once it uses \`quota\_gb\` within its period, on top of its subscription's limits.\
> Without \`period\_seconds\` the quota counts lifetime traffic (up to 450 days back).\
> A non-recurring quota whose period has ended keeps the sub-user blocked until the quota is changed or removed.<br>

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"CreateSubuserQuotaV3Request":{"properties":{"period_seconds":{"description":"At least 3600. Omit for a lifetime quota.","type":"integer"},"period_start_at":{"description":"Defaults to now. Must not be in the future.","format":"date-time","type":"string"},"quota_gb":{"description":"Greater than 0","type":"number"},"recurring":{"description":"Start a new period automatically when one ends. Requires period_seconds.","type":"boolean"},"subuser_id":{"type":"string"}},"required":["subuser_id","quota_gb"],"type":"object"},"SubuserQuotaDetailsV3":{"allOf":[{"$ref":"#/components/schemas/SubuserQuotaV3"},{"properties":{"subuser_id":{"type":"string"},"used_gb":{"description":"Traffic used within the quota's current period (refreshed every few minutes)","type":"number"},"username":{"type":"string"}},"required":["subuser_id","username","used_gb"],"type":"object"}]},"SubuserQuotaV3":{"properties":{"created_at":{"format":"date-time","type":"string"},"period_seconds":{"description":"Absent for a lifetime quota","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["quota_gb","period_start_at","recurring","created_at","updated_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subuser-quotas":{"post":{"description":"The sub-user is blocked once it uses `quota_gb` within its period, on top of its subscription's limits.\nWithout `period_seconds` the quota counts lifetime traffic (up to 450 days back).\nA non-recurring quota whose period has ended keeps the sub-user blocked until the quota is changed or removed.\n","operationId":"resellerV3CreateSubuserQuota","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubuserQuotaV3Request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubuserQuotaDetailsV3"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Give a sub-user its own quota","tags":["Resellers"]}}}}
````

## GET /api/v3/reseller/subuser-quotas/{subuser\_id}

> Get a sub-user quota

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"SubuserQuotaDetailsV3":{"allOf":[{"$ref":"#/components/schemas/SubuserQuotaV3"},{"properties":{"subuser_id":{"type":"string"},"used_gb":{"description":"Traffic used within the quota's current period (refreshed every few minutes)","type":"number"},"username":{"type":"string"}},"required":["subuser_id","username","used_gb"],"type":"object"}]},"SubuserQuotaV3":{"properties":{"created_at":{"format":"date-time","type":"string"},"period_seconds":{"description":"Absent for a lifetime quota","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["quota_gb","period_start_at","recurring","created_at","updated_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subuser-quotas/{subuser_id}":{"get":{"operationId":"resellerV3GetSubuserQuota","parameters":[{"in":"path","name":"subuser_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubuserQuotaDetailsV3"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Get a sub-user quota","tags":["Resellers"]}}}}
````

## Update a sub-user quota

> Changing \`period\_start\_at\` or \`period\_seconds\` starts counting usage again from zero.

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"UpdateSubuserQuotaV3Request":{"properties":{"period_seconds":{"description":"0 removes the period (lifetime quota)","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"}},"type":"object"},"SubuserQuotaDetailsV3":{"allOf":[{"$ref":"#/components/schemas/SubuserQuotaV3"},{"properties":{"subuser_id":{"type":"string"},"used_gb":{"description":"Traffic used within the quota's current period (refreshed every few minutes)","type":"number"},"username":{"type":"string"}},"required":["subuser_id","username","used_gb"],"type":"object"}]},"SubuserQuotaV3":{"properties":{"created_at":{"format":"date-time","type":"string"},"period_seconds":{"description":"Absent for a lifetime quota","type":"integer"},"period_start_at":{"format":"date-time","type":"string"},"quota_gb":{"type":"number"},"recurring":{"type":"boolean"},"updated_at":{"format":"date-time","type":"string"}},"required":["quota_gb","period_start_at","recurring","created_at","updated_at"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subuser-quotas/{subuser_id}":{"patch":{"description":"Changing `period_start_at` or `period_seconds` starts counting usage again from zero.","operationId":"resellerV3UpdateSubuserQuota","parameters":[{"in":"path","name":"subuser_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSubuserQuotaV3Request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubuserQuotaDetailsV3"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Update a sub-user quota","tags":["Resellers"]}}}}
````

## DELETE /api/v3/reseller/subuser-quotas/{subuser\_id}

> Remove a sub-user quota

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Manage subscriptions, sub-users and sub-user quotas of a reseller account.","name":"Resellers"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/reseller/subuser-quotas/{subuser_id}":{"delete":{"operationId":"resellerV3DeleteSubuserQuota","parameters":[{"in":"path","name":"subuser_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Remove a sub-user quota","tags":["Resellers"]}}}}
````


# Statistics

## GET /api/v3/stats/traffic

> Traffic used per hour, day or week (UTC)

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Traffic statistics.","name":"Statistics"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"StatsV3Interval":{"default":"day","enum":["hour","day","week"],"type":"string"},"StatsV3Traffic":{"properties":{"buckets":{"items":{"$ref":"#/components/schemas/StatsV3TrafficBucket"},"type":"array"},"bytes":{"format":"int64","type":"integer"},"filter":{"$ref":"#/components/schemas/StatsV3Filter"},"subusers":{"description":"Present with `group_by=subuser`. Only sub-users with traffic in the range are listed.","items":{"$ref":"#/components/schemas/StatsV3SubUserTraffic"},"type":"array"}},"required":["filter","bytes","buckets"],"type":"object"},"StatsV3TrafficBucket":{"properties":{"bytes":{"format":"int64","type":"integer"},"end":{"format":"date-time","type":"string"},"partial":{"description":"The bucket reaches into the current 10-minute slot, so its value can still grow","type":"boolean"},"start":{"format":"date-time","type":"string"}},"required":["start","end","bytes","partial"],"type":"object"},"StatsV3Filter":{"properties":{"country":{"type":"string"},"from":{"format":"date-time","type":"string"},"interval":{"$ref":"#/components/schemas/StatsV3Interval"},"plan_id":{"type":"string"},"product_id":{"type":"string"},"status":{"items":{"type":"integer"},"type":"array"},"status_not":{"items":{"type":"integer"},"type":"array"},"subscription_id":{"type":"string"},"to":{"format":"date-time","type":"string"},"username":{"items":{"type":"string"},"type":"array"}},"required":["from","to"],"type":"object"},"StatsV3SubUserTraffic":{"properties":{"buckets":{"items":{"$ref":"#/components/schemas/StatsV3TrafficBucket"},"type":"array"},"bytes":{"format":"int64","type":"integer"},"username":{"type":"string"}},"required":["username","bytes","buckets"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/stats/traffic":{"get":{"operationId":"getTrafficStatsV3","parameters":[{"description":"Start of the range (UTC, inclusive). A date (`2026-10-01`, midnight) or an RFC 3339 date-time\n(`2026-10-01T08:30:00Z`). Rounded down to 10 minutes. Defaults to the first day of the current month.\n","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"End of the range (UTC). A date means the whole day is included (`2026-10-06` = until `2026-10-07T00:00:00Z`);\na date-time is exclusive. Rounded down to 10 minutes and never later than now. Defaults to the end of today.\nThe range is limited to 100 days.\n","in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"ISO 3166-1 alpha-2 country code","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"in":"query","name":"subscription_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"product_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"plan_id","required":false,"schema":{"type":"string"}},{"description":"Limit to these sub-users (API keys)","in":"query","name":"username","required":false,"schema":{"items":{"type":"string"},"type":"array"}},{"description":"Bucket size. Buckets start at `from`; the last one ends at `to`.","in":"query","name":"interval","required":false,"schema":{"$ref":"#/components/schemas/StatsV3Interval"}},{"description":"Also break traffic down per sub-user","in":"query","name":"group_by","required":false,"schema":{"enum":["subuser"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsV3Traffic"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Traffic used per hour, day or week (UTC)","tags":["Statistics"]}}}}
````

## GET /api/v3/stats/requests

> Requests per hour, day or week (UTC)

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Traffic statistics.","name":"Statistics"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"StatsV3Interval":{"default":"day","enum":["hour","day","week"],"type":"string"},"StatsV3Requests":{"properties":{"buckets":{"items":{"$ref":"#/components/schemas/StatsV3RequestsBucket"},"type":"array"},"failed":{"format":"int64","type":"integer"},"failed_reasons":{"items":{"$ref":"#/components/schemas/StatsV3FailedReason"},"type":"array"},"filter":{"$ref":"#/components/schemas/StatsV3Filter"},"succeeded":{"format":"int64","type":"integer"}},"required":["filter","succeeded","failed","buckets","failed_reasons"],"type":"object"},"StatsV3RequestsBucket":{"properties":{"end":{"format":"date-time","type":"string"},"failed":{"format":"int64","type":"integer"},"partial":{"description":"The bucket reaches into the current 10-minute slot, so its value can still grow","type":"boolean"},"start":{"format":"date-time","type":"string"},"succeeded":{"format":"int64","type":"integer"}},"required":["start","end","succeeded","failed","partial"],"type":"object"},"StatsV3FailedReason":{"properties":{"count":{"format":"int64","type":"integer"},"message":{"type":"string"},"status":{"type":"string"}},"required":["status","message","count"],"type":"object"},"StatsV3Filter":{"properties":{"country":{"type":"string"},"from":{"format":"date-time","type":"string"},"interval":{"$ref":"#/components/schemas/StatsV3Interval"},"plan_id":{"type":"string"},"product_id":{"type":"string"},"status":{"items":{"type":"integer"},"type":"array"},"status_not":{"items":{"type":"integer"},"type":"array"},"subscription_id":{"type":"string"},"to":{"format":"date-time","type":"string"},"username":{"items":{"type":"string"},"type":"array"}},"required":["from","to"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/stats/requests":{"get":{"operationId":"getRequestsStatsV3","parameters":[{"description":"Start of the range (UTC, inclusive). A date (`2026-10-01`, midnight) or an RFC 3339 date-time\n(`2026-10-01T08:30:00Z`). Rounded down to 10 minutes. Defaults to the first day of the current month.\n","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"End of the range (UTC). A date means the whole day is included (`2026-10-06` = until `2026-10-07T00:00:00Z`);\na date-time is exclusive. Rounded down to 10 minutes and never later than now. Defaults to the end of today.\nThe range is limited to 100 days.\n","in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"ISO 3166-1 alpha-2 country code","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"in":"query","name":"subscription_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"product_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"plan_id","required":false,"schema":{"type":"string"}},{"description":"Limit to these sub-users (API keys)","in":"query","name":"username","required":false,"schema":{"items":{"type":"string"},"type":"array"}},{"description":"Bucket size. Buckets start at `from`; the last one ends at `to`.","in":"query","name":"interval","required":false,"schema":{"$ref":"#/components/schemas/StatsV3Interval"}},{"description":"Only requests that ended with these HTTP status codes","in":"query","name":"status","required":false,"schema":{"items":{"type":"integer"},"type":"array"}},{"description":"Exclude requests that ended with these HTTP status codes","in":"query","name":"status_not","required":false,"schema":{"items":{"type":"integer"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsV3Requests"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Requests per hour, day or week (UTC)","tags":["Statistics"]}}}}
````

## GET /api/v3/stats/domains

> Top requested domains in the range

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Traffic statistics.","name":"Statistics"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"StatsV3Domains":{"properties":{"domains":{"items":{"$ref":"#/components/schemas/StatsV3Domain"},"type":"array"},"filter":{"$ref":"#/components/schemas/StatsV3Filter"}},"required":["filter","domains"],"type":"object"},"StatsV3Domain":{"properties":{"domain":{"type":"string"},"failed":{"format":"int64","type":"integer"},"succeeded":{"format":"int64","type":"integer"}},"required":["domain","succeeded","failed"],"type":"object"},"StatsV3Filter":{"properties":{"country":{"type":"string"},"from":{"format":"date-time","type":"string"},"interval":{"$ref":"#/components/schemas/StatsV3Interval"},"plan_id":{"type":"string"},"product_id":{"type":"string"},"status":{"items":{"type":"integer"},"type":"array"},"status_not":{"items":{"type":"integer"},"type":"array"},"subscription_id":{"type":"string"},"to":{"format":"date-time","type":"string"},"username":{"items":{"type":"string"},"type":"array"}},"required":["from","to"],"type":"object"},"StatsV3Interval":{"default":"day","enum":["hour","day","week"],"type":"string"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/stats/domains":{"get":{"operationId":"getDomainsStatsV3","parameters":[{"description":"Start of the range (UTC, inclusive). A date (`2026-10-01`, midnight) or an RFC 3339 date-time\n(`2026-10-01T08:30:00Z`). Rounded down to 10 minutes. Defaults to the first day of the current month.\n","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"End of the range (UTC). A date means the whole day is included (`2026-10-06` = until `2026-10-07T00:00:00Z`);\na date-time is exclusive. Rounded down to 10 minutes and never later than now. Defaults to the end of today.\nThe range is limited to 100 days.\n","in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"ISO 3166-1 alpha-2 country code","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"in":"query","name":"subscription_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"product_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"plan_id","required":false,"schema":{"type":"string"}},{"description":"Limit to these sub-users (API keys)","in":"query","name":"username","required":false,"schema":{"items":{"type":"string"},"type":"array"}},{"description":"Only requests that ended with these HTTP status codes","in":"query","name":"status","required":false,"schema":{"items":{"type":"integer"},"type":"array"}},{"description":"Exclude requests that ended with these HTTP status codes","in":"query","name":"status_not","required":false,"schema":{"items":{"type":"integer"},"type":"array"}},{"in":"query","name":"limit","required":false,"schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsV3Domains"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Top requested domains in the range","tags":["Statistics"]}}}}
````

## GET /api/v3/stats/countries

> Traffic per country in the range

````json
{"openapi":"3.0.3","info":{"title":"Ragutis","version":"1.0.0"},"tags":[{"description":"Traffic statistics.","name":"Statistics"}],"servers":[{"url":"/"}],"security":[{"userBearerAuth":[]}],"components":{"securitySchemes":{"userBearerAuth":{"bearerFormat":"JWT","description":"Bearer authentication with sentinel token for users.\n\nYou can use the following command to get the bearer token:\n\n```\ncurl -d '{\"username\":\"<username>\", \"password\":\"<password>\", \"pool\":\"<pool>\"}' -H \"Content-Type: application/json\" -X POST -s https://<sentinel/sentinel-testnet>.mysterium.network/api/v1/auth/password | jq -r '.auth_token'\n```\n\nSubstitute `<username>`, `<password>` and `<pool>` with your credentials.\nUse `sentinel` or `sentinel-testnet` as depending on the environment.\n","scheme":"bearer","type":"http"}},"schemas":{"StatsV3Countries":{"properties":{"countries":{"items":{"$ref":"#/components/schemas/StatsV3Country"},"type":"array"},"filter":{"$ref":"#/components/schemas/StatsV3Filter"}},"required":["filter","countries"],"type":"object"},"StatsV3Country":{"properties":{"bytes":{"format":"int64","type":"integer"},"country":{"type":"string"}},"required":["country","bytes"],"type":"object"},"StatsV3Filter":{"properties":{"country":{"type":"string"},"from":{"format":"date-time","type":"string"},"interval":{"$ref":"#/components/schemas/StatsV3Interval"},"plan_id":{"type":"string"},"product_id":{"type":"string"},"status":{"items":{"type":"integer"},"type":"array"},"status_not":{"items":{"type":"integer"},"type":"array"},"subscription_id":{"type":"string"},"to":{"format":"date-time","type":"string"},"username":{"items":{"type":"string"},"type":"array"}},"required":["from","to"],"type":"object"},"StatsV3Interval":{"default":"day","enum":["hour","day","week"],"type":"string"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/Err"},"path":{"type":"string"},"status":{"type":"integer"}}},"Err":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"fields":{"additionalProperties":{"$ref":"#/components/schemas/FieldError"},"type":"object"},"message":{"type":"string"}}},"FieldError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"paths":{"/api/v3/stats/countries":{"get":{"operationId":"getCountriesStatsV3","parameters":[{"description":"Start of the range (UTC, inclusive). A date (`2026-10-01`, midnight) or an RFC 3339 date-time\n(`2026-10-01T08:30:00Z`). Rounded down to 10 minutes. Defaults to the first day of the current month.\n","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"End of the range (UTC). A date means the whole day is included (`2026-10-06` = until `2026-10-07T00:00:00Z`);\na date-time is exclusive. Rounded down to 10 minutes and never later than now. Defaults to the end of today.\nThe range is limited to 100 days.\n","in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"ISO 3166-1 alpha-2 country code","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"in":"query","name":"subscription_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"product_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"plan_id","required":false,"schema":{"type":"string"}},{"description":"Limit to these sub-users (API keys)","in":"query","name":"username","required":false,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsV3Countries"}}},"description":"OK"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"unexpected error"}},"summary":"Traffic per country in the range","tags":["Statistics"]}}}}
````




---

[Next Page](https://docs.goproxies.com/llms-full.txt/1)

