文档菜单

API错误

https://litport.net/api/v1下的每个端点(令牌、套餐和按流量计费)都以本页所述的JSON格式返回错误。代理连接本身的故障使用单独的数字代理错误码,公开的免费代理API不在本页涵盖范围内。

错误格式#

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Authentication failed.",
    "requestId": "req_example",
    "docsUrl": "https://litport.net/docs/api/errors"
  }
}

相同的请求ID会出现在X-Request-ID响应头中。请将其与HTTP状态码和错误码一起记入日志。切勿记录Authorization请求头。

带有等待时间的409还会添加nextChangeAt,即ISO-8601 UTC时间戳:这是令牌位置或新IP上的CHANGE_LIMIT。

状态码参考#

状态码 错误码 客户端操作
400 INVALID_REQUEST_BODY, INVALID_LIMIT, INVALID_CURSOR, INVALID_TYPE, INVALID_STATUS, INVALID_PACKAGE_ID, INVALID_TIME_RANGE, INVALID_GROUP_BY, INVALID_INCLUDE, INVALID_POOL, INVALID_LEVEL, INVALID_PARENT, GEO_NOT_ENABLED, GEO_LEVEL_UNSUPPORTED, INVALID_IP, IPV6_UNSUPPORTED, INVALID_LOCATION, INVALID_ROTATION 请修正请求。不要不加修改地重试。
401 UNAUTHORIZED 请使用Bearer方案提供有效的API密钥。响应不会透露密钥或用户是否存在。
404 TOKEN_NOT_FOUND, PACKAGE_NOT_FOUND 请检查ID和归属。响应不会泄露其他用户的令牌或套餐。
404 NOT_FOUND 请修正路由;该路由不存在。
405 METHOD_NOT_ALLOWED 请使用Allow响应头中列出的方法之一。
409 NOT_SUPPORTED, PACKAGE_INACTIVE, CONCURRENT_CHANGE, LOCATION_UNAVAILABLE, CHANGE_LIMIT, ALLOWED_IPS_LIMIT_REACHED 请参见下文相应的详细说明;CONCURRENT_CHANGE表示重试同一请求,CHANGE_LIMIT表示等到所报告的nextChangeAt。
413 INVALID_REQUEST_BODY 请求体超过4 KiB。请发送更小的请求体。
415 INVALID_CONTENT_TYPE 对带请求体的写入,请发送Content-Type: application/json。
429 RATE_LIMITED 请遵守Retry-After,并使用带随机抖动的退避。
503 SERVICE_UNAVAILABLE, TOKEN_DATA_INVALID, ALLOWED_IPS_UNAVAILABLE 请遵守Retry-After,使用有上限的退避重试,然后携带请求ID联系客服。

重试算法#

对429和503按Retry-After并加入随机抖动自动重试,但POST /tokens/{tokenId}/new-ip上的503除外(见下文)。限制重试次数,并让调用方能够看到重试的总预算。

此API中除new-ip外的所有写入都可以安全重复:409 CONCURRENT_CHANGE或不明确的响应(超时、响应丢失、503)可以直接再次发送,因为最后一次写入始终生效,而且其他任何写入在已经应用的情况下都是空操作。对于new-ip,结果不明确时,应先读取GET /tokens/{tokenId}/location,仅当nextChangeAt不晚于当前时间时才重试。在一周内盲目重复只会返回409 CHANGE_LIMIT。

错误码详情#

无效的请求体#

请求体无法解析为JSON,或未通过端点自身的结构检查时返回400(例如,PUT /tokens/{tokenId}/rotation要求恰好为{"intervalSec": <integer>})。请求体超过4 KiB时返回413。

无效的内容类型#

INVALID_CONTENT_TYPE表示发送带请求体的写入时没有带Content-Type: application/json。

无效的limit#

INVALID_LIMIT表示limit不是1到100(含)之间的整数。

无效的游标#

INVALID_CURSOR表示不透明游标格式错误、被修改过、无法通过验证,或是为其他端点签发的。请不带游标重新开始分页。

无效的类型#

INVALID_TYPE表示GET /tokens上的type不是unlimited或ppg。

无效的状态#

INVALID_STATUS表示GET /tokens上的status不是active、expired或disabled。

无效的套餐ID#

INVALID_PACKAGE_ID表示GET /tokens上的packageId筛选条件不是正整数。URL路径中的packageId永远不会返回400:未知或不属于当前用户的套餐ID返回404 PACKAGE_NOT_FOUND。

无效的时间范围#

INVALID_TIME_RANGE表示时间戳不是规范的UTC格式、from不早于to,或请求的时间跨度过大。

无效的分组方式#

INVALID_GROUP_BY表示groupBy不是hour、day或month。

无效的展开项#

INVALID_INCLUDE表示请求的展开项与令牌或分组不兼容;扣费明细需要PPG令牌和按小时的时间桶。

无效的代理池#

INVALID_POOL表示GET /pay-per-gb/geo上的pool缺失、为空,或包含的认证密钥无法对应到客户可选择的代理池。

无效的层级#

INVALID_LEVEL表示level不是该端点接受的值之一:令牌位置选项接受region/city,按流量计费的地理数据接受country/region/city。

无效的父级#

INVALID_PARENT表示缺少必需的上级地理信息:令牌的location/options?level=city需要region;GET /pay-per-gb/geo在level=region和level=city时都需要country。

未启用地理定位#

GEO_NOT_ENABLED表示所请求的代理池已关闭地理定位。

不支持的地理层级#

GEO_LEVEL_UNSUPPORTED表示所请求的代理池不支持所请求的level。请在按流量计费中查看该代理池的geoLevels。

无效的IP#

INVALID_IP表示提供的地址不是确切的公网IPv4字面地址。

不支持IPv6#

IPV6_UNSUPPORTED表示向套餐IP白名单写入发送了IPv6地址;请联系客服。

无效的位置#

INVALID_LOCATION表示所请求的州/省、城市或运营商不是此令牌可以使用的值,或country被设为"us"以外的值。

无效的轮换#

INVALID_ROTATION表示PUT /tokens/{tokenId}/rotation上的intervalSec不是该令牌所列options中的值。

未授权#

UNAUTHORIZED涵盖缺失、格式错误、未知、已轮换以及没有所属用户的密钥,且不会透露具体属于哪种情况。

未找到令牌#

TOKEN_NOT_FOUND涵盖任何令牌路由上缺失、不属于当前用户或无法解析的tokenId。所有情况下响应都相同,因此绝不会泄露其他用户的令牌。

未找到套餐#

PACKAGE_NOT_FOUND涵盖任何套餐路由(包括套餐的IP白名单)上缺失、不属于当前用户或无法解析的packageId。

未找到#

NOT_FOUND表示所请求的/api/v1路由不存在。

不允许的方法#

METHOD_NOT_ALLOWED表示已知端点收到了不受支持的方法。响应会在Allow中列出其支持的方法。

不支持#

NOT_SUPPORTED表示此令牌没有这项控制:其位置无法更改、其轮换间隔无法更改,或(new-ip)它不是静态数据中心或ISP代理。“多地点”令牌的轮换间隔始终返回NOT_SUPPORTED,因为它由代理所在的手机决定。

套餐未在使用中#

PACKAGE_INACTIVE表示令牌或套餐的付费周期当前未在使用中。

并发更改#

CONCURRENT_CHANGE表示对同一令牌或套餐的另一次写入恰好在同一时刻生效。请重试同一请求。

位置不可用#

LOCATION_UNAVAILABLE表示所请求的位置当前没有可用的IP或正常工作的设备。未发生任何更改。

更改次数限制#

CHANGE_LIMIT表示更改或更换的额度已用完:静态数据中心/ISP的新IP或位置更改每周一次,标准美国共享设备的位置更改每48小时一次。该错误会携带nextChangeAt和与之对应的Retry-After。

已达到IP白名单上限#

ALLOWED_IPS_LIMIT_REACHED表示套餐的IP白名单已达到其limit(1或50)。请联系客服提高上限。

触发速率限制#

RATE_LIMITED表示API密钥(对于IP白名单写入则是套餐)已用尽当前窗口的额度。请遵守Retry-After。

服务不可用#

SERVICE_UNAVAILABLE表示API所依赖的某项服务暂时不可用。请遵守Retry-After。

令牌数据无效#

TOKEN_DATA_INVALID表示令牌已保存的元数据暂时无法读取。请稍后重试,然后报告请求ID。

IP白名单不可用#

ALLOWED_IPS_UNAVAILABLE表示IP白名单的存储、配置或端口分配不可用,包括套餐暂时没有可分配的端口。

认证失败#

对于格式错误、未知、已轮换和没有所属用户的密钥,API有意返回相同的401响应格式。请在设置中创建或轮换API密钥。轮换会立即使之前有效的密钥失效。