Static Proxy
1. Overview
The Static IP V2 API provides full management for static residential proxy IPs, including querying available resources, creating proxies, renewals, enabling/disabling auto-renewal, and paginated listing of the current user's active IPs.
2. List countries
Method: GET /v2/static-residential/listCountry
Description: Returns the list of supported country codes.
Request parameters
None
Response fields
| Field | Type | Description |
|---|---|---|
| data | Array<String> | Country code array, e.g. ["US", "UK", "CA"] |
Response example
Success:
{
"code": 200,
"msg": "操作成功",
"data": ["US", "UK", "CA", "AU", "DE", "FR"]
}
3. List cities
Method: GET /v2/static-residential/listCity
Description: Returns supported cities for a given country code.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| country_code | String | Yes | Country code, e.g. US, UK |
Response fields
| Field | Type | Description |
|---|---|---|
| data | Array<String> | City name array, e.g. ["New York", "Los Angeles"] |
Response example
Success:
{
"code": 200,
"msg": "操作成功",
"data": ["New York", "Los Angeles", "Chicago", "Houston"]
}
4. List business names
Method: GET /v2/static-residential/listBusiness
Description: Returns the list of available business names.
Request parameters
None
Response fields
| Field | Type | Description |
|---|---|---|
| data | Array<Object> | Business name object array |
| data[].BusinessName | String | Business name, e.g. general, social_media, e_commerce |
Response example
Success:
{
"code": 200,
"msg": "操作成功",
"data": [
{
"BusinessName": "YouTube"
},
{
"BusinessName": "TikTok"
},
{
"BusinessName": "other"
}
]
}
5. Count idle IPs
Method: POST /v2/static-residential/countIdleIP
Description: Returns the number of available IPs for the given filters.
Request parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| country_code | String | Yes | Country code | US |
| city_name | String | No | City name; empty means random | New York |
| business | String | Yes | Business name from listBusiness | general |
| line_type | Integer | Yes | IP quality: 1 basic, 2 standard, 3 premium | 1 |
| sell_mode | Integer | No | Sell mode: 1 dedicated, 2 shared; omit to use platform default | 2 |
Request example
{
"country_code": "US",
"city_name": "New York",
"business": "YouTube",
"line_type": 1,
"sell_mode": 2
}
Response fields
| Field | Type | Description |
|---|---|---|
| data | Integer | Available IP count |
Response example
Success:
{
"code": 200,
"msg": "操作成功",
"data": 1250
}
6. Create static proxy IP
Method: POST /v2/static-residential/newIP
Description: Creates a new static proxy IP order.
Permission: Customer access control required
Request parameters
| Parameter | Type | Required | Description | Constraint | Example |
|---|---|---|---|---|---|
| country_code | String | Yes | Country code | - | US |
| city_name | String | No | City name; empty means random | - | New York |
| days | Integer | Yes | Purchase duration in days | Allowed: 30, 60, 90, 180, 365 | 30 |
| count | Integer | Yes | Number of proxies to purchase | 1–500 | 10 |
| line_type | Integer | Yes | IP quality: 1 basic, 2 standard, 3 premium | 1–3 | 1 |
| is_udp | Integer | No | UDP: 1 enabled, 0 disabled | 0–1, default 0 | 0 |
| sell_mode | Integer | No | Sell mode: 1 dedicated, 2 shared; omit to use platform default | 1–2 | 2 |
| business | String | Yes | Business type from listBusiness | - | general |
| customer_id | String | No | Target user ID (snowflake ID; prefer JSON string); null means yourself | - | null |
| auto_renew | Integer | No | Enable auto-renew for delivered IPs of this order: 1 yes, 0/omit no; triggers 1 day before expiry, period equals purchase days | 0–1 | 1 |
Request example
{
"country_code": "US",
"city_name": "New York",
"days": 30,
"count": 10,
"line_type": 1,
"is_udp": 0,
"sell_mode": 1,
"business": "YouTube",
"customer_id": null,
"auto_renew": 1
}
Response fields
| Field | Type | Description |
|---|---|---|
| data | Object | Create result object |
| data.order_id | String | Order ID |
| data.total | Integer | Number of IPs created |
| data.amount | Double | Order amount |
| data.currency | String | Billing currency |
| data.created_at | String | Created at (yyyy-MM-dd HH:mm:ss) |
| data.expired_at | String | Expires at (yyyy-MM-dd HH:mm:ss) |
| data.allots | Array<Object> | Allocated proxy list |
| data.allots[].ip | String | Exit IP address |
| data.allots[].node_domain | String | Proxy server domain |
| data.allots[].node_port | Integer | Proxy port |
| data.allots[].account | String | Proxy username |
| data.allots[].password | String | Proxy password |
Response example
Success:
{
"code": "200",
"message": "操作成功",
"data": {
"order_id": "20240521174348201395",
"total": 2,
"amount": 15.5,
"currency": "USD",
"created_at": "2024-12-19 10:30:00",
"expired_at": "2025-01-18 10:30:00",
"allots": [
{
"ip": "192.168.1.100",
"node_domain": "proxy1.example.com",
"node_port": 8080,
"account": "user123",
"password": "pass456"
},
{
"ip": "192.168.1.101",
"node_domain": "proxy2.example.com",
"node_port": 8080,
"account": "user124",
"password": "pass457"
}
]
}
}
Failure (no IPs delivered, empty allots):
When the order flow ends without allocating any IP, the API returns failure (not 200). It does not return a success response with empty allots.
{
"code": "2007",
"message": "购买失败",
"data": null
}
7. Renew static proxy
Method: POST /v2/static-residential/renewIP
Description: Renews an existing static proxy IP.
Permission: Customer access control required
Request parameters
| Parameter | Type | Required | Description | Constraint | Example |
|---|---|---|---|---|---|
| ip | String | Yes | IP address to renew | - | 192.168.1.100 |
| days | Integer | Yes | Renewal duration in days | Allowed: 30, 60, 90, 180, 365 | 30 |
Request example
{
"ip": "192.168.1.100",
"days": 30
}
Response fields
| Field | Type | Description |
|---|---|---|
| data | Object | Renewal result object |
| data.order_id | String | Renewal order ID |
| data.total | Integer | Number of IPs renewed |
| data.amount | Double | Renewal amount |
| data.currency | String | Billing currency |
| data.created_at | String | Created at (yyyy-MM-dd HH:mm:ss) |
| data.expired_at | String | New expiry (yyyy-MM-dd HH:mm:ss) |
| data.allots | Array<Object> | Renewed proxy list |
| data.allots[].ip | String | Renewed IP address |
| data.allots[].node_domain | String | Proxy server domain |
| data.allots[].node_port | Integer | Proxy port |
| data.allots[].account | String | Proxy username |
| data.allots[].password | String | Proxy password |
Response example
Success:
{
"code": "200",
"message": "操作成功",
"data": {
"order_id": "20240521174348201395",
"total": 1,
"amount": 7.75,
"currency": "USD",
"created_at": "2024-12-19 10:30:00",
"expired_at": "2025-02-18 10:30:00",
"allots": [
{
"ip": "192.168.1.100",
"node_domain": "proxy1.example.com",
"node_port": 8080,
"account": "user123",
"password": "pass456"
}
]
}
}
7.1 Enable / disable auto-renewal
Method: POST /v2/static-residential/setAutoRenew
Description: Enable or disable auto-renewal for a given exit IP. When enabled, the system renews from wallet balance before expiry; when disabled, the auto-renew config is removed. If renewal period is not provided, it defaults to the IP's current purchase period.
Permission: Customer access control required (API whitelist)
Request parameters
| Parameter | Type | Required | Description | Constraint | Example |
|---|---|---|---|---|---|
| ip | String | Yes | Exit IP | - | 192.168.1.100 |
| auto_renew | Integer | Yes | 1 enable/update, 0 disable | 0–1 | 1 |
| renew_before_days | Integer | No | Days before expiry to trigger; only when enabling; default 1 | 1–30 | 1 |
| customer_id | String | No | Target user ID for agent ops (snowflake ID; prefer JSON string); omit=self | - | null |
Request example
{
"ip": "192.168.1.100",
"auto_renew": 1,
"renew_before_days": 1
}
Response fields
| Field | Type | Description |
|---|---|---|
| data | Object | Result object |
| data.ip | String | Exit IP |
| data.auto_renew | Integer | Current status: 1 on / 0 off |
Response example
{
"code": "200",
"message": "操作成功",
"data": {
"ip": "192.168.1.100",
"auto_renew": 1
}
}
8. List active user static IPs
Method: GET /v2/static-residential/listUserIP
Description: Paginated list of the current Token user's active static IPs (not expired, enabled, not deleted). Optional filters: exit IP, proxy account, country/city, sell mode, line type, UDP, and remark. Parameters are passed as Query string (no JSON body).
Permission: Customer access control required (API whitelist)
Request parameters
| Parameter | Type | Required | Description | Constraint | Example |
|---|---|---|---|---|---|
| page_index | Integer | No | Page number from 1; defaults to 1 when omitted | ≥ 1 | 1 |
| page_size | Integer | No | Page size; defaults to 20 when omitted | 1–100 | 20 |
| ip | String | No | Exit IP fuzzy match | - | 1.2.3 |
| account | String | No | Proxy account fuzzy match | - | user |
| country_code | String | No | Country code (exact) | e.g. US | US |
| city_name | String | No | City name; unresolved name returns a parameter error; prefer with country_code | - | Los Angeles |
| sell_mode | Integer | No | Sell mode: 1 dedicated, 2 shared | 1–2 | 1 |
| line_type | Integer | No | IP quality: 1 basic, 2 standard, 3 premium | 1–3 | 1 |
| is_udp | Integer | No | UDP: 1 enabled, 0 disabled | 0–1 | 0 |
| status | Integer | No | IP status: 1 available (default), 0 unavailable | 0–1 | 1 |
| auto_renew | Integer | No | Auto-renew: 1 on, 0 off; omit to skip filter | 0–1 | 1 |
| remark | String | No | User remark fuzzy match | - | keyword |
Request example
GET /v2/static-residential/listUserIP?page_index=1&page_size=20&ip=1.2.3&account=user&country_code=US&city_name=Los%20Angeles&sell_mode=1&line_type=1&is_udp=0&remark=keyword
Response fields
| Field | Type | Description |
|---|---|---|
| data | Object | Page result |
| data.total | Long | Total count |
| data.page_index | Integer | Current page |
| data.page_size | Integer | Page size |
| data.rows | Array<Object> | Rows on this page |
| data.rows[].ip | String | Exit IP |
| data.rows[].expired_at | String | Expiry (yyyy-MM-dd HH:mm:ss) |
| data.rows[].account | String | Proxy username |
| data.rows[].password | String | Proxy password |
| data.rows[].port | Integer | Proxy port |
| data.rows[].sell_mode | Integer | Sell mode: 1 dedicated, 2 shared |
| data.rows[].country_code | String | Country code |
| data.rows[].state_name | String | State/province (English preferred) |
| data.rows[].city_name | String | City name (English preferred) |
| data.rows[].line_type | Integer | IP quality: 1 / 2 / 3 |
| data.rows[].is_udp | Integer | UDP: 1 / 0 |
| data.rows[].status | Integer | Status: 1 available, 0 unavailable |
| data.rows[].auto_renew | Integer | Auto-renew: 1 on, 0 off |
| data.rows[].bandwidth_limit | Number | Bandwidth limit (Mbps) |
| data.rows[].conn_limit | Integer | Connection limit |
| data.rows[].remark | String | User remark |
Response example
Success:
{
"code": "200",
"message": "操作成功",
"data": {
"total": 123,
"page_index": 1,
"page_size": 20,
"rows": [
{
"ip": "1.2.3.4",
"expired_at": "2026-12-01 12:00:00",
"account": "user01",
"password": "******",
"port": 10000,
"sell_mode": 1,
"country_code": "US",
"state_name": "California",
"city_name": "Los Angeles",
"line_type": 1,
"is_udp": 0,
"status": 1,
"auto_renew": 0,
"bandwidth_limit": 50,
"conn_limit": 100,
"remark": "customer note"
}
]
}
}
9. List remaining purchasable IP segments
Method: POST /availableIpSegments
Description: Returns remaining purchasable IP segments and quantities for the given filters. User identity comes from authentication; do not pass it in the body.
Request parameters
| Parameter | Type | Required | Description | Constraint | Example |
|---|---|---|---|---|---|
| country_code | String | Yes | Country/region code | e.g. HK, US | HK |
| city_name | String | No | City name; empty means random | - | HongKong |
| line_type | Integer | No | IP quality: 1 basic, 2 standard, 3 premium | 1–3, default 1 | 1 |
| sell_mode | Integer | No | Sell mode: 1 dedicated, 2 shared; omit to use platform default | 1–2 | 2 |
| business | String | No | Business type from listBusiness | - | other |
Request example
{
"country_code": "HK",
"city_name": "HongKong",
"line_type": 1,
"sell_mode": 2,
"business": "other"
}
Response fields
| Field | Type | Description |
|---|---|---|
| data | Object | Query result |
| data.total_quantity | Integer | Total remaining purchasable IPs across all segments |
| data.segments | Array<Object> | Segments and remaining quantities |
| data.segments[].ip_segment | String | IP segment in CIDR, e.g. 62.72.182.0/24 |
| data.segments[].quantity | Integer | Remaining quantity for that segment |
Response example
Success:
{
"code": "200",
"message": "操作成功",
"data": {
"total_quantity": 506,
"segments": [
{ "ip_segment": "62.72.182.0/24", "quantity": 253 },
{ "ip_segment": "178.94.169.0/24", "quantity": 253 }
]
}
}
10. Batch purchase by IP segment
Method: POST /batchPurchaseBySegment
Description: Specify multiple IP segment prefixes (e.g. starting with 66.92.226, 66.93.86) plus a total count. Allocation follows the prefix order until the count is reached. Limited to the authenticated user. Returns order ID, allocated count, and expiry.
Permission: Customer access control required (reseller accounts)
Request parameters
| Parameter | Type | Required | Description | Constraint | Example |
|---|---|---|---|---|---|
| country_code | String | Yes | Country/region code | e.g. HK, US | HK |
| city_name | String | No | City name; empty means random | - | HongKong |
| line_type | Integer | No | IP quality: 1 basic, 2 standard, 3 premium | 1–3, default 1 | 2 |
| business | String | No | Business type from listBusiness | Default other | other |
| ip_segment_prefixes | Array<String> | Yes | IP segment prefixes, allocated in order. e.g. ["66.92.226","66.93.86"] means allocate from 66.92.226.x first, then 66.93.86.x | - | ["66.92.226","66.93.86"] |
| count | Integer | Yes | Total purchase count (allocated in order from selected segments until this count) | 1–500 | 20 |
| days | Integer | Yes | Purchase duration in days | 1, 7, 15, 30, 60, 90, 365 | 30 |
| is_udp | Integer | No | UDP: 1 enabled, 0 disabled | 0–1, default 0 | 0 |
| sell_mode | Integer | No | Sell mode: 1 dedicated, 2 shared; omit to use platform default | 1–2 | 2 |
Request example
{
"country_code": "HK",
"city_name": "HongKong",
"line_type": 2,
"business": "other",
"ip_segment_prefixes": ["66.92.226", "66.93.86"],
"count": 20,
"days": 30,
"is_udp": 0,
"sell_mode": 2
}
Response fields
| Field | Type | Description |
|---|---|---|
| data | Object | Order info |
| data.order_id | String | Order ID |
| data.total | Integer | Allocated count |
| data.expired_at | String | Expiry time (ISO 8601) |
Response example
Success:
{
"code": "200",
"message": "操作成功",
"data": {
"order_id": "SO202401010001",
"total": 20,
"expired_at": "2024-01-31T12:00:00.000+00:00"
}
}
11. List allocated IPs by order ID
Method: GET /orderAllots
Description: Returns all allocated IPs for an order (no pagination). Limited to the authenticated user's own orders. Does not return the order ID; returns the allocation list only.
Permission: Customer access control required
Request parameters
| Parameter | Type | Required | Description | Constraint | Example |
|---|---|---|---|---|---|
| order_id | String | Yes | Order ID | Query param | SO202401010001 |
Example: GET /orderAllots?order_id=SO202401010001
Response fields
data is an array of allocated IPs for the order.
| Field | Type | Description |
|---|---|---|
| data | Array | Allocated IP list (see rows below) |
| data[].ip | String | Exit IP |
| data[].node_domain | String | Proxy server domain |
| data[].node_port | Integer | Proxy port |
| data[].account | String | Proxy username |
| data[].password | String | Proxy password |
| data[].expired_at | String | Expiry time (ISO 8601) |
Response example
Success:
{
"code": "200",
"message": "操作成功",
"data": [
{
"ip": "178.93.111.1",
"node_domain": "proxy.example.com",
"node_port": 1080,
"account": "user001",
"password": "xxx",
"expired_at": "2024-01-31T12:00:00.000+00:00"
}
]
}
12. Debugging
You can test the APIs with the following commands.
List countries
curl -X GET "http://api.ipweb.cc/prod-api/v2/static-residential/listCountry" \
-H "Token: your_access_token_here"
List cities
curl -X GET "http://api.ipweb.cc/prod-api/v2/static-residential/listCity?country_code=US" \
-H "Token: your_access_token_here"
List business names
curl -X GET "http://api.ipweb.cc/prod-api/v2/static-residential/listBusiness" \
-H "Token: your_access_token_here"
Count idle IPs
curl -X POST "http://api.ipweb.cc/prod-api/v2/static-residential/countIdleIP" \
-H "Token: your_access_token_here" \
-H "Content-Type: application/json" \
-d '{
"country_code": "US",
"city_name": "New York",
"business": "YouTube",
"line_type": 1,
"sell_mode": 2
}'
Create static proxy IP
curl -X POST "http://api.ipweb.cc/prod-api/v2/static-residential/newIP" \
-H "Token: your_access_token_here" \
-H "Content-Type: application/json" \
-d '{
"country_code": "US",
"city_name": "New York",
"days": 30,
"count": 1,
"line_type": 1,
"is_udp": 0,
"sell_mode": 1,
"business": "YouTube",
"customer_id": null
}'
Renew static proxy
curl -X POST "http://api.ipweb.cc/prod-api/v2/static-residential/renewIP" \
-H "Token: your_access_token_here" \
-H "Content-Type: application/json" \
-d '{
"ip": "192.168.1.100",
"days": 30
}'
List active user static IPs
curl -G "http://api.ipweb.cc/prod-api/v2/static-residential/listUserIP" \
-H "Token: your_access_token_here" \
--data-urlencode "page_index=1" \
--data-urlencode "page_size=20" \
--data-urlencode "ip=1.2" \
--data-urlencode "account=user"
List remaining purchasable IP segments
curl -X POST "http://api.ipweb.cc/prod-api/v2/static-residential/availableIpSegments" \
-H "Token: your_access_token_here" \
-H "Content-Type: application/json" \
-d '{
"country_code": "HK",
"city_name": "HongKong",
"line_type": 1,
"sell_mode": 2,
"business": "other"
}'
Batch purchase by IP segment
curl -X POST "http://api.ipweb.cc/prod-api/v2/static-residential/batchPurchaseBySegment" \
-H "Token: your_access_token_here" \
-H "Content-Type: application/json" \
-d '{
"country_code": "HK",
"city_name": "HongKong",
"line_type": 2,
"business": "other",
"ip_segment_prefixes": ["66.92.226", "66.93.86"],
"count": 20,
"days": 30,
"is_udp": 0,
"sell_mode": 2
}'
List allocated IPs by order ID
curl -X GET "http://api.ipweb.cc/prod-api/v2/static-residential/orderAllots?order_id=SO202401010001" \
-H "Token: your_access_token_here"
Note: Replace your_access_token_here with your real Token. Postman or another API client is recommended for testing.
13. Error codes
Possible error codes for static IP APIs:
Static IP business error codes
| Code | Description | Resolution |
|---|---|---|
| 2001 | Invalid parameter (including line_type, sell_mode, etc.) | Check request parameters against constraints |
| 2004 | Static IP renewal failed | Check account balance and renewal parameters |
| 2006 | Static IP / order not found | The specified IP or order does not exist |
| 2007 | Purchase failed (no IPs delivered) | newIP returned empty allots; check inventory or contact support |
| 2008 | No permission for this API | Confirm the account has API whitelist access |
| 2009 | Non-reseller access | Segment purchase APIs require reseller identity |
| 2010 | Invalid customerId | When ordering for a customer, customer_id must be a sub-user |
| 2099 | Business operation failed | e.g. insufficient balance; see message for details |
| 2100 | Invalid days parameter | Days must be one of: 30, 60, 90, 180, 365 |
| 2101 | Renewal days limited for this IP | This IP only supports renewal of: 30, 60, 90, 180, 365 days |
14. Error response examples
Invalid sell_mode example
{
"code": "2001",
"message": "sell_mode参数无效",
"data": null
}
newIP purchase failed (no IPs delivered) example
{
"code": "2007",
"message": "购买失败",
"data": null
}
Insufficient static IP inventory example
{
"code": "2001",
"message": "所选IP段库存不足",
"data": null
}
No permission example
{
"code": "2008",
"message": "无权限访问此接口",
"data": null
}
Static IP not found example
{
"code": "2006",
"message": "IP不存在或不属于当前用户",
"data": null
}
Invalid days parameter example
{
"code": "2100",
"message": "days参数无效",
"data": null
}
Renewal days limited example
{
"code": 2101,
"msg": "当前IP仅支持: 30、60、90、180、365天",
"data": null
}
© 2024 Static IP V2 API Documentation — Version 1.13.0
Last updated: October 28, 2026