Skip to content

经销商 API

面向已审核经销商的程序化接口:查询产品目录、余额下单、获取代理凭据、监控流量消耗 —— 全部通过简单的 REST API 完成。

把完整 API 文档(Markdown)复制到剪贴板,粘贴给 ChatGPT / Claude 帮你接入

速览

  • Base URL:https://hellworld.io/openapi/v1
  • 鉴权:Authorization: Bearer <key_id>.<key_secret>
  • 格式:JSON over HTTPS
  • 计费:预付账户余额(USD)
  • 限流:按经销商计 —— 读 300 次/分、写(下单)60 次/分;最多 5 个活跃 Key。

概览

经销商 API 仅对已审核的经销商账户开放。您的客户经理会为账户开通具体产品并配置经销商价格,只有对您开通的产品才会出现在 API 中。

典型集成流程:

  1. GET /products — 查看已开通产品与单价
  2. POST /orders — 下单,从预付余额扣款
  3. GET /orders/{order_ref} — 确认订单状态
  4. GET /proxies — 获取代理凭据与实时流量消耗
  5. 按下方各产品的网关格式拼接代理串

当前可用产品(首批):

product_code产品类别计费
MOBILE-ETET Mobile移动按 GB
RES-GEOFASTGeofast住宅按 GB

如需更多产品,联系客户经理开通。

鉴权

经销商门户(控制台 → 经销商门户 → API Keys)创建 API Key。Key 由两部分组成:

  • Key IDdk_live_ 开头,可安全记录到日志
  • Key Secret仅创建时展示一次,请妥善保存

每个请求都要带上两者,用点号连接:

Authorization: Bearer dk_live_AbCdEf1234567890.YOUR_KEY_SECRET
bash
curl -s https://hellworld.io/openapi/v1/products \
  -H "Authorization: Bearer dk_live_AbCdEf1234567890.YOUR_KEY_SECRET"

常见坑

  • Header 值 = Bearer + 一个空格 + key_id.key_secret,第一个点号分隔 ID 与 Secret。
  • 写操作还需要 Content-Type: application/jsonIdempotency-Key 头(见幂等章节)。
  • 限流按经销商(所有 Key 共享):读 300 次/分、写(下单)60 次/分;收到 429 RATE_LIMITED 请按响应头 Retry-After 退避。最多可持有 5 个活跃 Key
  • Key 可随时在门户吊销并重建,吊销即时生效。

鉴权错误:

HTTPcode含义
401AUTH_MISSING_KEY缺少 Authorization
401AUTH_INVALID_KEYKey 格式错误、不存在或 Secret 不匹配
401AUTH_KEY_REVOKEDKey 已吊销
401AUTH_KEY_EXPIREDKey 已过期
403DEALER_SUSPENDED经销商账户被停用 — 联系客户经理
429RATE_LIMITED超过经销商级限流(读 300/分、写 60/分);见 Retry-After

所有错误统一信封:

json
{ "error": { "code": "INSUFFICIENT_BALANCE", "message": "Account balance is insufficient for this order" } }

产品

GET /products

返回对您开通的产品及您的单价。

bash
curl -s https://hellworld.io/openapi/v1/products \
  -H "Authorization: Bearer $KEY"
json
{
  "data": [
    { "product_code": "MOBILE-ET", "display_name": "ET Mobile", "category": "mobile", "billing_unit": "gb", "unit_price": 2.50, "currency": "USD" },
    { "product_code": "RES-GEOFAST", "display_name": "Geofast", "category": "residential", "billing_unit": "gb", "unit_price": 0.30, "currency": "USD" }
  ]
}

unit_price 为您的协议价(按 billing_unit 计)。若某产品无 unit_price,下单时按平台默认价成交。

余额

GET /balance

bash
curl -s https://hellworld.io/openapi/v1/balance -H "Authorization: Bearer $KEY"
json
{ "balance": 152.40, "currency": "USD" }

充值:登录 hellworld.io 用常规余额充值(PayPal / 加密货币等),或与客户经理线下打款入账 —— 都进入 API 扣款的同一余额。

订单

POST /orders

从预付余额下单。必须带 Idempotency-Key —— 1–64 个 ASCII 字符,仅允许英文字母、数字以及 ._:-(不允许空格;UUID 正好符合);超长或含其它字符返回 422 IDEMPOTENCY_KEY_INVALID

bash
curl -s -X POST https://hellworld.io/openapi/v1/orders \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7c9e6679-7425-40de-963d-1a4a6e4c1b2f" \
  -d '{ "product_code": "RES-GEOFAST", "quantity": 10 }'
字段类型必填含义
product_codestringGET /products
quantitynumberbilling_unit 计的数量(GB),须 > 0

成功 — 200:

json
{ "order_ref": "a1b2c3d4e5f6...", "state": "active", "total_amount": 3.00, "currency": "USD" }

流量会累加到该产品的代理凭据上(见代理与消耗);同产品重复购买是对同一凭据充值。

已受理 — 202(人工审核):

json
{ "order_ref": "a1b2c3d4e5f6...", "state": "manual_review", "message": "Order was recorded but pending manual verification; do not retry this request" }

202 = 已扣款,切勿重试

202 manual_review 表示余额已扣、订单已记录,只是自动履约需人工确认。换新 Idempotency-Key 重试会产生(并扣款)第二笔订单。请轮询 GET /orders/{order_ref} 直到状态变为 completed

错误:

HTTPcode含义
400IDEMPOTENCY_KEY_REQUIREDIdempotency-Key
422IDEMPOTENCY_KEY_INVALIDKey 不是 1–64 个 A-Za-z0-9._:- 字符
402INSUFFICIENT_BALANCE余额不足,先充值
404PRODUCT_NOT_FOUND无此可购产品(编码未知,或未对您开通)
422NO_DEALER_PRICE已在白名单但未设批发价 —— 请联系运营
409 / 422IDEMPOTENCY_KEY_CONFLICT幂等
422VALIDATION_ERRORproduct_code/quantity 缺失或非法
422ORDER_REJECTED下单被拒
500ORDER_STATE_UNKNOWN结果未核实 — 切勿换新 Key 重试;轮询 GET /orders 或联系支持
403SANDBOX_KEY_DISABLED沙箱 Key 暂不可用 — 请创建正式 Key

幂等

每个 POST /orders 都必须带 Idempotency-Key,语义:

场景结果
同 Key 同 Body,此前已处理完原样重放当时的响应(不会重复扣款)
同 Key 同 Body,仍在处理中409 IDEMPOTENCY_KEY_CONFLICT — 稍后原样重发即可取到结果
同 Key 不同 Body422 IDEMPOTENCY_KEY_CONFLICT — 一个 Key 只能对应一份请求体
该 Key 终结为校验类失败(VALIDATION_ERROR/PRODUCT_NOT_FOUND/INSUFFICIENT_BALANCE 等)重放该错误;这类已证无副作用 — 可换新 Key重试
该 Key 终结为 ORDER_STATE_UNKNOWN结果无法核实。绝不换新 Key 重试(可能重复扣款)— 轮询 GET /orders 或持该 Key 联系支持

建议每次下单生成新 UUID 并与本地订单记录一起持久化。Key 须匹配 [A-Za-z0-9._:-]{1,64} —— 上限 64 字符,不允许空格。

GET /orders

分页订单历史(新单在前)。

bash
curl -s "https://hellworld.io/openapi/v1/orders?pageNum=1&pageSize=20" -H "Authorization: Bearer $KEY"
json
{
  "data": [
    {
      "order_ref": "a1b2c3d4e5f6...", "order_no": "CZ20260825...", "state": "completed",
      "total_amount": 3.00, "currency": "USD", "created_at": "2026-08-25 10:12:03",
      "products": [ { "product_code": "RES-GEOFAST", "display_name": "Geofast", "quantity": 10 } ]
    }
  ],
  "pagination": { "page": 1, "page_size": 20, "total": 42 }
}

pageSize 上限 100。

GET /orders/

单个订单查询 —— 202 manual_review 后用它轮询结局。响应与列表条目同形。查无(或不属于您的账户)返回 404 ORDER_NOT_FOUND

订单状态:

state含义
pending已建单未支付
completed已支付,履约完成(流量已入账)
manual_review已扣款,待人工确认 — 轮询至 completed
failed支付失败,未扣款
disputed争议中
refunded已退款
unknown其它内部状态

代理与消耗

GET /proxies

您的代理凭据与实时流量消耗 —— 每个已购买的开通产品一条。

bash
curl -s https://hellworld.io/openapi/v1/proxies -H "Authorization: Bearer $KEY"
json
{
  "data": [
    {
      "product_code": "RES-GEOFAST", "display_name": "Geofast", "billing_unit": "gb",
      "username": "hw_ab12cd34", "password": "s3cr3tPass",
      "traffic": { "limit_gb": 50.0, "used_gb": 12.345, "remaining_gb": 37.655 },
      "status": "active", "expires_at": null
    }
  ],
  "usage_refresh_seconds": 60
}
字段含义
username / password该产品代理网关的账密(拼法见下)
traffic.limit_gb历史累计购买 GB(充值累加)
traffic.used_gb已消耗 GB
traffic.remaining_gblimit - used,下限 0
statusactivesuspended(如流量用尽)
expires_atGB 存量类产品为 null(不过期)

消耗新鲜度

每账户最多 60 秒刷新一次消耗;窗口内返回上次的值。轮询频率高于每分钟一次不会拿到更新的数据 —— 建议最多每分钟一次。

同产品再次购买(POST /orders)是给同一凭据加 limit_gb,不会产生新用户名。

代理串格式

GET /proxies 返回的 username / password 拼代理串;国家定向与粘性会话编码在用户名里。

ET Mobile(MOBILE-ET)

网关etmobile.hellworld.io
端口5000
协议HTTP / HTTPS

轮换(每请求换 IP):

etmobile.hellworld.io:5000:USERNAME-country-us:PASSWORD

粘性会话(TTL 内保持同 IP):

etmobile.hellworld.io:5000:USERNAME-country-us-sid-a1b2c3d4-ttl-10m:PASSWORD
  • -country-<cc> — 可选,2 位国家码小写(省略=全球随机)
  • -sid-<id> — 任意 8 位字母数字会话 ID;同 sid = 同 IP
  • -ttl-<N>m — 会话时长(分钟)

Geofast(RES-GEOFAST)

网关geofast.hellworld.io
HTTP/HTTPS 端口6969
SOCKS5 端口9696

轮换:

geofast.hellworld.io:6969:USERNAME-country-US:PASSWORD

粘性会话(约 10 分钟,同 session = 同 IP):

geofast.hellworld.io:6969:USERNAME-country-US-session-a1b2c3d4e5:PASSWORD
  • -country-<CC> — 可选,2 位国家码大写(省略=全球随机)
  • -session-<id> — 任意 10 位字母数字会话 ID

SOCKS5 用端口 9696,用户名语法相同。

自定义网关域名(白标)

默认情况下,你的客户连接上面的公共网关域名(etmobile.hellworld.iogeofast.hellworld.io)。如果你希望客户走你自己的品牌域名,只需加一条 CNAME 指向我们的网关即可——不用改代码,也不影响速度。

配置

针对你用到的每个网关,各加一条 CNAME,指向我们的网关主机名:

你的记录类型目标
mproxy.yourbrand.comCNAMEetmobile.hellworld.io
proxy.yourbrand.comCNAMEgeofast.hellworld.io

客户照旧连接,只把主机名换成你的域名——端口与用户名语法完全不变:

proxy.yourbrand.com:6969:USERNAME-country-US-session-a1b2c3d4e5:PASSWORD

规则

  • 务必把 CNAME 指向我们的 *.hellworld.io 网关主机名(如 geofast.hellworld.io),不要指向某个固定 IP。我们可能随时调整网关背后的 IP;由于你的记录指向的是我们的主机名,这些变化会自动生效,你无需任何操作。若把记录写死到固定 IP,IP 变更时你会断。
  • 必须 DNS-only——前面不要套 CDN/代理层(如 Cloudflare 橙云)。代理端口是裸 TCP,套一层 CDN 会直接断连。请保持灰云 / 仅 DNS。
  • 端口保持不变(ET Mobile 5000,Geofast HTTP 6969 / SOCKS5 9696)。
  • 凭据仍由本 API 下发——自定义域名只是换个主机名的品牌皮;username / password 始终来自 GET /proxies

会影响速度吗?

不会。自定义域名只是纯 DNS 别名——代理流量依然直连网关 IP,既不经过我们的服务器,也不经过这个额外的域名。多出来的一跳 CNAME 只影响首次 DNS 解析(几毫秒,之后走缓存);实际代理延迟和吞吐与用公共域名完全一致。

Webhook

API 订单创建后主动推送通知,免轮询。在经销商门户(Webhook 区)配置回调 URL,并获得签名密钥。

事件 order.created —— API 订单记录后发送(activemanual_review):

json
{
  "event_type": "order.created", "event_id": "…", "dealer_uuid": "…",
  "created_at": "2026-08-25T10:12:03Z",
  "data": { "order_ref": "a1b2c3d4e5f6...", "state": "active", "total_amount": 3.00, "currency": "USD" }
}

签名 —— 每次投递带:

X-Dealer-Signature: sha256=<hex>

<hex> = HMAC-SHA256(webhook_secret, 原始请求体)。验证示例(Node):

js
const crypto = require('crypto');
function verify(rawBody, header, secret) {
    const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
    return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(header));
}

投递与重试:您的端点须在数秒内返回 2xx;失败按指数退避重试(30s、60s、120s…封顶 1h),最多 12 次后放弃。门户的 Test webhook 按钮可发 webhook.test 事件验证端点。

TIP

Webhook 是尽力而为的推送。订单结局(尤其 manual_review 的转变)以轮询 GET /orders/{order_ref} 为准。

错误码总表

HTTPcode出现于含义
400IDEMPOTENCY_KEY_REQUIREDPOST /orders缺幂等键头
422IDEMPOTENCY_KEY_INVALIDPOST /ordersKey 不是 1–64 个 A-Za-z0-9._:- 字符
401AUTH_MISSING_KEY全部缺 Authorization
401AUTH_INVALID_KEY全部Key 非法/不存在/Secret 错
401AUTH_KEY_REVOKED全部Key 已吊销
401AUTH_KEY_EXPIRED全部Key 已过期
402INSUFFICIENT_BALANCEPOST /orders余额不足
403DEALER_SUSPENDED全部账户停用
404PRODUCT_NOT_FOUNDPOST /orders无此可购产品
422NO_DEALER_PRICEPOST /orders已在白名单但未设批发价
404PRODUCT_NOT_FOUNDPOST /orders未知产品码
404ORDER_NOT_FOUNDGET /orders/无此订单
409IDEMPOTENCY_KEY_CONFLICTPOST /orders同 Key 处理中 — 稍后重发
422IDEMPOTENCY_KEY_CONFLICTPOST /orders同 Key 异 Body
422VALIDATION_ERRORPOST /orders参数非法
422ORDER_REJECTEDPOST /orders下单被拒
429RATE_LIMITED全部超限流
500INTERNAL_ERROR任意服务器错误
500ORDER_STATE_UNKNOWNPOST /orders结果未核实 — 绝不换新 Key 重试;轮询 GET /orders
403SANDBOX_KEY_DISABLED全部沙箱上线前 sandbox Key 全接口禁用

FAQ


如何成为经销商 / 开通产品?

经销商账户由我方团队开通:注册经销商档案、开产品白名单、配置协议价。请联系支持或客户经理。


如何付款?

API 消费预付余额。线上:登录 hellworld.io 走余额充值(PayPal、加密货币等);线下:与客户经理约定打款后人工入账。两种方式都进入 API 扣款的同一余额。


下单成功但 GET /proxies 看不到?

GET /proxies 只列(a)对您开通且(b)至少购买过一次的产品。首单后凭据开通可能需要片刻 —— 先确认 GET /orders/{order_ref}completed 再重试。


每笔订单都会生成新代理账号吗?

不会。同产品的购买累加到同一凭据 —— limit_gb 增长,用户名不变。


used_gb 有多实时?

每账户最多 60 秒刷新一次消耗(响应里的 usage_refresh_seconds)。轮询最多每分钟一次。


收到 202 manual_review,扣款了吗?

扣了。订单已记录、余额已扣,只是履约需我方人工确认。不要换新 Idempotency-Key 重试(那会是第二笔独立订单),请轮询 GET /orders/{order_ref}


有沙箱吗?

暂无 —— 沙箱 Key 目前全接口拒绝(403 SANDBOX_KEY_DISABLED)。Mock 沙箱在计划中。


能开通更多产品吗?

可以 —— 目录内任何产品都可按账户开通,联系客户经理。

一站式代理平台 — 住宅、移动、ISP & 无限流量代理。