Skip to main content

Proxies

List and inspect custom and purchased proxies, create them one at a time or in batches, import them in the desktop client's line format, check their exit on this machine (single or batch), and update or delete them. To buy proxies, see the Proxy Store. Array query parameters are passed by repeating the key, as in state=1&state=0.

Showing 10 of 10 endpoints

GET/proxy/list

List proxies

Lists the current team's proxies with pagination, including the windows bound to each proxy.

AuthBearer API Key

Request parameters

FieldTypeRequiredDescription
pagenumberOptionalPage number, default 1
sizenumberOptionalPage size, default 20, server maximum 1000
keywordstringOptionalKeyword, fuzzy-matches host, username, activeIp, or remark
sourcestringOptionalSource filter: CUSTOM, BUY
statenumber[]OptionalState filter; repeat the parameter to build an array, e.g. state=1&state=0; the state[]= form does not work

Notes

  • Deleted proxies are always excluded; the response contains plaintext proxy passwords.

Response fields

FieldTypeDescription
data.countnumberTotal number of matching records
data.sizenumberPage size, echoes the request value
data.pagenumberCurrent page number, echoes the request value
data.totalnumberTotal number of pages
data.dataobject[]Records on the current page
data.data[].idnumberProxy primary key ID
data.data[].userIdnumberOwner user ID of the proxy
data.data[].teamIdnumberOwner team ID of the proxy
data.data[].ipVersionstringIP version: IPv4, IPv6
data.data[].protocolstringProtocol: SOCKS5, HTTP, HTTPS
data.data[].hoststringProxy host, IP or domain name
data.data[].portnumberProxy port
data.data[].usernamestringProxy authentication username
data.data[].passwordstringProxy authentication password (plaintext)
data.data[].providerstringExit IP check provider
data.data[].activeTimestringTime of the most recent check
data.data[].activeIpstringExit IP from the most recent check
data.data[].statenumberState: 0 pending check, 1 available, -1 unavailable, -2 expired
data.data[].remarkstringRemark
data.data[].expireTimestringExpiration time, usually null for custom proxies
data.data[].createdAtstringCreation time
data.data[].updatedAtstringUpdate time
data.data[].countrystringExit country, null if not checked
data.data[].regionstringExit province/state
data.data[].countryCodestringExit country code
data.data[].citystringExit city
data.data[].timezonestringExit time zone identifier, e.g. Asia/Shanghai
data.data[].sourcestringSource: CUSTOM custom, BUY purchased from the platform
data.data[].sourceIdnumberSource ID, null for custom proxies
data.data[].userEmailstringOwner user email, filled in by the server
data.data[].bindScreenobject[]Windows bound to this proxy, null if none

Response example

{
"code": 0,
"msg": "成功",
"data": {
"count": 10,
"size": 20,
"page": 1,
"total": 1,
"data": [
{
"id": 6001,
"userId": 1001,
"teamId": 2001,
"ipVersion": "IPv4",
"protocol": "SOCKS5",
"host": "198.51.100.24",
"port": 1080,
"username": "proxy-user",
"password": "proxy-password",
"provider": "http://ip-api.com/json",
"activeTime": "2026-06-01 12:30:00",
"activeIp": "198.51.100.24",
"state": 1,
"remark": null,
"expireTime": "2026-07-15 10:00:00",
"createdAt": "2026-06-01 12:30:00",
"updatedAt": "2026-06-01 12:30:00",
"country": "United States",
"region": "California",
"countryCode": "US",
"city": "Los Angeles",
"timezone": "America/Los_Angeles",
"source": "BUY",
"sourceId": 7001,
"userEmail": "[email protected]",
"bindScreen": null
}
]
}
}
GET/proxy/list_merged

List merged proxies

Forwards to the same backend pagination command as /proxy/list with identical parameters and response; kept only as a path alias.

AuthBearer API Key

Request parameters

FieldTypeRequiredDescription
pagenumberOptionalPage number, default 1
sizenumberOptionalPage size, default 20, server maximum 1000
keywordstringOptionalKeyword, fuzzy-matches host, username, activeIp, or remark
sourcestringOptionalSource filter: CUSTOM, BUY
statenumber[]OptionalState filter; repeat the parameter to build an array

Notes

  • The client does no extra merging; the result is the same as /proxy/list.

Response fields

FieldTypeDescription
data.countnumberTotal number of matching records
data.sizenumberPage size, echoes the request value
data.pagenumberCurrent page number, echoes the request value
data.totalnumberTotal number of pages
data.dataobject[]Records on the current page
data.data[].idnumberProxy primary key ID
data.data[].userIdnumberOwner user ID of the proxy
data.data[].teamIdnumberOwner team ID of the proxy
data.data[].ipVersionstringIP version: IPv4, IPv6
data.data[].protocolstringProtocol: SOCKS5, HTTP, HTTPS
data.data[].hoststringProxy host, IP or domain name
data.data[].portnumberProxy port
data.data[].usernamestringProxy authentication username
data.data[].passwordstringProxy authentication password (plaintext)
data.data[].providerstringExit IP check provider
data.data[].activeTimestringTime of the most recent check
data.data[].activeIpstringExit IP from the most recent check
data.data[].statenumberState: 0 pending check, 1 available, -1 unavailable, -2 expired
data.data[].remarkstringRemark
data.data[].expireTimestringExpiration time, usually null for custom proxies
data.data[].createdAtstringCreation time
data.data[].updatedAtstringUpdate time
data.data[].countrystringExit country, null if not checked
data.data[].regionstringExit province/state
data.data[].countryCodestringExit country code
data.data[].citystringExit city
data.data[].timezonestringExit time zone identifier, e.g. Asia/Shanghai
data.data[].sourcestringSource: CUSTOM custom, BUY purchased from the platform
data.data[].sourceIdnumberSource ID, null for custom proxies
data.data[].userEmailstringOwner user email, filled in by the server
data.data[].bindScreenobject[]Windows bound to this proxy, null if none

Response example

{
"code": 0,
"msg": "成功",
"data": {
"count": 10,
"size": 20,
"page": 1,
"total": 1,
"data": [
{
"id": 6001,
"userId": 1001,
"teamId": 2001,
"ipVersion": "IPv4",
"protocol": "SOCKS5",
"host": "198.51.100.24",
"port": 1080,
"username": "proxy-user",
"password": "proxy-password",
"provider": "http://ip-api.com/json",
"activeTime": "2026-06-01 12:30:00",
"activeIp": "198.51.100.24",
"state": 1,
"remark": null,
"expireTime": "2026-07-15 10:00:00",
"createdAt": "2026-06-01 12:30:00",
"updatedAt": "2026-06-01 12:30:00",
"country": "United States",
"region": "California",
"countryCode": "US",
"city": "Los Angeles",
"timezone": "America/Los_Angeles",
"source": "BUY",
"sourceId": 7001,
"userEmail": "[email protected]",
"bindScreen": null
}
]
}
}
GET/proxy/bought_list

List purchased proxies

Forwards to the same backend pagination command as /proxy/list; you must pass source=BUY yourself to return only proxies purchased from the platform.

AuthBearer API Key

Request parameters

FieldTypeRequiredDescription
pagenumberOptionalPage number, default 1
sizenumberOptionalPage size, default 20, server maximum 1000
sourcestringOptionalOmit to return all sources; pass BUY to return only proxies purchased from the platform
keywordstringOptionalKeyword, fuzzy-matches host, username, activeIp, or remark
statenumber[]OptionalState filter; repeat the parameter to build an array

Notes

  • The path itself does not imply a source=BUY filter.

Response fields

FieldTypeDescription
data.countnumberTotal number of matching records
data.sizenumberPage size, echoes the request value
data.pagenumberCurrent page number, echoes the request value
data.totalnumberTotal number of pages
data.dataobject[]Records on the current page
data.data[].idnumberProxy primary key ID
data.data[].userIdnumberOwner user ID of the proxy
data.data[].teamIdnumberOwner team ID of the proxy
data.data[].ipVersionstringIP version: IPv4, IPv6
data.data[].protocolstringProtocol: SOCKS5, HTTP, HTTPS
data.data[].hoststringProxy host, IP or domain name
data.data[].portnumberProxy port
data.data[].usernamestringProxy authentication username
data.data[].passwordstringProxy authentication password (plaintext)
data.data[].providerstringExit IP check provider
data.data[].activeTimestringTime of the most recent check
data.data[].activeIpstringExit IP from the most recent check
data.data[].statenumberState: 0 pending check, 1 available, -1 unavailable, -2 expired
data.data[].remarkstringRemark
data.data[].expireTimestringExpiration time, usually null for custom proxies
data.data[].createdAtstringCreation time
data.data[].updatedAtstringUpdate time
data.data[].countrystringExit country, null if not checked
data.data[].regionstringExit province/state
data.data[].countryCodestringExit country code
data.data[].citystringExit city
data.data[].timezonestringExit time zone identifier, e.g. Asia/Shanghai
data.data[].sourcestringSource: CUSTOM custom, BUY purchased from the platform
data.data[].sourceIdnumberSource ID, null for custom proxies
data.data[].userEmailstringOwner user email, filled in by the server
data.data[].bindScreenobject[]Windows bound to this proxy, null if none

Response example

{
"code": 0,
"msg": "成功",
"data": {
"count": 5,
"size": 20,
"page": 1,
"total": 1,
"data": [
{
"id": 6001,
"userId": 1001,
"teamId": 2001,
"ipVersion": "IPv4",
"protocol": "SOCKS5",
"host": "198.51.100.24",
"port": 1080,
"username": "proxy-user",
"password": "proxy-password",
"provider": "http://ip-api.com/json",
"activeTime": "2026-06-01 12:30:00",
"activeIp": "198.51.100.24",
"state": 1,
"remark": null,
"expireTime": "2026-07-15 10:00:00",
"createdAt": "2026-06-01 12:30:00",
"updatedAt": "2026-06-01 12:30:00",
"country": "United States",
"region": "California",
"countryCode": "US",
"city": "Los Angeles",
"timezone": "America/Los_Angeles",
"source": "BUY",
"sourceId": 7001,
"userEmail": "[email protected]",
"bindScreen": null
}
]
}
}
GET/proxy/detail

Get proxy details

Forwards to the same backend pagination command as /proxy/list; use keyword to locate a single proxy, then take data.data[0].

AuthBearer API Key

Request parameters

FieldTypeRequiredDescription
keywordstringOptionalLookup condition, fuzzy-matches host, username, activeIp, or remark
pagenumberOptionalPage number, default 1
sizenumberOptionalPage size, default 20, server maximum 1000
sourcestringOptionalSource filter: CUSTOM, BUY
statenumber[]OptionalState filter; repeat the parameter to build an array

Notes

  • The backend command does not support querying a single proxy by id; the response is still paginated.

Response fields

FieldTypeDescription
data.countnumberTotal number of matching records
data.sizenumberPage size, echoes the request value
data.pagenumberCurrent page number, echoes the request value
data.totalnumberTotal number of pages
data.dataobject[]Records on the current page
data.data[].idnumberProxy primary key ID
data.data[].userIdnumberOwner user ID of the proxy
data.data[].teamIdnumberOwner team ID of the proxy
data.data[].ipVersionstringIP version: IPv4, IPv6
data.data[].protocolstringProtocol: SOCKS5, HTTP, HTTPS
data.data[].hoststringProxy host, IP or domain name
data.data[].portnumberProxy port
data.data[].usernamestringProxy authentication username
data.data[].passwordstringProxy authentication password (plaintext)
data.data[].providerstringExit IP check provider
data.data[].activeTimestringTime of the most recent check
data.data[].activeIpstringExit IP from the most recent check
data.data[].statenumberState: 0 pending check, 1 available, -1 unavailable, -2 expired
data.data[].remarkstringRemark
data.data[].expireTimestringExpiration time, usually null for custom proxies
data.data[].createdAtstringCreation time
data.data[].updatedAtstringUpdate time
data.data[].countrystringExit country, null if not checked
data.data[].regionstringExit province/state
data.data[].countryCodestringExit country code
data.data[].citystringExit city
data.data[].timezonestringExit time zone identifier, e.g. Asia/Shanghai
data.data[].sourcestringSource: CUSTOM custom, BUY purchased from the platform
data.data[].sourceIdnumberSource ID, null for custom proxies
data.data[].userEmailstringOwner user email, filled in by the server
data.data[].bindScreenobject[]Windows bound to this proxy, null if none

Response example

{
"code": 0,
"msg": "成功",
"data": {
"count": 1,
"size": 1,
"page": 1,
"total": 1,
"data": [
{
"id": 6001,
"userId": 1001,
"teamId": 2001,
"ipVersion": "IPv4",
"protocol": "SOCKS5",
"host": "198.51.100.24",
"port": 1080,
"username": "proxy-user",
"password": "proxy-password",
"provider": "http://ip-api.com/json",
"activeTime": "2026-06-01 12:30:00",
"activeIp": "198.51.100.24",
"state": 1,
"remark": null,
"expireTime": "2026-07-15 10:00:00",
"createdAt": "2026-06-01 12:30:00",
"updatedAt": "2026-06-01 12:30:00",
"country": "United States",
"region": "California",
"countryCode": "US",
"city": "Los Angeles",
"timezone": "America/Los_Angeles",
"source": "BUY",
"sourceId": 7001,
"userEmail": "[email protected]",
"bindScreen": null
}
]
}
}
POST/proxy/create

Create proxy

Creates one proxy or a set of proxies; when items is not passed, the entire request body is treated as a single proxy entry.

AuthBearer API Key

Request parameters

FieldTypeRequiredDescription
itemsobject[]OptionalProxy collection; when omitted, the entire request body is treated as a single proxy entry
ipVersionstringOptionalIP version: IPv4, IPv6
protocolstringRequiredProtocol: SOCKS5, HTTP, HTTPS
hoststringRequiredProxy host, IP or domain name
portnumberRequiredProxy port
usernamestringOptionalProxy authentication username
passwordstringOptionalProxy authentication password
remarkstringOptionalRemark

Notes

  • teamId and userId are written by the server from the signed-in account; passed values are ignored.
  • When creating a single proxy, a unique-key conflict returns a business error; in batch creation, duplicates are skipped.

Response fields

FieldTypeDescription
dataobject[]Saved proxy entries
data[].idnumberProxy ID; the newly generated primary key when created
data[].userIdnumberOwner user ID, written by the server
data[].teamIdnumberOwner team ID, written by the server
data[].ipVersionstringIP version
data[].protocolstringProtocol
data[].hoststringProxy host
data[].portnumberProxy port
data[].usernamestringProxy authentication username
data[].passwordstringProxy authentication password, echoed as sent in the request
data[].statenumberState, 0 if not checked

Response example

{
"code": 0,
"msg": "成功",
"data": [
{
"id": 6002,
"userId": 1001,
"teamId": 2001,
"ipVersion": "IPv4",
"protocol": "SOCKS5",
"host": "198.51.100.24",
"port": 1080,
"username": "proxy-user",
"password": "proxy-password",
"state": 0
}
]
}
POST/proxy/batch_create

Batch create proxies

Saves proxies in batch; each entry in items is a separate proxy.

AuthBearer API Key

Request parameters

FieldTypeRequiredDescription
itemsobject[]RequiredProxy collection; each entry has the same fields as /proxy/create
items[].protocolstringRequiredProtocol: SOCKS5, HTTP, HTTPS
items[].hoststringRequiredProxy host
items[].portnumberRequiredProxy port
items[].usernamestringOptionalProxy authentication username
items[].passwordstringOptionalProxy authentication password

Notes

  • The only difference from /proxy/create is that the request body itself is never treated as a single entry; an empty collection returns success directly.
  • Legacy alias: items can also be written as proxies or proxyList.

Response fields

FieldTypeDescription
dataobject[]Collection of saved proxy entries
data[].idnumberProxy ID
data[].teamIdnumberOwner team ID, written by the server
data[].protocolstringProtocol
data[].hoststringProxy host
data[].portnumberProxy port
data[].statenumberState, 0 if not checked

Response example

{
"code": 0,
"msg": "成功",
"data": [
{
"id": 6003,
"teamId": 2001,
"protocol": "SOCKS5",
"host": "198.51.100.24",
"port": 1080,
"state": 0
},
{
"id": 6004,
"teamId": 2001,
"protocol": "HTTP",
"host": "198.51.100.25",
"port": 8080,
"state": 0
}
]
}
POST/proxy/import

Import proxies

Parses and saves custom proxies using the same line format as the desktop client's "Batch import".

AuthBearer API Key

Request parameters

FieldTypeRequiredDescription
textstringOptionalMulti-line proxy text; provide either this or lines. Formats: protocol://user:pass@host:port {remark}, protocol://host:port:user:pass {remark}, user:pass@host:port, host:port:user:pass. Supported protocols are only HTTP, HTTPS, and SOCKS5; defaults to SOCKS5 when omitted. IPv6 hosts use [address]:port
linesstring[]OptionalArray of lines equivalent to text; provide either this or text

Notes

  • At least one of text or lines must be provided, and it must not be empty after trimming whitespace; otherwise a parameter error is returned.
  • When there are no importable lines, a business error is returned with per-line reasons in data.invalid.
  • The response may echo username/password; do not forward it to untrusted callers.

Response fields

FieldTypeDescription
data.itemsobject[]Successfully saved proxy entries, same fields as /proxy/create
data.importednumberNumber of entries written in this call
data.duplicateCountnumberNumber of lines skipped as duplicates
data.invalidobject[]Unrecognized lines
data.invalid[].errorstringFailure reason for this line

Response example

{
"code": 0,
"msg": "ok",
"data": {
"items": [
{
"id": 6005,
"protocol": "SOCKS5",
"host": "1.2.3.4",
"port": "1080",
"remark": "JP"
}
],
"imported": 1,
"duplicateCount": 0,
"invalid": []
}
}
POST/proxy/detect

Check proxy

Checks the proxy's exit IP and location on this machine, same as "Check" in the Proxy Center; supports a single saved proxy, an ad-hoc address, and batch checks.

AuthBearer API Key

Request parameters

FieldTypeRequiredDescription
proxyIdsstring[] | number[]OptionalSaved proxy IDs for a batch check, at most 50 per request, deduplicated automatically; passing this field selects batch mode
proxyIdstring | numberOptionalSingle saved proxy ID; required when host and port are not provided
hoststringOptionalProxy host for an ad-hoc check; when passed together with port, no saved proxy is read
portstring | numberOptionalProxy port for an ad-hoc check
protocolstringOptionalProtocol for an ad-hoc check: SOCKS5, HTTP, HTTPS
usernamestringOptionalProxy auth username for an ad-hoc check
passwordstringOptionalProxy auth password for an ad-hoc check

Notes

  • Checks run only on this machine (temporarily starting the same sing-box relay as the Proxy Center) and do not go through the server check API.
  • Checks of saved proxies write results back just like the Proxy Center: on success the exit info is written and state is set to 1; on failure state is set to -1. Ad-hoc address checks do not write any record.
  • When a single check fails, it returns code 1, msg is the failure reason in Chinese, and data includes id, status, and code; the raw probe error may contain proxy credentials and is not returned.
  • Batch checks run concurrently in groups of 5; when the request carries X-Nex-Request-Deadline (millisecond timestamp), batches are scheduled against that deadline, otherwise 30 seconds is assumed; when the deadline is not enough to run the next group, the remaining proxies go into unchecked.
  • An empty proxyIds returns "proxyIds is required", more than 50 returns "at most 50 proxyIds per request"; when both proxyId and host/port are missing, it returns "proxyId or host and port are required".
  • Legacy alias: proxyIds can also be written as ids, and proxyId as id.

Response fields

FieldTypeDescription
data.idstring | numberSingle check: proxy ID; omitted for an ad-hoc address without proxyId
data.protocolstringSingle check: proxy protocol
data.hoststringSingle check: proxy host
data.portstring | numberSingle check: proxy port
data.statusstringSingle check: always success on success
data.activeIpstringDetected exit IP; ip and query have the same value
data.countrystringExit country
data.countryCodestringExit country code
data.regionstringExit province/state
data.citystringExit city
data.timezonestringExit time zone identifier
data.msnumberCheck duration, in milliseconds
data.savedbooleanWhether the result was written back to the proxy record; not returned for ad-hoc checks
data.saveMessagestringReason the write-back failed
data.totalnumberBatch check: number of requested IDs after deduplication
data.successnumberBatch check: number of successful checks
data.failednumberBatch check: number of failed checks
data.notFoundstring[]Batch check: proxy IDs not found in the current team
data.uncheckedstring[]Batch check: proxy IDs not checked this time because the request deadline was insufficient; can be checked next time
data.rowsobject[]Batch check: per-proxy results; success rows have the same fields as a single check
data.rows[].statusstringsuccess on success; on failure, the probe status, e.g. fail
data.rows[].codestringError code of a failed row, e.g. DETECTION_FAILED
data.rows[].messagestringReason of a failed row, in Chinese

Response example

{
"code": 0,
"msg": "ok",
"data": {
"id": 6001,
"protocol": "SOCKS5",
"host": "198.51.100.24",
"port": 1080,
"status": "success",
"activeIp": "198.51.100.24",
"ip": "198.51.100.24",
"query": "198.51.100.24",
"country": "United States",
"countryCode": "US",
"region": "California",
"city": "Los Angeles",
"timezone": "America/Los_Angeles",
"ms": 820,
"saved": true
}
}
POST/proxy/modify

Update proxy

Forwards the request body as a single proxy item to the save command, updating by id.

AuthBearer API Key

Request parameters

FieldTypeRequiredDescription
idnumberRequiredProxy ID; missing or <1 is treated as create
protocolstringOptionalProtocol: SOCKS5, HTTP, HTTPS
hoststringOptionalProxy host
portnumberOptionalProxy port
usernamestringOptionalProxy authentication username
passwordstringOptionalProxy authentication password
remarkstringOptionalRemark
statenumberOptionalWhen 1, the server also refreshes activeTime

Notes

  • If the proxy does not belong to the current team, the item is silently skipped and the response is still success.
  • Legacy alias: id can also be written as proxyId.

Response fields

FieldTypeDescription
dataobject[]Saved proxy entries
data[].idnumberProxy ID
data[].teamIdnumberOwner team ID
data[].hoststringProxy host
data[].portnumberProxy port
data[].remarkstringRemark

Response example

{
"code": 0,
"msg": "成功",
"data": [
{
"id": 6001,
"teamId": 2001,
"host": "198.51.100.24",
"port": 1080,
"remark": "已更新"
}
]
}
POST/proxy/delete

Delete proxy

Soft-deletes proxies (state set to 2) and unbinds them from windows.

AuthBearer API Key

Request parameters

FieldTypeRequiredDescription
itemsnumber[]RequiredArray of proxy IDs

Notes

  • Non-positive integers are discarded; when the ID set is empty or the proxies do not belong to the current team, the backend returns success directly without deleting any data.
  • Legacy alias: items can also be written as proxyIds, proxyId, or ids; a single value is also accepted.

Response fields

FieldTypeDescription
datanullNo response data; success is indicated by code=0

Response example

{
"code": 0,
"msg": "成功",
"data": null
}