令牌API
所有代理令牌:列表、读取和用量。位置可更改的不限流量令牌还支持位置、轮换,以及按需获取新IP。
列表与读取#
GET /api/v1/tokens
Authorization: Bearer lit_...
| 参数 | 类型 | 规则 |
|---|---|---|
limit |
integer | 整数1-100;默认50。 |
cursor |
string | 上一页的page |
type |
string | unlimited或ppg。 |
status |
string | active、expired或d |
packageId |
integer | 账户所拥有套餐的公开数字ID。未 |
结果按最新优先排序。持续请求返回的page.nextCursor,直到它为null。
GET /api/v1/tokens/{tokenId}
Authorization: Bearer lit_...
返回一个令牌,其结构与GET /tokens列表元素完全相同,包括其username和password。未知、不属于您或无法解析的tokenId会返回404 TOKEN_NOT_FOUND;响应绝不会透露其他用户的令牌。
示例#
一个不限流量数据中心令牌,所属套餐带有IP白名单,令牌本身的位置可更改:
{
"id": 12345,
"type": "unlimited",
"status": "active",
"label": "Production crawler",
"createdAt": "2026-08-01T10:15:00.000Z",
"expiresAt": "2026-12-01T00:00:00.000Z",
"ingress": {
"hub": "us-11",
"protocol": "http",
"mode": "assigned",
"host": "hub-us-11-1.litport.net",
"port": 31337,
"status": "available"
},
"packageId": 45,
"ipAuth": { "host": "hub-us-11-1.litport.net", "port": 31338 },
"location": { "country": "us", "region": "new-york", "city": "new-york-city" },
"rotation": { "intervalSec": 600, "options": [600, 1800, 3600], "changeable": true },
"username": "proxy-username",
"password": "proxy-password"
}
锁定为一个代理池的按流量计费令牌:
{
"id": 12399,
"type": "ppg",
"status": "active",
"label": "Residential crawler",
"createdAt": "2026-08-01T10:15:00.000Z",
"expiresAt": null,
"ingress": {
"hub": "example-hub",
"protocol": "http",
"mode": "request-selected",
"supportedProtocols": ["http", "https", "socks5"]
},
"poolSelection": {
"mode": "fixed",
"pool": { "authKey": "residential-main", "name": "Residential Main" }
},
"packageId": null,
"ipAuth": null,
"username": "proxy-username",
"password": "proxy-password"
}
本文档中的示例标识符和节点均为示意。
字段含义#
type为ppg或unlimited。status是令牌自身的生命周期:被明确停用时为disabled,否则在到期时间已过时为expired,否则为active。它绝不会是hub-unavailable;该值属于下文的ingress.status。
对于PPG令牌,ingress.mode为request-selected:没有单一的主机或端口,因为节点、协议和代理池是按每次请求或导出选择的。ingress.hub和ingress.protocol是控制台和导出的偏好设置,ingress.supportedProtocols列出可选项。主机取自代理池的hubs,端口取自其httpPort/socks5Port,见按流量计费。
对于不限流量令牌,ingress.mode为assigned:令牌只对应一个端点,始终以ingress.host和ingress.port给出。ingress.status为available或hub-unavailable。hub-unavailable表示令牌指定的节点已停止服务:此时ingress.host和ingress.port为null,在客服将令牌迁移到当前节点之前,凭证无法使用。
当令牌属于您拥有的套餐时,packageId是公开的数字套餐ID,否则为null;用套餐读取该套餐。ipAuth是{host, port},即令牌的免密码端点,如果令牌当前没有,则为null。它只接受来自该套餐IP白名单的连接。
location只出现在位置可更改的令牌上;哪些令牌符合条件,见位置。其结构取决于类型:数据中心或ISP令牌报告{country, region, city};移动令牌报告{country, city, carrier}。
rotation是{intervalSec, options, changeable},出现在每个按计时器轮换的令牌上。见轮换。
rotateUrl是独享设备的“立即更换IP”链接,仅在令牌可以使用它时出现。它与旁边的密码一样需要保密。
username和password是该令牌的代理凭证。与ingress或控制台中显示的端点配合使用。
用量#
读取一个自有令牌中客户可见的流量。
GET /api/v1/tokens/{tokenId}/usage
Authorization: Bearer lit_...
查询参数#
| 参数 | 规则 |
|---|---|
from |
含该时刻的规范UTC ISO-8601时间戳。 |
to |
不含该时刻的规范UTC ISO-8601时间戳;必须晚于from。 |
groupBy |
hour、day或month;默认为day。 |
include |
以逗号分隔的domains和/或charges。charges要求groupBy=hour。 |
省略时间范围时,API使用当前UTC日之前的30个完整UTC日。按小时的范围上限为31天,按天的范围上限为366天,按月的范围上限为36个月。
示例#
curl --get 'https://litport.net/api/v1/tokens/12345/usage' \
-H "Authorization: Bearer $LITPORT_API_KEY" \
--data-urlencode 'from=2026-08-01T00:00:00Z' \
--data-urlencode 'to=2026-08-03T00:00:00Z' \
--data-urlencode 'groupBy=day'
{
"data": {
"tokenId": 12345,
"range": {
"from": "2026-08-01T00:00:00.000Z",
"to": "2026-08-03T00:00:00.000Z",
"groupBy": "day",
"timezone": "UTC"
},
"trafficBasis": "customer_chargeable",
"summary": {
"requests": 42,
"uploadedBytes": "12000",
"downloadedBytes": "88000",
"totalBytes": "100000",
"cache": {
"hits": 12,
"misses": 4,
"bypasses": 2,
"hitRate": 0.75,
"freeUploadedBytes": "0",
"freeDownloadedBytes": "24000",
"freeTotalBytes": "24000",
"savedCostUnits": "0.0324"
}
},
"buckets": [
{
"start": "2026-08-01T00:00:00.000Z",
"end": "2026-08-02T00:00:00.000Z",
"requests": 42,
"uploadedBytes": "12000",
"downloadedBytes": "88000",
"totalBytes": "100000",
"cache": {
"hits": 12,
"misses": 4,
"bypasses": 2,
"hitRate": 0.75,
"freeUploadedBytes": "0",
"freeDownloadedBytes": "24000",
"freeTotalBytes": "24000",
"savedCostUnits": "0.0324"
}
}
]
}
}
用量语义#
区间是半开的:[from, to)。时间桶按开始时间排序且是稀疏的;缺少某个时间桶表示没有已存储的聚合行,而不是API错误。
对于PPG令牌,trafficBasis为customer_chargeable,因此流量总计与向客户显示的流量一致。对于固定价格/不限流量令牌,它为observed;这些既有的流量总计仍以观测到的传输量为基准。较大的字节总数以十进制字符串给出,以便客户端保留精确值。requests是JSON整数。
缓存收益#
每个时间桶和汇总都包含cache。hits、misses和bypasses是JSON整数;hitRate为hits / (hits + misses),在没有命中也没有未命中时为0。freeUploadedBytes、freeDownloadedBytes和freeTotalBytes是非负的十进制字符串,其中freeTotalBytes等于两个方向的值相加。没有缓存遥测数据的历史时段,这些字段报告为零。
仅对PPG令牌,cache.savedCostUnits是一个非负的十进制字符串,表示按流量产生时的有效价格计算、经审计的已避免费用。不限流量令牌会刻意省略该字段,而不是设为0或null,因为没有避免任何按GB计费的客户费用。
令牌必须属于已认证的用户。未知或不属于您的令牌返回相同的404 TOKEN_NOT_FOUND响应。
费用明细#
对于PPG令牌,请求include=charges&groupBy=hour,可在每个小时时间桶中加入已持久化的费用记录。不限流量令牌会拒绝该扩展。带版本的费用记录包含代理池的公开标识和名称、原始及计费的上传/下载字节数、参与的节点和协议、快照的基础/有效费率和折扣,以及实际扣除的确切金额。没有快照的行标记为Legacy PPG usage;API不会根据当前令牌设置来猜测其代理池或费率。
费用明细即计费记录。上传和下载都计费。reserved状态的费用可能会随该小时的延迟流量到达而增加;finished状态的费用是最终的。
域名明细#
请求include=domains,可在data中加入domainBreakdown:
{
"domainBreakdown": {
"limit": 150,
"totalDestinationCount": 151,
"displayedCount": 150,
"truncated": true,
"range": {
"from": "2026-08-01T00:00:00.000Z",
"to": "2026-08-03T00:00:00.000Z",
"timezone": "UTC",
"periodClamped": false,
"endClamped": false
},
"items": [{
"protocol": "tcp",
"destination": "example.com",
"port": 443,
"requests": 42,
"uploadedBytes": "12000",
"downloadedBytes": "88000",
"totalBytes": "100000",
"lastSeenAt": "2026-08-01T12:00:00.000Z",
"firstSeenAt": "2026-08-01T00:00:00.000Z"
}],
"other": {
"protocol": null,
"destination": "Other",
"port": null,
"requests": 1,
"uploadedBytes": "1",
"downloadedBytes": "2",
"totalBytes": "3",
"lastSeenAt": null,
"firstSeenAt": null
}
}
}
响应最多包含总流量最高的150个目标地址。其余所有目标地址和遥测溢出都合并到other中;发生这种合并时,truncated会予以报告。TCP的requests是成功请求数,UDP的requests是入站数据报。域名数据按整小时UTC时间桶存储,且仅限所请求区间中最近的31天。返回的UTCrange是实际生效的时间桶区间:过去的不完整起点向下取整到所在小时,过去的不完整终点向上取整到下一个小时。被限制为当前时间的终点仍保持为该确切时间,因此响应不会声称覆盖了当前时间之后。区间被调整时,还会报告periodClamped或endClamped。
位置#
数据中心或ISP令牌,以及城市或运营商可更改的移动令牌,会报告location字段并支持此API。哪些令牌符合条件,以及更改的行为如下:
| 令牌 | 更改方式 | 等待时间 |
|---|---|---|
| 数据中心/ISP,动态 | 随时 | 无 |
| 数据中心/ISP,静态 | 所选位置的新IP | 每周一次 |
| 多地点移动代理(付费附加项) | 随时 | 无 |
| 标准美国共享设备 | 城市和运营商一起 | 每48小时一次 |
| 其他所有(PPG、独享设备、非美 |
不支持 | 无 |
GET /api/v1/tokens/{tokenId}/location
Authorization: Bearer lit_...
{
"data": {
"tokenId": 12345,
"kind": "datacenter",
"mode": "rotating",
"target": { "country": "us", "region": "new-york", "city": "new-york-city" },
"effective": {
"country": "us", "region": "new-york", "city": "new-york-city",
"labels": { "region": "New York", "city": "New York City" }
},
"status": "ready",
"canChangeNow": true,
"nextChangeAt": null
}
}
kind为datacenter、isp或mobile。mode为rotating或static。target是已保存的选择;数据中心/ISP的region/city可以是"any"。effective是令牌当前所持IP的实际位置,尚未知晓时为null。status在更改传播的短时间内为pending,传播完成后为ready,目标位置当前没有可用的IP或设备时为unavailable(令牌保留其最后一个,而不会丢失路由),令牌的套餐未在使用中时为package-inactive,而allowance-exhausted仅用于仍有流量上限的旧版“多地点”套餐。
列出可用位置#
GET /api/v1/tokens/{tokenId}/location/options?level=region
GET /api/v1/tokens/{tokenId}/location/options?level=city®ion=new-york
数据中心/ISP:level=region,然后是level=city®ion=…。移动令牌:level=city,然后是level=carrier&city=…。每个选项为{"value": …, "label": …},列表中只包含此令牌当前可用的选项。
更改位置#
数据中心/ISP:
curl -X PUT 'https://litport.net/api/v1/tokens/12345/location' \
-H "Authorization: Bearer $LITPORT_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"region": "new-york", "city": "new-york-city"}'
移动令牌:
curl -X PUT 'https://litport.net/api/v1/tokens/98765/location' \
-H "Authorization: Bearer $LITPORT_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"city": "seattle", "carrier": "verizon"}'
按该令牌类型发送对应的字段:数据中心/ISP为region和city;移动令牌为city和carrier。country可选,发送时必须为"us"。不需要也不处理前置条件请求头:最近一次提交的PUT成为令牌期望的目标,与当前已保存目标相同的PUT会成功,且不产生新的更改。
动态数据中心/ISP令牌会立即切换到匹配的IP。静态令牌会在所选位置获得新IP,并消耗其每周一次的额度;同一周内重复更改会返回409 CHANGE_LIMIT及nextChangeAt。多地点令牌立即切换,无需等待。标准美国共享设备令牌每48小时可更改一次;在此时间窗口内重复更改同样返回409 CHANGE_LIMIT。
对于任何移动令牌,城市始终保持不变:如果所选运营商在该城市没有可用的手机,代理会改用同一城市的另一家运营商,effective显示实际使用的运营商。
位置错误#
| 状态码 | 错误码 | 含义 |
|---|---|---|
400 |
INVALID |
请求体中的字段与此令牌的类型不符 |
400 |
INVALID |
不是受支持的美国位置或运营商,或"any"。 |
400 |
INVALID / INVALID |
选项列表:使用了此令牌不使用的level,或缺少region/city。 |
404 |
TOKEN |
tokenId未知、不属于您或格式错误。 |
409 |
NOT |
此令牌的位置无法更改。 |
409 |
PACKAGE |
令牌或其套餐未在使用中。 |
409 |
CHANGE_LIMIT |
处于每周或48小时的等待期内。错nextChangeAt和与之匹配的Retry-After。 |
409 |
LOCATION |
该处目前没有可用的IP或可用的手 |
409 |
CONCURRENT |
同一时刻对该令牌进行了另一项更改 |
轮换#
PUT /api/v1/tokens/{tokenId}/rotation
Authorization: Bearer lit_...
Content-Type: application/json
{"intervalSec": 600}
{
"data": { "tokenId": 12345, "intervalSec": 600, "options": [600, 1800, 3600], "changeable": true }
}
intervalSec必须是options之一,即令牌自身rotation字段所列出的值。动态数据中心/ISP令牌、标准美国共享设备令牌和美国独享设备的changeable为true。独享设备的options从5分钟起。“多地点”令牌始终报告其当前手机的间隔,且changeable: false,因为代理所在的手机自行设定计时器;对它的PUT也会返回409 NOT_SUPPORTED,其他任何不轮换的令牌也是如此。
轮换错误#
| 状态码 | 错误码 | 含义 |
|---|---|---|
400 |
INVALID |
请求体不是严格的{"interval。 |
400 |
INVALID |
intervalSec不在令牌的options中。 |
404 |
TOKEN |
tokenId未知、不属于您或格式错误。 |
409 |
NOT |
令牌不轮换,或其间隔由手机设定( |
409 |
PACKAGE |
令牌或其套餐未在使用中。 |
新IP#
POST /api/v1/tokens/{tokenId}/new-ip
Authorization: Bearer lit_...
仅限静态数据中心和ISP令牌。动态令牌每次轮换都会更换IP,没有单一的当前IP可供替换。该请求不带请求体:服务每次尝试(包括重试)都会重用令牌自己已保存的位置。返回与位置相同的结构,其中带有新的effective IP。
这是唯一一个不能盲目重复的写操作。如果响应丢失或超时,重试之前先读取GET /tokens/{tokenId}/location:nextChangeAt晚于当前时间,说明更改已生效。在这一周内再次发送POST不会得到第二个IP;它会返回409 CHANGE_LIMIT。
新IP错误#
| 状态码 | 错误码 | 含义 |
|---|---|---|
404 |
TOKEN |
tokenId未知、不属于您或格式错误。 |
409 |
NOT |
该令牌不是静态数据中心或ISP代 |
409 |
PACKAGE |
令牌或其套餐未在使用中。 |
409 |
CHANGE_LIMIT |
本周的更换额度已用完。错误会携带nextChangeAt和与之匹配的Retry-After。 |
409 |
LOCATION |
已保存的位置目前没有其他可用的I |
409 |
CONCURRENT |
同一时刻对该令牌进行了另一项更改 |