# OVERVIEW

Welcome to the 9Proxy Documentation - your central hub for everything you need to use, configure, and integrate 9Proxy. Whether you’re spinning up your first IP, fine-tuning large workloads, or wiring 9Proxy into your automation stack, everything you need is right here. From setup to advanced API tricks, this guide covers it all.

## 1. What is 9Proxy?

**9Proxy** is a global residential proxy platform that provides access to real, high-quality residential IPs from around the world.

The platform offers flexible proxy types, usage models, and management tools suitable for both individual and enterprise users.

## 2. Product Types

9Proxy currently offers **two Residential Proxy models**, each designed for different usage scenarios and management needs.

<table data-card-size="large" data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Residential Proxy by IPs</strong></td><td><p>Stable, session-based residential IPs.</p><ul><li>Pay per IP, not per traffic</li><li>Unused IPs never expire</li><li>Natural residential uptime (a few hours to ~24h)</li><li>Ideal for fixed-IP sessions or account-based tasks</li></ul></td><td><a href="/pages/M0Ab9HDgxJJeLzvO2Eos">Learn more...</a></td><td><a href="/files/5pNAFh8iRx4YINs1htlj">/files/5pNAFh8iRx4YINs1htlj</a></td><td><a href="/pages/M0Ab9HDgxJJeLzvO2Eos">/pages/M0Ab9HDgxJJeLzvO2Eos</a></td></tr><tr><td><strong>Residential Proxy by GB</strong></td><td><p>Flexible, bandwidth-driven usage.</p><ul><li>Pay per GB, generate unlimited endpoints</li><li>180-day validity (unlimited for Enterprise)</li><li>Dynamic or sticky IP rotation</li><li>Ideal for automation, or high-volume workloads</li></ul></td><td><a href="/pages/eB6GojQmekPSQwDOcrYc">Learn more...</a></td><td><a href="/files/9etq9C6yvyEZTZ92xCF5">/files/9etq9C6yvyEZTZ92xCF5</a></td><td><a href="/pages/eB6GojQmekPSQwDOcrYc">/pages/eB6GojQmekPSQwDOcrYc</a></td></tr></tbody></table>

## 3. Comparison Overview

<table><thead><tr><th width="153">Feature</th><th>Residential by IPs</th><th>Residential by GB</th></tr></thead><tbody><tr><td><strong>Billing Type</strong></td><td>Fixed package (by number of IPs)</td><td>Fixed package (by total GB)</td></tr><tr><td><strong>Usage Period</strong></td><td>Unlimited until all IPs are used</td><td>Minimum 180 days (unlimited for Enterprise)</td></tr><tr><td><strong>IP Duration</strong></td><td>A few hours up to 24h (varies per IP)</td><td>Rotates automatically per request/session</td></tr><tr><td><strong>Generation Logic</strong></td><td>1 IP = 1 usage when forwarded</td><td>Generate unlimited endpoints; only GB deducted</td></tr><tr><td><strong>Traffic Limit</strong></td><td>Unlimited during active time</td><td>Limited by purchased GB</td></tr><tr><td><strong>IP Rotation</strong></td><td>No natural rotation. Supported through <strong>Auto Rotation Proxy</strong> (rotate at custom intervals on selected ports).</td><td><ul><li><strong>Rotating mode:</strong> automatically switches to a new IP.</li><li><strong>Sticky mode:</strong> switches when the configured session time ends.</li></ul></td></tr><tr><td><strong>Authentication</strong></td><td>Requires 9Proxy App (local port forwarding + optional Proxy Authentication)</td><td>Username/Password or IP Whitelist</td></tr><tr><td><strong>Technical Setup</strong></td><td>Desktop app required</td><td>Works directly from Dashboard</td></tr></tbody></table>

## 4. What You Will Learn

In this guide, you will find:

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>GETTING STARTED</td><td>Jump into 9Proxy! We now offer residential proxies by <strong>IPs</strong> and by <strong>bandwidth</strong>. Learn how to set up, tweak, and make the most of our next-gen proxy features</td><td>Learn more</td><td><a href="/files/vGRCjwGzdgqlJzo9slUH">/files/vGRCjwGzdgqlJzo9slUH</a></td><td><a href="/pages/PgcpRNuEYVdPDDYJTM5E">/pages/PgcpRNuEYVdPDDYJTM5E</a></td></tr><tr><td>API REFERENCES</td><td>Integrate 9Proxy with your existing stack and supercharge your automation.</td><td>Learn more</td><td><a href="/files/9ZHOkcJJIsNgJ0FT0xYa">/files/9ZHOkcJJIsNgJ0FT0xYa</a></td><td><a href="/pages/nHUhLJvRJyy7H73Z6rbT">/pages/nHUhLJvRJyy7H73Z6rbT</a></td></tr><tr><td>INTERGRATIONS</td><td>Connect 9Proxy to your automation workflows.</td><td>Learn more</td><td><a href="/files/Vrkv0iWWiIbaFjPOKfaT">/files/Vrkv0iWWiIbaFjPOKfaT</a></td><td><a href="https://docs.9proxy.com/intergrations">https://docs.9proxy.com/intergrations</a></td></tr><tr><td>BILLING &#x26; PAYMENT</td><td>Choose the right payment method and manage your subscriptions.</td><td>Learn more</td><td><a href="/files/Tk0Bw52y81MRR7JQ9LJZ">/files/Tk0Bw52y81MRR7JQ9LJZ</a></td><td><a href="/pages/3sk98vHmOYmekM90KFm0">/pages/3sk98vHmOYmekM90KFm0</a></td></tr><tr><td>ACCOUNT MANAGEMENT</td><td>Secure and manage your account settings.</td><td>Learn more</td><td><a href="/files/NuE0yMRIfqZb4B2FeFm7">/files/NuE0yMRIfqZb4B2FeFm7</a></td><td><a href="/pages/7qYNrUMAo39GH77sNfZa">/pages/7qYNrUMAo39GH77sNfZa</a></td></tr><tr><td>TROUBLESHOOTING</td><td>Solutions to common issues and best practices.</td><td>Learn more</td><td><a href="/files/OSbD0BGyaFtuZt9noUMe">/files/OSbD0BGyaFtuZt9noUMe</a></td><td><a href="/pages/dnfofFf2MXN9GdZDTAHd">/pages/dnfofFf2MXN9GdZDTAHd</a></td></tr></tbody></table>

{% hint style="success" %}
**Tip**: You can quickly find any topic using the Search bar at the top of the page. Click the search box and type your question - our search will instantly guide you to the most relevant article, example, or troubleshooting guide.
{% endhint %}

## 5. Next Steps

* [Set up your first Residential Proxy by IPs](/getting-started/residential-proxy-by-ips/for-macos-windows/configure-proxy)
* [Explore Bandwidth-Based Proxy Setup](/getting-started/residential-proxy-by-gb/proxy-generation)
* [View API Reference](/api-references/proxy-api)

## 6. Join Our Community

Stay up to date with the latest developments and connect with other 9Proxy users:

* [Facebook](https://www.facebook.com/9Proxy)
* [Reddit](https://www.reddit.com/r/9Proxy/)
* [X (Twitter)](https://x.com/9ProxyOfficial)
* [Telegram](https://t.me/The9Proxy)
* [TikTok](https://www.tiktok.com/@9proxy.official)
* [Youtube](https://www.youtube.com/@9Proxy)


# Residential Proxy by IPs

**Residential Proxy by IPs** gives you access to real residential IP addresses from 9Proxy’s global network through a local port-forwarding system inside the 9Proxy App. Instead of paying for traffic, you pay for the number of IPs, giving you full control over when and how each proxy is activated.

<figure><img src="/files/5pNAFh8iRx4YINs1htlj" alt=""><figcaption></figcaption></figure>

## 1. How It Works

* You purchase a fixed number of IPs.
* An IP is only deducted when you [forward it to a local port](/getting-started/residential-proxy-by-ips/for-macos-windows/configure-proxy).
* Unused IPs never expire and stay in your balance indefinitely.
* Once activated, a proxy stays online for several hours up to \~24 hours (varying naturally due to the residential nature of the pool).
* If an IP goes offline or expires, you can use [**Auto Refresh Proxy**](/getting-started/residential-proxy-by-ips/for-macos-windows/auto-refresh-proxy) to automatically replace it with a fresh one, or enable [**Auto Rotation Proxy**](/getting-started/residential-proxy-by-ips/for-macos-windows/auto-rotation-proxy) to rotate proxies on a schedule.

## 2. Core Workflow

* Download and log in to the 9Proxy App (Windows, macOS, Linux).
* Filter proxies by country, state, city, ZIP code, or ISP.
* Forward an IP to a port and use it via `localhost:port.`
* (Optional) Enable Proxy Authentication to use the format `username:password:localhost:port.`

## 3. Quick Start

Follow these steps to get started with your **Residential Proxy by IPs**.

{% stepper %}
{% step %}

### Sign up or Sign in

If you are already signed up, skip to Step 2

If you haven’t signed up yet, you can register for free here:[ Sign Up for 9Proxy](https://9proxy.com/sign-up)

You can sign up quickly using your Google account.
{% endstep %}

{% step %}

### Purchase a Plan

Select a Residential Proxy by IP package that fits your needs.

Payments are supported via [**Cryptocurrency**](/billing-and-payment/cryptocurrency), [**Local Methods**](/billing-and-payment/local-payment), [**Credit Card**](/billing-and-payment/credit-card), [**Google Pay**](broken://pages/eR5drBcReqiMwSD2ONIb), **Alipay**, and [**9Proxy Wallet**](/billing-and-payment/9proxy-wallet).
{% endstep %}

{% step %}

### Download and Install

Download and install the 9Proxy app for your operating system: [**Windows**](https://9proxy.com/download/windows), [**macOS**](https://9proxy.com/download/macos), or [**Linux**](https://9proxy.com/download/linux).
{% endstep %}

{% step %}

### Configure and Start Using

Open the app to forward ports and start using your proxies.

For setup details, see the [Port Forwarding Guide](/getting-started/residential-proxy-by-ips/for-macos-windows/configure-proxy).
{% endstep %}
{% endstepper %}

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Proxy2Web

**Proxy2Web** is an IP-based proxy solution that operates through a 9Proxy-managed endpoint.\
It allows you to access websites directly from the 9Proxy Dashboard without installing software, configuring local proxies, or setting up authentication.

## How Proxy2Web Works

When you create a Proxy2Web session:

* 9Proxy assigns a residential IP on your behalf
* The proxy runs on our infrastructure, not on your device
* You receive ready-to-use proxy credentials (host, port, username, password)

Your IP balance is affected only after a connection is successfully established.\
If you never connect, nothing is deducted.

## Accessing Proxy2Web

{% embed url="<https://www.youtube.com/watch?v=EY58JRP_fwo>" %}

{% stepper %}
{% step %}
**Log in to the** [**9Proxy Dashboard**](https://9proxy.com/dashboard)
{% endstep %}

{% step %}
**Navigate to** [**Residential Proxies → IPs**](https://9proxy.com/dashboard/residential-proxy-ip)

<figure><img src="/files/0FmuCRM38Lf0sQBxkQOU" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Select Proxy2Web**
{% endstep %}

{% step %}
**Click Create Proxy**
{% endstep %}
{% endstepper %}

From here, you’ll configure how the proxy behaves.

## Getting Started

### 1. Choose a Sub-User

Proxy Web requires selecting a Sub-User to manage access, IP allocation, and usage tracking. Think of a Sub-User as a “profile” that defines how this proxy session can be used.

If you don’t have a Sub-User yet (or want to create a new one):

{% stepper %}
{% step %}
**Click Add New**

<figure><img src="/files/GVq1VYyfNjGjCDnUvHT5" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Enter a Username and Password**

<figure><img src="/files/3KgdaXRRGvoZhwRXNoxp" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**In Usage Settings, choose:**

A specific IP/GB limit, or Unlimited, if you want this Sub-User to use your main account’s resources without restriction
{% endstep %}

{% step %}
**(Optional) Add a Remark for easy identification**
{% endstep %}

{% step %}
**Save the Sub-User**
{% endstep %}
{% endstepper %}

If you already have Sub-Users, select one from the Sub-User dropdown

<figure><img src="/files/tl5MYuNJFj6B579Ks4ob" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Note:** You can reuse existing Sub-Users created under Residential Proxies by GB.
{% endhint %}

### 2. Select Proxy Location

Next, choose where your proxy IP should come from. You can be as specific as you like:

<table data-header-hidden><thead><tr><th width="172.888916015625"></th><th></th></tr></thead><tbody><tr><td><strong>Country / Region</strong></td><td>Choose a specific country. If you don’t need a specific location, choosing Random lets the system assign an available residential IP automatically.</td></tr><tr><td><strong>State</strong></td><td>Displays available states within the selected country.</td></tr><tr><td><strong>City</strong></td><td>Shows cities available under the chosen state.</td></tr><tr><td><strong>ISP</strong></td><td>Filter proxies by Internet Service Provider.</td></tr></tbody></table>

{% hint style="info" %}
Tip: Keep in mind that the more filters you apply, the fewer IPs may be available.
{% endhint %}

### 3. Configure Duration (Optional)

By default, Proxy2Web is designed to be worry-free.

If you don’t configure anything here, the system will automatically replace a proxy when it goes offline. In most cases, a proxy IP stays active for several hours, and sometimes up to 24 hours, depending on availability.

<figure><img src="/files/yLsMdzEUy0l1uSBEFCYe" alt=""><figcaption></figcaption></figure>

If you choose to set a Duration, you are telling the system exactly how long you want to keep the current proxy before switching to a new one. Once that time ends, the proxy will be replaced automatically - even if it is still online.

If the proxy goes offline before the duration ends, a new one will be assigned immediately. The system does not wait for the timer to finish, so your access continues without interruption.

### 4. Review Proxy Credentials

After creating the session, you’ll see the proxy details on the right side of the screen, including host, port, username, and password.

You can use these details directly in your browser or any supported tool.

At this point, no IP has been deducted yet.

An IP is deducted only when you actually connect successfully.

#### 4.1. Proxy Endpoint Generator

The Proxy Endpoint Generator helps you format proxy credentials in the way your tool or browser expects.

<figure><img src="/files/qUjb1xE8bKTGW1V4DINd" alt=""><figcaption></figcaption></figure>

You can choose from multiple formats, such as:

```javascript
//format

username:password@hostname:port

hostname:port:username:password

username:password:hostname:port

```

If you just want to test quickly, you can copy an example directly from Endpoint Connection Examples.

If you prefer, you can also build your own connection string.

#### 4.2. Usage History (24H List)

The Usage History (24H List) shows all proxy IPs you’ve used within the last 24 hours.

This is especially useful if you want to:

* Reuse a proxy that becomes available again
* Quickly replace a proxy that no longer fits your needs

1. **Re-use an IP**

If a previously used proxy comes back online, you can reuse it without spending a new IP.

Just open the icon ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAYCAYAAAAGXva8AAACtElEQVR4AexUXU8aURA9uxgpooigi1QFRWjAipJWrA+26U+vaR8UGgORkFKUzw1iJGADFLDA9s411F2Bhb60D+1mZ3fu3Jk592POiJLkUP60iPgLz3/QkYduND7D+robweABjo7ecwkGX3Ob0WgcGTPKONXxzszMYGdnH+HwMVyubRgMIiqVMhdRNMDt9rK5t/D7g2zOMApHY5sISkn39g5gs60gl0vj7OwEsVgEl5dfuMTjEW4rFDJYXnZgd/cVRFE/rf4sW5/X68fc3DzS6SRkOY9er8es2rfb7YJAc2xRCwuL2Nz0ah2ejHRBCUySnMjnr3BzU3oSOjykRV1fy3A6N2Bk9z/s8WDRBXU61/nOSqXCg/cUX1nOQRAESNLqWG9dUKvVhlqtwoEpA1Wuy+UhVSNkW1tzc1un00ajUYfVuszHoz66oHRElGQQSFVMAD7fDt+NIAjw+V7CxRZiMDxWbbPZgNlsHoQN/XVBFaWvoUAud4VSqQiH4zmnRyAQYrqT2Qq8kB6z95kqMBn96oK22y2YTPOayEwmxUCKsNslRiM7r+hM5qvGx2Qyo9X6rrGpB7qgtVoVFssiZme13YaAi8Us3x3RRJ2QrsRiseLurqI2a3RdUKKJIAjweF5ogmhANCJukq4WrzcARVFQLo+nmC5oq9Xk/KROs7ExXLVqMNK3tnxYWrKDuKouQJpTiy4oOdJRErjb7WHFsweqYLKrhY6f2h/Rpl7/hmxWe8dqX9InglLbi8ejqFYrrLdKODx8h/39MLa3/YwuAYRCb1izP2a8tOH2toxE4pwfLyUfJxNBKZB6azIZQzT6iRVPFv2+gpWVVV7Bvd4PtrM0IpGPSKUSvxoJxY2TqUAHwXRPspzFxcVnnJ5+YHLC9HNGoQLu7zsDt4n/3wKdmG1Kh38H9CcAAAD//8F052UAAAAGSURBVAMAkzMeusBPG6AAAAAASUVORK5CYII=) next to the user string. A dropdown will show IPs used within the last 24 **hours under that user. Select Re-use IP.**

<figure><img src="/files/NnLSDwJwW23wUt6iMVVw" alt=""><figcaption></figcaption></figure>

2. **Switch IP**

If you want a fresh proxy immediately, choose Switch IP.

This assigns a new IP right away and deducts one IP from your balance.

## Important Notes

<details>

<summary><strong>IP Deduction Rules</strong></summary>

* IPs are not deducted when generating or preparing a session
* An IP is deducted only when the proxy connection is successfully established

</details>

<details>

<summary><strong>Auto Refresh Proxy (Default Enabled)</strong></summary>

Auto Refresh Proxy is enabled by default.

* If the active IP goes offline during use, the system will automatically switch to another available IP
* This ensures uninterrupted access without manual intervention

</details>


# For macOS/Windows


# Windows Install & Download

This guide covers installing **9Proxy** on **Windows** via the standard installer and using the portable version for users who prefer not to perform a full system installation.

## 1. System Requirements

* **OS**: Windows 8, 8.1, 10, 11 (64-bit recommended)
* **CPU**: 2 GHz or faster
* **RAM**: 4 GB minimum
* **Disk Space**: 200 MB free space
* **Internet**: Stable connection for installation and updates
* **Permissions**: Administrator rights for the installer version

## 2. Downloading 9Proxy

<figure><img src="/files/miUBvH9zvwMNJ3HBTQNc" alt=""><figcaption></figcaption></figure>

1. Go to the official download page:[ https://9proxy.com/vi/download/windows](< https://9proxy.com/vi/download/windows>)
2. Under Download version 9Proxy for Windows, choose:&#x20;

* **Windows Installer (.exe)** – for standard installation
* **Windows Portable (.zip)** – for portable use without installation

## 3. Installing 9Proxy (Installer Version)

{% stepper %}
{% step %}

### Download the Installer

Download the 9proxy-windows-installer.exe file to your computer
{% endstep %}

{% step %}

### Run the Installer

* Locate the downloaded <kbd>9proxy-windows-installer.exe</kbd> file.
* Right-click and select **Run as administrator** to avoid permission issues.
  {% endstep %}

{% step %}

### Follow the Setup Wizard

* Click **Next** on the welcome screen.
* Accept the license agreement.
* Choose an installation directory (default is C:\Program Files\9Proxy).
* Select additional options (e.g., create a desktop shortcut).
* Click **Install**.

<figure><img src="/files/N9tJdNjYo7hZmo512oJS" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Finish Installation

* When installation completes, click **Finish** to launch 9Proxy immediately.
* You can also start it later from the **Start Menu** or **desktop shortcut**.
  {% endstep %}

{% step %}

### First-Time Setup

* [Log in ](https://9proxy.com/sign-in)with your **9Proxy account credentials**.
* Start configuring your proxy settings.
  {% endstep %}
  {% endstepper %}

## 4. Using 9Proxy Portable (No Installation)

The Portable version runs directly without modifying your Windows registry or requiring admin rights (except for certain system-wide proxy configurations).

{% stepper %}
{% step %}

### Download the Portable ZIP

From [the download page](https://9proxy.com/download/windows), get <kbd>9proxy-windows-portable.zip</kbd>.

<figure><img src="/files/BTpzINLpYJZICgndCjD6" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Extract the Files

* Right-click the <kbd>9proxy-windows-portable-x64.zip</kbd> file → **Extract All**.

<figure><img src="/files/0xS1XRmxcJTvzUkFmlSJ" alt=""><figcaption></figcaption></figure>

* Choose a location (e.g., D:\Apps\9ProxyPortable).
  {% endstep %}

{% step %}

### Run the Application

* Open the extracted folder.
* Double-click <kbd>**S9Proxy.App.exe**</kbd> to start the application.

<figure><img src="/files/ijVdbdOOFO2UBYVMIO8e" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## 5. Troubleshooting

<details>

<summary>Installation blocked by Windows SmartScreen</summary>

Click More info → Run anyway (ensure the file is from our official site).

</details>

<details>

<summary>App fails to launch</summary>

* Make sure .NET Framework 4.7.2 or later is installed.
* Run as administrator if system proxy configuration is failing.
* The app may be running in the background. Open Task Manager and end the existing S9proxy.App task

</details>

## 6. Next Steps After Installation

Once 9Proxy is installed and running, you can explore advanced configuration to optimize your setup:

* [**How to Configure Proxies**](/getting-started/residential-proxy-by-ips/for-macos-windows/configure-proxy): set up proxy authentication and connect devices
* [**Set Up a Custom Port Range**](/getting-started/residential-proxy-by-ips/for-macos-windows/set-up-a-custom-port-range): manage multiple ports for different apps
* [**Auto Rotation Proxy**](/getting-started/residential-proxy-by-ips/for-macos-windows/auto-rotation-proxy): enable automatic IP rotation for scraping or automation
* [**Auto Refresh Proxy**](/getting-started/residential-proxy-by-ips/for-macos-windows/auto-refresh-proxy): refresh proxy IPs automatically at intervals
* [**Port Configuration**](/getting-started/residential-proxy-by-ips/for-macos-windows/configure-proxy): adjust port binding, IP format, and session settings\\

These guides will help you fully customize your proxy environment and take advantage of all 9Proxy features.

## 7. FAQs

<details>

<summary>Can I use both the Installer and Portable versions?</summary>

Yes. You can run both on the same machine, but note that they keep their settings separately and do not share configurations.

</details>

<details>

<summary>Will the Portable version auto-update?</summary>

Yes. When a new release is available, the Portable version will display a notification. Simply click Update, and the app will automatically download and apply the latest version.

</details>

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# macOS Install & Download

This guide explains how to download, install, and run 9Proxy on macOS 12 Monterey or later.

## 1. System Requirements

* **OS**: macOS 12 Monterey, 13 Ventura, or later
* **RAM**: 4 GB minimum
* **Disk Space**: 200 MB free space
* **Network**: Stable Wi-Fi or mobile data connection

## 2. Downloading 9Proxy for macOS

<figure><img src="/files/UEkRBd531XGhClfQVWR9" alt=""><figcaption></figcaption></figure>

1. Visit the official download page:[ https://9proxy.com/download/macos](https://9proxy.com/download/macos?utm_source=chatgpt.com)
2. Click **Download for macOS**.
3. Save the installer file (<kbd>**9proxy-macos.pkg**</kbd>) to your computer.

<figure><img src="/files/w5GeFybGxxayfsJWOJvW" alt=""><figcaption></figcaption></figure>

## 3. Install 9Proxy (PKG Installer)

{% stepper %}
{% step %}

### Run the Installer

* Double-click the file <kbd>**9proxy-macos.pkg**</kbd>.
* Click **Continue** and follow the on-screen instructions.
  {% endstep %}

{% step %}

### Complete Installation

When the installer finishes, 9Proxy will be added to your **Applications** folder.
{% endstep %}
{% endstepper %}

## 4. Sign In & Configure

{% stepper %}
{% step %}

### Sign In

* Open **9Proxy** from your **Applications** folder.
* Enter your 9Proxy account credentials to sign in.
  {% endstep %}

{% step %}

### Configure Settings

* [**Proxy Configuration**](/getting-started/residential-proxy-by-ips/for-macos-windows/configure-proxy): add, authenticate, and manage proxies.
* [**Custom Port Ranges**](/getting-started/residential-proxy-by-ips/for-macos-windows/set-up-a-custom-port-range): control which ports are assigned to your proxies.
* [**Auto Rotation Proxy**](/getting-started/residential-proxy-by-ips/for-macos-windows/auto-rotation-proxy)**:** enable scheduled IP rotation.
* [**Auto Refresh Proxy**](/getting-started/residential-proxy-by-ips/for-macos-windows/auto-refresh-proxy): refresh proxies automatically for maximum uptime.
* [**Port Configuration**](/getting-started/residential-proxy-by-ips/for-macos-windows/port-configuration): fine-tune IP/port binding for advanced setups.
  {% endstep %}
  {% endstepper %}

## 5. FAQs

<details>

<summary>What if installation fails?</summary>

Make sure your macOS version is supported and you have enough free disk space. If issues persist, contact support with a screenshot of the error.

</details>

<details>

<summary>Can I use the same account on multiple devices?</summary>

Yes, but please be cautious. For your security, avoid logging in on unfamiliar or untrusted devices.

</details>

<details>

<summary>What if I’m using macOS 11?</summary>

The 9Proxy app is currently compatible with macOS 12 and above. To use the application, please update your system to macOS 12 or later. Once updated, you’ll be able to enjoy 9Proxy services seamlessly.

</details>

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Configure Proxy

{% hint style="success" %}
To ensure smooth functionality, our proxies operate through port forwarding, which requires our dedicated application. Follow this step-by-step guide to configure and manage your proxies effectively.
{% endhint %}

<figure><img src="/files/JLXMiwfbzVfPNwApxXqe" alt=""><figcaption></figcaption></figure>

## 1. Accessing the Proxy List

{% stepper %}
{% step %}
Open the **9Proxy app**
{% endstep %}

{% step %}
Navigate to the **Proxy List** section.

<figure><img src="/files/pRHdHw5ZYP0TgO8dd6LX" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Browse the available proxies and select one that fits your needs. If you want more options, click **Refresh List** to load additional proxies.

<figure><img src="/files/DYjnxDx31BCvhIJpit9O" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="success" %}
**Note**: You can configure your proxy with precise geolocation targeting by selecting specific countries, cities, states, ZIP codes, or ISPs. This ensures optimal performance and accuracy for your use case.
{% endhint %}

## 2. Configuring Proxy Forwarding

{% hint style="success" %}
**Tip**: Before proceeding, ensure that you have [configured a valid port range](/getting-started/residential-proxy-by-ips/for-macos-windows/set-up-a-custom-port-range). This allows proper allocation and management of proxy connections within your setup.
{% endhint %}

* To use a proxy, you must first forward it to a designated port.
* Right-click on your selected proxy OR click the icon ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfQPmUWQJ-CNgcOgGED_fTazjCRQP-nRtn3ij_4EPfVVM6f0N9O1Fy5rqgAYrd3UVLibomn75vAA--KV6vAJ3nwbRyc1UPSQBzPaEgUndDW7alWpfiR80pzG7sKaKYioj-WR44RXQ?key=spbkq0hgzw2HbaDGxKNF9Zi8)→ Choose one of these options:

<figure><img src="/files/f6vgPiiedBGffM5731pf" alt=""><figcaption></figcaption></figure>

<table data-header-hidden><thead><tr><th width="259"></th><th></th></tr></thead><tbody><tr><td><strong>Forward to Port</strong></td><td>Assigns a proxy to a single port.</td></tr><tr><td><strong>Forward to Multiple Ports</strong></td><td>Assigns multiple proxies to multiple ports.</td></tr><tr><td><strong>Forward to Free Ports</strong></td><td>Automatically assigns proxies to unused ports in your range.</td></tr><tr><td><strong>Forward to All Ports</strong></td><td>Assigns proxies to all ports in your range (including used and free ports).</td></tr><tr><td><strong>Forward to Configured Ports</strong></td><td><p>Assigns proxies only to pre-configured ports. </p><p>You must configure the port settings before selecting this option.</p></td></tr></tbody></table>

After successfully forwarding proxies to ports, navigate to the **Forwarding List** section on the left side. Here, you will find detailed information about the proxies you port-forwarded, their assigned ports, and their current status.

{% hint style="success" %}

### NOTE

To verify that your proxy is active and functioning correctly, click **Test** next to the proxy entry to perform a real-time status check. If the test is successful, your proxy is ready to use.
{% endhint %}

Once confirmed, copy the **local IP** and **port** and configure it in your proxy-supported software, browser, or extension.

### Proxy Authentication

By default, your proxies can connect directly through local ports without requiring username and password authentication.

If you prefer to restrict proxy access or use credential-based login, you can enable **Proxy Authentication** in the **Forwarding List.**

<figure><img src="/files/v8ZfHWpxdKwbBq7EoSZS" alt=""><figcaption></figcaption></figure>

## 3. Forwarding List

After successfully forwarding proxies to ports, navigate to the **Forwarding List** section on the left side. Here, you will find detailed information about the proxies you port-forwarded, their assigned ports, and their current status.

<figure><img src="/files/zw2I4NdFzDOKXZS2CON9" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Note: To verify that your proxy is active and functioning correctly, click Test next to the proxy entry to perform a real-time status check. If the test is successful, your proxy is ready to use.
{% endhint %}

<figure><img src="/files/14duhOZHkFsrIj3w2XwF" alt=""><figcaption></figcaption></figure>

## 4. Test Proxies with Proxy Check

The **Proxy Check** feature allows you to test proxies directly inside the 9Proxy App - quickly and accurately.

To run a test:

* Click the three-dot icon next to the proxy you want to test.
* Select **Proxy Check**.

<figure><img src="/files/14fMjmZuLcTtXv0r4KJb" alt=""><figcaption></figcaption></figure>

* Choose a **Lookup Channel**.

<figure><img src="/files/IHnxfCVImvQW0Tpaztm3" alt=""><figcaption></figcaption></figure>

* Click Test to confirm that your proxy is working properly before starting your tasks.

**Result**: If the test passes, your proxy is successfully connected and ready to use.&#x20;

Click the **Copy** icon next to any proxy you want to use to quickly copy its `localhost`, `port`, `username`, and `password` (if available). If you need all of them, simply click **Copy All** to copy every proxy’s details at once.

<figure><img src="/files/siLs62YzJY0UtuBsCgs1" alt=""><figcaption></figcaption></figure>

## 5. Managing Your Proxies Efficiently

{% columns %}
{% column width="50%" %}

#### Today List

The **Today List** displays the proxies you have used in the last 24 hours since you initially forwarded them to a port. If any of these proxies become active again during this period, you can continue using them at no additional cost.

To verify their current availability, click Test to check their real-time status.

After 24 hours, proxies that are no longer in use will automatically be removed from the list.
{% endcolumn %}

{% column width="50%" %}

<div align="right"><figure><img src="/files/sQsNL9Oypz20DOqMyIj5" alt=""><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}

#### Favorites

The **Favorites** feature allows you to save the IP addresses you prefer, making it easier to find and access them later.

How to Save Proxies to Favorites

* Open the **Proxy List** or **Today List** in your dashboard.
* Click the "☆" (star) icon next to the proxy you want to save.
* Once marked as a favorite, the star will turn yellow (★), indicating the proxy is now in your Favorites list.
  {% endcolumn %}

{% column %}

<figure><img src="/files/7zvWaFMV41z0rMnMCxaI" alt=""><figcaption></figcaption></figure>

{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Use Proxies on Two or More Devices

Looking to use your 9Proxy connection on multiple devices like phones, tablets, or additional computers? Follow this easy step-by-step guide.

## Before You Begin

Make sure:

* Both your computer (running the 9Proxy App) and the other device (e.g., iPhone/iPad/Android devices) are on the same local network (LAN).
* Your firewall or VPN isn’t blocking connections between devices.

### Step 1: Find the LAN IP Address of Your Computer

You’ll need your computer’s **LAN IP** address to connect other devices to the proxy.

#### For macOS

There are 2 ways to find your Mac’s internal IP address:

**Option 1: System Settings**

* Open **System Settings**.
* Go to **Network**.
* Make sure you’re connected to the correct Wi-Fi (your router’s name).

<figure><img src="/files/WaYLqFlR4cGVuOVB4WqW" alt=""><figcaption></figcaption></figure>

* Click **Advanced** > **TCP/IP**.
* Your IP address will appear under I**Pv4 Address**.

<figure><img src="/files/rYZLGSZNocwJ8dR9wbIn" alt=""><figcaption></figcaption></figure>

**Option 2: Terminal**

* Open **Spotlight**, type **Terminal**, and hit **Enter**.
* Type the command: `ipconfig getifaddr <network interface>`
* Your **LAN IP** will be shown.
* (Optional) To check your public IP, use: `curl ifconfig.me`

#### For Windows

* Open **PowerShell** > **Run** this command:&#x20;

{% code overflow="wrap" %}

```
(Get-NetIPConfiguration | Where-Object { $_.IPv4DefaultGateway -ne $null -and $_.NetAdapter.Status -eq 'Up' }).IPv4Address.IPAddress
```

{% endcode %}

<figure><img src="/files/BqSmJXFTBIBNT1L3GDBH" alt=""><figcaption></figcaption></figure>

* Then you’ll see the current **LAN IP** address of your computer.

<figure><img src="/files/BbZExnvA31MyY3Xo1MEJ" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
&#x20;If nothing is returned, please contact our support team for help.
{% endhint %}

## Step 2: Open 9Proxy and Select the Correct IP

* Launch the **9Proxy App** on your computer.
* Select the **LAN IP** address you just found from the list in the app — you’ll find it in the Port section at the end of the **Proxy List**.

<figure><img src="/files/gOtKJXjdWmura3Jynt5v" alt=""><figcaption></figcaption></figure>

* Make sure the **API Port** is correctly configured in the **API Reference** section of the app.

## Step 3: Test The Connection

Now it’s time to test the connection on your other devices (phones, tablets, etc.).

{% stepper %}
{% step %}
Open the browser on the second device.
{% endstep %}

{% step %}
In the address bar, enter: `http://<YourComputerLANIP>:<APIPort>/api/port_status?t=2`

* Replace `<YourComputerLANIP>`  with your computer’s IP address from **Step 1**.
* Replace `<APIPort>` with your configured proxy port.
  {% endstep %}
  {% endstepper %}

If everything is set up correctly, you’ll see this response:

```
{
  "error": false,
  "message": "Success",
  "data": [
    {
      "address": ":60000",
      "city": "Westlands",
      "public_ip": "197.***.***.**",
      "online": true
    }
  ]
}
```

Once both devices are connected to the same local network (**LAN**), you can configure the proxy on your other devices by using the **LAN IP** address and the port that you’ve set up in the **9Proxy App**.

## Troubleshooting

<details>

<summary>No Response or Timeout Error?</summary>

* Ensure all devices are on the same Wi-Fi/network.
* Temporarily disable any firewall or VPN software on your computer.
* Double-check the IP and port settings.
* Try refreshing or using another browser.

</details>

Still not working? **Contact support**, and we’ll help you troubleshoot!


# Set Up a Custom Port Range

Easily configure a custom port range in 9Proxy by selecting your starting port and defining a range that suits your needs.

{% stepper %}
{% step %}

### Access Port Settings

* Open the **9Proxy App**
* Navigate to **Settings** → Select **Port Configuration**

<figure><img src="/files/BH8JkOrV0M5FKDgAkubB" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Define Your Custom Port Range

* **Starting Port** – Enter the first port number in your allocated range
* **Number of Ports** – Specify how many consecutive ports should be allocated, starting from the defined Starting Port

<figure><img src="/files/GM3uwTcTTqBOOF8xhiX5" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="success" %}

### NOTE

* Ensure no other applications (e.g., VPNs, firewalls) are using the selected ports.
* Be cautious when changing the number of ports, as it may affect ports that have already been configured.
  {% endhint %}

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Auto Rotation Proxy

The **Auto Rotation Proxy** feature enhances security and efficiency by automatically replacing IPs on active ports at a set interval. This ensures you always have fresh IPs, reducing the risk of detection or blocking.

## 1. How to Enable Auto Rotation Proxy

Follow these steps to enable and customize the feature:

{% stepper %}
{% step %}
Open the **9Proxy App**

<figure><img src="/files/HoBe3SpfvZ8h6mV1LYeB" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Locate the **Auto Rotation Proxy** option
{% endstep %}

{% step %}
Toggle the feature **ON** to enable automatic IP rotation

<figure><img src="/files/EyUzE5DbiDN1MTbCdGS4" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Adjust the settings according to your preferences

<figure><img src="/files/jMwCDaPOKVJ1lGzjaehX" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## 2. Customization Options

The Auto Rotation Proxy feature offers multiple configuration options:

<figure><img src="/files/9EZJUvb4VNbDCSpaURIT" alt=""><figcaption></figcaption></figure>

### 2.1. Scheduled Activation & Deactivation

Set specific days and time ranges for when auto rotation should be active. This allows you to rotate proxies only during your working hours or automated task periods - and automatically stop rotation when not in use.

### 2.2. Rotation Interval & Delay

Define how frequently proxies should rotate on active ports.

* **Rotation Interval**: How often each IP changes (e.g., every 100 seconds).
* **Rotation Delay**: The waiting time before assigning a new proxy to the same port.

{% hint style="success" %}
**Tip**: Avoid setting intervals shorter than 30 seconds, since connections may need time to stabilize before switching. Rotating too quickly can waste IPs before they are properly connected.
{% endhint %}

### 2.3.  Port Selection

Choose where to apply the auto rotation feature:

* **All Ports**: Rotate proxies across all active ports.
* **Selected Ports**: Apply rotation only to specific ports configured under [**Port Configuration**](/getting-started/residential-proxy-by-ips/for-macos-windows/configure-proxy).

<figure><img src="/files/2WC1vPHU2V2KgyEwdX7k" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}

## Important

* Each automatic rotation consumes a new IP from your available pool.
* Using Scheduled Activation helps prevent unnecessary rotations during idle time - keeping your IP usage efficient.
  {% endhint %}

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Auto Refresh Proxy

The **Auto Refresh Proxy** feature ensures a seamless connection by automatically forwarding new IPs to ports currently in use when the assigned IPs go offline. This prevents disruptions, eliminating the need for manual port forwarding.

## 1. How To Enable Auto Refresh Proxy

Follow these steps to enable and configure the feature according to your needs:

{% stepper %}
{% step %}
Open the **9Proxy App**

<figure><img src="/files/HoBe3SpfvZ8h6mV1LYeB" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Locate the **Auto Refresh Proxy** option

<figure><img src="/files/IWSLckr6oelxnHxmERiL" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Toggle the feature **ON** to enable automatic IP forwarding
{% endstep %}

{% step %}
Configure additional settings as required.
{% endstep %}
{% endstepper %}

## 2. Customization Options

The **Auto Refresh Proxy** feature includes several settings to tailor its behavior:

### 2.1. Scheduled Activation & Deactivation

* Set specific days and time ranges for when the feature should be active.
* This aligns IP refreshing with your active hours and prevents unnecessary IP usage during idle periods.

### 2.2. Delay Before Forwarding a New Proxy

* Define a time delay before a new proxy is forwarded to a port after the previous one goes offline.
* This helps prevent overly frequent IP changes.

{% hint style="success" %}
**Tip**:&#x20;Avoid setting the delay shorter than 30 seconds, as connections may need time to stabilize before switching. Rotating too quickly can waste IPs before they connect properly.
{% endhint %}

<figure><img src="/files/1B5jdbPb9KZ8HdtKdBBt" alt=""><figcaption></figcaption></figure>

### 2.3. Limit The Number of Proxies Per Port

* Set the maximum number of proxies that can be refreshed on each port within a given period.
* Help optimize IP usage and prevents excessive consumption.

### 2.4. Enable For Specific Ports Only

Choose where to apply the Auto Refresh feature:

* **All Ports**: Refresh proxies across all active ports.
* **Selected Ports**: Apply refresh only to specific ports configured under [**Port Configuration**.](/getting-started/residential-proxy-by-ips/for-macos-windows/port-configuration)

<figure><img src="/files/s58ECOZnTaNKZeVjSCih" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}

### Important

* Activating this feature will consume IPs as offline proxies are replaced with new ones.
* Using Scheduled Activation helps avoid unnecessary refreshes during idle time, keeping your IP usage efficient.
  {% endhint %}

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Port Configuration

The **Port Configuration** feature allows you to customize individual ports based on your specific requirements. Once you define specific criteria for a port, it will prioritize using proxies that match those settings. This provides greater control over your connections and enhances efficiency.

## 1. Key Benefits Of Port Configuration

* Greater control over proxy selection based on location and ISP.
* Optimized performance by ensuring ports always use preferred proxies.
* Enhanced automation with customizable auto-refresh and rotation settings.

## 2. How To Configure a Port

Follow these steps to set up and customize your ports:

{% stepper %}
{% step %}
Open the **9Proxy App** > Go to **Settings** > **Proxy Settings** > Go to **Port Configuration**

<figure><img src="/files/G3mcr7US555SIbskgqvA" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Select the port you want to configure
{% endstep %}

{% step %}
Set custom criteria to filter proxies, including `Country, City, State, ZIP Code, Internet Service Provider (ISP)`

<figure><img src="/files/GOvDBJy7yS9kaxr8ofoZ" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Enable or disable additional features as needed

* [**Auto Refresh Proxy**](/getting-started/residential-proxy-by-ips/for-macos-windows/auto-refresh-proxy): Automatically replaces offline proxies to keep the port active.
* [**Auto Rotation Proxy**](/getting-started/residential-proxy-by-ips/for-macos-windows/auto-rotation-proxy): Rotates IPs at a set interval to maintain fresh connections.
  {% endstep %}

{% step %}
**Save** your settings to apply the configuration to the selected port
{% endstep %}
{% endstepper %}

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Bind IP to Port

The **Bind IP to Port** feature allows you to quickly forward an IP to your desired port from the Forwarding List without having to return to the Proxy List to find a new IP. This will streamline proxy management by keeping all operations within the Forwarding List.

## 1. How To Use The Feature

{% stepper %}
{% step %}
Navigate to the **Forwarding List** in the **9Proxy App**

<figure><img src="/files/YDLAtpy2565YJ3b0mHU8" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Locate the port you want to bind an IP to
{% endstep %}

{% step %}
Click the **Bind** button at the end of the port’s row

<figure><img src="/files/OhS3SENSiXjWaaEwFga0" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
A dropdown menu will appear with three binding options
{% endstep %}
{% endstepper %}

<table data-header-hidden><thead><tr><th width="205"></th><th></th></tr></thead><tbody><tr><td><strong>Quick Bind</strong></td><td><ul><li>Instantly binds a random proxy from the system to your selected port.</li><li>Ideal for users who need a fast and hassle-free proxy assignment.</li></ul></td></tr><tr><td><strong>Bind from Saved List</strong></td><td><ul><li>Binds a proxy from your Saved List to your selected port.</li><li>To use this option, ensure you have previously saved a filter in the Proxy List.</li></ul></td></tr><tr><td><strong>Bind from Location</strong></td><td><ul><li>Allows you to bind a proxy from a specific location to your selected port.</li><li>Useful for users who need proxies from a certain country or region.</li></ul></td></tr></tbody></table>

After selecting your preferred binding method, the proxy will be automatically assigned to your chosen port. The updated proxy details will appear in the Forwarding List, ready for use.

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Proxy Program

*This feature is currently available on Windows only.*

## 1. Introduction

The **Proxy Program** allows you to route an application’s network traffic through a proxy without the application being aware of it.

<figure><img src="/files/GcZ7CB6KNiujmvj2F9ED" alt=""><figcaption></figcaption></figure>

Normally, applications know they are using a proxy because you manually configure proxy settings inside the app. With Transparent Proxy, routing happens silently at the network layer - therefore the process is transparent.

Traditional manual proxy configuration:

<figure><img src="/files/isNvVfHczAUQY6iICaQc" alt=""><figcaption></figcaption></figure>

With Transparent Proxy Program:

<figure><img src="/files/u1EWIK9W9M1CYljeSD42" alt=""><figcaption></figcaption></figure>

Instead of the application directly pointing to a proxy server, the system intercepts and redirects its traffic to the proxy port you define.

The app continues to operate normally and has no visibility that its network flow has been altered.

## 2. Why It’s Called “Transparent”

This feature is “transparent” because:

* The application does not know its traffic is routed through a proxy.
* No proxy configuration is required inside the application.
* It works even for applications that do not support proxy settings.
* Routing happens at the system level, ensuring seamless, non-intrusive integration.

This gives you full proxy routing capability without relying on third-party tools or requiring the application to support proxy protocols.

## 3. Benefits

* Works with any application, even those without proxy configuration options.
* Reduces setup complexity for end users or teams.
* Ensures consistent routing behavior across applications.
* Avoids breaks or errors caused by apps detecting or rejecting proxies.

## 4. How to use

You should port-forward a proxy to a local port before using Transparent Proxy.

If you are unsure how to do this, please refer to the port forwarding guide.

{% stepper %}
{% step %}

### Open Proxies Program

Inside the 9Proxy application, select Proxies Program from the menu.
{% endstep %}

{% step %}

### Create Proxy Rules

To use Proxy Program, you need to configure Proxy Rules.

Rules determine which applications will be routed through which proxy port, including protocol and optional advanced filters.

You may create multiple rules for different apps or use cases.

Click + to create a new rule.

<figure><img src="/files/d4NJVNjO6QxqORyt5fUu" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Configuring a Proxy Rule

#### Rule Name (required)

Give your rule a clear name, such as “Chrome via Proxy” or “Game TCP Route”.

#### Apply Mode

You can choose one of two modes:

* Apply to all programs: This rule applies to every application in the OS.
* Specify: This rule applies only to selected applications.

If choosing Specify, click Browse and select the application’s executable file (.exe).

<figure><img src="/files/1hmfEwgiZNAgpTNfFzkN" alt=""><figcaption></figcaption></figure>

#### Proxy Address (required)

Select the proxy port you forwarded earlier using this format: `localhost:port`&#x20;

<figure><img src="/files/EaSJiLkl4k1af5NUUr45" alt=""><figcaption></figcaption></figure>

#### Protocol (required)

Select the protocol the application uses:

* TCP
* UDP
* Both (TCP + UDP)

<figure><img src="/files/BbM9jKdwcaWFiLW3zS6j" alt=""><figcaption></figcaption></figure>

#### Target Hosts (optional)

Defines which destination ports this rule applies to.

* Enter a single port or port ranges.
* Enter \* or leave blank for all ports.

These fields are optional and intended for advanced routing control.

#### Remark (optional)

Add notes for organization or future reference.
{% endstep %}

{% step %}

### Add Rule

Click Add Rule to save your configuration.

<figure><img src="/files/GHLJPz8NIvxieIeku0jQ" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## 5. Notes & Troubleshooting

* Applications do not need internal proxy support; routing is handled at the system level.
* If an app does not route correctly:&#x20;

&#x20;          Check if the proxy port was forwarded properly.

&#x20;          Confirm the correct executable file was selected.

&#x20;          Ensure firewall rules are not blocking outbound traffic.

* Rules can be enabled, disabled, or reordered as needed.

{% hint style="info" %}

## NOTE

The Proxy Program feature is currently not available on x86 and ARM architectures. Support for x86 and ARM will be added in an upcoming update.
{% endhint %}

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# For Linux


# Linux Install & Download

## 1. 9Proxy on Debian/Ubuntu

{% stepper %}
{% step %}

### Download 9Proxy

You can use either wget or curl:

{% code title="Using wget" overflow="wrap" %}

```
wget https://static.9proxy-cdn.net/download/latest/linux/9proxy-linux-debian-amd64.deb
```

{% endcode %}

{% code title="Using curl" overflow="wrap" %}

```
curl -O https://static.9proxy-cdn.net/download/latest/linux/9proxy-linux-debian-amd64.deb
```

{% endcode %}

{% endstep %}

{% step %}

### Install 9Proxy

```
sudo apt install ./9proxy-linux-debian-amd64.deb
```

During installation, if prompted with a setup screen, select OK to continue.
{% endstep %}

{% step %}

### Start the Service

```
sudo systemctl start 9proxyd.service
```

9Proxy is now installed and ready to use.
{% endstep %}
{% endstepper %}

## 2. 9Proxy on Red Hat / RHEL / CentOS

{% stepper %}
{% step %}

### Download 9Proxy

You can use either wget or curl:

{% code title="Using wget" overflow="wrap" %}

```
wget https://static.9proxy-cdn.net/download/latest/linux/9proxy-linux-redhat-amd64.rpm
```

{% endcode %}

{% code title="Using curl" overflow="wrap" %}

```
curl -O https://static.9proxy-cdn.net/download/latest/linux/9proxy-linux-redhat-amd64.rpm
```

{% endcode %}
{% endstep %}

{% step %}

### Install 9Proxy

```
sudo yum install 9proxy-linux-redhat-amd64.rpm
```

{% endstep %}

{% step %}

### Start the Service

```
sudo systemctl start 9proxyd
```

```
sudo systemctl enable 9proxyd
```

* **start** will launch 9Proxy immediately.
* **enable** ensures 9Proxy starts automatically on boot.

9Proxy is now installed and ready to use.
{% endstep %}
{% endstepper %}


# Sign In to 9Proxy Account

Follow these steps to sign in and manage your 9Proxy account on Linux.

## 1. Start 9Proxy

Before logging in, ensure that **9Proxy** is running. If it's not already started, run:

```
systemctl start 9proxyd
```

**Optional**: If you want 9Proxy to start automatically on boot, run:

```
systemctl enable 9proxyd
```

## 2. Sign In to Your Account

### 2.1. Option 1: Standard Sign In via Interface

Run the following command to open the login interface, where you can enter your **Username** and **Password**:

```
9proxy auth -s
```

Once prompted, enter your credentials and select "**Login**" to sign in.

<figure><img src="/files/yH0ANCRAGTmA9eXlIZES" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/viksoxpwI5ejf3p9XaV5" alt=""><figcaption></figcaption></figure>

### 2.2. Option 2: Sign In Directly via Command Line

You can also sign in using your credentials directly in the terminal:

```
9proxy auth -u [username] -p [password]
```

* \[username] → with your 9Proxy account username
* \[password] → with your 9Proxy account password

## 3. Sign Out (If Needed)

To sign out and sign in with another account, use the following command:

```
9proxy auth -l
```


# Configure Proxy

This section explains how to view available proxies, filter by location, forward proxies to ports, and check your forwarding list.

## 1. View the Proxy Forwarding Interface

To open the proxy forwarding interface, type:

```
9proxy proxy -u
```

You will see a list of available proxies from your account.

To filter proxies by location or ISP:

* Press F.
* Choose your desired filter criteria (Country, State, City, ZIP code, or ISP).
* Press **Done** to apply filters.

## 2. Forward a Proxy to Ports

From the proxy list, use the arrow keys to select the proxy you want, then press Enter.

You will see two options:

<table data-header-hidden><thead><tr><th width="186.5"></th><th></th></tr></thead><tbody><tr><td><strong>Forward to all ports</strong></td><td>Forwards the selected proxy to all ports within your configured port range. (See Port Configuration for setup instructions.)</td></tr><tr><td><strong>Forward to a port</strong></td><td>Forwards a single proxy to one specific port in your port range.</td></tr></tbody></table>

Select your preferred option and press Enter.

Once done, the proxy will be successfully forwarded to the chosen port(s).

## 3. Quick Commands for Proxy Forwarding

If you prefer using terminal commands, you can forward proxies directly without opening the UI.\
This is useful for automation, scripting, or quick setups on headless Linux servers.

Each command follows this structure:

<pre data-overflow="wrap" data-line-numbers><code>//command

9proxy proxy [options]

[options]: 
-c : Specify the country of the proxy you want (e.g., US, VN, UK).
-p : Specify the port number to forward the proxy to.
-n : Use a proxy from the Today List (proxies you’ve used in the last 24 hours).

### Example 1: Forward a US Proxy to a Specific Port

9proxy proxy -c US -p 60000

# This command forwards a US residential proxy to port 60000.
# Use when you want a proxy from a specific country.
# The proxy will immediately start running on 127.0.0.1:60000.

# How to test:
curl -x socks5://127.0.0.1:60000 https://ipinfo.io/json

# If successful, the result will show an IP address located in the United States.

### Example 2: Forward Any Random Proxy

9proxy proxy -p 60000

# This binds a random available proxy (any country) to port 60000.
# Use when location doesn’t matter
# The proxy connects immediately once assigned.
# Tip: If you want multiple random proxies, just change the port number each time ## (e.g., 60001, 60002, …).

### Example 3: Forward a Proxy from the Today List

9proxy proxy -n -p 60000

<strong># This reuses a proxy that was previously active within the last 24 hours.
</strong><strong># Saves IPs because you don’t consume new ones.
</strong><strong># Ideal if you want to reconnect to the same session as earlier.
</strong># Your proxy from the Today List is now active again on port 60000.

</code></pre>

## 4. View Forwarding List

To see all proxies currently forwarded to ports, use:

```

9proxy proxy -n -u

```

This displays all proxies you’ve forwarded, along with their assigned ports and status.

## 5. Other Useful Commands

| Command                                          | Description                                                      |
| ------------------------------------------------ | ---------------------------------------------------------------- |
| <mark style="color:green;">9proxy -h</mark>      | View all available CLI commands and parameters.                  |
| <mark style="color:green;">9proxy api</mark>     | Access API-related commands.                                     |
| <mark style="color:green;">9proxy auth</mark>    | Manage authentication and account information.                   |
| <mark style="color:green;">9proxy port</mark>    | Configure and manage port settings.                              |
| <mark style="color:green;">9proxy proxy</mark>   | The main command for viewing, filtering, and forwarding proxies. |
| <mark style="color:green;">9proxy setting</mark> | Open the configuration settings for 9Proxy.                      |

{% hint style="info" %}

## &#x20;Note

* Ensure your port range is configured before forwarding proxies.
* The Today List shows proxies used in the last 24 hours - forwarding from here allows you to reuse active proxies without extra cost.
* For help, type 9proxy -h or contact support.
  {% endhint %}


# Command References

After successful installation, we will learn the commands of 9Proxy

{% stepper %}
{% step %}
To start **9Proxy**, enter the command:

```
systemctl start 9proxyd
```

If after installation you use the command, you do not need to enter the above command.

```
systemctl enable 9proxyd
```

{% endstep %}

{% step %}
Type the command to display commands that support the use of the software

```
9proxy -h
```

<figure><img src="/files/ZSXNbz1IEwJ47rDsSPx8" alt=""><figcaption></figcaption></figure>

* To use the API function, enter the command: `9proxy api`
* To log in to your account, enter the command: `9proxy auth`
* To manage the port, enter the command: `9proxy port`
* This is the most important function. To get the IP to use, enter the command:`9proxy proxy`
* To enter 9Proxy's settings, enter the command: `9proxy setting`
  {% endstep %}
  {% endstepper %}


# Set Up a Custom Port Range

Follow these steps to configure your starting port and port range in 9Proxy Linux.

## 1. Start 9Proxy

To start 9Proxy, enter the following command:

```
systemctl start 9proxyd
```

To ensure 9Proxy starts automatically on boot, run:

```
systemctl enable 9proxyd
```

If you enable the service, you won't need to manually start it each time.

## 2. Sign In to Your Account

Follow the instructions here to sign in.

## 3. Set Starting Port & Port range&#x20;

Once signed in, configure your proxy ports:

### 3.1. To Set Starting Port

```
9proxy setting -s [start port]
```

* \[start port] : the desired starting port number

<figure><img src="/files/5Xdml1vzbgJONddbRsBa" alt=""><figcaption></figcaption></figure>

### 3.2. To Set Port Range

```
9proxy setting -l [number of ports]
```

* \[number of ports] : the number of ports you want to allocate

<figure><img src="/files/zluAoAFTWiaj4FhJ129g" alt=""><figcaption></figcaption></figure>


# Auto Refresh Proxy

Follow these steps to configure the **Auto Refresh Proxy** feature in 9Proxy Linux.

## 1. Start 9Proxy

To start 9Proxy, enter the following command:

```
systemctl start 9proxyd
```

To ensure 9Proxy starts automatically on boot, run:

```
systemctl enable 9proxyd
```

If you enable the service, you won't need to manually start it each time.

## 2. Sign In To Your Account

Follow the instructions here to sign in.

## 3. Configure Auto Refresh Proxy

### 3.1. Set the Maximum Number of Refreshes

```
9proxy setting -c [maximum refresh times]
```

* \[maximum refresh times] : your desired limit

{% hint style="info" %}

### NOTE

Use -1 for unlimited refreshes until the IP is no longer available
{% endhint %}

### 3.2. Set the Refresh Time After a Dead IP

```
9proxy setting -t [time in seconds]
```

* \[time in seconds] : your preferred interval.

<figure><img src="/files/0oFzDCtGgDCwbfzgJVHy" alt=""><figcaption></figcaption></figure>

## 4. Enable or Disable Auto Refresh

### 4.1. To Enable Auto Refresh Proxy

```
 9proxy setting -r
```

### 4.2. To Disable Auto Refresh Proxy

```
9proxy setting -n
```

<figure><img src="/files/a4J0x8fk7YIBQE2V7e8l" alt=""><figcaption></figcaption></figure>


# Proxy Authentication

Follow these steps to enable and configure proxy authentication for 9Proxy on Linux.

## 1. Start 9Proxy

Run the following command to start 9Proxy:

```
systemctl start 9proxyd
```

To make 9Proxy start automatically on system boot, run:

```
systemctl enable 9proxyd
```

If this command is executed, you won't need to manually start 9Proxy each time.

## 2. Sign In to Your Account

Follow the instructions here to sign in.

## 3. Configure Proxy Authentication

To set up Authentication for your proxies, use the following command:

```
9proxy setting --basic_auth --proxy_password [password] --proxy_username [username]
```

* \[password] : your desired proxy password
* \[username] : your desired proxy username


# Start API

Follow these steps to enable and use the 9Proxy API on your Linux server.

## 1. Start 9Proxy

To start 9Proxy, run the following command:

```
systemctl start 9proxyd.service
```

### Enable API Function

Activate the API feature by entering:

```
9proxy api
```

<figure><img src="/files/GWB0fYNlGuJPrRPfRZqN" alt=""><figcaption></figcaption></figure>

## 2. Set API port

Specify the port you want the API to listen on:

```
9proxy api -p [port]
```

* \[port] : your preferred port number

## 3. Check API Status (Optional)

To check the API status at any time, use:

```
9proxy api -d
```

## 4. Start the API

Run the API with:

```
9proxy api -s
```

## 5. Get API URL

Once the API is running, copy the API url shown in the terminal. You can now use this URL to integrate with your system.

## 6. Stop the API

To stop the API when needed, use:

```
9proxy api -c
```


# Residential Proxy by GB

The **Residential Proxy by GB (Bandwidth)** gives you access to 9Proxy’s global residential IP pool using a data-based model.

Instead of purchasing a fixed number of IPs, you buy packages measured in GB, and can generate as many proxy endpoints as you need - as long as your bandwidth balance remains.

This model offers flexibility, stability, and control for users who need high-quality residential IPs for web automation, scraping, ad verification, or account operations.

<figure><img src="/files/9etq9C6yvyEZTZ92xCF5" alt=""><figcaption></figcaption></figure>

## 1. How It Works

When you purchase a Residential Bandwidth Package, you receive a specific amount of data (e.g., 50 GB, 200 GB, 500 GB).

Each proxy request you make consumes bandwidth from this balance - not from a limited IP count.

You can generate and manage your proxies directly in the **9Proxy Dashboard** using the **Proxy Generation** tool.

## 2. Key Features

* Access to real residential IPs from more than 90 countries.
* Unlimited endpoint creation within your available bandwidth.
* Multiple authentication methods: ***User-Pass Authentication*** or ***IP Whitelisting***.
* Session control - choose between Sticky or Rotating sessions.
* Full location targeting (country, state, city, ISP).

To begin using Residential Proxy by Bandwidth, refer to the following guides:

* [Proxy Generation](/getting-started/residential-proxy-by-gb/proxy-generation)
* [User-Pass Authentication](/getting-started/residential-proxy-by-gb/proxy-generation/user-pass-authentication)
* [IP Whitelisting](/getting-started/residential-proxy-by-gb/proxy-generation/whitelisting-ips)
* [Making Requests](/getting-started/residential-proxy-by-gb/making-requests)


# Proxy Generation

Before getting started, make sure that:

* You have an ***active Residential Bandwidth Packag***&#x65;.
* You’ve ***verified your account*** and ***have enough balance***.

## How to Get Proxies

### 1. Access the Proxy Generator

{% stepper %}
{% step %}
Log in to your[ 9Proxy Dashboard](https://9proxy.com/dashboard).
{% endstep %}

{% step %}
From the sidebar, navigate to **Residential Proxies by GB**.

<figure><img src="/files/mLzYZPBaCVD9Cf3getCT" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Click **Get Proxy** to open the **Proxy Generator** interface.

<figure><img src="/files/Ck0O4Gy7QNYdivHe301L" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

You’ll now see the **Proxy Generator** panel, where you can configure your proxy authentication method, location, session type, and output format.

### 2. Select Authentication Method

Before generating proxies, you must choose how your connection will be authenticated.&#x20;9Proxy provides two authentication options, depending on your setup:

* [**User-Pass Authentication**](/getting-started/residential-proxy-by-gb/proxy-generation/user-pass-authentication) - Recommended for most users; uses a Sub-User (username and password) to authenticate each request.
* [**IP Whitelisting**](/getting-started/residential-proxy-by-gb/proxy-generation/whitelisting-ips) - For static environments where requests are made from fixed IP addresses; no username or password required.

<figure><img src="/files/DICWZOvOp1xOs877HJYc" alt=""><figcaption></figcaption></figure>

Once your authentication method is set up, you can proceed to:

* Configure your proxy location (country, city, ISP).
* Choose your session type (sticky or rotating).
* Generate your proxies and start connecting.

Click the relevant option above to follow the detailed setup guide.

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# User-Pass Authentication

The **User-Pass Authentication** method lets you connect to 9Proxy’s Residential Proxy network using a Sub-User account (username and password).

It’s the most common and flexible setup - ideal for managing multiple devices or users independently.

{% embed url="<https://app.guideflow.com/player/1pzdvw2cvr>" %}

## 1. Get Started

Open the [**Proxy Generator**](/getting-started/residential-proxy-by-gb/proxy-generation) from your **Dashboard** (**Residential Proxies by GB** → **Get Proxy**), then select **User-Pass Auth** as your connection method.

<figure><img src="/files/mLzYZPBaCVD9Cf3getCT" alt=""><figcaption></figcaption></figure>

{% stepper %}
{% step %}

### Choose a Sub-user

If you don’t have a Sub-User yet, or want to create a new one:

* Choose **Add new user**

<figure><img src="/files/vK8Ggbvhe5IqANfzfwtC" alt=""><figcaption></figcaption></figure>

* Enter your desired Username and Password.
* Choose Action Type:

<table data-header-hidden><thead><tr><th width="128.5555419921875"></th><th></th></tr></thead><tbody><tr><td><strong>Allocation</strong></td><td>Assign a specific bandwidth amount to the user.</td></tr><tr><td><strong>Unlimited</strong></td><td>No usage or bandwidth limit.</td></tr></tbody></table>

<figure><img src="/files/WaBpGD9VBMK3Pw0Zt7DP" alt=""><figcaption></figcaption></figure>

* (Optional) Add a **Remark** for internal notes.
* Click Add Sub-User to save. You can now select this Sub-User (username + password) for your proxy connection.

**If you already have a Sub-User:**

From the Sub-User dropdown list, select the Sub-User you want to use as your authentication method.

{% hint style="success" %}
Note: You can create multiple Sub-Users and manage them individually (including adding, locking, or adjusting their traffic limits) in the Sub-User window located in the top navigation bar.
{% endhint %}

{% endstep %}

{% step %}

### Select Proxy Location

Customize your proxy location with the following options:

<table data-header-hidden><thead><tr><th width="169.6666259765625"></th><th></th></tr></thead><tbody><tr><td><strong>Country/Region</strong></td><td>Choose from a list of supported countries. Choosing Random means that the IP address's location will be picked randomly from one of our residential IP pools.</td></tr><tr><td><strong>State</strong></td><td>Displays available states within your chosen country.</td></tr><tr><td><strong>City</strong></td><td>Shows all available cities under that state.</td></tr><tr><td><strong>ISP</strong></td><td>Filter proxies by Internet Service Provider.</td></tr></tbody></table>

<figure><img src="/files/r9oEtpogX7spucy04vQH" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Select Session Type

<table data-header-hidden><thead><tr><th width="169.666748046875"></th><th></th></tr></thead><tbody><tr><td><strong>Sticky Session</strong></td><td>Keeps the same IP address for a configured duration. Ideal for maintaining session consistency. You can define the number of minutes for the sticky session.</td></tr><tr><td><strong>Rotating Session</strong></td><td>Assigns a new IP address with every request or based on your configuration - perfect for web scraping or anonymous browsing.</td></tr></tbody></table>

Once selected, you’ll see your Host, Port, Username, Password, and Test Command on the left side of the panel.
{% endstep %}

{% step %}

### Generate Proxies

In the **Proxy Generator** section, choose:

* The number of endpoints you need in **Quantity** section
* Your preferred Output Format. Supported formats include:

```
// syntax

username:password:hostname:port
hostname:port:username:password
username:password:hostname:port

```

Once selected, the **Batch Generation** panel will display your connection strings. These proxies will be ready to use and automatically connect to 9Proxy’s network.

Congrats! You've successfully generated a ready-to-use list of proxy endpoints.

Your connection strings are now available and ready to integrate into your tools, scripts, or applications.
{% endstep %}
{% endstepper %}

## 2. Code Example

To help you get started quickly, we provide ready-made code snippets for testing your proxies.

You can choose from a variety of popular languages and frameworks. Each example shows you how to structure your proxy request using the format you've selected.

{% hint style="success" %}
**Tip**: Click the Copy button in the bottom right corner of any code box to easily paste it into your environment.
{% endhint %}

## 3. Troubleshooting

If your proxies fail to connect or return empty results:

* Ensure your Sub-User credentials or whitelisted IP are correct.
* Verify that your package still has active bandwidth remaining.
* Check your port range configuration (ports must be available and not in use).
* Wait a few seconds - proxy generation may take time if you request a large batch.

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Whitelisting IPs

The IP Whitelisting method allows you to connect to 9Proxy’s Residential Proxy network without entering a username or password.

Your connection requests are automatically authenticated when made from any IP address added to your whitelist.

This method is ideal for fixed IP environments such as servers, cloud instances, or office networks where your public IP remains stable.

## 1. Access the Proxy Generator

To get started:

* Open the [**Proxy Generator**](/getting-started/residential-proxy-by-gb/proxy-generation) from your Dashboard (**Residential Proxies by GB** → **Get Proxy**).
* Under Authentication Method, select **Whitelist IPs**.

<figure><img src="/files/bQj5lBUWDHTLLHrSATz6" alt=""><figcaption></figcaption></figure>

{% stepper %}
{% step %}

### Select Proxy Location

You can customize your proxy’s geolocation and targeting options before generation:

<table><thead><tr><th width="169.555419921875"></th><th></th></tr></thead><tbody><tr><td><strong>Country/Region</strong></td><td>Choose from a list of supported countries. Selecting Random assigns a random IP from 9Proxy’s residential pool.</td></tr><tr><td><strong>State</strong></td><td>Displays available states within your chosen country.</td></tr><tr><td><strong>City</strong></td><td>Lists all available cities under the selected state.</td></tr><tr><td><strong>ISP</strong></td><td>Filter proxies by Internet Service Provider for more precise targeting.</td></tr></tbody></table>

<figure><img src="/files/qosNIOYcta3F3w948zuT" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Choose Session Type

Select the type of session based on your use case:

<table data-header-hidden><thead><tr><th width="169.666748046875"></th><th></th></tr></thead><tbody><tr><td>Sticky Session</td><td>Keeps the same IP address for a defined duration (e.g., 10–30 minutes).</td></tr><tr><td>Rotating Session</td><td>Assigns a new IP for every request or at defined intervals.</td></tr></tbody></table>

<figure><img src="/files/Fibpm9TDeZEM7oCtf9s5" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Extract Quantity and Generate

* In the Extract Quantity field, enter the number of proxy endpoints you want to generate.
* Click Generate.
* The generated proxy list will appear on the right-hand side in the Proxy Generator section.

<figure><img src="/files/iWozvdhWGp9PU2i9w75O" alt=""><figcaption></figcaption></figure>

Once generated, you can immediately use these proxies in your preferred browsers, automation tools, or multi-login environment.

{% hint style="success" %}
**Note**: If you want to export your proxies, you can copy them directly or download the list as a .txt or .csv file for external use.
{% endhint %}
{% endstep %}

{% step %}

### View and Manage Generated Proxies

The Proxy Generated List shows all the proxies you’ve created, along with detailed information such as Host and port, Session type, Location (Country, City, ISP), and Creation time

At the end of each row, you’ll find an Extract option. Click Extract to view the full connection link of the generated proxy. You can copy the link directly and start using it right away.

For proxies using the Sticky Session type, an additional Switch option will appear. Click Switch if you want to instantly rotate the IP without waiting for the current session to expire.
{% endstep %}
{% endstepper %}

## 2. Add IP Whitelisting

If you haven’t added your IPs yet, follow these steps to whitelist them for access:

{% stepper %}
{% step %}
Log in to your[ 9Proxy Dashboard](https://9proxy.com/dashboard).
{% endstep %}

{% step %}
Go to **Residential Proxies Traffic**.
{% endstep %}

{% step %}
On the top navigation bar, select **Whitelist**.

Your current IP address will appear automatically at the top.
{% endstep %}

{% step %}
Click **Add to Whitelist** to authorize it.
{% endstep %}

{% step %}
Add IP

To add more IPs, type them into the **Add to Whitelist** field below, press Enter, then click Add IP.
{% endstep %}
{% endstepper %}

{% hint style="success" %}
Tip: You can add multiple IP addresses at once, separated by commas.
{% endhint %}

## 3. Important Notes

* You can whitelist up to 50 IP addresses.
* Only IPv4 format is supported (e.g., 123.45.67.89); IPv6 is not supported.
* Ensure the IP addresses are yours and not routed through another VPN or proxy.

Once added, all whitelisted IPs will appear in the list on the left-hand side. You can toggle each them on or off to enable or disable access as needed.

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Making Requests

Our Residential Proxies support flexible IP targeting, random or sticky sessions, and custom ISP filtering - all controlled through a structured username. Once you understand the format, you can easily generate powerful, targeted proxy sessions without needing extra setup.

## 1. Proxy Access Components

You’ll need:

* **Hostname**: Fixed - provided in your dashboard
* **Port**: Fixed - provided in your dashboard
* **Username**: Structured with targeting options (see below)
* **Password**: Your sub-user password

<figure><img src="/files/kwaIOZauk8QDLcNNCNPt" alt=""><figcaption></figcaption></figure>

**Example:**

* **Username**: subaccount-country-us-sst-15-ssid-device1
* **Password**: your\_password
* **Proxy**: your\_proxy\_host:your\_port

### 1.1. Username Structure

All targeting and session options are embedded in your username using this general format:

\<sub-user’s username>-country-\<country\_code>-st-\<state\_code>-city-\<city\_name>-isp-\<isp\_code>-sst-\<session\_time>-ssid-\<session\_id>

<figure><img src="/files/XhEY01REaNOuujW5QXxG" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Note**: Not all parameters are required. You can mix and match the parameters depending on your use case - whether you're using rotating IPs, sticky sessions, or both. See use cases below.
{% endhint %}

<table><thead><tr><th width="184.5555419921875">Segment</th><th width="263.5555419921875">Example Value</th><th>Explanation</th></tr></thead><tbody><tr><td><strong>Sub-user’s username</strong></td><td>9proxy</td><td>Your unique sub-account name. This is used to identify your proxy session and is issued in your account dashboard.</td></tr><tr><td><strong>country</strong></td><td>country-us</td><td>Specifies the target country using a two-letter country code. In this example, traffic is routed through the United States.</td></tr><tr><td><strong>st</strong></td><td>st-ohio</td><td>(Optional) Adds a filter by state or region. Helps narrow IP selection to a specific area within the country.</td></tr><tr><td><strong>city</strong></td><td>city-newyork</td><td>(Optional) Adds city-level targeting to improve geo-accuracy. Use underscores for cities with spaces.</td></tr><tr><td><strong>isp</strong></td><td>isp-as22773_Cox_Communications_Inc.</td><td>(Optional) Filters IPs based on ISP name or ASN. Useful for advanced fingerprint matching or ISP-specific use cases.</td></tr><tr><td><strong>sst</strong></td><td>sst-15</td><td>Required for sticky sessions. Sets how long (in minutes) the IP stays fixed before rotating (e.g. 15 minutes).</td></tr><tr><td><strong>ssid</strong></td><td>ssid-ID1</td><td>(Optional, but recommended for parallel use) Defines a unique session ID to allow multiple sticky IPs from the same config.</td></tr></tbody></table>

### 1.2. Modes of Operation

#### 1.2.1. Rotating IP Mode (Random)

Each request gets a fresh IP. You don’t need to specify sst or ssid.

Use When: Speed is more important than continuity — e.g., scraping, price monitoring.

{% hint style="success" %}

## Example

\# Basic US IP, no stickiness

subaccount-country-us

<br>

\# Rotating IP from New York, US

subaccount-country-us-city-newyork

<br>

\# Rotating IP with ISP filtering

subaccount-isp-as22773\_Cox\_Communications\_Inc.
{% endhint %}

{% hint style="success" %}
**Tip**: For fastest response, target only by country. Adding city/state/ISP narrows the IP pool. Avoid over-filtering with state + city + isp unless necessary - this can limit IP availability.
{% endhint %}

#### 1.2.2. Sticky IP Mode

Keeps the same IP for a session of sst minutes. Optional ssid lets you create multiple sticky IPs from the same configuration.

Use When: You need IP persistence — e.g., logging into accounts, managing sessions, or running bots.

Required:

* sst: Session duration (in minutes)
* Optional: ssid: Unique session ID to get multiple IPs under same config

{% hint style="success" %}

## Example

\# US IP held for 15 minutes

subaccount-country-us-sst-15

<br>

\# Hanoi IP, sticky for 20 mins

subaccount-country-vn-city-hanoi-sst-20

<br>

\# Parallel sticky sessions from same config

subaccount-country-us-sst-15-ssid-id1

subaccount-country-us-sst-15-ssid-id2

<br>
{% endhint %}

Each unique ssid gives you a different IP, even if other parameters are the same.

## 2. Sample cURL Request

```
// example

curl -x yourproxyhost:yourport \
     -U "subuser-country-us-sst-15-ssid-bot01:yourpassword" \
     https://ipinfo.io

```

## 3. Choose the Right Setup

<table><thead><tr><th width="271.666748046875">Use Case</th><th>Required Fields</th><th>Notes</th></tr></thead><tbody><tr><td><strong>Fastest random IPs</strong></td><td>country</td><td>No sst, no ssid</td></tr><tr><td><strong>Geolocated rotating IPs</strong></td><td>country, city/isp</td><td>Optional state, city, isp</td></tr><tr><td><strong>Sticky sessions (single device)</strong></td><td>country, sst</td><td>Keeps IP fixed during session time</td></tr><tr><td><strong>Sticky across devices/apps</strong></td><td>country, sst, ssid</td><td>Use different ssid per instance</td></tr></tbody></table>

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Share Code

The Share Code feature in 9Proxy lets you securely share your proxies with other 9Proxy users - perfect for teams, businesses, or collaborative workflows.

You can generate and redeem share codes for both Residential Proxies by IP and Residential Proxies by Bandwidth.

## 1. Accessing Share Code

To manage or create Share Codes:

Go to your [**9Proxy Dashboard**](https://9proxy.com/dashboard) → **Share Code** section.

## 2. Generate a Share Code

### 2.1. Residential Proxies by IP

Follow these steps to generate a Share Code for IP-based proxies:

{% stepper %}
{% step %}
Navigate to the **Generated IP Codes** section.
{% endstep %}

{% step %}
Enter the **number of IPs** & the **number of Share Codes** you want to share.
{% endstep %}

{% step %}
(Optional) Assign the code directly to another user:

* Enter the **recipient’s 9Proxy account email** under Assign Member.
* Only the assigned user will be able to redeem this code.
  {% endstep %}

{% step %}
Click **Generate Code** to complete the process.
{% endstep %}
{% endstepper %}

<figure><img src="/files/UkjnQhVnkHastFj1CbqO" alt=""><figcaption></figcaption></figure>

After generating, all your Share Codes will appear in the table on the left side of the dashboard.\
From here, you can:

* Copy one, multiple, or all Share Codes instantly for sharing.
* Revoke any unused codes to retrieve the corresponding IPs back to your account.

{% hint style="success" %}

## NOTE

* A minimum of 5 proxies per Share Code is required.
* Your IP balance will be deducted based on the number of shared proxies.
  {% endhint %}

### 2.2. Residential Proxies by Bandwidth

Follow these steps to generate a Share Code for bandwidth-based proxies:

{% stepper %}
{% step %}
Navigate to the **Generated Traffic Codes** section.
{% endstep %}

{% step %}
Select the **package** you want to share from.
{% endstep %}

{% step %}
Enter the following details:

* **Number of GBs** to share.
* **Number of Share Codes** to generate.
  {% endstep %}

{% step %}
(Optional) Assign the code directly to another user:

* Under **Assign Member**, enter the recipient’s 9Proxy account email
* Only the assigned user will be able to redeem this code
  {% endstep %}

{% step %}
Click **Generate Code** to complete the process.
{% endstep %}
{% endstepper %}

<figure><img src="/files/0IfEh4WGHEc3IVoy8mnX" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}

## NOTE

* A minimum of 1 GB per Share Code is required.
* Your GB balance will be deducted based on the total shared amount.
  {% endhint %}

#### Expiration Rules for Bandwidth Share Codes

The validity period depends on the type of package used to generate the code:

<table><thead><tr><th width="172.3333740234375">Package Type</th><th>Validity</th><th>Calculation Method</th></tr></thead><tbody><tr><td><strong>Regular Package</strong></td><td>Same as the package’s remaining duration</td><td>Counted from the date the code was generated. Example: If your package has 5 days left, the shared code will also expire in 5 days.</td></tr><tr><td><strong>Enterprise Package</strong></td><td>180 days</td><td>Counted from the date the recipient redeems the code, not the generation date. (See more benefits of the Enterprise plan here)</td></tr></tbody></table>

{% hint style="success" %}

## Additional Notes

* Only data from purchased packages can be shared.
* Redeemed data from another user’s share code cannot be reshared.
  {% endhint %}

## 3. How to Redeem a Share Code

{% stepper %}
{% step %}
Go to **Shared with Me** in your Dashboard.
{% endstep %}

{% step %}
Enter the Share Code(s) you received.

To redeem multiple codes at once, separate them with commas.
{% endstep %}

{% step %}
Click **Redeem Code** to add the shared IPs or GBs to your account.
{% endstep %}
{% endstepper %}

<figure><img src="/files/a9MeMf4Ze0wxor3R4VGN" alt=""><figcaption></figcaption></figure>

You can view all redeemed or shared codes - including their status, remaining value, and expiration - in the table on the left side of the dashboard.

## 4. Notes and Limitations

* You cannot redeem Share Codes that you created yourself.
* To reclaim the IPs or GBs from a Share Code you created, you must revoke the code. Revocation is only possible if the code has not been redeemed yet.
* Redeemed codes are non-refundable and cannot be transferred again.

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Sub-Accounts

The Sub-Accounts feature in 9Proxy lets you create and manage multiple accounts under your main account. This is ideal for distributing proxies, delegating access, or collaborating with team members - all while maintaining complete control and visibility over proxy usage.

## 1. How to Create a Sub-Account

{% stepper %}
{% step %}

### Access the Sub-Accounts Page

Log in to your [9Proxy Dashboard](https://9proxy.com/dashboard) → Navigate to Sub-Accounts from the sidebar.

<figure><img src="/files/T3a0TBdw4HPnVmQSxdB0" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Add a New Sub-Account

Under Manage , click **Create**.

<figure><img src="/files/cedplprDU0AuYEzuKHH0" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Fill in the Required Information

* **Set Password**: Define a secure password for the sub-account.
* **Add Remark** (optional): Add a note to identify the sub-account’s purpose or owner.
* **Schedule Auto-Disable**: (Optional) Automatically disable this sub-account after a specified period.

Click **Continue** to proceed with proxy or bandwidth allocation.

<figure><img src="/files/Uij7jGJqKVbnBQ9uTF8I" alt=""><figcaption></figcaption></figure>

Now, you can allocate IPs, bandwidth, or both to each sub-account.

| Add IPs                                                                                                                                                                                                    | Add Bandwidth                                                                                                                                                                                                                                                               |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <ul><li>Enter the number of IPs you want to assign.</li><li>(Optional) Enable Auto Add IPs - automatically adds new IPs when the sub-account’s IP balance reaches the defined minimum threshold.</li></ul> | <ul><li>Select the traffic package you want to deduct from.</li><li>Enter the amount of bandwidth (in GB) to allocate.</li><li>(Optional) Enable Auto Add Bandwidth - automatically adds bandwidth when the sub-account’s remaining GB drops below the threshold.</li></ul> |

<figure><img src="/files/7Afg3YeeCRCDjRzg5Ki0" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/0ab1UgkYAiWh9oMFrwVX" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Finalize Setup

Click **Add Now** to complete the creation process.

{% hint style="success" %}

## NOTE

The assigned IPs and bandwidth will be deducted from your main account’s balance.
{% endhint %}
{% endstep %}
{% endstepper %}

## 2. Managing Sub-Accounts

Once created, all sub-accounts are listed in the Sub-Accounts Management Table, showing each account’s allocated IPs, bandwidth, and usage data. From here, you can manage access, update configurations, and adjust resource allocations in real time.

### 2.1. Inactivate a Sub-Account

Temporarily disable a sub-account without deleting it.

Click the lock icon to deactivate access and prevent the sub-account from using any assigned proxies.

### 2.2. Edit Sub-Account Details

Click Edit to modify the sub-account’s configuration. You can:

* Change the password or remark.
* Enable or disable Schedule Auto-Disable.
* Adjust Auto Add IP/Bandwidth thresholds.
* Modify the allocated IPs or bandwidth:
* Reducing allocation returns resources to your main account.
* Increasing allocation deducts from your main account’s balance.

### 2.3. Delete a Sub-Account

Click Delete to permanently remove a sub-account.

Once deleted, the account loses all proxy access, and any remaining IP or bandwidth balance is automatically returned to the main account.

### 2.4. Add Quota Log

This section allows you to add additional IPs or bandwidth to a specific sub-account quickly and conveniently.

Use it when you need to top up resources without recreating the account.

<figure><img src="/files/edvpoN5dQSjS70xW56zU" alt=""><figcaption></figcaption></figure>

### 2.5. Revoke Quota Log

Here, you can revoke IPs or bandwidth from a specific sub-account.

The revoked IPs or GBs are instantly credited back to your main account balance.

<figure><img src="/files/YE6Wc4ppRxJ3rQg1Sief" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}

## NOTE

* If the revoked IPs or bandwidth exceed the sub-account’s remaining balance, that balance will reset to 0.
* Sub-accounts cannot change their own credentials or account configurations.
* All management actions are restricted to the main account, ensuring centralized control, security, and resource integrity.
  {% endhint %}

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Affiliate Program

## 1. Introduction

The 9Proxy Affiliate Program rewards you for referring new users to 9Proxy. When a new user signs up using your referral link or referral code, they are permanently linked to your account.\
Each time that user makes a qualifying purchase, you earn a commission - automatically added to your affiliate balance.

Commissions apply to all future transactions made by your referred users, including package renewals, upgrades, or repeat purchases.

## 2. How It Works

### 2.1. Join the Program

Log in to your [9Proxy Dashboard](https://9proxy.com/dashboard) and open the Affiliate section.

<figure><img src="/files/GpxlPTXNNyyZg8JKoVKj" alt=""><figcaption></figcaption></figure>

Your unique referral link and referral code will be displayed automatically.

### 2.2. Invite Friends or Users

Share your referral link with your friends or team members. When a new user registers through your link (or enters your code during signup), they are tracked as your referral.

### 2.3. Earn Commission Automatically

Every time your referred user makes a payment or purchase on 9Proxy, you earn commission according to your level tier (see below).

### 2.4. Track Earnings in Real Time

Your **Affiliate Dashboard** provides an overview of your referral performance and commission status in real time. You can monitor all activity and track your progress across the following fields:

<figure><img src="/files/UXfhbAmHGhMDiYB5x9T0" alt=""><figcaption></figcaption></figure>

<table data-header-hidden><thead><tr><th width="205.1112060546875"></th><th></th></tr></thead><tbody><tr><td><strong>Total Referred Users</strong><br><strong>(No. of Users)</strong></td><td>The total number of user accounts currently linked to your affiliate account.</td></tr><tr><td><strong>Income Balance</strong></td><td>The total amount of confirmed commission earnings available for withdrawal (once the balance reaches $100 USD or more).</td></tr><tr><td><strong>On-Hold Earnings</strong></td><td>Commissions temporarily held for 60 days when referred users make purchases using funds from their 9Proxy Wallet. These will automatically be released once the hold period ends.</td></tr><tr><td><strong>Withdrawn Earnings</strong></td><td>The total commission amount you have already withdrawn, transferred into wallet credit, or converted to IPs.</td></tr></tbody></table>

To help you promote 9Proxy more effectively, the Affiliate Dashboard provides several tools and customizable marketing assets.

## 3. Referral Options

You can choose from multiple referral methods:

<figure><img src="/files/pvsVTEz4QKpWF0VtKWC9" alt=""><figcaption></figcaption></figure>

<table data-header-hidden><thead><tr><th width="200.4444580078125"></th><th></th></tr></thead><tbody><tr><td><strong>Referral Link</strong></td><td>Your default referral link is automatically generated once you join the program. Share it directly with users to track registrations and purchases.</td></tr><tr><td><strong>Referral Code</strong></td><td>A unique alphanumeric code that users can enter during registration instead of clicking a link. Ideal for private sharing or offline use.</td></tr><tr><td><strong>Custom Referral Link</strong></td><td>You can customize your referral link with your own name or brand for easier recognition and tracking</td></tr></tbody></table>

<figure><img src="/files/NDPa2Dz1IxaznYo5oZoT" alt=""><figcaption></figcaption></figure>

## 4. Banners & Scripts

To make promotion easier, you can create affiliate banners directly from your Dashboard.

<table><thead><tr><th width="205.1112060546875"></th><th></th></tr></thead><tbody><tr><td>Pre-designed Banners</td><td>Access a collection of ready-to-use banners in various sizes and styles.</td></tr><tr><td>Banner Script</td><td>Generate an embed script to display your affiliate banner on your website, forum, or blog.</td></tr></tbody></table>

You can freely place these banners or scripts on your personal pages, social media, or community platforms - wherever you want to promote 9Proxy services.

## 5. Commission Levels

Your affiliate commission rate increases as your total referred transaction volume grows.

<table><thead><tr><th width="139">Level</th><th>Total Referred Volume (USD)</th><th>Commission Rate</th></tr></thead><tbody><tr><td>Level 1</td><td>0 – 14,999 USD</td><td>5%</td></tr><tr><td>Level 2</td><td>15,000 – 39,999 USD</td><td>10%</td></tr><tr><td>Level 3</td><td>40,000 USD and above</td><td>15%</td></tr></tbody></table>

{% hint style="success" %}

## Example:

If your referred users collectively spend $20,000, you reach Level 2 and earn 10% commission on all future transactions.
{% endhint %}

## 6. Commission Release & Hold Period

When a referred user purchases a proxy plan, your commission is automatically calculated based on their payment.

However, if the transaction is funded through the 9Proxy Wallet (meaning the user first deposits funds and later uses them to buy proxies), the corresponding commission will be held for 60 days before being released to your available balance.

This hold period helps ensure payment verification and refund safety.

Direct purchases (without wallet top-up) are credited immediately after successful payment.

## 7. Payout & Withdrawal Policy

You can request a withdrawal once your affiliate balance reaches $100 USD or more.\
After reaching the threshold, you can choose one of the following payout options:

<table><thead><tr><th width="269.5557861328125">Payout Method</th><th>Description</th></tr></thead><tbody><tr><td><strong>Cryptocurrency</strong></td><td>Withdraw your commission directly to a supported cryptocurrency wallet.</td></tr><tr><td><strong>Transfer to 9Proxy Wallet Credit</strong></td><td>Instantly transfer your available affiliate balance to your 9Proxy Wallet and use it to purchase proxy plans or renew services.</td></tr><tr><td><strong>Convert to IPs</strong></td><td>Exchange your available commission balance into Residential Proxy IPs at a fixed rate of $0.20 per IP.</td></tr></tbody></table>

{% hint style="success" %}

## Notes:

* Only confirmed commissions (after the 60-day hold period, if applicable) are eligible for withdrawal or conversion.
* All balances and conversions are displayed in USD equivalent within your dashboard.
  {% endhint %}

## 8. Tracking & Transparency

Your affiliate dashboard provides real-time tracking of all referrals and commissions:

* Referral purchase history
* Commission per transaction
* Hold vs available balance
* Payment and payout logs

Referral tracking is permanent - once a user registers through your link or enters your code, all their future transactions will automatically generate a commission.

## 9. Terms & Conditions

* Commissions are voided for refunded or cancelled transactions.
* The 60-day hold period applies only to purchases made through wallet deposits.
* Affiliate levels are based on cumulative referred volume (USD).

## 10. FAQs

<details>

<summary>How do I get my referral link or code?</summary>

Log in to your 9Proxy Dashboard → Affiliate → copy your unique referral link or code.

</details>

<details>

<summary>Is the 60-day hold applied to all transactions?</summary>

Only if the referred user buys proxies using funds from their 9Proxy Wallet. Direct purchases are credited immediately.

</details>

<details>

<summary>How is my affiliate level calculated?</summary>

Based on the total purchase volume of all your referred users. Levels update automatically once you reach the required threshold.

</details>

<details>

<summary>Can I withdraw my commission anytime?</summary>

Yes, as soon as your available balance reaches $100 USD and all held commissions have cleared.

</details>

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Enterprise Program & Team

## 1. What is the Enterprise Program?

The **Enterprise Program** is an enhanced version of 9Proxy’s bandwidth plans, made for teams, agencies, and power users who need to share data securely, manage usage in one place, and never worry about expiry.

Enterprise users can create a Team, invite up to 5 members, and share bandwidth with full control - all under one account. The purpose of creating a team is to let you extend full Enterprise privileges to your members with a single package, making management and collaboration easier than ever.

## 2. How It’s Different from Regular Plans

<table><thead><tr><th width="171.22222900390625">Feature</th><th>Regular Bandwidth Plan</th><th>Enterprise Program</th></tr></thead><tbody><tr><td><strong>Data validity</strong></td><td>👌Expires after 180 days</td><td>✅Never expires</td></tr><tr><td><strong>Team sharing</strong></td><td>❌Not available</td><td>✅Up to 5 members</td></tr><tr><td><strong>Share Code (CDK)</strong></td><td>❌Limited (180 days)</td><td>✅180 days from the date of redemption</td></tr><tr><td><strong>Data control</strong></td><td>Manual</td><td>Assign, revoke, or lock anytime</td></tr><tr><td><strong>Security</strong></td><td>Standard</td><td>2FA required for Owners</td></tr><tr><td><strong>Support</strong></td><td>General</td><td>💪Priority Business Support</td></tr></tbody></table>

With Enterprise, you gain the ability to organize, delegate, and monitor proxy usage like a professional workspace - without losing ownership of your data.

## 3. Who It’s For

* **Agencies or startups** that need to share data across multiple accounts or staff.
* **Developers managing bots** or scraping tasks across multiple devices.
* **Businesses** running concurrent sessions where data ownership and auditability matter.
* **Advanced users or resellers** who don’t want to worry about expiry or proxy loss.

## 4. Key Benefits

* No Data Expiry: Your GBs never expire - use them anytime, across devices and users.
* Full Team Access: Add up to 5 team members who share your Enterprise benefits, including data validity, performance, and unlimited Share Codes.
* Smart Traffic Control: Assign or revoke data instantly, set usage rules, or lock bandwidth with one click.
* Complete Transparency: Every change - like adding, sharing, or removing data - is logged with timestamp, user, and action details.
* Seamless Upgrade: You don’t need to register separately. Simply top up to a qualifying bandwidth package, and Enterprise features unlock automatically.

## 5. How Teams Work

When you join the Enterprise Program, your account unlocks a Team Management panel where you can invite up to 5 members to share your bandwidth securely.

### 5.1. Roles in a Team

<table data-header-hidden><thead><tr><th width="135.111083984375">Role</th><th></th></tr></thead><tbody><tr><td><strong>Owner</strong></td><td>The main account that purchased the plan. Has full control - invite, remove, share, revoke, or lock data.</td></tr><tr><td><strong>Members</strong></td><td>Invited users who can use shared data, create Share Codes, and leave the team anytime. They can’t join another team while already in one.</td></tr></tbody></table>

### 5.2. Rules and Limits

* Each user can belong to only one team at a time.
* Invitations are sent directly from the Owner’s dashboard.
* Each team can have up to 5 members and allows up to 2 member changes per month.
* There’s no overall limit on invitations, but monthly limits help ensure fair resource management.

### 5.3. Shared Traffic Behavior

* All shared GBs retain Enterprise privileges (no expiry, full speed, same network quality).
* Members’ data remains valid even if they leave the team.
* Owners can view or modify allocations anytime.
* Members can share data outside the team via Share Code, but that data becomes regular bandwidth and loses Enterprise’s unlimited validity once shared externally.

### 5.4. Security & Compliance

* 2FA is required for Owners before sharing or managing data.
* 2FA is recommended for Members before accepting invitations.
* Every data action is automatically logged with who did it, when, and what changed - giving you full audit visibility.
* Each member is responsible for how they use the shared traffic. Misuse (like spam or abuse) is tied to that individual, not the Owner.

## 6. Quick Start Guide

{% stepper %}
{% step %}

### Unlock Enterprise

To access Enterprise privileges, simply purchase any package in the Enterprise program. Once activated, all advanced features and exclusive benefits will be unlocked for your account.

<figure><img src="/files/jITPkPDWy9Vna2OgEvcv" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Create a Team

Once your Enterprise access is unlocked, you’re ready to build your crew. Head to the Team section to create your own team, invite members, and start working together under a shared, fully powered Enterprise workspace.

<figure><img src="/files/Ta4OOjBtJi6rmRsbmiMO" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/HG9BtB1F4wKPlDVsiBaA" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/TJOsgHyPBW5q1dW281T5" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/uq9AaoXcV240BOjTY9uH" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}

### Share Data

Allocate GBs to members, or let them use from the shared pool.
{% endstep %}

{% step %}

### Manage in Real Time

<figure><img src="/files/h8E1XhhoQyWLhaEvEDsy" alt=""><figcaption></figcaption></figure>

Lock, revoke, or adjust shared data anytime - all changes are logged and transparent.
{% endstep %}
{% endstepper %}

## 7. FAQs

<details>

<summary>How do I upgrade to Enterprise?</summary>

Just purchase any Enterprise package - once the payment is completed, your account will automatically unlock all Enterprise benefits.

</details>

<details>

<summary>How many members can I have?</summary>

Each team can include one Owner and up to five members.

</details>

<details>

<summary>Do shared GBs expire?</summary>

No. Shared GBs under Enterprise never expire.

</details>

<details>

<summary>Can members share data again?</summary>

No. Only the Owner can share or manage bandwidth to prevent chain sharing.

</details>

<details>

<summary>Are there limits on invitations or member changes?</summary>

Each team can have up to 5 members and allows up to 2 member changes per month. There’s no total cap on invites.

</details>

<details>

<summary>Do I need 2FA?</summary>

Yes, for Owners - it’s required before managing traffic. For Members, it’s strongly recommended.

</details>

<details>

<summary>What happens if a member leaves the team?</summary>

They will keep the bandwidth that was shared with them, but they will lose all Enterprise-level privileges.

</details>

<details>

<summary>How do I disband a team?</summary>

The Owner can disband the team anytime in the Team Management panel.

</details>

<details>

<summary>Who can I contact for help?</summary>

You can reach our Support Team anytime via Live Chat or email at <support@9proxy.com> for assistance with setup, upgrades, or troubleshooting.

</details>

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Overview

## 1. What is ProxyHub?

**ProxyHub** is a device control solution by 9Proxy that enables you to manage and operate multiple mobile devices in one place.

With **ProxyHub**, you can centrally control multiple phone devices from your computer using the 9Proxy app, without requiring them to be on the same network.

At the same time, **ProxyHub** also allows you to seamlessly connect and use proxies directly on individual mobile devices when needed.

This provides a unified workflow that scales smoothly from single-device usage to multi-device operations.

## 2. Why use ProxyHub?

ProxyHub helps you scale operations that require multiple devices, such as:

* Managing multiple devices
* Running automation workflows
* Testing across different locations or environments

Instead of configuring each device manually, you can manage everything from one place.

## 3. ProxyHub Pro and ProxyHub Lite

**ProxyHub** consists of two components that work together:

* **ProxyHub Lite (mobile app)**: Installed on your phone devices to run proxy connections
* **ProxyHub Pro (desktop in 9Proxy app)**: Used on your computer to manage and control those devices remotely

To connect them, all devices must be signed in with the same 9Proxy account.

## 4. Two ways to use ProxyHub

Depending on your needs, you can use **ProxyHub** in two different ways:

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>Multi-device control (ProxyHub Pro)</strong></td><td>Use this when you want to manage multiple phone devices from your computer.<br>You can assign, change, and control proxies across devices in one place.<br></td><td><a href="/pages/2sYuEj2Z7iFl2spt0z5i">Learn more...</a></td><td><a href="/files/xqFF9Krn3VQvy1lTN64c">/files/xqFF9Krn3VQvy1lTN64c</a></td></tr><tr><td><strong>Use proxy on your phone (ProxyHub Lite)</strong></td><td>Use this when you only need to connect a proxy directly on a single phone.<br>This is the fastest way to start using a proxy on mobile.<br></td><td><a href="/pages/O7nIvQiOpTpAqkqqokfa">Learn more...</a></td><td><a href="/files/0Fpc1uE5sQKigAtplsBn">/files/0Fpc1uE5sQKigAtplsBn</a></td></tr></tbody></table>


# Download & Install

This guide explains how to download and install **ProxyHub** on supported platforms.

**ProxyHub** is available across desktop and mobile environments, with different installation methods depending on your device.

## Platform overview

**ProxyHub** consists of two components:

* **ProxyHub Pro (Desktop)** - used to manage and control devices from your computer
* **ProxyHub Lite (Mobile)** - used to connect and run proxies on individual devices

Each platform requires a different setup process.

## 🤖Android

**ProxyHub Lite** is installed directly on your mobile device.

The Android version is distributed as an APK file and requires manual installation.

To install:

* Download the APK from the official 9Proxy source
* Open the file and follow the installation steps

**→ See:** [***Install ProxyHub Lite on Android***](/proxyhub/download-and-install/android)

## 📱iOS (iPhone / iPad)

**ProxyHub Lite** is currently distributed as a Developer Preview.

Installation requires sideloading the IPA file using a computer.

To install:

* Download the IPA from the official 9Proxy source
* Install using [**AltStore**](https://altstore.io/) or [**Sideloadly**](https://sideloadly.io/)

**→ See:** [***Install ProxyHub Lite on iOS***](/proxyhub/download-and-install/ios-developer-preview)

## 🪟Windows

**ProxyHub Pro** is available within the 9Proxy desktop application.

To install:

* Download the 9Proxy Windows application
* Run the installer and complete setup
* Open the app and navigate to **ProxyHub Pro**

→ **See:** [***Download 9Proxy for Windows***](/getting-started/residential-proxy-by-ips/for-macos-windows/windows-install-and-download)

## 🍎macOS

**ProxyHub Pro** is available through the 9Proxy application on macOS.

To install:

* Download the macOS version of 9Proxy
* Install and launch the application
* Open **ProxyHub Pro** from within the app

→ **See:** [***Download 9Proxy for macOS***](/getting-started/residential-proxy-by-ips/for-macos-windows/macos-install-and-download)

## Before you begin

Ensure the following before installation:

* You have a valid 9Proxy account
* Your devices are connected to the internet
* You use the same account across devices (required for remote management)

## Next Steps

After installation, proceed based on your use case:

* Use **ProxyHub Lite** to connect proxies on a single device
* Use **ProxyHub Pro** to manage multiple devices from your computer

→ See:

* [**Use Proxy on Your Phone (ProxyHub Lite)**](/proxyhub/proxyhub-lite)
* [**Multi-device control (ProxyHub Pro)**](/proxyhub/proxyhub-pro)


# Android

This guide covers downloading and installing ProxyHub Lite on Android using the APK file.

<figure><img src="/files/7d2P15dz97IM8GnHr2j3" alt=""><figcaption></figcaption></figure>

## 1. System Requirements

* OS: Android 7.0 or later
* Storage: At least 100 MB free space
* Internet: Stable connection required
* Permissions: Allow installation from unknown sources

## 2. Downloading ProxyHub Lite (APK)

Download the latest ProxyHub Lite APK from the official 9Proxy download page:

[**→ Download ProxyHub Lite for Android**](https://9proxy.com/proxyhub)

Make sure you only download the APK from official 9Proxy sources to ensure safety and compatibility.

## 3. Installing ProxyHub Lite

### Open the APK

* Go to your Downloads folder
* Locate the <kbd>**9proxy-hub-lite-v1.0.0.apk**</kbd> file you just downloaded

<figure><img src="/files/aiF4lv21LQXNRvXTmQBk" alt=""><figcaption></figcaption></figure>

* Tap the file to begin installation

### Allow installation

If your device shows a warning during installation:

* Tap **Install** anyway to continue

<figure><img src="/files/8W1o6PhYNOVyhGkMAKxj" alt=""><figcaption></figcaption></figure>

In some cases, Android may ask you to scan the app:

* Select **Install anyway** to proceed

<figure><img src="/files/gCufy4rkIz5UvMPKVMOg" alt=""><figcaption></figcaption></figure>

This is a standard Android security step for APK installations.

**ProxyHub Lite** has been thoroughly tested to ensure reliability and safety.

### Complete installation

* Wait a few seconds for the installation to finish
* Tap **Open** to launch **ProxyHub Lite**

<figure><img src="/files/CiZDGu0yUVyXksirpZjP" alt=""><figcaption></figcaption></figure>

## 4. First-Time Setup

After installation:

* Open **ProxyHub Lite**

<figure><img src="/files/4NQyX5mFKv7m95tUVJc9" alt=""><figcaption></figcaption></figure>

* Sign in with **your 9Proxy account**

<figure><img src="/files/mpmYd1c7WQkqnrqHpjpg" alt=""><figcaption></figcaption></figure>

After signing in, you may see a system prompt requesting permission to create a connection.

* Tap OK to allow **ProxyHub Lite** to set up the connection and manage network traffic on your device

Once completed, you can start using proxies immediately.

## 5. Next Steps After Installation

Once **ProxyHub Lite** is installed, you can:

* [**Connect a proxy directly to your phone**](/proxyhub/proxyhub-lite)
* [**Link your device with ProxyHub Pro for remote management**](/proxyhub/proxyhub-pro)

## 6. Important Notes

* **ProxyHub Lite** is installed via APK, not Google Play
* You only need to allow installation once per app source
* Always download APK files from official 9Proxy sources

## 7. Troubleshooting

<details>

<summary><strong>APK won’t install</strong></summary>

* Check if installation permission is enabled
* Ensure your Android version is supported
* Re-download the APK file if needed

</details>

<details>

<summary><strong>App won’t open</strong></summary>

* Restart your device
* Check your Internet connection
* Reinstall the app

</details>

## 8. FAQs

<details>

<summary><strong>Why do I see “Install blocked” or “Unknown sources” warning?</strong></summary>

This is a standard Android security message when installing APK files outside Google Play.

To continue:

* Tap Settings
* Allow installation for your browser or file manager
* Go back and install again

You only need to do this once.

</details>

<details>

<summary><strong>Is the APK safe to install?</strong></summary>

Yes.

The APK is provided directly by 9Proxy and is safe to use.

Always make sure you download it from official 9Proxy sources.

</details>

<details>

<summary><strong>Why can’t I install the APK?</strong></summary>

Common reasons:

* Installation permission is not enabled
* Your Android version is not supported
* The APK file is incomplete or corrupted

Try enabling permissions or re-downloading the file.

</details>

<details>

<summary><strong>Do I need to uninstall the old version before installing a new one?</strong></summary>

In most cases, no.

You can install the new APK directly over the existing version.

If installation fails, uninstall the old version and try again.

</details>

<details>

<summary><strong>Why does Android warn about this app?</strong></summary>

Android shows warnings for all APK files installed outside the Play Store. This does not mean the app is unsafe.

</details>

<details>

<summary><strong>Can I update the app automatically?</strong></summary>

No. Since the app is installed via APK, updates need to be installed manually by downloading the latest version.

</details>

<details>

<summary><strong>Where is the APK file saved after download?</strong></summary>

Usually in the Downloads folder on your device.

You can open it using your file manager or notification bar.

</details>

<details>

<summary><strong>Can I use ProxyHub Lite without ProxyHub Pro?</strong></summary>

Yes.

You can use ProxyHub Lite independently to connect and use proxies directly on your phone.

</details>

<details>

<summary><strong>Can I connect this device to ProxyHub Pro later?</strong></summary>

Yes.

Simply sign in with the same 9Proxy account, and the device will appear automatically in ProxyHub Pro.

</details>


# iOS (Developer Preview)

This guide covers how to download and install the iOS Developer Preview of ProxyHub Lite before the App Store release.

At the moment, the iOS version is distributed as an IPA file. Because of this, installation requires manual setup using **a computer** and **an Apple Developer account**. This guide walks you through the simplest options and helps you choose the one that fits your setup best.

<figure><img src="/files/pxQl4fWeIzLAc5U6OXoY" alt=""><figcaption></figcaption></figure>

## 1. System Requirements

* Device: iPhone or iPad
* OS: iOS 15 or later
* Internet: Stable connection required
* A **paid Apple Developer account**
* Computer: Required (Windows or macOS)

## 2. Downloading ProxyHub Lite (iOS IPA)

* ProxyHub Lite is currently distributed as a Developer Preview IPA and is not yet available on the App Store.
* Go to the official download page:

→ [**Download ProxyHub Lite for iOS (IPA)**](https://9proxy.com/download/ios)

***Note***: Make sure you only download the IPA from official 9Proxy sources.

## 3. Choose an Installation Method

The iOS preview can currently be installed in three ways:

### 3.1. Install with AltStore

This is the most beginner-friendly option for long-term use.

{% stepper %}
{% step %}
**Download the IPA**

Download the latest iOS Developer Preview IPA from the official 9Proxy download page.

Make sure you only use the official 9Proxy source.
{% endstep %}

{% step %}
**Step 2: Install AltStore on your computer**

Go to [AltStore’s official site](https://altstore.io/) and download AltServer for your computer. AltStore Classic requires AltServer to install apps onto your iPhone or iPad.

If you are using Windows, AltStore’s official guide says you should first install the latest versions of iTunes and iCloud directly from Apple, not from the Microsoft Store.
{% endstep %}

{% step %}
**Connect your iPhone to the computer**

Use a cable to connect your iPhone or iPad to your computer.

Unlock the device and tap Trust This Computer if prompted.

If you are using AltStore on Windows, the official AltStore guide also asks you to enable Wi-Fi sync in iTunes before installing AltStore.
{% endstep %}

{% step %}
**Install AltStore on the iPhone**

Open AltServer on your computer.

Choose:

* Install AltStore
* Select your iPhone or iPad

You will be asked to sign in with your Apple ID. According to AltStore, those credentials are sent to Apple for authentication.

Wait until AltStore is installed on your device.
{% endstep %}

{% step %}
**Trust the app on iPhone**

After installation, you may need to trust the developer profile before the app can open.

On iPhone, go to:

* Settings
* General
* VPN & Device Management (or a similarly named section depending on iOS version)

Then trust the profile for your Apple ID or developer entry. Apple notes that manually installed apps may require manual trust; in iOS 18 and later, you may see Allow & Restart during this process.

If you are on iOS 16 or later, AltStore also requires Developer Mode to be enabled. AltStore’s guide says you can do this in:

* Settings
* Privacy & Security
* Developer Mode
  {% endstep %}

{% step %}
**Import the ProxyHub Lite IPA**

Open AltStore on your iPhone.

Import or add the ProxyHub Lite IPA you downloaded from 9Proxy.

AltStore will then sign and install the app onto your device.
{% endstep %}

{% step %}
**Open ProxyHub Lite**

Once installation finishes, open ProxyHub Lite and sign in with your 9Proxy account.

If you want this phone to appear inside ProxyHub Pro on desktop later, make sure you use the same 9Proxy account.
{% endstep %}
{% endstepper %}

### 3.2. Install with Sideloadly

Sideloadly is a good option if you want to install the IPA directly from your computer.

{% stepper %}
{% step %}
**Download Sideloadly**

Download Sideloadly from the official site. Sideloadly supports sideloading IPA files to iOS without jailbreak and works with free or paid Apple Developer accounts.
{% endstep %}

{% step %}
**Download the ProxyHub Lite IPA**

Download the latest iOS Developer Preview IPA from the official 9Proxy download page.
{% endstep %}

{% step %}
**Connect your iPhone**

Connect your iPhone or iPad to your computer with a cable.

Unlock the device and trust the computer if prompted.
{% endstep %}

{% step %}
**Open Sideloadly and load the IPA**

Open Sideloadly.

Select your device, then drag and drop the ProxyHub Lite IPA into the app window.
{% endstep %}

{% step %}
**Sign in with Apple ID**

Enter your Apple ID when prompted so Sideloadly can sign the app for installation. Sideloadly supports both free and paid Apple Developer accounts.
{% endstep %}

{% step %}
**Start installation**

Click Start and wait for the installation to complete.
{% endstep %}

{% step %}
**Trust the app if needed**

If iOS blocks the app the first time you open it, complete the trust step in:

* Settings
* General
* VPN & Device Management
  {% endstep %}
  {% endstepper %}

Apple says manually installed apps may require this trust step before they can open.

Then open ProxyHub Lite and sign in.

### 3.3. Install with Xcode

If you are a developer and already use Xcode, you can also install the iOS preview through your development workflow.

This option is best if you are already familiar with:

* Apple certificates and signing
* Registered devices
* Xcode deployment

If not, use AltStore or Sideloadly instead. They are easier for first-time installation.

## 4. What to Expect After Installation

Once ProxyHub Lite is installed successfully, you can use it in two ways:

* Use a proxy directly on that iPhone
* Sign in with the same account and let the device connect to ProxyHub Pro for centralized control from your computer

This means you can start with one phone, then move to a multi-device setup later without changing apps.

## 5. Next Steps

After installation, continue with:

* Use Proxy on Your Phone (ProxyHub Lite)
* Multi-device control (ProxyHub Pro)

## 6. Important Notes

* The current iOS build is a Developer Preview IPA, so installation is more manual than a normal App Store install
* You may see Apple trust or developer prompts the first time you open the app
* If the trust step fails, make sure the device is connected to the internet; Apple notes that verification may fail if the device cannot reach Apple’s verification service.
* Depending on your iOS version and install method, you may also need to restart the device or enable Developer Mode before the app opens correctly.

## 7. Troubleshooting

<details>

<summary><strong>The app does not appear after installation</strong></summary>

Try restarting your iPhone first. AltStore notes that in some cases the app may only appear after a restart.

</details>

<details>

<summary><strong>I see “Untrusted Developer” or the app will not open</strong></summary>

Go to Settings > General > VPN & Device Management and complete the trust flow for the installed profile. Apple says this is required for manually installed apps.

</details>

<details>

<summary><strong>I cannot install with AltStore on Windows</strong></summary>

Make sure you installed iTunes and iCloud directly from Apple, not from the Microsoft Store, then try again.

</details>

<details>

<summary><strong>My iPhone is not detected</strong></summary>

Reconnect the cable, unlock the phone, tap Trust, and try again. With AltStore on Windows, enabling Wi-Fi sync can also help.

</details>


# ProxyHub Pro (Multi-device Control)

**ProxyHub Pro** allows you to manage multiple mobile devices and their proxies directly from your computer using the 9Proxy app.

Instead of configuring each phone manually, you can view all connected devices in one place and assign, change, or remove proxies remotely.

This is the recommended setup when you are working with multiple devices at the same time.

## 1. When should you use this?

Use **ProxyHub Pro** when:

* You are managing multiple phone devices
* You want to assign or change proxies remotely

<figure><img src="/files/75ZZPiBGf6j4DdN5G4kw" alt=""><figcaption></figcaption></figure>

If you only need to use a proxy on a single phone, you can simply use ProxyHub Lite directly on that device.

## 2. How it works

<figure><img src="/files/vYLMCEdY0CMQWHRYxZji" alt=""><figcaption></figcaption></figure>

**ProxyHub Pro** works together with ProxyHub Lite (mobile app):

* **ProxyHub Lite (phone)** runs on your mobile devices
* **ProxyHub Pro (desktop)** lets you manage those devices

Once connected, your mobile devices will appear automatically in **ProxyHub Pro**, and you can control them from your computer.

## 3. Before you begin

Make sure the following conditions are met:

* **ProxyHub Lite** is installed on your phone devices
* The 9Proxy app is installed on your computer
* All devices are signed in to **the same 9Proxy account**
* Your phone devices are online

A device will only appear in **ProxyHub Pro** if it is logged in to ProxyHub Lite using the same account.

## 4. Basic workflow

<figure><img src="/files/3xX0ZR4fkM6dV9dw8RVX" alt=""><figcaption></figcaption></figure>

## 5. Open and view your devices

{% stepper %}
{% step %}
Open the **9Proxy app** on your computer
{% endstep %}

{% step %}
Sign in with **your 9Proxy account**
{% endstep %}

{% step %}
Select **ProxyHub Pro**
{% endstep %}
{% endstepper %}

<figure><img src="/files/pfBMA9KK2fH6P6LL3fFN" alt=""><figcaption></figcaption></figure>

You will see a list of all mobile devices currently connected to your account. This is your main dashboard for managing devices remotely.

If you manage many devices, you can filter the list by: **Connection Type** / **Country** / **Device Status**

You can also search for a device using its Device Key.

To find the **Device Key** on a phone:

{% stepper %}
{% step %}
Open **ProxyHub Lite**
{% endstep %}

{% step %}
Go to **Settings**
{% endstep %}

{% step %}
Locate the **Device Key**

<figure><img src="/files/wfd09iF4HYAEQ3GqOIbN" alt=""><figcaption></figcaption></figure>

{% endstep %}
{% endstepper %}

Use this when you need to identify a specific device among many.

## 6. Organize devices into groups

Groups help you organize and manage multiple devices based on your workflow. For example, you can group devices by purpose such as Facebook accounts, scraping tasks, testing, or daily operations.

Use groups when you are working with many devices and need a clearer structure to manage them efficiently.

{% stepper %}
{% step %}
**Create a group**

In **ProxyHub Pro**, click **Create Group** and enter a name.

The group will act as a container for related devices.

<figure><img src="/files/V9GxfuIC30yuCtkZ8c5Q" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Add a device to a group**

* In the device list, click the three-dot icon
* Select **Add** to
* Choose a group
  {% endstep %}

{% step %}
**Move** or **remove a device**

* Use ‘**Move to**’ to transfer a device to another group

<figure><img src="/files/eiDYdEiAUZzTbdshWtXD" alt=""><figcaption></figcaption></figure>

* Use Remove to remove it from a group
  {% endstep %}
  {% endstepper %}

## 7. Assign and manage proxies

You can **assign or change a proxy for any device directly from your computer.**

{% stepper %}
{% step %}
Locate the device
{% endstep %}

{% step %}
Click the forward icon

<figure><img src="/files/dn0GZhvFF8MuE3sAxjFX" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Choose your proxy criteria, such as country, city, state, ZIP code, or ISP

<figure><img src="/files/CALBcZ5m7MQuArwNqDMK" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Click **Forward**
{% endstep %}
{% endstepper %}

The system will assign a matching proxy to that device.

You do not need to interact with the phone. The proxy is applied remotely through **ProxyHub Pro**.

**To stop using a proxy on a device:**

{% stepper %}
{% step %}
Locate the device
{% endstep %}

{% step %}
Click the red disconnect icon

<figure><img src="/files/Y2fxa9jgXEbtPvNNySdp" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

The proxy connection will be removed from that device.

## 8. Auto Refresh Proxy

Auto Refresh Proxy helps maintain a stable connection by automatically replacing a proxy when it goes offline. You can enable or disable this feature for each device depending on your needs.

#### Configure settings

Go to **Auto Refresh Settings** and configure:

* **Delay Time** - time to wait before assigning a new proxy
* **Maximum Refresh** - maximum number of automatic replacements

<figure><img src="/files/DesNEGnRDs6pUKzeIXLY" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}

#### Recommendation

Set Delay Time to at least 10 seconds. If the delay is too short, proxies may be replaced too frequently, which can increase usage and reduce your balance faster than expected.
{% endhint %}

## Important Notes

* You can either use a proxy directly on your phone or manage it from ProxyHub Pro, but not both at the same time. Assigning a proxy from ProxyHub Pro will override any current connection on the phone
* If you log out of ProxyHub Lite, the device will no longer appear in ProxyHub Pro

## Troubleshooting

<details>

<summary><strong>The device does not appear</strong></summary>

Check that:

* The phone is logged in to ProxyHub Lite
* The computer is using the same account

</details>

<details>

<summary><strong>Proxy does not connect</strong></summary>

Check that:

* The selected location has available proxies
* Another connection mode is not active

</details>

<details>

<summary><strong>Device disappears</strong></summary>

This usually means:

* The phone went offline
* The user logged out of ProxyHub Lite
* The account does not match

</details>

## FAQs

<details>

<summary><strong>What’s the difference between ProxyHub Lite and ProxyHub Pro</strong></summary>

* ProxyHub Lite runs on your phone and is used to connect and use a proxy directly on that device
* ProxyHub Pro runs on your computer and is used to manage and control multiple devices remotely

</details>

<details>

<summary><strong>Do I need to use both ProxyHub Lite and ProxyHub Pro?</strong></summary>

No.

* Use ProxyHub Lite if you only need a proxy on a single phone
* Use ProxyHub Pro if you want to manage multiple devices from your computer You only need both when you want to control your phone remotely from your computer.

</details>

<details>

<summary><strong>How many devices can I manage at once?</strong></summary>

No. You can either:

* Use a proxy directly on your phone
* Or manage it from ProxyHub Pro If you assign a proxy from ProxyHub Pro, it will replace any current connection on the phone.

</details>

<details>

<summary><strong>Can I use ProxyHub with emulators or cloud phones?</strong></summary>

Yes. ProxyHub supports:

* Real devices
* Emulators
* Cloud phones As long as ProxyHub Lite is installed and logged in, the device can be managed.

</details>

<details>

<summary><strong>Do my devices need to be on the same network?</strong></summary>

No. Your devices can be on different networks, locations, or even different countries. As long as they are online and logged in to the same account, they can be managed together

</details>


# ProxyHub Lite (Use Proxy on Mobile)

Proxy Hub allows you to connect a proxy directly to your mobile device. Once connected, your internet traffic will be routed through the selected proxy, enabling you to change your IP address and location instantly.

## 1. Sign in to Proxy Hub

{% stepper %}
{% step %}
Open the **Proxy Hub app**
{% endstep %}

{% step %}
Sign in with **your 9Proxy account**

<figure><img src="/files/iQ7LrtS5VPC1zPfQDv7G" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

If you don’t have an account, [create one](https://9proxy.com/sign-up) before continuing.

After signing in, you’ll see your current IP address and location on the main screen.

## 2. Connect quickly (Quick Connect)

Tap **Quick Connect** to connect instantly. This is the fastest way to start using a proxy without manual configuration.

<figure><img src="/files/PTwmf3UMaeU7e711fYFQ" alt=""><figcaption></figcaption></figure>

* If this is your first connection, a random proxy will be assigned
* If you’ve connected before, the system will prioritize proxies from your previous location

## 3. Choose a specific proxy (Proxy List)

If you need more control, you can manually select a proxy from a specific location.

{% stepper %}
{% step %}
Tap **Proxy List**
{% endstep %}

{% step %}
Browse or search for a proxy

<figure><img src="/files/69f5JQPUEAB1CJPf5cKH" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**(Optional) Use the filter icon to narrow results by:**

**Country / State / City / ZIP code / ISP**

{% hint style="info" icon="square-half-stroke" %}
**Tip**: To maintain a stable proxy pool, it’s recommended to limit filtering to no more than two criteria at a time. Applying too many filters may significantly reduce the number of available proxies.
{% endhint %}
{% endstep %}

{% step %}
**Select a proxy**
{% endstep %}

{% step %}
Tap **Connect to This Proxy**
{% endstep %}
{% endstepper %}

You can also tap the ⭐ icon to save a proxy to your Favorites for quick access later.

<figure><img src="/files/fgCwFxSFJRYo4EIVwKDL" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}

## NOTE

* On iOS, you may see the following prompt when connecting for the first time: “Proxy Hub” Would Like to Add VPN Configurations
* Tap Allow to enable the proxy connection. This is required for Proxy Hub to route your traffic through the proxy.
  {% endhint %}

Once connected, your new proxy IP and location will be displayed on the screen.

To switch to a different proxy, tap **Switch IP**. This will assign a new proxy from the available pool.

<figure><img src="/files/6wKzkBVSoaBNQA2NCvop" alt=""><figcaption></figcaption></figure>

## Advanced Settings

### **Split Tunneling (Android only)**

By default, all network traffic on your device is routed through the proxy. However, in some cases, you may want only specific apps to use the proxy, or exclude certain apps from it.

<figure><img src="/files/mplUApluQ7Z8U0HbNaYX" alt=""><figcaption></figcaption></figure>

To configure:

Go to **Settings** > **Split Tunneling** > **Manage**

* Choose **Allowlist** if you want only selected apps to use the proxy
* Choose **Blocklist** if you want all apps to use the proxy except selected ones

After selecting your apps, tap **Save**.

{% hint style="warning" %}
**Note**:

&#x20;Split Tunneling is currently available on Android devices only and is not supported on iOS.
{% endhint %}

### Auto Refresh Proxy

Auto Refresh automatically replaces your proxy if it goes offline, helping maintain a continuous connection. The replacement proxy will use the same location as the previous one.

You can configure:

* **Delay Time**: The time to wait before assigning a new proxy
* **Maximum Refresh**: The maximum number of automatic replacements

{% hint style="success" %}

### Recommendation

* Set **Delay Time** to at least 10 seconds to avoid replacing a proxy before it fully connects.
* Setting the delay too low may cause frequent replacements, which can consume your proxy balance faster than expected.
  {% endhint %}

### Reuse proxies (24H List)

Proxy Hub allows you to reuse proxies that you’ve used within the last 24 hours, as long as they are online again.

<figure><img src="/files/v4z0bnaZySClSLQLuHTe" alt=""><figcaption></figcaption></figure>

Go to 24H List from the bottom navigation bar to view your recently used proxies. From there, you can select any available proxy and reuse it at no additional cost.


# Download & Install


# Quick Start

You can use ProxyHub in two ways, depending on your setup.

<table data-view="cards"><thead><tr><th></th></tr></thead><tbody><tr><td></td></tr></tbody></table>


# Proxy API

{% openapi src="/files/BaUZjm9XFVTZEBVqN49i" path="/api/proxy" method="get" %}
[proxy\_api.json](https://1693667300-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNuuHdu9z8IgffZvLnM2A%2Fuploads%2F2a6PKQ4ALDKwWN7e1TUR%2Fproxy_api.json?alt=media\&token=920ff990-7db9-48d2-8c00-62b6ed566efb)
{% endopenapi %}


# Today List API

{% openapi src="/files/S201lCAHu0Ny9xlt3VAY" path="/api/forward" method="get" %}
[today\_api.json](https://1693667300-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNuuHdu9z8IgffZvLnM2A%2Fuploads%2FWVAMOb5ontmxjjmJozQ7%2Ftoday_api.json?alt=media\&token=fc293745-fb62-446a-83fc-fe28da7192ab)
{% endopenapi %}

{% openapi src="/files/S201lCAHu0Ny9xlt3VAY" path="/api/today\_list" method="get" %}
[today\_api.json](https://1693667300-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNuuHdu9z8IgffZvLnM2A%2Fuploads%2FWVAMOb5ontmxjjmJozQ7%2Ftoday_api.json?alt=media\&token=fc293745-fb62-446a-83fc-fe28da7192ab)
{% endopenapi %}


# Port API

{% openapi src="/files/BPsz6otDp4IiXiUzSMDy" path="/api/port\_check" method="get" %}
[port\_api.json](https://1693667300-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNuuHdu9z8IgffZvLnM2A%2Fuploads%2FyCPdptvy1guTwECslzi4%2Fport_api.json?alt=media\&token=213997d0-c08a-446a-8cfb-fb1d61ee96c3)
{% endopenapi %}

{% openapi src="/files/BPsz6otDp4IiXiUzSMDy" path="/api/port\_status" method="get" %}
[port\_api.json](https://1693667300-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNuuHdu9z8IgffZvLnM2A%2Fuploads%2FyCPdptvy1guTwECslzi4%2Fport_api.json?alt=media\&token=213997d0-c08a-446a-8cfb-fb1d61ee96c3)
{% endopenapi %}

{% openapi src="/files/BPsz6otDp4IiXiUzSMDy" path="/api/set\_port\_range" method="get" %}
[port\_api.json](https://1693667300-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNuuHdu9z8IgffZvLnM2A%2Fuploads%2FyCPdptvy1guTwECslzi4%2Fport_api.json?alt=media\&token=213997d0-c08a-446a-8cfb-fb1d61ee96c3)
{% endopenapi %}

{% openapi src="/files/BPsz6otDp4IiXiUzSMDy" path="/api/port\_free" method="get" %}
[port\_api.json](https://1693667300-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNuuHdu9z8IgffZvLnM2A%2Fuploads%2FyCPdptvy1guTwECslzi4%2Fport_api.json?alt=media\&token=213997d0-c08a-446a-8cfb-fb1d61ee96c3)
{% endopenapi %}


# Cryptocurrency

This guide explains how to pay with cryptocurrency on 9Proxy and how to resolve the most common issues that may occur during the payment process.

{% hint style="info" %}
**NOTE**: When you choose to pay via cryptocurrency, you’ll automatically receive an **extra 5% IP bonus** on your order.
{% endhint %}

## 1. Supported Cryptocurrencies

All crypto transactions are securely processed through CoinPayments, our official payment gateway partner.

We currently support the following cryptocurrencies:

* Bitcoin (BTC)
* Ethereum (ETH)
* Litecoin (LTC)
* TRON (TRX)
* Tether-TRC20
* Tether-ERC20
* Dogecoin (DOGE)
* DAI
* BitcoinCash (BCH)

## 2. How to Pay with Cryptocurrency

{% stepper %}
{% step %}

### Select a Package

Visit the **Pricing** page and choose the proxy package that best fits your needs.\
9Proxy currently offers several types of packages:

* **By IPs**: Fixed number of residential IPs, unlimited bandwidth.

<figure><img src="/files/56r0qvvycPy4qkXFaeNl" alt=""><figcaption></figcaption></figure>

* **By GB**: Pay by data usage (bandwidth-based residential proxies).

<figure><img src="/files/6a0RBE9EqZYzUs4zpNgl" alt=""><figcaption></figcaption></figure>

* **Bundle Combo**: Combined plans that include both IP and bandwidth options for flexible usage.

<figure><img src="/files/yY6kZlTGiQIvRp3EJcFP" alt=""><figcaption></figcaption></figure>

Once you’ve made your selection, click Order Now to continue.

{% endstep %}

{% step %}

### Choose “Cryptocurrency” as Your Payment Method

On the checkout page:

* Select **Cryptocurrency** as your payment option.
* Choose the specific coin you’d like to pay with.
* (Optional) Enter any coupon code to apply discounts.
* Click **Continue with Cryptocurrency** to proceed.

<figure><img src="/files/TB8YKHMBbYO6uGo4XaCj" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Complete the Payment

You’ll be redirected to the CoinPayments payment page.

* Option 1: Scan the QR code using your crypto wallet app.
* Option 2: Copy the wallet address manually and paste it into your wallet’s Send field.

Make sure you:

* Send the exact amount displayed, including decimal values.
* Use the correct blockchain network
* Complete your payment within the given time window (usually 15–30 minutes).

<figure><img src="/files/8EgxehpoyA1tCv3C36E1" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Important**: If you send payment on the wrong network or after the expiration window, the transaction may fail and require manual processing.
{% endhint %}
{% endstep %}

{% step %}

### Confirm Your Payment

After sending the transaction, please wait around 15 minutes for blockchain confirmation.\
You’ll see a success message on our platform once the payment is confirmed.
{% endstep %}

{% step %}

### Access Your Proxies

Once your payment is verified:

* Go to your Dashboard or open the 9Proxy App.
* Your IP balance will appear automatically.

If your proxies are not visible within 15 minutes after confirmation, please contact our support team with your transaction ID.
{% endstep %}
{% endstepper %}

## 3. Common Issues & Solutions

If your cryptocurrency payment does not go through, consider these potential issues and solutions:

### 3.1. Transaction Issues

{% tabs fullWidth="false" %}
{% tab title="Transaction Pending" %}

* Issue: Blockchain network congestion can delay confirmation.
* Solution: Wait a few minutes, then refresh your transaction status. You can track it on your wallet or CoinPayments page.
  {% endtab %}

{% tab title="Expired Payment Window" %}

* Issue: The payment time expired before completion.
* Solution: Place a new order and complete the transaction within the valid timeframe.
  {% endtab %}

{% tab title="Wrong Network Used" %}

* Issue: The payment was sent using an incorrect blockchain network (e.g., ERC20 instead of TRC20).
* Solution: Always double-check the network before sending. Payments sent on the wrong network may be lost or delayed.
  {% endtab %}
  {% endtabs %}

### 3.2. Payment Amount Issues

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

* Issue: The amount sent was less than required.
* Solution: Send the remaining amount to complete the order.&#x20;

If your exchange doesn’t allow small transfers, try using another wallet or wait for automatic refund processing.

Most common cause: The sender forgot to include network fees. Always check the fee before confirming your transaction.
{% endtab %}

{% tab title="Overpayment" %}

* Issue: The amount sent exceeded the required total.
* Solution: CoinPayments will automatically refund the excess amount after transaction confirmation.
  {% endtab %}
  {% endtabs %}

## 4. Tips to Avoid Payment Issues

* Always send the exact amount displayed on the payment screen.
* Include network fees in your transfer.
* Verify that you are using the correct blockchain network.
* Complete the transaction before the payment window expires.
* All crypto payments are final and irreversible once confirmed on the blockchain.

## 5. Need Help?

If you still experience issues or your payment hasn’t been reflected after 15 minutes, please contact 9Proxy Support with the following details:

* Your Payment ID or 9proxy email account
* The Coin Type used (e.g., USDT-TRC20, BTC)
* The Amount sent
* A screenshot of your completed transaction

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# 9Proxy Wallet

The Smart, Fast, and Seamless Way to Pay for Proxies

The 9Proxy Wallet is the most convenient way to manage payments, avoid repeated transaction fees, and keep your proxy services running without interruption. Instead of paying manually every time you buy IPs or GB, you can load funds into your wallet once and let the system handle the rest - instantly, reliably, and securely.

This guide covers how the wallet works, how to top up, how Auto Renew functions, and how to manage your full payment history.

## 1. What Is the 9Proxy Wallet?

<figure><img src="/files/72o24G8zEgXcQZbCnMpe" alt=""><figcaption></figcaption></figure>

The 9Proxy Wallet is a prepaid balance stored inside your account. It allows you to:

* Pay for any proxy package instantly - no confirmation delay
* Avoid multiple blockchain or local payment fees
* Automate future purchases through Auto Renew
* Ensure continuous service without unexpected downtime
* Track all top-ups and auto-purchases in one place

The wallet supports all 9Proxy services, including Residential Proxies by IP, Residential Proxies by Bandwidth (GB), and Bundle plans.

## 2. Adding Funds to Your Wallet

When you access the 9Proxy Wallet page, you’ll see the Top Up section at the top.

<figure><img src="/files/QSqjoghH6gAwqQRdIw1K" alt=""><figcaption></figcaption></figure>

#### How to add money:

{% stepper %}
{% step %}
Enter the amount you want to add
{% endstep %}

{% step %}
Click **Recharge**
{% endstep %}

{% step %}
Choose a payment method:

* **Cryptocurrency** (USDT, TRX, BTC, etc.)
* **Local Payment** (country-specific methods)
* **Credit Card**
* **Google Pay**

<figure><img src="/files/TB8YKHMBbYO6uGo4XaCj" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
If you have a Coupon, enter it before paying
{% endstep %}

{% step %}
Click Continue and complete the transaction
{% endstep %}
{% endstepper %}

{% hint style="success" %}

## NOTE

* Always transfer the exact required amount, including any blockchain or exchange fees
* Once payment is confirmed, your Current Balance updates instantly
* Crypto top-ups receive an additional 5% bonus
  {% endhint %}

## 3. Using Your Wallet to Pay

Once your wallet has funds, you can pay for:

* IP-based proxy packages
* Bandwidth (GB) packages
* Bundle packages
* Enterprise upgrades

## 4. Auto Renew (Auto Purchase for IPs & GB)

The Auto Renew feature ensures your proxy usage never gets interrupted.

When enabled, Auto Renew will automatically purchase new IPs or GB from your wallet whenever your balance drops below your chosen threshold.

### 4.1. Why Auto Renew is useful

* Your tasks never stop because your IP/GB hits zero
* Prevents disruptions in scraping, automation, or continuous workloads
* No need to make manual purchases
* Saves time and reduces risk of downtime

### 4.2. How to set it up

{% stepper %}
{% step %}

### Go to 9Proxy Wallet → Auto Renew Settings

{% endstep %}

{% step %}

### Toggle Enable Auto Renew

{% endstep %}

{% step %}

### Choose IP or Traffic

{% endstep %}

{% step %}

### Set data

* The threshold at which Auto Renew activates
* The quantity of IPs or GB to auto-purchase
  {% endstep %}

{% step %}

### Save your settings

{% endstep %}
{% endstepper %}

## 5. Wallet History & Records

You can monitor all payment activities through two dedicated sections:

| Deposit Record                                                                      | Transaction Record                                                                                                                                                                                   |
| ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Shows every top-up you have made, including timestamps, payment method, and status. | <ul><li>Shows all auto-purchases made through Auto Renew, including IP/GB amounts and deductions.</li><li>These logs provide full transparency and help you track your spending over time.</li></ul> |

## 6. FAQs

<details>

<summary>Do wallet balances expire?</summary>

No, your wallet balance never expires.

</details>

<details>

<summary>Can I use my wallet for any package type?</summary>

Yes - IP, GB, Bundles, and Enterprise upgrades are all supported.

</details>

<details>

<summary>Can I enable Auto Renew without funds?</summary>

You can enable it, but purchases won’t occur until your wallet has money.

</details>

<details>

<summary>Does Auto Renew support both IPs and GB?</summary>

Yes. You can configure the threshold and auto-purchase amount for either type.

</details>

<details>

<summary>Can I transfer wallet funds to another user?</summary>

Not at this time - wallet balances are tied to your account.

</details>

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Local Payment

Local Payment provides region-specific checkout options so you can pay quickly and conveniently using methods available in your country.

{% stepper %}
{% step %}

### Select a Package

* Go to the Pricing Page of the proxy type you want: **Residential Proxy by IP / Residential Proxy by GB / Bundle Packages**
* Choose the package that best suits your needs.
* Click "**Order Now**" to proceed to checkout.

<figure><img src="/files/56r0qvvycPy4qkXFaeNl" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/6a0RBE9EqZYzUs4zpNgl" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/yY6kZlTGiQIvRp3EJcFP" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Choose Local Payment

* On the checkout page, select "**Local Payment**" as your preferred payment option.
* If you have a coupon code, enter it in the designated field to apply any discounts.
* Click "**Continue with Local Payment**" to proceed.

<figure><img src="/files/TB8YKHMBbYO6uGo4XaCj" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Complete Your Payment

* The system will automatically display the payment options available in your area based on your location.
* Select your preferred local payment method and follow the on-screen instructions to complete the transaction.

<figure><img src="/files/zCZNmF2d6kjSSNS12CSj" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

Once your payment is confirmed, your proxy package will be activated, and you can start using it right away!&#x20;

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Credit Card

Easily complete your purchase with a credit card by following these simple steps!

## How to Pay with Credit Card

{% stepper %}
{% step %}

### Select a Package

Visit the Pricing page, browse through the available proxy packages, and choose the one that best suits your needs. Once you've made your selection, click "**Order Now**" to proceed.

<figure><img src="/files/56r0qvvycPy4qkXFaeNl" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/6a0RBE9EqZYzUs4zpNgl" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/yY6kZlTGiQIvRp3EJcFP" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Choose Payment Method

On the checkout page:

* Select "**Credit Card**" as your preferred payment method.
* If you have **a coupon code**, enter it in the designated field to apply any discounts.
* Click "**Continue with Credit Card**" to move to the next step.

<figure><img src="/files/YiNIzEJAo0LhA4NpesEg" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}

### Enter Your Payment Information

* Fill in your credit card details and complete the payment form.
* Click "**Pay**" to finalize your transaction.

<figure><img src="/files/1Tx6MySgxxJHDLpueCUV" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="info" %}

### Note

If you prefer, you can also choose to pay via GPay or Alipay.
{% endhint %}

## Why Was My Payment Declined ?

The most common payment issue is the error declined by your bank. Your bank may decline the payment for one of these reasons:

* Insufficient funds – Your account does not have enough balance to complete the transaction.
* Suspicious activity – The bank may have flagged the transaction as a potential fraud and blocked it.
* Incorrect payment details – You may have entered an incorrect CVV code, expiration date, or card number.

## How to Resolve the Issue:

* Check your account balance to ensure you have enough funds.
* Double-check your card details – Make sure the card number, CVV, and expiration date are correct.
* Try a different payment method – Use another credit card or pay with GPay, Alipay, [**Local Payment**](/billing-and-payment/local-payment), or [**Cryptocurrency**](/billing-and-payment/cryptocurrency).
* Contact your bank – If your bank blocked the transaction for security reasons, ask them to approve it.

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Account Deletion

If you’ve decided to delete your 9Proxy account and associated data, please follow the proper procedure to ensure your request is processed securely and efficiently.

## Steps to Request Account Deletion

1. Send an email to **<support@9proxy.com>** with your account deletion request.
2. Make sure to send your request from the email address linked to your 9Proxy account to verify your identity. If you send the request from a different email address, we may require additional verification, such as confirming the registered email address.
3. Once your request is processed, we will notify you via email once your account and data have been deleted.

{% hint style="info" %}

### NOTE

* Account deletion is permanent, and your account cannot be restored once it has been deleted.
* If you need assistance before proceeding, feel free to contact our support team.
  {% endhint %}

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# IP Location Does Not Match

Proxy location mismatches can sometimes occur due to outdated or inconsistent location databases.

## How We Determine Proxy Locations

Our system relies on IPinfo and IP2Location databases to determine the geographical location of proxy IPs. To verify the correct IP location of your proxy, you can check it directly on:[ https://ipinfo.io/what-is-my-ip](https://ipinfo.io/what-is-my-ip).

## Why Location Mismatches Happen?

Different databases may update at different intervals, leading to discrepancies in reported locations. If you use a third-party IP lookup service, it may show outdated or incorrect information.

{% hint style="info" %}

### NOTE

Using databases outside of IPinfo or IP2Location may result in inaccurate location reports. Since we cannot guarantee the accuracy of third-party sources, please use them at your own discretion.
{% endhint %}

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Set Up a Non-Repeated Proxy

The **Not Repeat Proxy** feature ensures that proxies you have already purchased do not appear multiple times in your Proxy List, helping you manage your proxies efficiently and avoid duplicate assignments. This feature is particularly useful for maintaining an organized proxy pool and preventing unnecessary repetitions.

{% hint style="info" %}

### NOTE

The Not Repeat Proxy feature only works with proxies that you have purchased from 9Proxy.
{% endhint %}

## How To Enable Not Repeat Proxy

{% stepper %}
{% step %}

### Open Proxy Settings

* Launch the **9Proxy App**
* Navigate to **Settings** > **Proxy Settings** to access the configuration options

<figure><img src="/files/nWlCXA7TLaJYv0d7oTGF" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Configure deduplication time

* Find the option labeled **Remove duplicates, non-acquired within a certain time**
* Choose a time frame between 1 to 24 hours for the deduplication process
* Once enabled, any proxy you buy will only appear once in the Proxy List within the selected time period

<figure><img src="/files/3RWknzBwk0T5tVzXEkIq" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## Example usage of Not Repeat Proxy

{% stepper %}
{% step %}
Search for proxies

* Open the **Proxy List** tab
* Enter your desired search criteria, such as `Country, State, or ISP`, and click **Search** to filter the available proxies
  {% endstep %}

{% step %}
Assign a proxy to a port

* From the search results, choose a proxy and right-click on it
* Select **Forward to Port** and assign it to your preferred port
  {% endstep %}

{% step %}
Navigate to the Forwarding List to view detailed information about the assigned proxy

You will see the purchased IP assigned to the port and its current status
{% endstep %}
{% endstepper %}

If you refresh the Proxy List or request a new proxy, the previously purchased proxy will not appear again during the set deduplication time. This ensures that your proxy list remains clean, organized, and free from duplicates.

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# Speed Issues

Residential proxies operate within a real-user network, meaning speeds can vary based on multiple factors. While our proxy network is optimized for the best performance, some IPs may naturally be faster than others. If you’re experiencing speed issues, here are the key factors to consider:

### Geographical Distance

The farther the proxy server is from your actual location, the higher the latency.

For example, if you’re connecting from the U.S. but using a proxy in India, response times will be slower compared to a Canada-based proxy.

### Network Load & Traffic

During peak hours, when demand for certain proxy pools is high, speeds may slow down temporarily. If possible, try connecting during off-peak times or switching to a different proxy region.

### Other Factors Affecting Speed

* Your own internet speed plays a major role—ensure your connection is stable.
* The number of requests you send at once can impact speed; too many concurrent requests can overload the connection.
* The target website's responsiveness—if the site itself is slow or rate-limiting requests, it may not be a proxy issue.

## How to Improve Speed

* Choose a proxy location closer to your actual location.
* Try switching to another proxy IP or region.
* Reduce the number of simultaneous requests.
* Check your own network speed to rule out local connection issues.

If you're still experiencing slow speeds, let me know your proxy settings and location, and I’ll help you troubleshoot further!

{% columns %}
{% column %}

#### Support Channels:

{% endcolumn %}

{% column %}

* **Email**: <support@9proxy.com>
* **Live Chat**: Available on[ 9proxy.com](https://9proxy.com)
* **Telegram**: @Official9Proxy
  {% endcolumn %}
  {% endcolumns %}


# If All Ports Are Unavailable

If you see an error indicating that all ports are unavailable, it usually means another application or service on your device is currently using the same port range that 9Proxy is trying to allocate.

## 1. Possible Cause

Some software, browsers, or background services may be occupying the same ports or blocking access to them.

Common causes include:

* Other proxy or VPN applications running in the background
* Web browsers with proxy extensions using the same port range
* System services or security software that reserve ports

## 2. Solution

Try one of the following solutions:

### 2.1. Option 1: Close Conflicting Applications

* Close any other proxy tools, VPN software, or browsers that may be running.
* Make sure no background process is using the same port range as 9Proxy.
* Once closed, try opening the 9Proxy app again.

### 2.2. Change the Port Range

Open the 9Proxy app and assign a different port range that isn’t already in use. For detailed steps, see How to Change the Port Range.

### 2.3. Option 3: Restart Your Computer

If the issue persists, restart your computer to release any ports locked by background services. After restarting, open the 9Proxy app and check the port status again.

## 3. Still Not Working?

If none of the above options resolve the issue, please contact our Support Team for live assistance:

* Live Chat: available on the[ 9Proxy website](https://9proxy.com)
* Telegram: @Official9Proxy


# Duplicate Proxies in Proxy List

Sometimes, you may notice that certain proxies appear more than once in your Proxy List. This is normal behavior and does not affect your proxy functionality or total IP balance.

However, if you find it bothersome and prefer not to see repeated proxies, you can enable the Not Repeat Proxy feature to hide duplicates automatically.

## 1. How to Enable the Not Repeat Proxy Feature

{% stepper %}
{% step %}
Open the 9Proxy App.
{% endstep %}

{% step %}
Go to **Settings** → **Proxy Settings**.
{% endstep %}

{% step %}
Find the option “**Remove duplicates, non-acquired within a certain time**.”
{% endstep %}

{% step %}
Enable it and set a deduplication time between **1 and 24 hours**.
{% endstep %}
{% endstepper %}

Once enabled, any proxy you purchase will appear only once in your Proxy List within the selected time period.

## 2. Need Support?

If your proxies appear duplicated and your IP balance was reduced unexpectedly, please contact 9Proxy Support for review and assistance.

* Live Chat: available on the[ 9Proxy website](https://9proxy.com)
* Telegram: @Official9Proxy
* Email: <support@9proxy.com>


# Overview

### [Public API (API Key)](https://9proxy.com/dashboard/my-account?tab=api-key)

The Public API allows you to fully automate proxy management and business operations. By authenticating with your API key, you can:

* Manage account data (balance, purchase history, usage logs)
* Issue and manage sub-accounts
* Generate and revoke share codes
* View and manage wallet operations
* Access affiliate tracking and commission details
* Query real-time proxy usage and IP statistics

### **API Domains**

\
9Proxy provides two Public API base domains depending on your environment:

**Production**: <kbd>api.9proxy.com</kbd> \
Use this domain for live traffic and real customer operations in the production environment.

**Development**: <kbd>sandbox.9proxy.com</kbd>\
Use this domain for development, testing, and validation in the sandbox environment.

API keys give direct access to all supported endpoints. Currently, all keys inherit the same permissions available to your account.&#x20;

For details, see:

* [**Generate Your API Key**](/developers/public-api/api-key)
* **Public API References:**\
  \- [API For Share Code](/developers/public-api/api-for-share-code)\
  \- [API For Sub-Accounts](/developers/public-api/api-for-sub-accounts)\
  \- [API For Account](/developers/public-api/api-for-account)\
  \- [API For Affiliate](/developers/public-api/api-for-affiliate)\
  \- [API For Billing](/developers/public-api/api-for-billing)\
  \- [API For User-Pass](/developers/public-api/api-for-user-pass)\
  \- [API For Whitelist](/developers/public-api/api-for-whitelist)\
  \- [API For Proxy Connect Config](/developers/public-api/api-for-proxy-connect-config)


# API Key

## What is the Public API Key?

Your Public API Key is a unique alphanumeric string that authenticates your requests to our API. It acts like a password for your applications - without it, the API will reject requests.

## Generating a Public API Key

{% stepper %}
{% step %}

### Sign In

Log in to your 9Proxy account and open the [Dashboard](https://9proxy.com/dashboard).
{% endstep %}

{% step %}

### Navigate to API Key Settings

Go to **Account Settings** → **API Key**.
{% endstep %}

{% step %}

### Enable 2FA and Verify Your Email

Creating an API key requires:

* Two-Factor Authentication (2FA) enabled
* Account verification completed

If either is missing, a pop-up will guide you through the setup before you can continue.
{% endstep %}

{% step %}

### Generate the API Key

Click **Generate Key** to create your new API key.

<figure><img src="/files/UvZsnlyqDr1jc5LXkYlI" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Copy and Store Securely

* The API key will be displayed once only - copy it immediately and store it in a secure location.
* We also send an email notification confirming key creation, which includes your API key.
* API keys are confidential. Do not share them with anyone or post them publicly.

<figure><img src="/files/AZKojeiyI4FlP3TNtI7y" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="info" %}
**Note**: For security reasons, we never store your full API key after it’s generated. Once you close this window, you will not be able to view it again. Please be sure to save it securely. If the key is lost, you’ll need to generate a new one.
{% endhint %}

## Regenerating Your Key

Regenerate your API key if you suspect it’s been compromised, need to rotate credentials, or are transferring project ownership.

{% hint style="info" %}

## NOTE

Before you proceed, note:

* The old key will stop working immediately.
* Any active API sessions using the old key will fail instantly.
* All scripts, tools, and integrations must be updated to use the new key before they can function again.
  {% endhint %}

### How to Regenerate:

* In the dashboard, go to Account Settings → API Key.
* Click Revoke & Regenerate.

<figure><img src="/files/bD1fWp2sBJWcfplG0DlF" alt=""><figcaption></figcaption></figure>

* Complete Two-Factor Authentication (2FA) verification.
* Copy the new key and update all applications immediately.

{% hint style="info" %}
**Tip**: Keep a secure copy of the new key before leaving the page, it will only be shown once.
{% endhint %}

## FAQs

<details>

<summary>Can I view my API key again after creating it?</summary>

No. The full token is shown once at creation time. You should store it securely. If you no longer have it, revoke the old key and generate a new one.

</details>

<details>

<summary>Can I have keys with different permissions?</summary>

No. At this time, all API keys created under your account have the same access level. Authorization scopes are not yet supported, so any key you generate will be able to access all available endpoints, including:

* **Account**: Get account info
* **Proxy**: IP balance, purchase history, usage logs (main/sub), today list, favorites
* **Sub-account**: List/add/edit/delete sub-accounts, enable/disable, auto-add IP config
* **Share code**: Generate/use/revoke codes, view share/use logs
* **Wallet**: Wallet balance, deposit history, transactions (convert/transfer), auto renew
* **Affiliate**: Affiliate info (balance, level, referrals), affiliate history, referral links

</details>

<details>

<summary>What happens if I lose my keys?</summary>

For security reasons we can’t show a key again. Immediately revoke the lost key and create a new one, then update any services that used the old key.

</details>

<details>

<summary>Will regenerating my key interrupt my services?</summary>

Yes. You can only have one active key at a time. When you create a new API key, the old key is immediately invalidated:

* Any active sessions using the old key will fail instantly.
* All scripts, tools, and integrations must be updated to use the new key to continue functioning.

</details>

<details>

<summary>Does my API key expire?</summary>

No. API keys remain valid until you revoke or regenerate them, unless your account is suspended or closed.

</details>

<details>

<summary>Will I be notified when a new API key is created or regenerated?</summary>

Yes. We send an email notification to your registered account email whenever an API key is generated or regenerated.

</details>


# API For Share Code

## List share code

> Returns a list of share codes

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListShareCode":{"type":"object","description":"Returns the list of share codes for the user.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","description":"Data.","properties":{"items":{"type":"array","description":"Array of share codes","items":{"$ref":"#/components/schemas/ShareCodeInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"ShareCodeInfo":{"type":"object","description":"Information about a share code.","properties":{"code":{"type":"string","description":"Share code value."},"data_type":{"type":"integer","description":"Code type: 1 = IP, 2 = traffic."},"expired_at":{"type":["integer","null"],"description":"Expiration timestamp. Null means the code does not expire."},"amount_traffic":{"type":"integer","description":"Traffic amount associated with the code (bytes)."},"forward_to":{"type":["string","null"],"description":"Email address the code was forwarded to (if configured)."},"used_by":{"type":["string","null"],"description":"Email address of the user who redeemed the code."},"number_of_ips":{"type":"integer","description":"Number of IPs associated with the code."},"status":{"$ref":"#/components/schemas/CDKeyStatus","description":"Current status of the share code."},"used_at":{"type":["integer","null"],"description":"Timestamp when the code was used."},"created_at":{"type":"integer","description":"Timestamp when the code was created."}}},"CDKeyStatus":{"type":"integer","description":"Share code status.\n0 = Available\n1 = Used\n2 = Revoked"},"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/cd-keys/list-share-code":{"get":{"summary":"List share code","description":"Returns a list of share codes","parameters":[{"schema":{"type":"integer"},"name":"status","in":"query","required":false,"description":"Filter share codes by status."},{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items returned. Default: 30."},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Page number of the requested data. Default: 1."},{"schema":{"type":"string"},"name":"sort_by","in":"query","required":false,"description":"Field used for sorting: code, amount_ips, created_at. Default: created_at."},{"schema":{"type":"string"},"name":"order_by","in":"query","required":false,"description":"Sort order: desc or asc. Default: desc."},{"schema":{"type":"string"},"name":"keyword","in":"query","required":false,"description":"Search by keyword in the code field."},{"schema":{"type":"string"},"name":"email","in":"query","required":false,"description":"Filter codes forwarded to a specific email.\nExample: receiver@gmail.com"},{"schema":{"type":"integer"},"name":"data_type","in":"query","required":false,"description":"Filter by data type, 1: ip, 2: traffic.\nEx: 1"},{"schema":{"type":"integer"},"name":"is_enterprise","in":"query","required":false,"description":"Filter enterprise codes: 0 = false, 1 = true.\nExample: 1"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListShareCode"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## List use code

> Returns a list of used share codes.

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListUseCode":{"type":"object","description":"Returns the list of redeemed share codes for the user.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","description":"Response data.","properties":{"items":{"type":"array","description":"Array of redeemed share codes.","items":{"$ref":"#/components/schemas/UseCodeInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"UseCodeInfo":{"type":"object","description":"Information about a redeemed share code.","properties":{"code":{"type":"string","description":"Share code value."},"data_type":{"type":"integer","description":"Code type: 1 = IP, 2 = traffic."},"expired_at":{"type":["integer","null"],"description":"Expiration timestamp. Null means the code does not expire."},"amount_traffic":{"type":["integer","null"],"description":"Traffic amount associated with the code (in bytes)."},"forward_to":{"type":["string","null"],"description":"Email address the code was forwarded to (if configured)."},"used_by":{"type":["string","null"],"description":"Email address of the user who redeemed the code."},"number_of_ips":{"type":"integer","description":"Number of IPs associated with the code."},"status":{"$ref":"#/components/schemas/CDKeyStatus","description":"Current status of the share code."},"used_at":{"type":["integer","null"],"description":"Timestamp when the code was used."},"created_at":{"type":"integer","description":"Timestamp when the code was created."}}},"CDKeyStatus":{"type":"integer","description":"Share code status.\n0 = Available\n1 = Used\n2 = Revoked"},"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/cd-keys/list-use-code":{"get":{"summary":"List use code","description":"Returns a list of used share codes.","parameters":[{"schema":{"type":"integer"},"name":"status","in":"query","required":false,"description":"Filter by code status."},{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items returned. Default: 30."},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Page number of the requested data. Default: 1."},{"schema":{"type":"string"},"name":"sort_by","in":"query","required":false,"description":"Field used for sorting: code, amount_ips, used_at. Default: used_at."},{"schema":{"type":"string"},"name":"order_by","in":"query","required":false,"description":"Sort order: desc or asc. Default: desc."},{"schema":{"type":"string"},"name":"keyword","in":"query","required":false,"description":"Search by keyword in the code field."},{"schema":{"type":"string"},"name":"email","in":"query","required":false,"description":"Filter codes received from a specific email.\nExample: sender@gmail.com"},{"schema":{"type":"integer"},"name":"data_type","in":"query","required":false,"description":"Filter by data type, 1: ip, 2: traffic.\nEx: 1"},{"schema":{"type":"integer"},"name":"is_enterprise","in":"query","required":false,"description":"Filter by enterprise: 0: false, 1: true.\nEx: 1"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListUseCode"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## Generate Ip share code

> Generate IP share codes.

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseGenerateShareCode":{"type":"object","description":"Returns newly generated share codes.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"array","description":"Array of generated share codes.","items":{"type":"object","description":"Generated share code information.","properties":{"id":{"type":"integer","description":"ID of the generated code."},"account_id":{"type":"integer","description":"ID of the account that generated the code."},"plan":{"type":"integer","description":"Data plan type. 1 = IP plan."},"amount_ips":{"type":"integer","description":"Number of IPs associated with the code."},"code":{"type":"string","description":"Share code value."},"forward_to":{"type":["string","null"],"description":"Email address designated to receive the code."},"created_at":{"type":"integer","description":"Timestamp when the code was created."}}}}}},"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/cd-keys/generate-ip-code":{"post":{"summary":"Generate Ip share code","description":"Generate IP share codes.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGenerateShareCode"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"integer","description":"Data plan type for sharing. 1 = IP plan."},"number_of_ips":{"type":"integer","description":"Number of IPs to share."},"number_of_codes":{"type":"integer","description":"Number of share codes to generate."},"forward_to":{"type":"string","description":"Email address of the recipient."}},"required":["plan","number_of_ips","number_of_codes"]}}}}}}}}
```

## Generate Traffic share code

> Generate traffic share codes.

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseGenerateShareCode":{"type":"object","description":"Returns newly generated share codes.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"array","description":"Array of generated share codes.","items":{"type":"object","description":"Generated share code information.","properties":{"id":{"type":"integer","description":"ID of the generated code."},"account_id":{"type":"integer","description":"ID of the account that generated the code."},"plan":{"type":"integer","description":"Data plan type. 1 = IP plan."},"amount_ips":{"type":"integer","description":"Number of IPs associated with the code."},"code":{"type":"string","description":"Share code value."},"forward_to":{"type":["string","null"],"description":"Email address designated to receive the code."},"created_at":{"type":"integer","description":"Timestamp when the code was created."}}}}}},"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/cd-keys/generate-traffic-code":{"post":{"summary":"Generate Traffic share code","description":"Generate traffic share codes.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGenerateShareCode"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"traffic_plan":{"type":"integer","description":"ID of the traffic plan used for sharing."},"amount_traffic":{"type":"integer","description":"Amount of traffic to share in bytes. Minimum: 1000000000 (1 GB)."},"number_of_codes":{"type":"integer","description":"Number of share codes to generate."},"forward_to":{"type":"string","description":"Email address of the recipient."}},"required":["traffic_plan","number_of_ips","number_of_codes"]}}}}}}}}
```

## Use code

> Request to apply share codes.

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseUseShareCodes":{"type":"object","description":"Returns the share codes that were successfully applied.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","description":"Information about the applied codes.","properties":{"used_codes":{"type":"array","description":"Array of successfully used codes.","items":{"type":"string","description":"Applied share code."}}}}}},"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/cd-keys/use-code":{"post":{"summary":"Use code","description":"Request to apply share codes.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUseShareCodes"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"codes":{"type":"array","description":"Array of share codes to apply.","items":{"type":"string","description":"Share code to apply."}}},"required":["codes"]}}}}}}}}
```

## Revoke share code

> Request to revoke share codes.

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseRevokeCodes":{"type":"object","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{}}}},"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/cd-keys/revoke-code":{"delete":{"summary":"Revoke share code","description":"Request to revoke share codes.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRevokeCodes"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"codes":{"type":"array","description":"Array of share codes to revoke.","items":{"type":"string","description":"Share code to revoke."}}},"required":["codes"]}}}}}}}}
```

## The CDKeyStatus object

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"components":{"schemas":{"CDKeyStatus":{"type":"integer","description":"Share code status.\n0 = Available\n1 = Used\n2 = Revoked"}}}}
```

## The ShareCodeInfo object

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"components":{"schemas":{"ShareCodeInfo":{"type":"object","description":"Information about a share code.","properties":{"code":{"type":"string","description":"Share code value."},"data_type":{"type":"integer","description":"Code type: 1 = IP, 2 = traffic."},"expired_at":{"type":["integer","null"],"description":"Expiration timestamp. Null means the code does not expire."},"amount_traffic":{"type":"integer","description":"Traffic amount associated with the code (bytes)."},"forward_to":{"type":["string","null"],"description":"Email address the code was forwarded to (if configured)."},"used_by":{"type":["string","null"],"description":"Email address of the user who redeemed the code."},"number_of_ips":{"type":"integer","description":"Number of IPs associated with the code."},"status":{"$ref":"#/components/schemas/CDKeyStatus","description":"Current status of the share code."},"used_at":{"type":["integer","null"],"description":"Timestamp when the code was used."},"created_at":{"type":"integer","description":"Timestamp when the code was created."}}},"CDKeyStatus":{"type":"integer","description":"Share code status.\n0 = Available\n1 = Used\n2 = Revoked"}}}}
```

## The UseCodeInfo object

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"components":{"schemas":{"UseCodeInfo":{"type":"object","description":"Information about a redeemed share code.","properties":{"code":{"type":"string","description":"Share code value."},"data_type":{"type":"integer","description":"Code type: 1 = IP, 2 = traffic."},"expired_at":{"type":["integer","null"],"description":"Expiration timestamp. Null means the code does not expire."},"amount_traffic":{"type":["integer","null"],"description":"Traffic amount associated with the code (in bytes)."},"forward_to":{"type":["string","null"],"description":"Email address the code was forwarded to (if configured)."},"used_by":{"type":["string","null"],"description":"Email address of the user who redeemed the code."},"number_of_ips":{"type":"integer","description":"Number of IPs associated with the code."},"status":{"$ref":"#/components/schemas/CDKeyStatus","description":"Current status of the share code."},"used_at":{"type":["integer","null"],"description":"Timestamp when the code was used."},"created_at":{"type":"integer","description":"Timestamp when the code was created."}}},"CDKeyStatus":{"type":"integer","description":"Share code status.\n0 = Available\n1 = Used\n2 = Revoked"}}}}
```

## The ResponseListShareCode object

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"components":{"schemas":{"ResponseListShareCode":{"type":"object","description":"Returns the list of share codes for the user.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","description":"Data.","properties":{"items":{"type":"array","description":"Array of share codes","items":{"$ref":"#/components/schemas/ShareCodeInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"ShareCodeInfo":{"type":"object","description":"Information about a share code.","properties":{"code":{"type":"string","description":"Share code value."},"data_type":{"type":"integer","description":"Code type: 1 = IP, 2 = traffic."},"expired_at":{"type":["integer","null"],"description":"Expiration timestamp. Null means the code does not expire."},"amount_traffic":{"type":"integer","description":"Traffic amount associated with the code (bytes)."},"forward_to":{"type":["string","null"],"description":"Email address the code was forwarded to (if configured)."},"used_by":{"type":["string","null"],"description":"Email address of the user who redeemed the code."},"number_of_ips":{"type":"integer","description":"Number of IPs associated with the code."},"status":{"$ref":"#/components/schemas/CDKeyStatus","description":"Current status of the share code."},"used_at":{"type":["integer","null"],"description":"Timestamp when the code was used."},"created_at":{"type":"integer","description":"Timestamp when the code was created."}}},"CDKeyStatus":{"type":"integer","description":"Share code status.\n0 = Available\n1 = Used\n2 = Revoked"}}}}
```

## The ResponseListUseCode object

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"components":{"schemas":{"ResponseListUseCode":{"type":"object","description":"Returns the list of redeemed share codes for the user.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","description":"Response data.","properties":{"items":{"type":"array","description":"Array of redeemed share codes.","items":{"$ref":"#/components/schemas/UseCodeInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"UseCodeInfo":{"type":"object","description":"Information about a redeemed share code.","properties":{"code":{"type":"string","description":"Share code value."},"data_type":{"type":"integer","description":"Code type: 1 = IP, 2 = traffic."},"expired_at":{"type":["integer","null"],"description":"Expiration timestamp. Null means the code does not expire."},"amount_traffic":{"type":["integer","null"],"description":"Traffic amount associated with the code (in bytes)."},"forward_to":{"type":["string","null"],"description":"Email address the code was forwarded to (if configured)."},"used_by":{"type":["string","null"],"description":"Email address of the user who redeemed the code."},"number_of_ips":{"type":"integer","description":"Number of IPs associated with the code."},"status":{"$ref":"#/components/schemas/CDKeyStatus","description":"Current status of the share code."},"used_at":{"type":["integer","null"],"description":"Timestamp when the code was used."},"created_at":{"type":"integer","description":"Timestamp when the code was created."}}},"CDKeyStatus":{"type":"integer","description":"Share code status.\n0 = Available\n1 = Used\n2 = Revoked"}}}}
```

## The ResponseGenerateShareCode object

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"components":{"schemas":{"ResponseGenerateShareCode":{"type":"object","description":"Returns newly generated share codes.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"array","description":"Array of generated share codes.","items":{"type":"object","description":"Generated share code information.","properties":{"id":{"type":"integer","description":"ID of the generated code."},"account_id":{"type":"integer","description":"ID of the account that generated the code."},"plan":{"type":"integer","description":"Data plan type. 1 = IP plan."},"amount_ips":{"type":"integer","description":"Number of IPs associated with the code."},"code":{"type":"string","description":"Share code value."},"forward_to":{"type":["string","null"],"description":"Email address designated to receive the code."},"created_at":{"type":"integer","description":"Timestamp when the code was created."}}}}}}}}}
```

## The ResponseUseShareCodes object

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"components":{"schemas":{"ResponseUseShareCodes":{"type":"object","description":"Returns the share codes that were successfully applied.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","description":"Information about the applied codes.","properties":{"used_codes":{"type":"array","description":"Array of successfully used codes.","items":{"type":"string","description":"Applied share code."}}}}}}}}}
```

## The ResponseRevokeCodes object

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"components":{"schemas":{"ResponseRevokeCodes":{"type":"object","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{}}}}}}}
```

## The ResponseForbiddenError object

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"components":{"schemas":{"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```

## The ResponseBadRequestError object

```json
{"openapi":"3.1.1","info":{"title":"CD Key","version":"1.0"},"components":{"schemas":{"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```


# API For Sub-Accounts

## List sub accounts

> Returns a list of sub accounts.

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListSubAccount":{"type":"object","description":"Returns the list of sub accounts for the user.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","description":"Response data.","properties":{"items":{"type":"array","description":"Array of sub accounts.","items":{"$ref":"#/components/schemas/SubAccountInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"SubAccountInfo":{"type":"object","description":"Information about a sub account.","properties":{"id":{"type":"integer","description":"ID of the sub account."},"username":{"type":"string","description":"Username of the sub account."},"note":{"type":["string","null"],"description":"Note for the sub account."},"number_of_ips":{"type":"integer","description":"Number of IPs allocated to the sub account."},"traffic_data":{"type":"integer","description":"Amount of traffic allocated to the sub account (in bytes)."},"status":{"$ref":"#/components/schemas/SubAccountStatus","description":"Current status of the sub account."},"created_at":{"type":"integer","description":"Timestamp when the sub account was created."},"setting":{"type":"object","properties":{"auto_add_ips":{"type":"integer","description":"Enable or disable automatic IP allocation from the main account."},"auto_add_when_number_ips":{"type":"integer","description":"Threshold for automatically adding IPs to the sub account."},"number_ips_auto_add":{"type":"integer","description":"Number of IPs to automatically add when auto-add is triggered."},"auto_disable_at":{"type":["integer","null"],"description":"Timestamp when the sub account will be automatically disabled."},"auto_add_traffic":{"type":"integer","description":"Enable or disable automatic traffic allocation from the main account."},"auto_add_when_traffic_bellow":{"type":"integer","description":"Threshold for automatically adding traffic to the sub account."},"amount_traffic_auto_add":{"type":"integer","description":"Amount of traffic to automatically add when auto-add is triggered (in bytes)."},"traffic_plan_use_auto_add":{"type":["integer","null"],"description":"ID of the traffic plan used for automatic traffic allocation."}}}}},"SubAccountStatus":{"type":"integer","description":"Sub account status.\n1 = Enabled\n2 = Disabled"},"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/subs/get-list":{"get":{"summary":"List sub accounts","description":"Returns a list of sub accounts.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items returned. Default: 30."},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Page number of the requested data. Default: 1."},{"schema":{"type":"string"},"name":"sort_by","in":"query","required":false,"description":"Field used for sorting: id, username, created_at, number_of_ips. Default: id."},{"schema":{"type":"string"},"name":"order_by","in":"query","required":false,"description":"Sorting order: desc or asc. Default: desc."},{"schema":{"type":"string"},"name":"username","in":"query","required":false,"description":"Filter by sub account username."},{"schema":{"type":"integer"},"name":"status","in":"query","required":false,"description":"Filter by sub account status: 1 = enabled, 2 = disabled."},{"schema":{"type":"string"},"name":"keyword","in":"query","required":false,"description":"Search sub accounts by keyword."}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListSubAccount"}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## Create a sub account

> Creates a new sub account.

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseCreateSubAccount":{"type":"object","description":"Returns the newly created sub account.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","description":"New sub account information.","$ref":"#/components/schemas/SubAccountInfo"}}},"SubAccountInfo":{"type":"object","description":"Information about a sub account.","properties":{"id":{"type":"integer","description":"ID of the sub account."},"username":{"type":"string","description":"Username of the sub account."},"note":{"type":["string","null"],"description":"Note for the sub account."},"number_of_ips":{"type":"integer","description":"Number of IPs allocated to the sub account."},"traffic_data":{"type":"integer","description":"Amount of traffic allocated to the sub account (in bytes)."},"status":{"$ref":"#/components/schemas/SubAccountStatus","description":"Current status of the sub account."},"created_at":{"type":"integer","description":"Timestamp when the sub account was created."},"setting":{"type":"object","properties":{"auto_add_ips":{"type":"integer","description":"Enable or disable automatic IP allocation from the main account."},"auto_add_when_number_ips":{"type":"integer","description":"Threshold for automatically adding IPs to the sub account."},"number_ips_auto_add":{"type":"integer","description":"Number of IPs to automatically add when auto-add is triggered."},"auto_disable_at":{"type":["integer","null"],"description":"Timestamp when the sub account will be automatically disabled."},"auto_add_traffic":{"type":"integer","description":"Enable or disable automatic traffic allocation from the main account."},"auto_add_when_traffic_bellow":{"type":"integer","description":"Threshold for automatically adding traffic to the sub account."},"amount_traffic_auto_add":{"type":"integer","description":"Amount of traffic to automatically add when auto-add is triggered (in bytes)."},"traffic_plan_use_auto_add":{"type":["integer","null"],"description":"ID of the traffic plan used for automatic traffic allocation."}}}}},"SubAccountStatus":{"type":"integer","description":"Sub account status.\n1 = Enabled\n2 = Disabled"},"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/subs/create":{"post":{"summary":"Create a sub account","description":"Creates a new sub account.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseCreateSubAccount"}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"number_of_ips":{"type":"integer","description":"Number of IPs allocated to the sub account."},"auto_add_ips":{"type":"integer","description":"Enable or disable automatic IP allocation from the main account. 0 = disabled, 1 = enabled."},"auto_add_when_number_ips":{"type":"integer","description":"Threshold for automatically adding IPs. When the sub account IP balance drops below this value, the main account will add IPs automatically."},"number_ips_auto_add":{"type":"integer","description":"Number of IPs to automatically add when auto-add is triggered."},"auto_disable_at":{"type":"integer","description":"Timestamp when the sub account will be automatically disabled."},"amount_traffic":{"type":"integer","description":"Traffic amount allocated to the sub account (in bytes)."},"traffic_plan_id":{"type":"integer","description":"ID of the traffic plan used for allocation."},"auto_add_traffic":{"type":"integer","description":"Enable or disable automatic traffic allocation. 0 = disabled, 1 = enabled."},"auto_add_when_traffic_bellow":{"type":"integer","description":"Threshold for automatically adding traffic. When the sub account traffic balance drops below this value, the main account will add traffic automatically."},"amount_traffic_auto_add":{"type":"integer","description":"Amount of traffic to automatically add when auto-add is triggered (in bytes)."},"traffic_plan_use_auto_add":{"type":"integer","description":"ID of the traffic plan used when automatically adding traffic to the sub account."},"password":{"type":"string","description":"Password for the sub account."},"note":{"type":"string","description":"Note for the sub account."}},"required":["password"]}}}}}}}}
```

## Update a sub account

> Updates an existing sub account.

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseUpdateSubAccount":{"type":"object","description":"Returns the update status of the sub account.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{"updated":{"type":"boolean"}}}}},"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/subs/update":{"put":{"summary":"Update a sub account","description":"Updates an existing sub account.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUpdateSubAccount"}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sub_id":{"type":"integer","description":"ID of the sub account."},"password":{"type":"string","description":"New password for the sub account."},"note":{"type":"string","description":"Note for the sub account."},"auto_add_ips":{"type":"integer","description":"Enable or disable automatic IP allocation from the main account. 0 = disabled, 1 = enabled."},"auto_add_when_number_ips":{"type":"integer","description":"Threshold for automatically adding IPs. When the sub account IP balance drops below this value, the main account will add IPs automatically."},"number_ips_auto_add":{"type":"integer","description":"Number of IPs to automatically add when auto-add is triggered."},"auto_disable_at":{"type":"integer","description":"Timestamp when the sub account will be automatically disabled."},"auto_add_traffic":{"type":"integer","description":"Enable or disable automatic traffic allocation. 0 = disabled, 1 = enabled."},"auto_add_when_traffic_bellow":{"type":"integer","description":"Threshold for automatically adding traffic. When the sub account traffic balance drops below this value, the main account will add traffic automatically."},"amount_traffic_auto_add":{"type":"integer","description":"Amount of traffic to automatically add when auto-add is triggered (in bytes)."},"traffic_plan_use_auto_add":{"type":"integer","description":"ID of the traffic plan used when automatically adding traffic to the sub account."}},"required":["sub_id"]}}}}}}}}
```

## Delete sub accounts

> Deletes one or more sub accounts.

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseDeleteSubAccount":{"type":"object","description":"Returns the deletion status of the sub account.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{"deleted":{"type":"boolean"}}}}},"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/subs/bulk-delete":{"delete":{"summary":"Delete sub accounts","description":"Deletes one or more sub accounts.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDeleteSubAccount"}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","description":"ID of the sub account."}}},"required":["ids"]}}}}}}}}
```

## The SubAccountInfo object

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"components":{"schemas":{"SubAccountInfo":{"type":"object","description":"Information about a sub account.","properties":{"id":{"type":"integer","description":"ID of the sub account."},"username":{"type":"string","description":"Username of the sub account."},"note":{"type":["string","null"],"description":"Note for the sub account."},"number_of_ips":{"type":"integer","description":"Number of IPs allocated to the sub account."},"traffic_data":{"type":"integer","description":"Amount of traffic allocated to the sub account (in bytes)."},"status":{"$ref":"#/components/schemas/SubAccountStatus","description":"Current status of the sub account."},"created_at":{"type":"integer","description":"Timestamp when the sub account was created."},"setting":{"type":"object","properties":{"auto_add_ips":{"type":"integer","description":"Enable or disable automatic IP allocation from the main account."},"auto_add_when_number_ips":{"type":"integer","description":"Threshold for automatically adding IPs to the sub account."},"number_ips_auto_add":{"type":"integer","description":"Number of IPs to automatically add when auto-add is triggered."},"auto_disable_at":{"type":["integer","null"],"description":"Timestamp when the sub account will be automatically disabled."},"auto_add_traffic":{"type":"integer","description":"Enable or disable automatic traffic allocation from the main account."},"auto_add_when_traffic_bellow":{"type":"integer","description":"Threshold for automatically adding traffic to the sub account."},"amount_traffic_auto_add":{"type":"integer","description":"Amount of traffic to automatically add when auto-add is triggered (in bytes)."},"traffic_plan_use_auto_add":{"type":["integer","null"],"description":"ID of the traffic plan used for automatic traffic allocation."}}}}},"SubAccountStatus":{"type":"integer","description":"Sub account status.\n1 = Enabled\n2 = Disabled"}}}}
```

## The SubAccountStatus object

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"components":{"schemas":{"SubAccountStatus":{"type":"integer","description":"Sub account status.\n1 = Enabled\n2 = Disabled"}}}}
```

## The ResponseListSubAccount object

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"components":{"schemas":{"ResponseListSubAccount":{"type":"object","description":"Returns the list of sub accounts for the user.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","description":"Response data.","properties":{"items":{"type":"array","description":"Array of sub accounts.","items":{"$ref":"#/components/schemas/SubAccountInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"SubAccountInfo":{"type":"object","description":"Information about a sub account.","properties":{"id":{"type":"integer","description":"ID of the sub account."},"username":{"type":"string","description":"Username of the sub account."},"note":{"type":["string","null"],"description":"Note for the sub account."},"number_of_ips":{"type":"integer","description":"Number of IPs allocated to the sub account."},"traffic_data":{"type":"integer","description":"Amount of traffic allocated to the sub account (in bytes)."},"status":{"$ref":"#/components/schemas/SubAccountStatus","description":"Current status of the sub account."},"created_at":{"type":"integer","description":"Timestamp when the sub account was created."},"setting":{"type":"object","properties":{"auto_add_ips":{"type":"integer","description":"Enable or disable automatic IP allocation from the main account."},"auto_add_when_number_ips":{"type":"integer","description":"Threshold for automatically adding IPs to the sub account."},"number_ips_auto_add":{"type":"integer","description":"Number of IPs to automatically add when auto-add is triggered."},"auto_disable_at":{"type":["integer","null"],"description":"Timestamp when the sub account will be automatically disabled."},"auto_add_traffic":{"type":"integer","description":"Enable or disable automatic traffic allocation from the main account."},"auto_add_when_traffic_bellow":{"type":"integer","description":"Threshold for automatically adding traffic to the sub account."},"amount_traffic_auto_add":{"type":"integer","description":"Amount of traffic to automatically add when auto-add is triggered (in bytes)."},"traffic_plan_use_auto_add":{"type":["integer","null"],"description":"ID of the traffic plan used for automatic traffic allocation."}}}}},"SubAccountStatus":{"type":"integer","description":"Sub account status.\n1 = Enabled\n2 = Disabled"}}}}
```

## The ResponseCreateSubAccount object

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"components":{"schemas":{"ResponseCreateSubAccount":{"type":"object","description":"Returns the newly created sub account.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","description":"New sub account information.","$ref":"#/components/schemas/SubAccountInfo"}}},"SubAccountInfo":{"type":"object","description":"Information about a sub account.","properties":{"id":{"type":"integer","description":"ID of the sub account."},"username":{"type":"string","description":"Username of the sub account."},"note":{"type":["string","null"],"description":"Note for the sub account."},"number_of_ips":{"type":"integer","description":"Number of IPs allocated to the sub account."},"traffic_data":{"type":"integer","description":"Amount of traffic allocated to the sub account (in bytes)."},"status":{"$ref":"#/components/schemas/SubAccountStatus","description":"Current status of the sub account."},"created_at":{"type":"integer","description":"Timestamp when the sub account was created."},"setting":{"type":"object","properties":{"auto_add_ips":{"type":"integer","description":"Enable or disable automatic IP allocation from the main account."},"auto_add_when_number_ips":{"type":"integer","description":"Threshold for automatically adding IPs to the sub account."},"number_ips_auto_add":{"type":"integer","description":"Number of IPs to automatically add when auto-add is triggered."},"auto_disable_at":{"type":["integer","null"],"description":"Timestamp when the sub account will be automatically disabled."},"auto_add_traffic":{"type":"integer","description":"Enable or disable automatic traffic allocation from the main account."},"auto_add_when_traffic_bellow":{"type":"integer","description":"Threshold for automatically adding traffic to the sub account."},"amount_traffic_auto_add":{"type":"integer","description":"Amount of traffic to automatically add when auto-add is triggered (in bytes)."},"traffic_plan_use_auto_add":{"type":["integer","null"],"description":"ID of the traffic plan used for automatic traffic allocation."}}}}},"SubAccountStatus":{"type":"integer","description":"Sub account status.\n1 = Enabled\n2 = Disabled"}}}}
```

## The ResponseUpdateSubAccount object

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"components":{"schemas":{"ResponseUpdateSubAccount":{"type":"object","description":"Returns the update status of the sub account.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{"updated":{"type":"boolean"}}}}}}}}
```

## The ResponseDeleteSubAccount object

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"components":{"schemas":{"ResponseDeleteSubAccount":{"type":"object","description":"Returns the deletion status of the sub account.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{"deleted":{"type":"boolean"}}}}}}}}
```

## The ResponseForbiddenError object

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"components":{"schemas":{"ResponseForbiddenError":{"type":"object","description":"Response returned when authentication fails.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```

## The ResponseBadRequestError object

```json
{"openapi":"3.1.1","info":{"title":"Sub Account","version":"1.0"},"components":{"schemas":{"ResponseBadRequestError":{"type":"object","description":"Response returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```


# API For Account

## Get account information

> Returns basic account information.

```json
{"openapi":"3.1.1","info":{"title":"Account","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseAccountInfo":{"type":"object","description":"Account information response.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"result":{"$ref":"#/components/schemas/AccountInfo","description":"Account information."}}},"AccountInfo":{"type":"object","description":"Account information.","properties":{"id":{"type":"integer","description":"User ID."},"email":{"type":"string","description":"User email address."},"username":{"type":"string","description":"Account username."},"email_verified":{"type":"boolean","description":"Whether the email address is verified."},"_2fa_enabled":{"type":"boolean","description":"Two-factor authentication status (enabled/disabled)."},"wallet_balance":{"type":"number","description":"Current wallet balance."}}},"ResponseBadRequestError":{"type":"object","description":"Returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Returned when the request is forbidden.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/account/get-info":{"get":{"summary":"Get account information","description":"Returns basic account information.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseAccountInfo"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## Get balance information

> Returns IP and traffic balance information.

```json
{"openapi":"3.1.1","info":{"title":"Account","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseBalanceInfo":{"type":"object","description":"Balance information response.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{"ip_data":{"type":"array","items":{"$ref":"#/components/schemas/IpPlanData"}},"traffic_data":{"type":"array","items":{"$ref":"#/components/schemas/TrafficPlanData"}}},"description":"Balance data."}}},"IpPlanData":{"type":"object","description":"IP plan balance data.","properties":{"plan_id":{"type":"integer","description":"IP plan ID (e.g., 1 = IP plan)."},"amount":{"type":"integer","description":"Remaining IP amount."}}},"TrafficPlanData":{"type":"object","description":"Traffic plan balance data.","properties":{"id":{"type":"integer","description":"Traffic plan ID."},"amount":{"type":"integer","description":"Remaining traffic amount (bytes)."},"active_at":{"type":"integer","description":"Package activation time."},"expires_in":{"type":"integer","description":"Time until expiration (seconds)."},"expires_at":{"type":"integer","description":"Package expiration time."},"status":{"type":"integer","description":"Package status: 1 = available, 2 = expired, 3 = used up, 4 = locked, 5 = revoked."},"plan_name":{"type":"string","description":"Traffic plan name."},"original_amount":{"type":"string","description":"Original traffic amount (bytes)."},"receive_method":{"type":"integer","description":"Method used to receive the package."},"traffic_type":{"type":"integer","description":"Traffic type: 1 = regular, 2 = enterprise."},"created_at":{"type":"integer","description":"Creation time."},"updated_at":{"type":"integer","description":"Last update time."}}},"ResponseBadRequestError":{"type":"object","description":"Returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Returned when the request is forbidden.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/account/get-balance-data":{"get":{"summary":"Get balance information","description":"Returns IP and traffic balance information.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBalanceInfo"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## The AccountInfo object

```json
{"openapi":"3.1.1","info":{"title":"Account","version":"1.0"},"components":{"schemas":{"AccountInfo":{"type":"object","description":"Account information.","properties":{"id":{"type":"integer","description":"User ID."},"email":{"type":"string","description":"User email address."},"username":{"type":"string","description":"Account username."},"email_verified":{"type":"boolean","description":"Whether the email address is verified."},"_2fa_enabled":{"type":"boolean","description":"Two-factor authentication status (enabled/disabled)."},"wallet_balance":{"type":"number","description":"Current wallet balance."}}}}}}
```

## The IpPlanData object

```json
{"openapi":"3.1.1","info":{"title":"Account","version":"1.0"},"components":{"schemas":{"IpPlanData":{"type":"object","description":"IP plan balance data.","properties":{"plan_id":{"type":"integer","description":"IP plan ID (e.g., 1 = IP plan)."},"amount":{"type":"integer","description":"Remaining IP amount."}}}}}}
```

## The TrafficPlanData object

```json
{"openapi":"3.1.1","info":{"title":"Account","version":"1.0"},"components":{"schemas":{"TrafficPlanData":{"type":"object","description":"Traffic plan balance data.","properties":{"id":{"type":"integer","description":"Traffic plan ID."},"amount":{"type":"integer","description":"Remaining traffic amount (bytes)."},"active_at":{"type":"integer","description":"Package activation time."},"expires_in":{"type":"integer","description":"Time until expiration (seconds)."},"expires_at":{"type":"integer","description":"Package expiration time."},"status":{"type":"integer","description":"Package status: 1 = available, 2 = expired, 3 = used up, 4 = locked, 5 = revoked."},"plan_name":{"type":"string","description":"Traffic plan name."},"original_amount":{"type":"string","description":"Original traffic amount (bytes)."},"receive_method":{"type":"integer","description":"Method used to receive the package."},"traffic_type":{"type":"integer","description":"Traffic type: 1 = regular, 2 = enterprise."},"created_at":{"type":"integer","description":"Creation time."},"updated_at":{"type":"integer","description":"Last update time."}}}}}}
```

## The ResponseAccountInfo object

```json
{"openapi":"3.1.1","info":{"title":"Account","version":"1.0"},"components":{"schemas":{"ResponseAccountInfo":{"type":"object","description":"Account information response.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"result":{"$ref":"#/components/schemas/AccountInfo","description":"Account information."}}},"AccountInfo":{"type":"object","description":"Account information.","properties":{"id":{"type":"integer","description":"User ID."},"email":{"type":"string","description":"User email address."},"username":{"type":"string","description":"Account username."},"email_verified":{"type":"boolean","description":"Whether the email address is verified."},"_2fa_enabled":{"type":"boolean","description":"Two-factor authentication status (enabled/disabled)."},"wallet_balance":{"type":"number","description":"Current wallet balance."}}}}}}
```

## The ResponseBalanceInfo object

```json
{"openapi":"3.1.1","info":{"title":"Account","version":"1.0"},"components":{"schemas":{"ResponseBalanceInfo":{"type":"object","description":"Balance information response.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{"ip_data":{"type":"array","items":{"$ref":"#/components/schemas/IpPlanData"}},"traffic_data":{"type":"array","items":{"$ref":"#/components/schemas/TrafficPlanData"}}},"description":"Balance data."}}},"IpPlanData":{"type":"object","description":"IP plan balance data.","properties":{"plan_id":{"type":"integer","description":"IP plan ID (e.g., 1 = IP plan)."},"amount":{"type":"integer","description":"Remaining IP amount."}}},"TrafficPlanData":{"type":"object","description":"Traffic plan balance data.","properties":{"id":{"type":"integer","description":"Traffic plan ID."},"amount":{"type":"integer","description":"Remaining traffic amount (bytes)."},"active_at":{"type":"integer","description":"Package activation time."},"expires_in":{"type":"integer","description":"Time until expiration (seconds)."},"expires_at":{"type":"integer","description":"Package expiration time."},"status":{"type":"integer","description":"Package status: 1 = available, 2 = expired, 3 = used up, 4 = locked, 5 = revoked."},"plan_name":{"type":"string","description":"Traffic plan name."},"original_amount":{"type":"string","description":"Original traffic amount (bytes)."},"receive_method":{"type":"integer","description":"Method used to receive the package."},"traffic_type":{"type":"integer","description":"Traffic type: 1 = regular, 2 = enterprise."},"created_at":{"type":"integer","description":"Creation time."},"updated_at":{"type":"integer","description":"Last update time."}}}}}}
```

## The ResponseForbiddenError object

```json
{"openapi":"3.1.1","info":{"title":"Account","version":"1.0"},"components":{"schemas":{"ResponseForbiddenError":{"type":"object","description":"Returned when the request is forbidden.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```

## The ResponseBadRequestError object

```json
{"openapi":"3.1.1","info":{"title":"Account","version":"1.0"},"components":{"schemas":{"ResponseBadRequestError":{"type":"object","description":"Returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```


# API For Affiliate

## Get affiliate statistics

> Retrieves aggregated affiliate performance statistics, including referral counts, current level, commission totals, and amounts already processed (withdrawn, converted, or transferred).

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseAffiliateStats":{"type":"object","description":"Affiliate statistics response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"description":"Affiliate statistics.","$ref":"#/components/schemas/AffiliateStats"}}},"AffiliateStats":{"type":"object","description":"Aggregated affiliate performance metrics.","properties":{"registered_users":{"type":"integer","description":"Total number of referred (registered) users."},"today_commission":{"type":"number","description":"Commission earned today."},"total_commission":{"type":"number","description":"Total commission earned (all-time)."},"total_commission_valid":{"type":"number","description":"Total valid commission earned (all-time)."},"withdrawn_amount":{"type":"number","description":"Total commission amount that has already been processed (withdrawn, converted to IPs, or transferred to wallet)."},"current_level":{"$ref":"#/components/schemas/AffiliateLevel","description":"Current affiliate level."},"all_level":{"type":"array","items":{"$ref":"#/components/schemas/AffiliateLevel"}}}},"AffiliateLevel":{"type":"object","description":"Affiliate level definition and qualification thresholds.","properties":{"number":{"type":"integer","description":"Level number."},"title":{"type":"string","description":"Level title."},"rate":{"type":"number","description":"Commission rate applied to purchases made by referred users."},"goal_amount":{"type":"number","description":"Cumulative purchase amount from referred users required to reach the next level."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/affiliate/stats":{"get":{"summary":"Get affiliate statistics","description":"Retrieves aggregated affiliate performance statistics, including referral counts, current level, commission totals, and amounts already processed (withdrawn, converted, or transferred).","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseAffiliateStats"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## Get affiliate levels

> Returns the complete list of affiliate levels, including each level's title, commission rate, and the purchase threshold required to reach the next level.

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseAllLevelOfAffiliate":{"type":"object","description":"Affiliate levels response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"description":"Affiliate levels.","type":"array","items":{"$ref":"#/components/schemas/AffiliateLevel"}}}},"AffiliateLevel":{"type":"object","description":"Affiliate level definition and qualification thresholds.","properties":{"number":{"type":"integer","description":"Level number."},"title":{"type":"string","description":"Level title."},"rate":{"type":"number","description":"Commission rate applied to purchases made by referred users."},"goal_amount":{"type":"number","description":"Cumulative purchase amount from referred users required to reach the next level."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/affiliate/all-level":{"get":{"summary":"Get affiliate levels","description":"Returns the complete list of affiliate levels, including each level's title, commission rate, and the purchase threshold required to reach the next level.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseAllLevelOfAffiliate"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## List referred users

> Returns a paginated list of users referred through the affiliate program, including basic identity fields and the invite code used.

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListReferredUser":{"type":"object","description":"Referred users list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of referred users.","items":{"$ref":"#/components/schemas/ReferredUser"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"ReferredUser":{"type":"object","description":"Referred user profile information.","properties":{"username":{"type":"string","description":"Referred user's username."},"email":{"type":"string","description":"Referred user's email address."},"invite_code_used":{"type":"string","description":"Invite code used at registration."},"created_at":{"type":"number","description":"Referral user creation timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/affiliate/list-referred-user":{"get":{"summary":"List referred users","description":"Returns a paginated list of users referred through the affiliate program, including basic identity fields and the invite code used.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items to return per page. Default: 30"},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Requested page number (1-based). Default: 1"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListReferredUser"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## List commissions

> Returns a paginated list of commission records generated from referred users, including amount, rate, payment method, validation status, and creation time.

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListCommission":{"type":"object","description":"Commissions list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of commission records.","items":{"$ref":"#/components/schemas/CommissionInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"CommissionInfo":{"type":"object","description":"Commission record details.","properties":{"id":{"type":"integer","description":"Commission record ID."},"amount":{"type":"number","description":"Commission amount."},"rate":{"type":"number","description":"Commission rate."},"payment_method":{"$ref":"#/components/schemas/PaymentMethod"},"is_valid":{"type":"boolean","description":"Commission validity status."},"created_at":{"type":"integer","description":"Commission creation timestamp."},"account":{"type":"object","description":"Referred user account information associated with this commission record.","properties":{"email":{"type":"string","description":"Referred user's email address."},"username":{"type":"string","description":"Referred user's username."}}}}},"PaymentMethod":{"type":"integer","description":"1: Crypto\n2: Card\n3: Local Payment\n4: Wallet\n5: Income"},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/affiliate/list-commission":{"get":{"summary":"List commissions","description":"Returns a paginated list of commission records generated from referred users, including amount, rate, payment method, validation status, and creation time.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items to return per page. Default: 30"},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Requested page number (1-based). Default: 1"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListCommission"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## List conversions

> Returns a paginated list of commission conversion records, showing the commission amount used and the resulting value received, along with the conversion timestamp.

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListConversion":{"type":"object","description":"Conversions list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of conversion records.","items":{"$ref":"#/components/schemas/ConversionInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"ConversionInfo":{"type":"object","description":"Commission conversion record.","properties":{"amount":{"type":"number","description":"Commission amount used for conversion."},"number_of_ips":{"type":"number","description":"Value received from the conversion."},"created_at":{"type":"integer","description":"Conversion creation timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/affiliate/list-conversion":{"get":{"summary":"List conversions","description":"Returns a paginated list of commission conversion records, showing the commission amount used and the resulting value received, along with the conversion timestamp.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items to return per page. Default: 30"},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Requested page number (1-based). Default: 1"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListConversion"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## List invite codes

> Returns a paginated list of affiliate invite codes, including code metadata, activation status, and timestamps.

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListInviteCode":{"type":"object","description":"Invite codes list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of invite codes.","items":{"$ref":"#/components/schemas/InviteCodeInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"InviteCodeInfo":{"type":"object","description":"Affiliate invite code metadata.","properties":{"id":{"type":"integer","description":"Invite code ID."},"account_id":{"type":"integer","description":"Owning account ID."},"code":{"type":"string","description":"Invite code used to refer new users."},"name":{"type":"string","description":"Invite code name set by the user."},"custom_path":{"type":"string","description":"Custom affiliate URL path."},"is_default":{"type":"boolean","description":"Indicates whether the invite code was system-generated (true) or user-created (false)."},"is_active":{"type":"boolean","description":"Invite code activation status."},"created_at":{"type":"integer","description":"Invite code creation timestamp."},"updated_at":{"type":"integer","description":"Invite code last updated timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/affiliate/list-invite-code":{"get":{"summary":"List invite codes","description":"Returns a paginated list of affiliate invite codes, including code metadata, activation status, and timestamps.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items to return per page. Default: 30"},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Requested page number (1-based). Default: 1"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListInviteCode"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## List withdrawals

> Returns a paginated list of affiliate withdrawal requests, including payout details, destination wallet information, status, and creation time.

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListWithdrawn":{"type":"object","description":"Withdrawals list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of withdrawal requests.","items":{"$ref":"#/components/schemas/WithdrawnInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"WithdrawnInfo":{"type":"object","description":"Withdrawal request details.","properties":{"id":{"type":"integer","description":"Withdrawal request ID."},"email":{"type":"string","description":"Email address provided by the user."},"amount":{"type":"number","description":"Requested withdrawal amount."},"coin":{"type":"string","description":"Payout cryptocurrency symbol."},"wallet_address":{"type":"string","description":"Destination wallet address."},"status":{"type":"integer","description":"0: Pending, 1: Success, 2: Error, 3: Processing, 4: Cancelled"},"created_at":{"type":"integer","description":"Withdrawal request creation timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/affiliate/list-withdrawn":{"get":{"summary":"List withdrawals","description":"Returns a paginated list of affiliate withdrawal requests, including payout details, destination wallet information, status, and creation time.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items to return per page. Default: 30"},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Requested page number (1-based). Default: 1"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListWithdrawn"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## List wallet transfers

> Returns a paginated list of commission transfers to wallet balance, including amount, processing status, and creation time.

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListTransferToWallet":{"type":"object","description":"Wallet transfers list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of wallet transfer records.","items":{"$ref":"#/components/schemas/TransferToWalletInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"TransferToWalletInfo":{"type":"object","description":"Wallet transfer record details.","properties":{"id":{"type":"integer","description":"Transfer record ID."},"email":{"type":"string","description":"Email address provided by the user."},"amount":{"type":"number","description":"Amount transferred to wallet."},"status":{"type":"integer","description":"0: Pending, 1: Success, 2: Error, 3: Processing, 4: Cancelled"},"created_at":{"type":"integer","description":"Transfer creation timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/affiliate/list-transfer-to-wallet":{"get":{"summary":"List wallet transfers","description":"Returns a paginated list of commission transfers to wallet balance, including amount, processing status, and creation time.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items to return per page. Default: 30"},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Requested page number (1-based). Default: 1"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListTransferToWallet"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## The AffiliateStats object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"AffiliateStats":{"type":"object","description":"Aggregated affiliate performance metrics.","properties":{"registered_users":{"type":"integer","description":"Total number of referred (registered) users."},"today_commission":{"type":"number","description":"Commission earned today."},"total_commission":{"type":"number","description":"Total commission earned (all-time)."},"total_commission_valid":{"type":"number","description":"Total valid commission earned (all-time)."},"withdrawn_amount":{"type":"number","description":"Total commission amount that has already been processed (withdrawn, converted to IPs, or transferred to wallet)."},"current_level":{"$ref":"#/components/schemas/AffiliateLevel","description":"Current affiliate level."},"all_level":{"type":"array","items":{"$ref":"#/components/schemas/AffiliateLevel"}}}},"AffiliateLevel":{"type":"object","description":"Affiliate level definition and qualification thresholds.","properties":{"number":{"type":"integer","description":"Level number."},"title":{"type":"string","description":"Level title."},"rate":{"type":"number","description":"Commission rate applied to purchases made by referred users."},"goal_amount":{"type":"number","description":"Cumulative purchase amount from referred users required to reach the next level."}}}}}}
```

## The AffiliateLevel object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"AffiliateLevel":{"type":"object","description":"Affiliate level definition and qualification thresholds.","properties":{"number":{"type":"integer","description":"Level number."},"title":{"type":"string","description":"Level title."},"rate":{"type":"number","description":"Commission rate applied to purchases made by referred users."},"goal_amount":{"type":"number","description":"Cumulative purchase amount from referred users required to reach the next level."}}}}}}
```

## The ReferredUser object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ReferredUser":{"type":"object","description":"Referred user profile information.","properties":{"username":{"type":"string","description":"Referred user's username."},"email":{"type":"string","description":"Referred user's email address."},"invite_code_used":{"type":"string","description":"Invite code used at registration."},"created_at":{"type":"number","description":"Referral user creation timestamp."}}}}}}
```

## The CommissionInfo object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"CommissionInfo":{"type":"object","description":"Commission record details.","properties":{"id":{"type":"integer","description":"Commission record ID."},"amount":{"type":"number","description":"Commission amount."},"rate":{"type":"number","description":"Commission rate."},"payment_method":{"$ref":"#/components/schemas/PaymentMethod"},"is_valid":{"type":"boolean","description":"Commission validity status."},"created_at":{"type":"integer","description":"Commission creation timestamp."},"account":{"type":"object","description":"Referred user account information associated with this commission record.","properties":{"email":{"type":"string","description":"Referred user's email address."},"username":{"type":"string","description":"Referred user's username."}}}}},"PaymentMethod":{"type":"integer","description":"1: Crypto\n2: Card\n3: Local Payment\n4: Wallet\n5: Income"}}}}
```

## The ConversionInfo object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ConversionInfo":{"type":"object","description":"Commission conversion record.","properties":{"amount":{"type":"number","description":"Commission amount used for conversion."},"number_of_ips":{"type":"number","description":"Value received from the conversion."},"created_at":{"type":"integer","description":"Conversion creation timestamp."}}}}}}
```

## The InviteCodeInfo object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"InviteCodeInfo":{"type":"object","description":"Affiliate invite code metadata.","properties":{"id":{"type":"integer","description":"Invite code ID."},"account_id":{"type":"integer","description":"Owning account ID."},"code":{"type":"string","description":"Invite code used to refer new users."},"name":{"type":"string","description":"Invite code name set by the user."},"custom_path":{"type":"string","description":"Custom affiliate URL path."},"is_default":{"type":"boolean","description":"Indicates whether the invite code was system-generated (true) or user-created (false)."},"is_active":{"type":"boolean","description":"Invite code activation status."},"created_at":{"type":"integer","description":"Invite code creation timestamp."},"updated_at":{"type":"integer","description":"Invite code last updated timestamp."}}}}}}
```

## The WithdrawnInfo object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"WithdrawnInfo":{"type":"object","description":"Withdrawal request details.","properties":{"id":{"type":"integer","description":"Withdrawal request ID."},"email":{"type":"string","description":"Email address provided by the user."},"amount":{"type":"number","description":"Requested withdrawal amount."},"coin":{"type":"string","description":"Payout cryptocurrency symbol."},"wallet_address":{"type":"string","description":"Destination wallet address."},"status":{"type":"integer","description":"0: Pending, 1: Success, 2: Error, 3: Processing, 4: Cancelled"},"created_at":{"type":"integer","description":"Withdrawal request creation timestamp."}}}}}}
```

## The TransferToWalletInfo object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"TransferToWalletInfo":{"type":"object","description":"Wallet transfer record details.","properties":{"id":{"type":"integer","description":"Transfer record ID."},"email":{"type":"string","description":"Email address provided by the user."},"amount":{"type":"number","description":"Amount transferred to wallet."},"status":{"type":"integer","description":"0: Pending, 1: Success, 2: Error, 3: Processing, 4: Cancelled"},"created_at":{"type":"integer","description":"Transfer creation timestamp."}}}}}}
```

## The PaymentMethod object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"PaymentMethod":{"type":"integer","description":"1: Crypto\n2: Card\n3: Local Payment\n4: Wallet\n5: Income"}}}}
```

## The ResponseAffiliateStats object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ResponseAffiliateStats":{"type":"object","description":"Affiliate statistics response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"description":"Affiliate statistics.","$ref":"#/components/schemas/AffiliateStats"}}},"AffiliateStats":{"type":"object","description":"Aggregated affiliate performance metrics.","properties":{"registered_users":{"type":"integer","description":"Total number of referred (registered) users."},"today_commission":{"type":"number","description":"Commission earned today."},"total_commission":{"type":"number","description":"Total commission earned (all-time)."},"total_commission_valid":{"type":"number","description":"Total valid commission earned (all-time)."},"withdrawn_amount":{"type":"number","description":"Total commission amount that has already been processed (withdrawn, converted to IPs, or transferred to wallet)."},"current_level":{"$ref":"#/components/schemas/AffiliateLevel","description":"Current affiliate level."},"all_level":{"type":"array","items":{"$ref":"#/components/schemas/AffiliateLevel"}}}},"AffiliateLevel":{"type":"object","description":"Affiliate level definition and qualification thresholds.","properties":{"number":{"type":"integer","description":"Level number."},"title":{"type":"string","description":"Level title."},"rate":{"type":"number","description":"Commission rate applied to purchases made by referred users."},"goal_amount":{"type":"number","description":"Cumulative purchase amount from referred users required to reach the next level."}}}}}}
```

## The ResponseAllLevelOfAffiliate object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ResponseAllLevelOfAffiliate":{"type":"object","description":"Affiliate levels response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"description":"Affiliate levels.","type":"array","items":{"$ref":"#/components/schemas/AffiliateLevel"}}}},"AffiliateLevel":{"type":"object","description":"Affiliate level definition and qualification thresholds.","properties":{"number":{"type":"integer","description":"Level number."},"title":{"type":"string","description":"Level title."},"rate":{"type":"number","description":"Commission rate applied to purchases made by referred users."},"goal_amount":{"type":"number","description":"Cumulative purchase amount from referred users required to reach the next level."}}}}}}
```

## The ResponseListReferredUser object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ResponseListReferredUser":{"type":"object","description":"Referred users list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of referred users.","items":{"$ref":"#/components/schemas/ReferredUser"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"ReferredUser":{"type":"object","description":"Referred user profile information.","properties":{"username":{"type":"string","description":"Referred user's username."},"email":{"type":"string","description":"Referred user's email address."},"invite_code_used":{"type":"string","description":"Invite code used at registration."},"created_at":{"type":"number","description":"Referral user creation timestamp."}}}}}}
```

## The ResponseListCommission object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ResponseListCommission":{"type":"object","description":"Commissions list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of commission records.","items":{"$ref":"#/components/schemas/CommissionInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"CommissionInfo":{"type":"object","description":"Commission record details.","properties":{"id":{"type":"integer","description":"Commission record ID."},"amount":{"type":"number","description":"Commission amount."},"rate":{"type":"number","description":"Commission rate."},"payment_method":{"$ref":"#/components/schemas/PaymentMethod"},"is_valid":{"type":"boolean","description":"Commission validity status."},"created_at":{"type":"integer","description":"Commission creation timestamp."},"account":{"type":"object","description":"Referred user account information associated with this commission record.","properties":{"email":{"type":"string","description":"Referred user's email address."},"username":{"type":"string","description":"Referred user's username."}}}}},"PaymentMethod":{"type":"integer","description":"1: Crypto\n2: Card\n3: Local Payment\n4: Wallet\n5: Income"}}}}
```

## The ResponseListConversion object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ResponseListConversion":{"type":"object","description":"Conversions list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of conversion records.","items":{"$ref":"#/components/schemas/ConversionInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"ConversionInfo":{"type":"object","description":"Commission conversion record.","properties":{"amount":{"type":"number","description":"Commission amount used for conversion."},"number_of_ips":{"type":"number","description":"Value received from the conversion."},"created_at":{"type":"integer","description":"Conversion creation timestamp."}}}}}}
```

## The ResponseListInviteCode object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ResponseListInviteCode":{"type":"object","description":"Invite codes list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of invite codes.","items":{"$ref":"#/components/schemas/InviteCodeInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"InviteCodeInfo":{"type":"object","description":"Affiliate invite code metadata.","properties":{"id":{"type":"integer","description":"Invite code ID."},"account_id":{"type":"integer","description":"Owning account ID."},"code":{"type":"string","description":"Invite code used to refer new users."},"name":{"type":"string","description":"Invite code name set by the user."},"custom_path":{"type":"string","description":"Custom affiliate URL path."},"is_default":{"type":"boolean","description":"Indicates whether the invite code was system-generated (true) or user-created (false)."},"is_active":{"type":"boolean","description":"Invite code activation status."},"created_at":{"type":"integer","description":"Invite code creation timestamp."},"updated_at":{"type":"integer","description":"Invite code last updated timestamp."}}}}}}
```

## The ResponseListWithdrawn object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ResponseListWithdrawn":{"type":"object","description":"Withdrawals list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of withdrawal requests.","items":{"$ref":"#/components/schemas/WithdrawnInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"WithdrawnInfo":{"type":"object","description":"Withdrawal request details.","properties":{"id":{"type":"integer","description":"Withdrawal request ID."},"email":{"type":"string","description":"Email address provided by the user."},"amount":{"type":"number","description":"Requested withdrawal amount."},"coin":{"type":"string","description":"Payout cryptocurrency symbol."},"wallet_address":{"type":"string","description":"Destination wallet address."},"status":{"type":"integer","description":"0: Pending, 1: Success, 2: Error, 3: Processing, 4: Cancelled"},"created_at":{"type":"integer","description":"Withdrawal request creation timestamp."}}}}}}
```

## The ResponseListTransferToWallet object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ResponseListTransferToWallet":{"type":"object","description":"Wallet transfers list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of wallet transfer records.","items":{"$ref":"#/components/schemas/TransferToWalletInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"TransferToWalletInfo":{"type":"object","description":"Wallet transfer record details.","properties":{"id":{"type":"integer","description":"Transfer record ID."},"email":{"type":"string","description":"Email address provided by the user."},"amount":{"type":"number","description":"Amount transferred to wallet."},"status":{"type":"integer","description":"0: Pending, 1: Success, 2: Error, 3: Processing, 4: Cancelled"},"created_at":{"type":"integer","description":"Transfer creation timestamp."}}}}}}
```

## The ResponseForbiddenError object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```

## The ResponseBadRequestError object

```json
{"openapi":"3.1.1","info":{"title":"Affiliate","version":"1.0"},"components":{"schemas":{"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```


# API For Billing

## List billing records

> Returns a paginated list of billing records for the authenticated user, with optional filters (type, date range, status, payment method) and sorting.

```json
{"openapi":"3.1.1","info":{"title":"Billing","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListBilling":{"type":"object","description":"Billing records list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of billing records.","items":{"$ref":"#/components/schemas/BillingInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"BillingInfo":{"type":"object","description":"Billing record details.","properties":{"id":{"type":"string","description":"Billing record ID."},"billing_number":{"type":"string","description":"Billing reference number."},"type":{"type":"integer","description":"Billing record type. 1: Purchase (data/IPs), 2: Wallet top-up"},"package_id":{"type":["number","null"],"description":"Associated package ID (if applicable)."},"account_id":{"type":"integer","description":"Account ID that owns this billing record."},"amount":{"type":"number","description":"Total billed amount."},"number_of_ips":{"type":["number","null"],"description":"Number of IPs granted (if applicable)."},"amount_traffic":{"type":["number","null"],"description":"Traffic amount granted (if applicable)."},"payment_method":{"$ref":"#/components/schemas/PaymentMethod"},"status":{"type":"integer","description":"Billing status. 0: pending, 1: success, -1: failed"},"created_at":{"type":"integer","description":"Billing creation timestamp."}}},"PaymentMethod":{"type":"integer","description":"1: Crypto\n2: Card\n3: Local Payment\n4: Wallet\n5: Income"},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/billings/get-list":{"get":{"summary":"List billing records","description":"Returns a paginated list of billing records for the authenticated user, with optional filters (type, date range, status, payment method) and sorting.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items to return per page. Default: 30"},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Requested page number (1-based). Default: 1"},{"schema":{"type":"integer"},"name":"type","in":"query","required":false,"description":"Billing record type. 1: Purchase, 2: Wallet top-up"},{"schema":{"type":"string"},"name":"start_date","in":"query","required":false,"description":"Filter by start date (YYYY-MM-DD), e.g., 2025-08-01"},{"schema":{"type":"string"},"name":"end_date","in":"query","required":false,"description":"Filter by end date (YYYY-MM-DD), e.g., 2025-08-30"},{"schema":{"type":"string"},"name":"sort_by","in":"query","required":false,"description":"Field to sort by: id, amount, number_of_ips. Default: id"},{"schema":{"type":"string"},"name":"order_by","in":"query","required":false,"description":"Sort order: desc or asc. Default: desc"},{"schema":{"type":"integer"},"name":"status","in":"query","required":false,"description":"Billing status. 0: pending, 1: success, -1: failed"},{"schema":{"type":"integer"},"name":"payment_method","in":"query","required":false,"description":"Filter by payment method."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListBilling"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## The BillingInfo object

```json
{"openapi":"3.1.1","info":{"title":"Billing","version":"1.0"},"components":{"schemas":{"BillingInfo":{"type":"object","description":"Billing record details.","properties":{"id":{"type":"string","description":"Billing record ID."},"billing_number":{"type":"string","description":"Billing reference number."},"type":{"type":"integer","description":"Billing record type. 1: Purchase (data/IPs), 2: Wallet top-up"},"package_id":{"type":["number","null"],"description":"Associated package ID (if applicable)."},"account_id":{"type":"integer","description":"Account ID that owns this billing record."},"amount":{"type":"number","description":"Total billed amount."},"number_of_ips":{"type":["number","null"],"description":"Number of IPs granted (if applicable)."},"amount_traffic":{"type":["number","null"],"description":"Traffic amount granted (if applicable)."},"payment_method":{"$ref":"#/components/schemas/PaymentMethod"},"status":{"type":"integer","description":"Billing status. 0: pending, 1: success, -1: failed"},"created_at":{"type":"integer","description":"Billing creation timestamp."}}},"PaymentMethod":{"type":"integer","description":"1: Crypto\n2: Card\n3: Local Payment\n4: Wallet\n5: Income"}}}}
```

## The PaymentMethod object

```json
{"openapi":"3.1.1","info":{"title":"Billing","version":"1.0"},"components":{"schemas":{"PaymentMethod":{"type":"integer","description":"1: Crypto\n2: Card\n3: Local Payment\n4: Wallet\n5: Income"}}}}
```

## The ResponseListBilling object

```json
{"openapi":"3.1.1","info":{"title":"Billing","version":"1.0"},"components":{"schemas":{"ResponseListBilling":{"type":"object","description":"Billing records list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of billing records.","items":{"$ref":"#/components/schemas/BillingInfo"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"BillingInfo":{"type":"object","description":"Billing record details.","properties":{"id":{"type":"string","description":"Billing record ID."},"billing_number":{"type":"string","description":"Billing reference number."},"type":{"type":"integer","description":"Billing record type. 1: Purchase (data/IPs), 2: Wallet top-up"},"package_id":{"type":["number","null"],"description":"Associated package ID (if applicable)."},"account_id":{"type":"integer","description":"Account ID that owns this billing record."},"amount":{"type":"number","description":"Total billed amount."},"number_of_ips":{"type":["number","null"],"description":"Number of IPs granted (if applicable)."},"amount_traffic":{"type":["number","null"],"description":"Traffic amount granted (if applicable)."},"payment_method":{"$ref":"#/components/schemas/PaymentMethod"},"status":{"type":"integer","description":"Billing status. 0: pending, 1: success, -1: failed"},"created_at":{"type":"integer","description":"Billing creation timestamp."}}},"PaymentMethod":{"type":"integer","description":"1: Crypto\n2: Card\n3: Local Payment\n4: Wallet\n5: Income"}}}}
```

## The ResponseForbiddenError object

```json
{"openapi":"3.1.1","info":{"title":"Billing","version":"1.0"},"components":{"schemas":{"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```

## The ResponseBadRequestError object

```json
{"openapi":"3.1.1","info":{"title":"Billing","version":"1.0"},"components":{"schemas":{"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```


# API For User-Pass

## List sub-users

> Returns a paginated list of sub-users for the authenticated account, with support for keyword search by user\_name, as well as sorting and ordering.

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListSubUser":{"type":"object","description":"Sub-users list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of sub-users.","items":{"$ref":"#/components/schemas/SubUser"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"SubUser":{"type":"object","description":"Sub-user account configuration and usage metrics.","properties":{"id":{"type":"integer","description":"Sub-user ID."},"user_name":{"type":"string","description":"Sub-user username."},"use_key":{"type":"string","description":"Password used with user_name for authentication."},"usage_cap":{"type":"integer","description":"Traffic usage cap for the sub-user (bytes)."},"ip_usage_cap":{"type":"integer","description":"IP usage cap for the sub-user."},"data_used":{"type":"integer","description":"Total traffic consumed by the sub-user."},"ip_used":{"type":"integer","description":"Total number of IPs consumed by the sub-user."},"status":{"type":"integer","description":"1: Active, 2: Disabled, 3: Blocked"},"note":{"type":"string","description":"Optional note associated with the sub-user."},"created_at":{"type":"integer","description":"Sub-user creation timestamp."},"updated_at":{"type":"integer","description":"Sub-user last updated timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/user-passes/get-list":{"get":{"summary":"List sub-users","description":"Returns a paginated list of sub-users for the authenticated account, with support for keyword search by user_name, as well as sorting and ordering.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items to return per page. Default: 30"},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Requested page number (1-based). Default: 1"},{"schema":{"type":"string"},"name":"sort_by","in":"query","required":false,"description":"Field to sort by: 'id', 'user_name', 'status', 'created_at', 'use_key', 'usage_cap', 'data_used', 'ip_usage_cap', 'ip_used'. Default: id"},{"schema":{"type":"string"},"name":"order_by","in":"query","required":false,"description":"Sort order: desc or asc. Default: desc"},{"schema":{"type":"string"},"name":"keyword","in":"query","required":false,"description":"Keyword to search within the user_name field."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListSubUser"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## Create sub-user

> Creates a new sub-user (User-Pass credentials) and optionally applies traffic and IP usage limits.

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseGenerateSubUser":{"type":"object","description":"Sub-user creation response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Created sub-user details.","$ref":"#/components/schemas/SubUser"}}},"SubUser":{"type":"object","description":"Sub-user account configuration and usage metrics.","properties":{"id":{"type":"integer","description":"Sub-user ID."},"user_name":{"type":"string","description":"Sub-user username."},"use_key":{"type":"string","description":"Password used with user_name for authentication."},"usage_cap":{"type":"integer","description":"Traffic usage cap for the sub-user (bytes)."},"ip_usage_cap":{"type":"integer","description":"IP usage cap for the sub-user."},"data_used":{"type":"integer","description":"Total traffic consumed by the sub-user."},"ip_used":{"type":"integer","description":"Total number of IPs consumed by the sub-user."},"status":{"type":"integer","description":"1: Active, 2: Disabled, 3: Blocked"},"note":{"type":"string","description":"Optional note associated with the sub-user."},"created_at":{"type":"integer","description":"Sub-user creation timestamp."},"updated_at":{"type":"integer","description":"Sub-user last updated timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/user-passes/create":{"post":{"summary":"Create sub-user","description":"Creates a new sub-user (User-Pass credentials) and optionally applies traffic and IP usage limits.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGenerateSubUser"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"user_name":{"type":"string","description":"Sub-user username."},"use_key":{"type":"string","description":"Sub-user password."},"status":{"type":"integer","description":"Sub-user status. 1: active, 2: disable"},"note":{"type":"string","description":"Optional note for internal tracking."},"usage_cap":{"type":"integer","description":"Traffic usage cap in bytes."},"ip_usage_cap":{"type":"integer","description":"IP usage cap (-1 for unlimited)."}},"required":["user_name","use_key","status"]}}}}}}}}
```

## Update sub-user

> Updates an existing sub-user by ID, including password, status, note, and optional traffic/IP usage caps.

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseUpdateSubUser":{"type":"object","description":"Sub-user update response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Updated sub-user details.","$ref":"#/components/schemas/SubUser"}}},"SubUser":{"type":"object","description":"Sub-user account configuration and usage metrics.","properties":{"id":{"type":"integer","description":"Sub-user ID."},"user_name":{"type":"string","description":"Sub-user username."},"use_key":{"type":"string","description":"Password used with user_name for authentication."},"usage_cap":{"type":"integer","description":"Traffic usage cap for the sub-user (bytes)."},"ip_usage_cap":{"type":"integer","description":"IP usage cap for the sub-user."},"data_used":{"type":"integer","description":"Total traffic consumed by the sub-user."},"ip_used":{"type":"integer","description":"Total number of IPs consumed by the sub-user."},"status":{"type":"integer","description":"1: Active, 2: Disabled, 3: Blocked"},"note":{"type":"string","description":"Optional note associated with the sub-user."},"created_at":{"type":"integer","description":"Sub-user creation timestamp."},"updated_at":{"type":"integer","description":"Sub-user last updated timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/user-passes/update":{"put":{"summary":"Update sub-user","description":"Updates an existing sub-user by ID, including password, status, note, and optional traffic/IP usage caps.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUpdateSubUser"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"Sub-user ID to update."},"user_name":{"type":"string","description":"Sub-user username."},"use_key":{"type":"string","description":"Sub-user password."},"status":{"type":"integer","description":"Sub-user status. 1: active, 2: disable"},"note":{"type":"string","description":"Optional note for internal tracking."},"usage_cap":{"type":"integer","description":"Traffic usage cap in bytes."},"ip_usage_cap":{"type":"integer","description":"IP usage cap (-1 for unlimited)."}},"required":["id","use_key","status"]}}}}}}}}
```

## Delete sub-user

> Deletes a sub-user by ID.

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseDeleteSubUser":{"type":"object","description":"Sub-user deletion response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Deletion result.","properties":{"deleted":{"type":"boolean"}}}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/user-passes/delete":{"delete":{"summary":"Delete sub-user","description":"Deletes a sub-user by ID.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDeleteSubUser"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"Sub-user ID to delete."}},"required":["id"]}}}}}}}}
```

## The SubUser object

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"components":{"schemas":{"SubUser":{"type":"object","description":"Sub-user account configuration and usage metrics.","properties":{"id":{"type":"integer","description":"Sub-user ID."},"user_name":{"type":"string","description":"Sub-user username."},"use_key":{"type":"string","description":"Password used with user_name for authentication."},"usage_cap":{"type":"integer","description":"Traffic usage cap for the sub-user (bytes)."},"ip_usage_cap":{"type":"integer","description":"IP usage cap for the sub-user."},"data_used":{"type":"integer","description":"Total traffic consumed by the sub-user."},"ip_used":{"type":"integer","description":"Total number of IPs consumed by the sub-user."},"status":{"type":"integer","description":"1: Active, 2: Disabled, 3: Blocked"},"note":{"type":"string","description":"Optional note associated with the sub-user."},"created_at":{"type":"integer","description":"Sub-user creation timestamp."},"updated_at":{"type":"integer","description":"Sub-user last updated timestamp."}}}}}}
```

## The ResponseListSubUser object

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"components":{"schemas":{"ResponseListSubUser":{"type":"object","description":"Sub-users list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of sub-users.","items":{"$ref":"#/components/schemas/SubUser"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"SubUser":{"type":"object","description":"Sub-user account configuration and usage metrics.","properties":{"id":{"type":"integer","description":"Sub-user ID."},"user_name":{"type":"string","description":"Sub-user username."},"use_key":{"type":"string","description":"Password used with user_name for authentication."},"usage_cap":{"type":"integer","description":"Traffic usage cap for the sub-user (bytes)."},"ip_usage_cap":{"type":"integer","description":"IP usage cap for the sub-user."},"data_used":{"type":"integer","description":"Total traffic consumed by the sub-user."},"ip_used":{"type":"integer","description":"Total number of IPs consumed by the sub-user."},"status":{"type":"integer","description":"1: Active, 2: Disabled, 3: Blocked"},"note":{"type":"string","description":"Optional note associated with the sub-user."},"created_at":{"type":"integer","description":"Sub-user creation timestamp."},"updated_at":{"type":"integer","description":"Sub-user last updated timestamp."}}}}}}
```

## The ResponseGenerateSubUser object

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"components":{"schemas":{"ResponseGenerateSubUser":{"type":"object","description":"Sub-user creation response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Created sub-user details.","$ref":"#/components/schemas/SubUser"}}},"SubUser":{"type":"object","description":"Sub-user account configuration and usage metrics.","properties":{"id":{"type":"integer","description":"Sub-user ID."},"user_name":{"type":"string","description":"Sub-user username."},"use_key":{"type":"string","description":"Password used with user_name for authentication."},"usage_cap":{"type":"integer","description":"Traffic usage cap for the sub-user (bytes)."},"ip_usage_cap":{"type":"integer","description":"IP usage cap for the sub-user."},"data_used":{"type":"integer","description":"Total traffic consumed by the sub-user."},"ip_used":{"type":"integer","description":"Total number of IPs consumed by the sub-user."},"status":{"type":"integer","description":"1: Active, 2: Disabled, 3: Blocked"},"note":{"type":"string","description":"Optional note associated with the sub-user."},"created_at":{"type":"integer","description":"Sub-user creation timestamp."},"updated_at":{"type":"integer","description":"Sub-user last updated timestamp."}}}}}}
```

## The ResponseUpdateSubUser object

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"components":{"schemas":{"ResponseUpdateSubUser":{"type":"object","description":"Sub-user update response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Updated sub-user details.","$ref":"#/components/schemas/SubUser"}}},"SubUser":{"type":"object","description":"Sub-user account configuration and usage metrics.","properties":{"id":{"type":"integer","description":"Sub-user ID."},"user_name":{"type":"string","description":"Sub-user username."},"use_key":{"type":"string","description":"Password used with user_name for authentication."},"usage_cap":{"type":"integer","description":"Traffic usage cap for the sub-user (bytes)."},"ip_usage_cap":{"type":"integer","description":"IP usage cap for the sub-user."},"data_used":{"type":"integer","description":"Total traffic consumed by the sub-user."},"ip_used":{"type":"integer","description":"Total number of IPs consumed by the sub-user."},"status":{"type":"integer","description":"1: Active, 2: Disabled, 3: Blocked"},"note":{"type":"string","description":"Optional note associated with the sub-user."},"created_at":{"type":"integer","description":"Sub-user creation timestamp."},"updated_at":{"type":"integer","description":"Sub-user last updated timestamp."}}}}}}
```

## The ResponseDeleteSubUser object

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"components":{"schemas":{"ResponseDeleteSubUser":{"type":"object","description":"Sub-user deletion response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Deletion result.","properties":{"deleted":{"type":"boolean"}}}}}}}}
```

## The ResponseForbiddenError object

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"components":{"schemas":{"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```

## The ResponseBadRequestError object

```json
{"openapi":"3.1.1","info":{"title":"Sub user","version":"1.0"},"components":{"schemas":{"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```


# API For Whitelist

## List whitelist entries

> Returns a paginated list of whitelist entries for the authenticated account, with support for sorting and ordering.

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListWhiteList":{"type":"object","description":"Whitelist entries list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of whitelist entries.","items":{"$ref":"#/components/schemas/WhiteList"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"WhiteList":{"type":"object","description":"Whitelist entry representing an allowed client IP address.","properties":{"id":{"type":"integer","description":"Whitelist entry ID."},"ip":{"type":"string","description":"Whitelisted IP address."},"status":{"type":"integer","description":"1: Enabled, 2: Disabled"},"description":{"type":"string","description":"Optional description for the whitelist entry."},"created_at":{"type":"integer","description":"Whitelist entry creation timestamp."},"updated_at":{"type":"integer","description":"Whitelist entry last updated timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/white-list/get-list":{"get":{"summary":"List whitelist entries","description":"Returns a paginated list of whitelist entries for the authenticated account, with support for sorting and ordering.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items to return per page. Default: 30"},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Requested page number (1-based). Default: 1"},{"schema":{"type":"string"},"name":"sort_by","in":"query","required":false,"description":"Field to sort by: 'id', 'ip', 'status', 'created_at', 'updated_at', 'description'. Default: id"},{"schema":{"type":"string"},"name":"order_by","in":"query","required":false,"description":"Sort order: desc or asc. Default: desc"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListWhiteList"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## Create whitelist entries

> Creates one or more whitelist entries from the provided list of IP addresses.

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseGenerateWhiteList":{"type":"object","description":"Whitelist creation response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Created whitelist entry details.","$ref":"#/components/schemas/WhiteList"}}},"WhiteList":{"type":"object","description":"Whitelist entry representing an allowed client IP address.","properties":{"id":{"type":"integer","description":"Whitelist entry ID."},"ip":{"type":"string","description":"Whitelisted IP address."},"status":{"type":"integer","description":"1: Enabled, 2: Disabled"},"description":{"type":"string","description":"Optional description for the whitelist entry."},"created_at":{"type":"integer","description":"Whitelist entry creation timestamp."},"updated_at":{"type":"integer","description":"Whitelist entry last updated timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/white-list/create":{"post":{"summary":"Create whitelist entries","description":"Creates one or more whitelist entries from the provided list of IP addresses.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGenerateWhiteList"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ips":{"type":"array","items":{"type":"string","description":"IP address"},"description":"List of IP addresses to add to the whitelist."}},"required":["ips"]}}}}}}}}
```

## Update whitelist entries

> Updates one or more whitelist entries by ID, allowing changes to status and description.

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseUpdateWhiteList":{"type":"object","description":"Whitelist update response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Updated whitelist entry details.","$ref":"#/components/schemas/WhiteList"}}},"WhiteList":{"type":"object","description":"Whitelist entry representing an allowed client IP address.","properties":{"id":{"type":"integer","description":"Whitelist entry ID."},"ip":{"type":"string","description":"Whitelisted IP address."},"status":{"type":"integer","description":"1: Enabled, 2: Disabled"},"description":{"type":"string","description":"Optional description for the whitelist entry."},"created_at":{"type":"integer","description":"Whitelist entry creation timestamp."},"updated_at":{"type":"integer","description":"Whitelist entry last updated timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/white-list/update":{"put":{"summary":"Update whitelist entries","description":"Updates one or more whitelist entries by ID, allowing changes to status and description.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUpdateWhiteList"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer"},"description":"List of whitelist entry IDs."},"description":{"type":"string","description":"Description for the whitelist entries."},"status":{"type":"integer","description":"Whitelist entry status. 1: enabled, 2: disabled"}},"required":["ids"]}}}}}}}}
```

## Delete whitelist entries

> Deletes one or more whitelist entries by ID.

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseDeleteWhiteList":{"type":"object","description":"Whitelist deletion response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Deletion result.","properties":{"deleted":{"type":"boolean"}}}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/white-list/delete":{"delete":{"summary":"Delete whitelist entries","description":"Deletes one or more whitelist entries by ID.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDeleteWhiteList"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer"},"description":"List of whitelist entry IDs."}},"required":["ids"]}}}}}}}}
```

## The WhiteList object

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"components":{"schemas":{"WhiteList":{"type":"object","description":"Whitelist entry representing an allowed client IP address.","properties":{"id":{"type":"integer","description":"Whitelist entry ID."},"ip":{"type":"string","description":"Whitelisted IP address."},"status":{"type":"integer","description":"1: Enabled, 2: Disabled"},"description":{"type":"string","description":"Optional description for the whitelist entry."},"created_at":{"type":"integer","description":"Whitelist entry creation timestamp."},"updated_at":{"type":"integer","description":"Whitelist entry last updated timestamp."}}}}}}
```

## The ResponseListWhiteList object

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"components":{"schemas":{"ResponseListWhiteList":{"type":"object","description":"Whitelist entries list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of whitelist entries.","items":{"$ref":"#/components/schemas/WhiteList"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"WhiteList":{"type":"object","description":"Whitelist entry representing an allowed client IP address.","properties":{"id":{"type":"integer","description":"Whitelist entry ID."},"ip":{"type":"string","description":"Whitelisted IP address."},"status":{"type":"integer","description":"1: Enabled, 2: Disabled"},"description":{"type":"string","description":"Optional description for the whitelist entry."},"created_at":{"type":"integer","description":"Whitelist entry creation timestamp."},"updated_at":{"type":"integer","description":"Whitelist entry last updated timestamp."}}}}}}
```

## The ResponseGenerateWhiteList object

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"components":{"schemas":{"ResponseGenerateWhiteList":{"type":"object","description":"Whitelist creation response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Created whitelist entry details.","$ref":"#/components/schemas/WhiteList"}}},"WhiteList":{"type":"object","description":"Whitelist entry representing an allowed client IP address.","properties":{"id":{"type":"integer","description":"Whitelist entry ID."},"ip":{"type":"string","description":"Whitelisted IP address."},"status":{"type":"integer","description":"1: Enabled, 2: Disabled"},"description":{"type":"string","description":"Optional description for the whitelist entry."},"created_at":{"type":"integer","description":"Whitelist entry creation timestamp."},"updated_at":{"type":"integer","description":"Whitelist entry last updated timestamp."}}}}}}
```

## The ResponseUpdateWhiteList object

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"components":{"schemas":{"ResponseUpdateWhiteList":{"type":"object","description":"Whitelist update response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Updated whitelist entry details.","$ref":"#/components/schemas/WhiteList"}}},"WhiteList":{"type":"object","description":"Whitelist entry representing an allowed client IP address.","properties":{"id":{"type":"integer","description":"Whitelist entry ID."},"ip":{"type":"string","description":"Whitelisted IP address."},"status":{"type":"integer","description":"1: Enabled, 2: Disabled"},"description":{"type":"string","description":"Optional description for the whitelist entry."},"created_at":{"type":"integer","description":"Whitelist entry creation timestamp."},"updated_at":{"type":"integer","description":"Whitelist entry last updated timestamp."}}}}}}
```

## The ResponseDeleteWhiteList object

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"components":{"schemas":{"ResponseDeleteWhiteList":{"type":"object","description":"Whitelist deletion response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Deletion result.","properties":{"deleted":{"type":"boolean"}}}}}}}}
```

## The ResponseForbiddenError object

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"components":{"schemas":{"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```

## The ResponseBadRequestError object

```json
{"openapi":"3.1.1","info":{"title":"Whitelist","version":"1.0"},"components":{"schemas":{"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```


# API For Proxy Connect Config

## List connection configs

> Returns a paginated list of proxy connection configurations for the authenticated account, with support for sorting and ordering.

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseListConfig":{"type":"object","description":"Connection configurations list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of connection configurations.","items":{"$ref":"#/components/schemas/Config"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"Config":{"type":"object","description":"Proxy connection configuration, including targeting filters, allocated port range, and session behavior.","properties":{"id":{"type":"integer","description":"Configuration ID."},"user_id":{"type":"integer","description":"Owner user ID."},"server_id":{"type":"integer","description":"Server ID assigned to the configuration."},"proxy_type":{"type":"integer","description":"Proxy type identifier."},"country_code":{"type":["string","null"],"description":"Country targeting filter."},"city_code":{"type":["string","null"],"description":"City targeting filter."},"state_code":{"type":["string","null"],"description":"State/region targeting filter."},"isp_code":{"type":["string","null"],"description":"ISP targeting filter."},"start_port":{"type":"integer","description":"Start port of the allocated range."},"end_port":{"type":"integer","description":"End port of the allocated range."},"is_keep":{"type":"integer","description":"Indicates sticky session behavior (keep session)."},"is_random_ip":{"type":"integer","description":"Indicates rotation behavior (randomize IP)."},"session_time":{"type":"string","description":"Sticky session duration used for refresh when sticky mode is enabled."},"created_at":{"type":"integer","description":"Configuration creation timestamp."},"updated_at":{"type":"integer","description":"Configuration last updated timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/proxy-connection/get-list":{"get":{"summary":"List connection configs","description":"Returns a paginated list of proxy connection configurations for the authenticated account, with support for sorting and ordering.","parameters":[{"schema":{"type":"integer"},"name":"limit","in":"query","required":false,"description":"Maximum number of items to return per page."},{"schema":{"type":"integer"},"name":"page","in":"query","required":false,"description":"Requested page number (1-based). Default: 1"},{"schema":{"type":"string"},"name":"sort_by","in":"query","required":false,"description":"Field to sort by: 'id', 'start_port', 'end_port', 'created_at', 'updated_at'. Default: start_port"},{"schema":{"type":"string"},"name":"order_by","in":"query","required":false,"description":"Sort order: desc or asc. Default: desc"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseListConfig"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}}}}}}
```

## Create connection config

> Creates a new proxy connection configuration by allocating a port range based on the requested quantity and applying optional targeting filters and session settings.

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseGenerateConfig":{"type":"object","description":"Connection configuration creation response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Created connection configuration details.","$ref":"#/components/schemas/Config"}}},"Config":{"type":"object","description":"Proxy connection configuration, including targeting filters, allocated port range, and session behavior.","properties":{"id":{"type":"integer","description":"Configuration ID."},"user_id":{"type":"integer","description":"Owner user ID."},"server_id":{"type":"integer","description":"Server ID assigned to the configuration."},"proxy_type":{"type":"integer","description":"Proxy type identifier."},"country_code":{"type":["string","null"],"description":"Country targeting filter."},"city_code":{"type":["string","null"],"description":"City targeting filter."},"state_code":{"type":["string","null"],"description":"State/region targeting filter."},"isp_code":{"type":["string","null"],"description":"ISP targeting filter."},"start_port":{"type":"integer","description":"Start port of the allocated range."},"end_port":{"type":"integer","description":"End port of the allocated range."},"is_keep":{"type":"integer","description":"Indicates sticky session behavior (keep session)."},"is_random_ip":{"type":"integer","description":"Indicates rotation behavior (randomize IP)."},"session_time":{"type":"string","description":"Sticky session duration used for refresh when sticky mode is enabled."},"created_at":{"type":"integer","description":"Configuration creation timestamp."},"updated_at":{"type":"integer","description":"Configuration last updated timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/proxy-connection/create":{"post":{"summary":"Create connection config","description":"Creates a new proxy connection configuration by allocating a port range based on the requested quantity and applying optional targeting filters and session settings.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGenerateConfig"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"proxy_type":{"type":"integer","description":"Proxy type identifier."},"country_code":{"type":"string","description":"Country code used to target proxies."},"city_code":{"type":"string","description":"City code used to target proxies."},"state_code":{"type":"string","description":"State/region code used to target proxies."},"isp_code":{"type":"string","description":"ISP code used to target proxies."},"quantity":{"type":"integer","description":"Number of ports to allocate for this configuration."},"session_type":{"type":"integer","description":"Session mode. 1: Rotation, 2: Sticky"},"session_time":{"type":"integer","description":"Sticky session duration (minutes)."}},"required":["session_type","quantity"]}}}}}}}}
```

## Update connection config

> Updates an existing proxy connection configuration identified by start\_port, including targeting filters and session settings.

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseUpdateConfig":{"type":"object","description":"Connection configuration update response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Updated connection configuration details.","$ref":"#/components/schemas/Config"}}},"Config":{"type":"object","description":"Proxy connection configuration, including targeting filters, allocated port range, and session behavior.","properties":{"id":{"type":"integer","description":"Configuration ID."},"user_id":{"type":"integer","description":"Owner user ID."},"server_id":{"type":"integer","description":"Server ID assigned to the configuration."},"proxy_type":{"type":"integer","description":"Proxy type identifier."},"country_code":{"type":["string","null"],"description":"Country targeting filter."},"city_code":{"type":["string","null"],"description":"City targeting filter."},"state_code":{"type":["string","null"],"description":"State/region targeting filter."},"isp_code":{"type":["string","null"],"description":"ISP targeting filter."},"start_port":{"type":"integer","description":"Start port of the allocated range."},"end_port":{"type":"integer","description":"End port of the allocated range."},"is_keep":{"type":"integer","description":"Indicates sticky session behavior (keep session)."},"is_random_ip":{"type":"integer","description":"Indicates rotation behavior (randomize IP)."},"session_time":{"type":"string","description":"Sticky session duration used for refresh when sticky mode is enabled."},"created_at":{"type":"integer","description":"Configuration creation timestamp."},"updated_at":{"type":"integer","description":"Configuration last updated timestamp."}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/proxy-connection/update":{"put":{"summary":"Update connection config","description":"Updates an existing proxy connection configuration identified by start_port, including targeting filters and session settings.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUpdateConfig"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start_port":{"type":"integer","description":"Start port of the configuration to update."},"country_code":{"type":"string","description":"Country code used to target proxies."},"city_code":{"type":"string","description":"City code used to target proxies."},"state_code":{"type":"string","description":"State/region code used to target proxies."},"isp_code":{"type":"string","description":"ISP code used to target proxies."},"session_type":{"type":"integer","description":"Session mode. 1: Rotation, 2: Sticky"},"session_time":{"type":"integer","description":"Sticky session duration (minutes)."}},"required":["start_port","session_type"]}}}}}}}}
```

## Delete connection configs

> Deletes one or more proxy connection configurations identified by their start\_port values.

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseDeleteConfig":{"type":"object","description":"Connection configuration deletion response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Deletion result.","properties":{"deleted":{"type":"boolean"}}}}},"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/proxy-connection/delete":{"delete":{"summary":"Delete connection configs","description":"Deletes one or more proxy connection configurations identified by their start_port values.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDeleteConfig"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start_ports":{"type":"array","items":{"type":"integer"},"description":"List of start_port values to delete."}},"required":["start_ports"]}}}}}}}}
```

## The Config object

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"components":{"schemas":{"Config":{"type":"object","description":"Proxy connection configuration, including targeting filters, allocated port range, and session behavior.","properties":{"id":{"type":"integer","description":"Configuration ID."},"user_id":{"type":"integer","description":"Owner user ID."},"server_id":{"type":"integer","description":"Server ID assigned to the configuration."},"proxy_type":{"type":"integer","description":"Proxy type identifier."},"country_code":{"type":["string","null"],"description":"Country targeting filter."},"city_code":{"type":["string","null"],"description":"City targeting filter."},"state_code":{"type":["string","null"],"description":"State/region targeting filter."},"isp_code":{"type":["string","null"],"description":"ISP targeting filter."},"start_port":{"type":"integer","description":"Start port of the allocated range."},"end_port":{"type":"integer","description":"End port of the allocated range."},"is_keep":{"type":"integer","description":"Indicates sticky session behavior (keep session)."},"is_random_ip":{"type":"integer","description":"Indicates rotation behavior (randomize IP)."},"session_time":{"type":"string","description":"Sticky session duration used for refresh when sticky mode is enabled."},"created_at":{"type":"integer","description":"Configuration creation timestamp."},"updated_at":{"type":"integer","description":"Configuration last updated timestamp."}}}}}}
```

## The ResponseListConfig object

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"components":{"schemas":{"ResponseListConfig":{"type":"object","description":"Connection configurations list response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Paginated response data.","properties":{"items":{"type":"array","description":"List of connection configurations.","items":{"$ref":"#/components/schemas/Config"}},"total_items":{"type":"integer","description":"Total number of items."},"total_pages":{"type":"integer","description":"Total number of pages."}}}}},"Config":{"type":"object","description":"Proxy connection configuration, including targeting filters, allocated port range, and session behavior.","properties":{"id":{"type":"integer","description":"Configuration ID."},"user_id":{"type":"integer","description":"Owner user ID."},"server_id":{"type":"integer","description":"Server ID assigned to the configuration."},"proxy_type":{"type":"integer","description":"Proxy type identifier."},"country_code":{"type":["string","null"],"description":"Country targeting filter."},"city_code":{"type":["string","null"],"description":"City targeting filter."},"state_code":{"type":["string","null"],"description":"State/region targeting filter."},"isp_code":{"type":["string","null"],"description":"ISP targeting filter."},"start_port":{"type":"integer","description":"Start port of the allocated range."},"end_port":{"type":"integer","description":"End port of the allocated range."},"is_keep":{"type":"integer","description":"Indicates sticky session behavior (keep session)."},"is_random_ip":{"type":"integer","description":"Indicates rotation behavior (randomize IP)."},"session_time":{"type":"string","description":"Sticky session duration used for refresh when sticky mode is enabled."},"created_at":{"type":"integer","description":"Configuration creation timestamp."},"updated_at":{"type":"integer","description":"Configuration last updated timestamp."}}}}}}
```

## The ResponseGenerateConfig object

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"components":{"schemas":{"ResponseGenerateConfig":{"type":"object","description":"Connection configuration creation response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Created connection configuration details.","$ref":"#/components/schemas/Config"}}},"Config":{"type":"object","description":"Proxy connection configuration, including targeting filters, allocated port range, and session behavior.","properties":{"id":{"type":"integer","description":"Configuration ID."},"user_id":{"type":"integer","description":"Owner user ID."},"server_id":{"type":"integer","description":"Server ID assigned to the configuration."},"proxy_type":{"type":"integer","description":"Proxy type identifier."},"country_code":{"type":["string","null"],"description":"Country targeting filter."},"city_code":{"type":["string","null"],"description":"City targeting filter."},"state_code":{"type":["string","null"],"description":"State/region targeting filter."},"isp_code":{"type":["string","null"],"description":"ISP targeting filter."},"start_port":{"type":"integer","description":"Start port of the allocated range."},"end_port":{"type":"integer","description":"End port of the allocated range."},"is_keep":{"type":"integer","description":"Indicates sticky session behavior (keep session)."},"is_random_ip":{"type":"integer","description":"Indicates rotation behavior (randomize IP)."},"session_time":{"type":"string","description":"Sticky session duration used for refresh when sticky mode is enabled."},"created_at":{"type":"integer","description":"Configuration creation timestamp."},"updated_at":{"type":"integer","description":"Configuration last updated timestamp."}}}}}}
```

## The ResponseUpdateConfig object

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"components":{"schemas":{"ResponseUpdateConfig":{"type":"object","description":"Connection configuration update response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Updated connection configuration details.","$ref":"#/components/schemas/Config"}}},"Config":{"type":"object","description":"Proxy connection configuration, including targeting filters, allocated port range, and session behavior.","properties":{"id":{"type":"integer","description":"Configuration ID."},"user_id":{"type":"integer","description":"Owner user ID."},"server_id":{"type":"integer","description":"Server ID assigned to the configuration."},"proxy_type":{"type":"integer","description":"Proxy type identifier."},"country_code":{"type":["string","null"],"description":"Country targeting filter."},"city_code":{"type":["string","null"],"description":"City targeting filter."},"state_code":{"type":["string","null"],"description":"State/region targeting filter."},"isp_code":{"type":["string","null"],"description":"ISP targeting filter."},"start_port":{"type":"integer","description":"Start port of the allocated range."},"end_port":{"type":"integer","description":"End port of the allocated range."},"is_keep":{"type":"integer","description":"Indicates sticky session behavior (keep session)."},"is_random_ip":{"type":"integer","description":"Indicates rotation behavior (randomize IP)."},"session_time":{"type":"string","description":"Sticky session duration used for refresh when sticky mode is enabled."},"created_at":{"type":"integer","description":"Configuration creation timestamp."},"updated_at":{"type":"integer","description":"Configuration last updated timestamp."}}}}}}
```

## The ResponseDeleteConfig object

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"components":{"schemas":{"ResponseDeleteConfig":{"type":"object","description":"Connection configuration deletion response payload.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"result":{"type":"object","description":"Deletion result.","properties":{"deleted":{"type":"boolean"}}}}}}}}
```

## The ResponseForbiddenError object

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"components":{"schemas":{"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```

## The ResponseBadRequestError object

```json
{"openapi":"3.1.1","info":{"title":"Proxy Connect Traffic","version":"1.0"},"components":{"schemas":{"ResponseBadRequestError":{"type":"object","description":"Response payload returned when the request is invalid.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```


# Client Development

## Register develop account

> Register develop account for sandbox

```json
{"openapi":"3.1.1","info":{"title":"Development","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"paths":{"/client/v1/dev/register":{"post":{"summary":"Register develop account","description":"Register develop account for sandbox","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRegisterAccount"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Account email"},"password":{"type":"string","description":"Account password"}},"required":["email","password"]}}}}}}},"components":{"schemas":{"ResponseRegisterAccount":{"type":"object","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"result":{"$ref":"#/components/schemas/AccountInfo","description":"Account info."}}},"AccountInfo":{"type":"object","description":"AccountI info.","properties":{"id":{"type":"integer","description":"Id of user."},"email":{"type":"string","description":"Email of user."},"username":{"type":"string","description":"username of user."},"email_verified":{"type":"boolean","description":"Email verified or not?."},"_2fa_enabled":{"type":"boolean","description":"2fa on/off status"},"wallet_balance":{"type":"number","description":"Wallet balance."}}},"ResponseBadRequestError":{"type":"object","description":"Bad request.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List error","items":{"type":"string"}}}}}}}
```

## Generate api key

> Generate api key for account in sandbox

```json
{"openapi":"3.1.1","info":{"title":"Development","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"paths":{"/client/v1/dev/refresh-api-key":{"post":{"summary":"Generate api key","description":"Generate api key for account in sandbox","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGenerateApiKey"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Account email"},"password":{"type":"string","description":"Account password"}},"required":["email","password"]}}}}}}},"components":{"schemas":{"ResponseGenerateApiKey":{"type":"object","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{"api_key":{"type":"string","description":"new api key"}},"description":"Data generate api key."}}},"ResponseBadRequestError":{"type":"object","description":"Bad request.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List error","items":{"type":"string"}}}}}}}
```

## Set balance for account

> Set balance for account

```json
{"openapi":"3.1.1","info":{"title":"Development","version":"1.0"},"servers":[{"url":"https://sandbox.9proxy.com"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"api-key","in":"query"}},"schemas":{"ResponseSetBalance":{"type":"object","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{"amount":{"type":"integer","description":"number ips of account"}},"description":"Data set balance."}}},"ResponseBadRequestError":{"type":"object","description":"Bad request.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List error","items":{"type":"string"}}}},"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}},"paths":{"/client/v1/dev/set-balance":{"post":{"summary":"Set balance for account","description":"Set balance for account","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseSetBalance"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBadRequestError"}}}},"403":{"description":"Authentication error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseForbiddenError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"plan_id":{"type":"integer","description":"1: ip data"},"amount":{"type":"integer","description":"amount ip of account"}},"required":["plan_id","amount"]}}}}}}}}
```

## The AccountInfo object

```json
{"openapi":"3.1.1","info":{"title":"Development","version":"1.0"},"components":{"schemas":{"AccountInfo":{"type":"object","description":"AccountI info.","properties":{"id":{"type":"integer","description":"Id of user."},"email":{"type":"string","description":"Email of user."},"username":{"type":"string","description":"username of user."},"email_verified":{"type":"boolean","description":"Email verified or not?."},"_2fa_enabled":{"type":"boolean","description":"2fa on/off status"},"wallet_balance":{"type":"number","description":"Wallet balance."}}}}}}
```

## The ResponseRegisterAccount object

```json
{"openapi":"3.1.1","info":{"title":"Development","version":"1.0"},"components":{"schemas":{"ResponseRegisterAccount":{"type":"object","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"result":{"$ref":"#/components/schemas/AccountInfo","description":"Account info."}}},"AccountInfo":{"type":"object","description":"AccountI info.","properties":{"id":{"type":"integer","description":"Id of user."},"email":{"type":"string","description":"Email of user."},"username":{"type":"string","description":"username of user."},"email_verified":{"type":"boolean","description":"Email verified or not?."},"_2fa_enabled":{"type":"boolean","description":"2fa on/off status"},"wallet_balance":{"type":"number","description":"Wallet balance."}}}}}}
```

## The ResponseGenerateApiKey object

```json
{"openapi":"3.1.1","info":{"title":"Development","version":"1.0"},"components":{"schemas":{"ResponseGenerateApiKey":{"type":"object","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{"api_key":{"type":"string","description":"new api key"}},"description":"Data generate api key."}}}}}}
```

## The ResponseSetBalance object

```json
{"openapi":"3.1.1","info":{"title":"Development","version":"1.0"},"components":{"schemas":{"ResponseSetBalance":{"type":"object","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"result":{"type":"object","properties":{"amount":{"type":"integer","description":"number ips of account"}},"description":"Data set balance."}}}}}}
```

## The ResponseBadRequestError object

```json
{"openapi":"3.1.1","info":{"title":"Development","version":"1.0"},"components":{"schemas":{"ResponseBadRequestError":{"type":"object","description":"Bad request.","properties":{"success":{"type":"boolean","description":"Success status (true if successful, false if an error occurred)."},"message":{"type":"string","description":"Response message."},"errors":{"type":"array","description":"List error","items":{"type":"string"}}}}}}}
```

## The ResponseForbiddenError object

```json
{"openapi":"3.1.1","info":{"title":"Development","version":"1.0"},"components":{"schemas":{"ResponseForbiddenError":{"type":"object","description":"Response payload returned when access is forbidden.","properties":{"success":{"type":"boolean","description":"Indicates whether the request was successful."},"message":{"type":"string","description":"Human-readable response message."},"errors":{"type":"array","description":"List of error messages.","items":{"type":"string"}}}}}}}
```


# Proxy API

## Use Random Proxy

> Returns a list of proxies based on query parameters.

```json
{"openapi":"3.1.1","info":{"title":"Proxy API","version":"1.0"},"paths":{"/api/proxy":{"get":{"summary":"Use Random Proxy","description":"Returns a list of proxies based on query parameters.","parameters":[{"schema":{"type":"string"},"name":"num","in":"query","description":"Number of proxies to retrieve."},{"schema":{"type":"string"},"name":"country","in":"query","description":"Country code (e.g., US, VN)."},{"schema":{"type":"string"},"name":"state","in":"query","description":"State or province of the proxy."},{"schema":{"type":"string"},"name":"city","in":"query","description":"City of the proxy."},{"schema":{"type":"string"},"name":"zip","in":"query","description":"Postal code of the proxy."},{"schema":{"type":"string"},"name":"isp","in":"query","description":"Internet Service Provider (ISP)."},{"schema":{"type":"string"},"name":"port","in":"query","description":"Specific proxy port."},{"schema":{"type":"string"},"name":"ports","in":"query","description":"List of proxy ports, separated by commas."},{"schema":{"type":"string"},"name":"plan","in":"query","description":"Proxy plan type (e.g., premium, free)."},{"schema":{"type":"boolean"},"name":"today","in":"query","description":"Retrieve only proxies updated today (true/false)."},{"schema":{"type":"string"},"name":"t","in":"query","description":"Response type 1=txt, 2=json"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBase"}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}},"402":{"description":"Insufficient balance response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}},"406":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}}}}}},"components":{"schemas":{"ResponseBase":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"type":"string"},"description":"List of returned proxies."}}},"ResponseMessage":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."}}}}}}
```

## The ProxyInfo object

```json
{"openapi":"3.1.1","info":{"title":"Proxy API","version":"1.0"},"components":{"schemas":{"ProxyInfo":{"type":"object","description":"Details of an available proxy.","properties":{"id":{"type":"string","description":"Unique identifier of the proxy."},"city":{"type":"string","description":"City where the proxy is located."},"ip":{"type":"string","description":"IP address of the proxy."},"country_code":{"type":"string","description":"Country code of the proxy location."},"is_online":{"type":"boolean","description":"Indicates whether the proxy is online (true) or offline (false)."},"binding":{"type":["string","null"],"description":"Binding information, if applicable."}}}}}}
```

## The ResponseTodayList object

```json
{"openapi":"3.1.1","info":{"title":"Proxy API","version":"1.0"},"components":{"schemas":{"ResponseTodayList":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ProxyInfo"},"description":"List of proxies available today."}}},"ProxyInfo":{"type":"object","description":"Details of an available proxy.","properties":{"id":{"type":"string","description":"Unique identifier of the proxy."},"city":{"type":"string","description":"City where the proxy is located."},"ip":{"type":"string","description":"IP address of the proxy."},"country_code":{"type":"string","description":"Country code of the proxy location."},"is_online":{"type":"boolean","description":"Indicates whether the proxy is online (true) or offline (false)."},"binding":{"type":["string","null"],"description":"Binding information, if applicable."}}}}}}
```

## The PortStats object

```json
{"openapi":"3.1.1","info":{"title":"Proxy API","version":"1.0"},"components":{"schemas":{"PortStats":{"type":"object","description":"Details of a port's status.","properties":{"port":{"type":"integer","description":"The port number being checked."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The ResponseCheckStatus object

```json
{"openapi":"3.1.1","info":{"title":"Proxy API","version":"1.0"},"components":{"schemas":{"ResponseCheckStatus":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/PortStats"},"description":"List of port status details."}}},"PortStats":{"type":"object","description":"Details of a port's status.","properties":{"port":{"type":"integer","description":"The port number being checked."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The PortInfo object

```json
{"openapi":"3.1.1","info":{"title":"Proxy API","version":"1.0"},"components":{"schemas":{"PortInfo":{"type":"object","description":"Details of a port's status.","properties":{"address":{"type":"string","description":"The address associated with the port."},"city":{"type":"string","description":"The city where the port is located."},"public_ip":{"type":"string","description":"The public IP address of the port."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The ResponsePortStatus object

```json
{"openapi":"3.1.1","info":{"title":"Proxy API","version":"1.0"},"components":{"schemas":{"ResponsePortStatus":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/PortInfo"},"description":"List of port status details."}}},"PortInfo":{"type":"object","description":"Details of a port's status.","properties":{"address":{"type":"string","description":"The address associated with the port."},"city":{"type":"string","description":"The city where the port is located."},"public_ip":{"type":"string","description":"The public IP address of the port."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The ResponseMessage object

```json
{"openapi":"3.1.1","info":{"title":"Proxy API","version":"1.0"},"components":{"schemas":{"ResponseMessage":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."}}}}}}
```

## The ResponseBase object

```json
{"openapi":"3.1.1","info":{"title":"Proxy API","version":"1.0"},"components":{"schemas":{"ResponseBase":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"type":"string"},"description":"List of returned proxies."}}}}}}
```


# Today List API

## Forward request

> Forwards a request to a specified proxy ID and port.

```json
{"openapi":"3.1.1","info":{"title":"Today List API","version":"1.0"},"paths":{"/api/forward":{"get":{"summary":"Forward request","description":"Forwards a request to a specified proxy ID and port.","parameters":[{"schema":{"type":"string"},"name":"id","in":"query","description":"Proxy ID to forward the request to."},{"schema":{"type":"string"},"name":"port","in":"query","description":"Port number for the forwarding request."},{"schema":{"type":"string"},"name":"plan","in":"query","description":"Plan type for forwarding (default is '1' if not provided)."},{"schema":{"type":"string"},"name":"t","in":"query","description":"Response type 1=txt, 2=json"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseBase"}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}},"402":{"description":"Insufficient balance response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}},"406":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}}}}}},"components":{"schemas":{"ResponseBase":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"type":"string"},"description":"List of returned proxies."}}},"ResponseMessage":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."}}}}}}
```

## Get today's proxy list

> Returns a list of proxies that are available today based on query filters.

```json
{"openapi":"3.1.1","info":{"title":"Today List API","version":"1.0"},"paths":{"/api/today_list":{"get":{"summary":"Get today's proxy list","description":"Returns a list of proxies that are available today based on query filters.","parameters":[{"schema":{"type":"string"},"name":"country","in":"query","description":"Country code (e.g., US, VN)."},{"schema":{"type":"string"},"name":"state","in":"query","description":"State or province of the proxy."},{"schema":{"type":"string"},"name":"city","in":"query","description":"City where the proxy is located."},{"schema":{"type":"string"},"name":"zip","in":"query","description":"Postal code of the proxy location."},{"schema":{"type":"string"},"name":"isp","in":"query","description":"Internet Service Provider (ISP)."},{"schema":{"type":"integer"},"name":"limit","in":"query","description":"Maximum number of proxies to retrieve."},{"schema":{"type":"string"},"name":"t","in":"query","description":"Response type 1=txt, 2=json"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTodayList"}}}}}}}},"components":{"schemas":{"ResponseTodayList":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ProxyInfo"},"description":"List of proxies available today."}}},"ProxyInfo":{"type":"object","description":"Details of an available proxy.","properties":{"id":{"type":"string","description":"Unique identifier of the proxy."},"city":{"type":"string","description":"City where the proxy is located."},"ip":{"type":"string","description":"IP address of the proxy."},"country_code":{"type":"string","description":"Country code of the proxy location."},"is_online":{"type":"boolean","description":"Indicates whether the proxy is online (true) or offline (false)."},"binding":{"type":["string","null"],"description":"Binding information, if applicable."}}}}}}
```

## The ProxyInfo object

```json
{"openapi":"3.1.1","info":{"title":"Today List API","version":"1.0"},"components":{"schemas":{"ProxyInfo":{"type":"object","description":"Details of an available proxy.","properties":{"id":{"type":"string","description":"Unique identifier of the proxy."},"city":{"type":"string","description":"City where the proxy is located."},"ip":{"type":"string","description":"IP address of the proxy."},"country_code":{"type":"string","description":"Country code of the proxy location."},"is_online":{"type":"boolean","description":"Indicates whether the proxy is online (true) or offline (false)."},"binding":{"type":["string","null"],"description":"Binding information, if applicable."}}}}}}
```

## The ResponseTodayList object

```json
{"openapi":"3.1.1","info":{"title":"Today List API","version":"1.0"},"components":{"schemas":{"ResponseTodayList":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ProxyInfo"},"description":"List of proxies available today."}}},"ProxyInfo":{"type":"object","description":"Details of an available proxy.","properties":{"id":{"type":"string","description":"Unique identifier of the proxy."},"city":{"type":"string","description":"City where the proxy is located."},"ip":{"type":"string","description":"IP address of the proxy."},"country_code":{"type":"string","description":"Country code of the proxy location."},"is_online":{"type":"boolean","description":"Indicates whether the proxy is online (true) or offline (false)."},"binding":{"type":["string","null"],"description":"Binding information, if applicable."}}}}}}
```

## The PortStats object

```json
{"openapi":"3.1.1","info":{"title":"Today List API","version":"1.0"},"components":{"schemas":{"PortStats":{"type":"object","description":"Details of a port's status.","properties":{"port":{"type":"integer","description":"The port number being checked."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The ResponseCheckStatus object

```json
{"openapi":"3.1.1","info":{"title":"Today List API","version":"1.0"},"components":{"schemas":{"ResponseCheckStatus":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/PortStats"},"description":"List of port status details."}}},"PortStats":{"type":"object","description":"Details of a port's status.","properties":{"port":{"type":"integer","description":"The port number being checked."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The PortInfo object

```json
{"openapi":"3.1.1","info":{"title":"Today List API","version":"1.0"},"components":{"schemas":{"PortInfo":{"type":"object","description":"Details of a port's status.","properties":{"address":{"type":"string","description":"The address associated with the port."},"city":{"type":"string","description":"The city where the port is located."},"public_ip":{"type":"string","description":"The public IP address of the port."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The ResponsePortStatus object

```json
{"openapi":"3.1.1","info":{"title":"Today List API","version":"1.0"},"components":{"schemas":{"ResponsePortStatus":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/PortInfo"},"description":"List of port status details."}}},"PortInfo":{"type":"object","description":"Details of a port's status.","properties":{"address":{"type":"string","description":"The address associated with the port."},"city":{"type":"string","description":"The city where the port is located."},"public_ip":{"type":"string","description":"The public IP address of the port."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The ResponseMessage object

```json
{"openapi":"3.1.1","info":{"title":"Today List API","version":"1.0"},"components":{"schemas":{"ResponseMessage":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."}}}}}}
```

## The ResponseBase object

```json
{"openapi":"3.1.1","info":{"title":"Today List API","version":"1.0"},"components":{"schemas":{"ResponseBase":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"type":"string"},"description":"List of returned proxies."}}}}}}
```


# Port API

## Check port status

> Returns the status of specified ports or all ports if 'ports=all' is provided.

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"paths":{"/api/port_check":{"get":{"summary":"Check port status","description":"Returns the status of specified ports or all ports if 'ports=all' is provided.","parameters":[{"schema":{"type":"string"},"name":"t","in":"query","description":"Response type 1=txt, 2=json"},{"schema":{"type":"string"},"name":"ports","in":"query","description":"Specify a port number or use 'all' to check all ports."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseCheckStatus"}}}}}}}},"components":{"schemas":{"ResponseCheckStatus":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/PortStats"},"description":"List of port status details."}}},"PortStats":{"type":"object","description":"Details of a port's status.","properties":{"port":{"type":"integer","description":"The port number being checked."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## Get port status

> Returns the status of ports, including their address, city, public IP, and online status.

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"paths":{"/api/port_status":{"get":{"summary":"Get port status","description":"Returns the status of ports, including their address, city, public IP, and online status.","parameters":[{"schema":{"type":"string"},"name":"t","in":"query","description":"Response type 1=txt, 2=json"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsePortStatus"}}}}}}}},"components":{"schemas":{"ResponsePortStatus":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/PortInfo"},"description":"List of port status details."}}},"PortInfo":{"type":"object","description":"Details of a port's status.","properties":{"address":{"type":"string","description":"The address associated with the port."},"city":{"type":"string","description":"The city where the port is located."},"public_ip":{"type":"string","description":"The public IP address of the port."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## Set port range

> Configures a range of ports starting from a specified port.

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"paths":{"/api/set_port_range":{"get":{"summary":"Set port range","description":"Configures a range of ports starting from a specified port.","parameters":[{"schema":{"type":"string"},"name":"start_port","in":"query","description":"The starting port of the range."},{"schema":{"type":"string"},"name":"port_num","in":"query","description":"The number of ports in the range."},{"schema":{"type":"string"},"name":"t","in":"query","description":"Response type 1=txt, 2=json"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}},"406":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}}}}}},"components":{"schemas":{"ResponseMessage":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."}}}}}}
```

## Check free ports

> Returns the status of requested ports.

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"paths":{"/api/port_free":{"get":{"summary":"Check free ports","description":"Returns the status of requested ports.","parameters":[{"schema":{"type":"string"},"name":"ports","in":"query","description":"List of ports to check, separated by commas."},{"schema":{"type":"string"},"name":"t","in":"query","description":"Response type 1=txt, 2=json"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseMessage"}}}}}}}},"components":{"schemas":{"ResponseMessage":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."}}}}}}
```

## The ProxyInfo object

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"components":{"schemas":{"ProxyInfo":{"type":"object","description":"Details of an available proxy.","properties":{"id":{"type":"string","description":"Unique identifier of the proxy."},"city":{"type":"string","description":"City where the proxy is located."},"ip":{"type":"string","description":"IP address of the proxy."},"country_code":{"type":"string","description":"Country code of the proxy location."},"is_online":{"type":"boolean","description":"Indicates whether the proxy is online (true) or offline (false)."},"binding":{"type":["string","null"],"description":"Binding information, if applicable."}}}}}}
```

## The ResponseTodayList object

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"components":{"schemas":{"ResponseTodayList":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ProxyInfo"},"description":"List of proxies available today."}}},"ProxyInfo":{"type":"object","description":"Details of an available proxy.","properties":{"id":{"type":"string","description":"Unique identifier of the proxy."},"city":{"type":"string","description":"City where the proxy is located."},"ip":{"type":"string","description":"IP address of the proxy."},"country_code":{"type":"string","description":"Country code of the proxy location."},"is_online":{"type":"boolean","description":"Indicates whether the proxy is online (true) or offline (false)."},"binding":{"type":["string","null"],"description":"Binding information, if applicable."}}}}}}
```

## The PortStats object

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"components":{"schemas":{"PortStats":{"type":"object","description":"Details of a port's status.","properties":{"port":{"type":"integer","description":"The port number being checked."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The ResponseCheckStatus object

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"components":{"schemas":{"ResponseCheckStatus":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/PortStats"},"description":"List of port status details."}}},"PortStats":{"type":"object","description":"Details of a port's status.","properties":{"port":{"type":"integer","description":"The port number being checked."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The PortInfo object

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"components":{"schemas":{"PortInfo":{"type":"object","description":"Details of a port's status.","properties":{"address":{"type":"string","description":"The address associated with the port."},"city":{"type":"string","description":"The city where the port is located."},"public_ip":{"type":"string","description":"The public IP address of the port."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The ResponsePortStatus object

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"components":{"schemas":{"ResponsePortStatus":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"$ref":"#/components/schemas/PortInfo"},"description":"List of port status details."}}},"PortInfo":{"type":"object","description":"Details of a port's status.","properties":{"address":{"type":"string","description":"The address associated with the port."},"city":{"type":"string","description":"The city where the port is located."},"public_ip":{"type":"string","description":"The public IP address of the port."},"online":{"type":"boolean","description":"Indicates whether the port is online (true) or offline (false)."}}}}}}
```

## The ResponseMessage object

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"components":{"schemas":{"ResponseMessage":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."}}}}}}
```

## The ResponseBase object

```json
{"openapi":"3.1.1","info":{"title":"Port API","version":"1.0"},"components":{"schemas":{"ResponseBase":{"type":"object","description":"API response format.","properties":{"error":{"type":"boolean","description":"Error status (true if an error occurred, false if successful)."},"message":{"type":"string","description":"Response message."},"data":{"type":"array","items":{"type":"string"},"description":"List of returned proxies."}}}}}}
```


# SDK NodeJS

The 9Proxy SDK provides a Node.js wrapper (Node-API addon) for managing residential proxy sessions, port forwarding, authentication, and automatic rotation/renewal.

This document describes the Node-API layer only. Each API method is exported from the native addon and can be invoked directly in your Node.js application.

## Quick Start

```javascript
// quick start

const sdk = require('./build/Release/addon.node');
sdk.initialize('nineproxylibs');

function callOrThrow(fn, ...args){
  const rc = fn(...args);
  if (typeof rc === 'number' && rc !== 0){
    throw new Error(sdk.sdkGetLastError?.() || `SDK error rc=${rc}`);
  }
  return rc;
}
```

{% hint style="info" %}
Except for forwarded port information, the SDK does not persist settings (API host, SDK path, port ranges, configured ports). Your app must store these and reapply them to the SDK on each startup.
{% endhint %}

## Typical Flow

`Start -> Run SDK -> Set settings (API/ports) -> Restore saved data ->  [Close Application] -> Shutdown()`&#x20;

## Example Implementation

```javascript
// Example 

const host = "https://g-api-dev.9proxy.com/sdk/v1";
// Run the SDK loop  
sdk.runAsync();  // or use sdk.run()
 
// Enable debug mode
sdk.enableDebug();

// Set the path to store SDK data
sdk.setSaveDataPath("/var/tmp/save");

// Configure API host
sdk.setAPIHost(host);

// Set default query parameter
sdk.setQuery("api-key", "677e2c4517f247bc89dd66a4");

// Start WebSocket event listener 
sdk.startEventListener(8881, "abcd1234", (data)=> {
	console.log("SDK EVENT", data.toString())
});

// Update IP format + range port
// In Node-API: endPort = start + count - 1 = 60003
sdk.updateIpFormatAndPorts("127.0.0.1:%d", 60000, 60003);

// After all settings are applied, restore previous data to keep forwarded list
sdk.restoreData();

// Example: bind a specific port
try {
  const rc = await sdk.quickCreateAtPort(60000, "request_id", "1");
  console.log("Binding Result:", rc);
} catch (e) {
  console.error("Error:", e.message);
}
// Delay 1 second before shutdown
setTimeout(() => {
  sdk.shutdown()
}, 1000);

```


# Functions


# initialize(path)

Initializes the addon/SDK and loads the internal library into memory. This function must be called before using any other SDK functions

```javascript
initialize(path)
```

***

## Parameters

* **path**: <mark style="color:green;">string</mark> – Path to the directory containing the SDK library file (.dll / .so / .dylib).

## Return Value

void or number (depends on binding implementation).

## Example

```javascript
// example

sdk.initialize();

```


# sdkGetLastError()

Returns the most recent error string reported by the SDK.

```javascript
sdkGetLastError()
```

***

## Return Value

* <mark style="color:green;">string</mark> : The most recent error string

## Example

```javascript
// Example

console.log(sdk.sdkGetLastError());

```


# createWithId(...args)

Creates and forwards a proxy on the specified port, identified by proxyId and configured with the given plan and action type.

```javascript
async createWithId(port, proxyId, plan, actionType)
```

***

## Parameters

* **port** (<mark style="color:green;">number</mark>) – The local port to forward.
* **proxyId** (<mark style="color:green;">string</mark>) – ID of the proxy to forward. This also acts as the requestId for receiving success/failure status in event callbacks.
* **plan** (<mark style="color:green;">string</mark>) – ID of the plan to use (default: "1").
* **actionType** (<mark style="color:green;">string</mark>) – User action type (default: "manual").

## Return Value

<mark style="color:green;">number</mark> – Returns 0 on success.

## Example

```javascript
// example

sdk.createWithId(60000, "677e2c4517f247bc89dd66a4", "1", "manual");

```


# createProxyByPortConfigs(...args)

Forwards multiple proxies according to a list of ports. Proxy information is taken from existing configured ports. Ports without configuration are skipped.

```javascript
async createProxyByPortConfigs(requestId, plan, ports, n)
```

***

## Parameters

* **requestId** (<mark style="color:green;">string</mark>) – ID used to track request status in event callbacks.
* **plan** (<mark style="color:green;">string</mark>) – ID of the plan to use (default: "1").
* **ports** (<mark style="color:green;">Uint32Array</mark>) – List of ports to forward.
* **n** (<mark style="color:green;">number</mark>) – Number of elements in the ports array.

## Return Value

Depends on binding: typically an array of successfully forwarded ports or a return code (rc).

## Example

```javascript
// example

const ports = new Uint32Array([60000, 60001]);
const ret = sdk.createProxyByPortConfigs("request_id", "1", ports, ports.length);

```


# quickCreateProxies(...args)

Quickly forwards multiple proxies to a set of ports.

* If a port has a configuration, the proxy will be forwarded using that configuration.
* If not, a random proxy will be assigned.
* Optionally, you can limit forwarding only to unused ports.

```javascript
async quickCreateProxies(requestId, plan, ports, n, onlyFree)
```

***

## Parameters

* **requestId** (<mark style="color:green;">string</mark>) – ID used to track request status in event callbacks.
* **plan** (<mark style="color:green;">string</mark>) – ID of the plan to use (default: "1").
* **ports** (<mark style="color:green;">Uint32Array</mark>) – List of ports to forward.
* **n** (<mark style="color:green;">number</mark>) – Number of elements in the ports array.
* **onlyFree** (<mark style="color:green;">number</mark>, 0 or 1) – 1 = only forward to ports that are not in use; 0 = attempt on all ports.

## Return Value

number or array (binding dependent).

## Example

```javascript
// example

const cand = new Uint32Array([60000, 60001]);
const ret = sdk.quickCreateProxies("request_id", "1", cand, cand.length, 1);

```


# quickCreateAtPort(...args)

Quickly forwards a single proxy to the specified port.

* If the port has an existing configuration, that configuration will be used.
* If not, a random proxy will be assigned.

```javascript
async quickCreateAtPort(port, requestId, plan)
```

***

## Parameters

* **port** (<mark style="color:green;">number</mark>) – The local port to forward.
* **requestId** (<mark style="color:green;">string</mark>) – ID used to track request status in event callbacks.
* **plan** (<mark style="color:green;">string</mark>) – ID of the plan to use (default: "1").

## Return Value

number – Returns 0 on success.

## Example

```javascript
// example

sdk.quickCreateAtPort(60000, "request_id", "1");

```


# createWithConfigure(...args)

Forwards proxies to a set of ports based on filter criteria.

* If a port is listed, the SDK attempts to forward a proxy that matches the given filter.
* If specific filter fields are not provided, values will be randomized.

```javascript
async createWithConfigure(requestId, ports, n, filterJson)
```

***

## Parameters

* **requestId** (<mark style="color:green;">string</mark>) – Correlation ID used to receive success/failure status via events.
* **ports** (<mark style="color:green;">Uint32Array</mark>) – List of ports to forward.
* **n** (<mark style="color:green;">number</mark>) – Number of elements in the ports array.
* **filterJson** (<mark style="color:green;">string</mark>) – JSON string containing filter criteria:

```json
// filterJson criteria

 {
  "plan": "1",
  "city": "Hanoi",
  "country": "VN",
  "state": "HN",
  "isp": "VNPT",
  "zip": "100000",
  "list_type": -1,
  "action": "manual"
}

- plan: plan ID (default "1")
- list_type: always -1 (indicates proxy list)
- action: user action type (default "manual")
- country, city, state, isp, zip: optional; randomized if omitted.

```

## Retun Value

number or array (binding dependent).

## Example

```javascript
// example

const ports = new Uint32Array([11000, 11001]);
const filter = JSON.stringify({
  plan: "1",
  city: "Hanoi",
  country: "VN",
  state: "HN",
  isp: "VNPT",
  zip: "100000",
  list_type: -1,
  action: "manual"
});
const rc = sdk.createWithConfigure("mgr-1", ports, ports.length, filter);


```


# getPorts()

Retrieves all ports according to the current SDK settings.

```javascript
getPorts()
```

***

## Return Value

number\[] or Buffer (binding dependent) : All ports according to the current SDK settings.

## Example

```javascript
// example

const arr = sdk.getPorts();
console.log(arr);

```


# getPortsFreeWithLimit(limit)

Retrieves up to limit free (unused) ports from the current settings.

```javascript
getPortsFreeWithLimit(limit)
```

***

## Parameters

* **limit** (<mark style="color:green;">number</mark>) – Maximum number of free ports to return.

## Return Value

number\[] or Buffer (binding dependent) : limit free (unused) ports from the current settings.

## Example

```javascript
// example

const free = sdk.getPortsFreeWithLimit(5);

```


# getPortsWithLimit(limit)

Retrieves up to limit ports from the current SDK settings.

```javascript
getPortsWithLimit(limit)
```

***

## Parameters

* **limit** (<mark style="color:green;">number</mark>) – Maximum number of ports to return.

## Return Value

number\[] or Buffer (binding dependent) : limit ports from the current SDK settings.

## Example

```javascript
// example

const slice = sdk.getPortsWithLimit(10);
console.log(slice);

```


# getPortsWithStartLimit(...args)

Retrieves a list of ports starting from start with a maximum count of limit.

```javascript
getPortsWithStartLimit(start, limit)
```

***

## Parameters

* **start** (<mark style="color:green;">number</mark>) – Starting port.
* **limit** (<mark style="color:green;">number</mark>) – Number of ports to retrieve.

## Return Value

number\[] or Buffer (binding dependent) : a list of ports starting from start with a maximum count of limit.

## Example

```javascript
// example

const ports = sdk.getPortsWithStartLimit(60001, 10);
console.log(ports);

```


# removePort(port)

Removes (un-forwards) the proxy bound to the given port.

```javascript
removePort(port)
```

***

## Parameters

* **port** (<mark style="color:green;">number</mark>) – Port to remove.

## Return Value

number – 0 on success.

## Example

```javascript
// example

callOrThrow(sdk.removePort, 60000);

```


# isRunningPort(port)

Checks if the given port is currently running (forwarded).

```javascript
isRunningPort(port)
```

***

## Parameters

* **port** (<mark style="color:green;">number</mark>) – Port to check.

## Return Value

number – 1 if running, 0 if not.

## Example

```javascript
// example

const running = sdk.isRunningPort(60000) === 1;
console.log("Running:", running);

```


# testPort(port)

Tests whether the proxy bound to a given port is currently online.

```javascript
testPort(port)
```

***

## Parameters

* **port** (<mark style="color:green;">number</mark>) – Port to test.

## Return Value

number – 1 if online.

## Example

```javascript
// example

const online = sdk.testPort(60000);
console.log("Online:", online === 1);

```


# checkPortAvailable(port)

Checks whether the given port is free (not in use).

```javascript
checkPortAvailable(port)
```

***

## Parameters

* **port** (<mark style="color:green;">number</mark>) – Port to check.

## Return Value

number – 1 if free, 0 if busy.

## Example

```javascript
// example

if (sdk.checkPortAvailable(1080) !== 1) {
  throw new Error("Port is unavailable");
}

```


# getConfigsJSON()

Returns the full configuration of all forwarded proxies in JSON format.

```javascript
getConfigsJSON()
```

***

## Return Value

string – JSON array of proxy configurations.

**Example JSON structure:**

```json
// JSON structure

[{
  "proxy_id": "677e2c4517f247bc89dd66a4",
  "plan": "1",
  "country_code": "HK",
  "address": "127.0.0.1:60000",
  "binding_type": "ip",
  "Index": 60000,
  "client_country_code": "US",
  "is_online": true,
  "city": "Hongkong",
  "public_ip": "1.2.3.4",
  "origin_id": "677e2c4537f244bc29dd66a2",
  "server_id": "6775221517f231bc29df2624",
  "last_refresh": 1692705600,
  "count_refresh": 12,
  "prepare_start_date": 1692600000,
  "manual": false,
  "action_type": 1,
  "streams": 5,
  "bw": {
    "id": "677e1c4517f227a229de67c5",
    "bw_up": 2048000,
    "bw_down": 10485760,
    "session_time": 3600,
    "bytes_write": 5242880,
    "bytes_read": 7340032
  }
}]

```

## Example

```javascript
// example

const configs = sdk.getConfigsJSON();
console.log(JSON.parse(configs));

```


# getConfigJSON(port)

Returns the configuration of a single forwarded proxy (bound to the specified port) in JSON format.

```javascript
getConfigJSON(port)
```

***

## Parameters

* **port** (<mark style="color:green;">number</mark>) – Port to query.

## Return Value

string – JSON object of the proxy configuration.

**Example JSON structure:**

```json
// JSON structure

{
  "proxy_id": "677e2c4517f247bc89dd66a4",
  "plan": "1",
  "country_code": "HK",
  "address": "127.0.0.1:60000",
  "binding_type": "ip",
  "Index": 60000,
  "client_country_code": "US",
  "is_online": true,
  "city": "Hongkong",
  "public_ip": "1.2.3.4",
  "origin_id": "677e2c4537f244bc29dd66a2",
  "server_id": "6775221517f231bc29df2624",
  "last_refresh": 1692705600,
  "count_refresh": 12,
  "prepare_start_date": 1692600000,
  "manual": false,
  "action_type": 1,
  "streams": 5,
  "bw": {
    "id": "677e1c4517f227a229de67c5",
    "bw_up": 2048000,
    "bw_down": 10485760,
    "session_time": 3600,
    "bytes_write": 5242880,
    "bytes_read": 7340032
  }
}

```

## Example

```javascript
// example

const j = sdk.getConfigJSON(10001);
console.log(JSON.parse(config));

```


# setRangePort(...args)

Defines the range of ports available for proxy forwarding.

```javascript
setRangePort(startPort, endPort)
```

***

## Parameters

* **startPort** (<mark style="color:green;">number</mark>) – Starting port.
* **endPort** (<mark style="color:green;">number</mark>) – Ending port.

## Return Value

number or void (binding dependent).

## Example

```javascript
// example

sdk.setRangePort(10000, 20000);

```


# restoreData()

Restores saved forwarding data (previous proxy/port mappings). Call this after re-initializing SDK settings to rehydrate existing forwards.

```javascript
restoreData()
```

***

## Return Value

void or number (binding dependent) : Restores saved forwarding data.

## Example

```javascript
// example

sdk.restoreData();

```


# cleanData()

Clears saved forwarding data from the SDK. This does not stop currently running proxies, but removes persisted mapping information.

```javascript
cleanData()
```

***

## Return Value

void or number (binding dependent) : Clears saved forwarding data from the SDK.

## Example

```javascript
// example

sdk.cleanData();

```


# stopCommunicate()

Stops the WebSocket communication channel used to receive proxy events.

```javascript
stopCommunicate()
```

***

## Return Value

void or number : Stops the WebSocket communication channel used to receive proxy events

## Example

```javascript
// example

sdk.stopCommunicate();

```


# startCommunicate(...args)

Starts a WebSocket communication channel to receive proxy events.

```javascript
startCommunicate(comType, port, password)
```

***

## Parameters

* **comType** (<mark style="color:green;">number</mark>) – Communication type (e.g., 1 = WebSocket).
* **port** (<mark style="color:green;">number</mark>) – Local port to bind the listener.
* **password** (<mark style="color:green;">string</mark>) – Token/secret for authentication.

## Return Value

void or number : Starts a WebSocket communication channel

## Example

```javascript
// example

sdk.startCommunicate(1, 8881, "token");

```


# stopProxy()

Stops all active proxies.

```javascript
stopProxy()
```

***

## Return Value

number (0 = success) : Stops all active proxies

## Example

```javascript
// example

sdk.stopProxy();

```


# stopHttpApi()

Stops the local HTTP API server.

```javascript
stopHttpApi()
```

***

## Return Value

number (0 = success) : Stops the local HTTP API server

## Example

```javascript
// example

sdk.stopHttpApi();

```


# startHttpApi(port)

Starts the local HTTP API server at the given port.

```javascript
startHttpApi(port)
```

***

## Parameters

* **port** (<mark style="color:green;">number</mark>) – Port to serve the HTTP API.

## Return Value

number (0 = success) : Starts the local HTTP API server

## Example

```javascript
// example

sdk.startHttpApi(9090);

```


# setUserCountryCode(code)

Sets the user’s country code for proxy session context.

```javascript
setUserCountryCode(code)
```

***

## Parameters

* **code** (<mark style="color:green;">string</mark>) – Country code (e.g., "HK").

## Return Value

void or number&#x20;

## Example

```javascript
// example

sdk.setUserCountryCode("HK");

```


# setEnableProxyAuthen(enable)

Enables or disables proxy authentication requirement.

```javascript
setEnableProxyAuth(enable)
```

***

## Parameters

* **enable** (<mark style="color:green;">number</mark>) – 1 = enable, 0 = disable.

## Return Value

number (0 = success)&#x20;

## Example

```javascript
// example

sdk.setEnableProxyAuth(1);

```


# setProxyAuth(...args)

Configures proxy authentication with username/password.

```javascript
setProxyAuthen(enable, username, password)
```

***

## Parameters

* **enable** (<mark style="color:green;">number</mark>, 0/1) – 1 = enable, 0 = disable.
* **username** (<mark style="color:green;">string</mark>)
* **password** (<mark style="color:green;">string</mark>)

## Return Value

number (0 = success)

## Example

```javascript
// example

sdk.setProxyAuth(1, "user", "pass");

```


# setSaveDataPath(path)

Sets the directory path where SDK will store saved data (e.g., forwarding state).

```javascript
setSaveDataPath(path)
```

***

## Parameters

* **path** (<mark style="color:green;">string</mark>)– Filesystem path.

## Return Value

void or number

## Example

```javascript
// example

sdk.setSaveDataPath("/var/lib/sdk");

```


# updateIpFormatAndPorts(...args)

Updates the IP format and the range of ports used by the SDK.

```javascript
updateIpFormatAndPorts(ipFormat, startPort, limit)
```

***

## Parameters

* **ipFormat** (<mark style="color:green;">string</mark>) – Format string (e.g., "127.0.0.1:%d").
* **startPort** (<mark style="color:green;">number</mark>) – Starting port.
* **limit** (<mark style="color:green;">number</mark>) – Number of ports (in some bindings) or endPort (Node-API).

## Return Value

void or number

## Example

```javascript
// example

sdk.updateIpFormatAndPorts("127.0.0.1:%d", 60000, 10);

```


# runAsync()

Runs the SDK’s main loop in non-blocking mode (uses the SDK’s own thread).

```javascript
runAsync()
```

***

## Return Value

void : Runs the SDK’s main loop in non-blocking mode

## Example

```javascript
// example

sdk.runAsync();

```




---

[Next Page](/llms-full.txt/1)

