在网页上体验注册
选择设备和出口,查看每个步骤的结果。验证码由你输入,账号始终由你控制。
从创建设备、绑定代理到验证码登录,在控制台逐步执行接口、查看实际结果;注册预览用于了解流程,完整注册可用性仍待验证。
先看案例,再调用接口,最后接入自己的业务。
选择设备和出口,查看每个步骤的结果。验证码由你输入,账号始终由你控制。
业务输入自动映射到 API 参数,附带 cURL 与 Python 示例,便于直接接入。
从账号鉴权到设备状态、代理绑定、错误处理,说明请求顺序与成功条件。
管理员审批,设置使用期限,首次登录自动绑定客户端。
获取 Token,创建档案并绑定代理。
使用设备编号统一请求托管 API。
POST /api/device/send
Authorization: Bearer <TOKEN>
{
"uniqueId": "<DEVICE_ID>",
"method": "GET",
"path": "/api/sns/v6/homefeed?num=20",
"bizParams": { "host": "https://rec.xiaohongshu.com" }
}支持 HTTPS 明文 JSON,也兼容 AES-GCM 封装;请先登录平台。
设备注册完成后,再为你的账号发送短信并登录。
正式版需要先登录平台;Token 不通过公开页面参数传递。
/device/create → /device/edit
cfg / onboarding / activate / tiny
/device/login/vfc-code
/device/login/code
正式运行时会显示设备状态、请求编号与每步耗时。
// 等待操作 // 仅在真实响应成功时显示相应成功状态
上线后采用脱敏运行记录:环境版本、测试日期、逐步响应、最终状态。历史记录与本次实时体验分别展示。
统一使用设备编号管理状态,调用者专注业务参数。
| 参数 | 类型 | 说明 |
|---|
示例使用占位符,未执行请求。完整契约与可下载 Python 示例见下方文档。
沿着调用顺序接入,明确每个状态的含义。
平台账号用于访问托管服务,小红书账号用于业务登录。两者独立。
在 /#apply 申请平台账号;申请信息、图形验证码及提交接口使用 https://a.ttjian.com/public/…。申请需管理员审批,设置账号有效期,首次成功调用登录接口时自动绑定客户端标识。
开发者平台和业务 API 的 Base URL 为 https://a.ttjian.com,不需要添加端口。示例中的账号是获批的平台账号,不是小红书账号。
先向 POST https://a.ttjian.com/api/auth/login 提交 username、password、machineCode,其中 machineCode 由调用程序自动生成并持久保存,首次密码验证成功后自动绑定,后续必须使用相同值;网页自动处理,不展示该值。登录接口无需 Bearer Token。
登录成功且业务 code=200 时,从 data.token 取出 Token。后续平台业务接口只需携带 Authorization: Bearer <TOKEN>,不需要重复传账号密码;设备编号和其他业务参数仍按各接口要求提交。
Token 当前默认有效期为 24 小时,账号有效期独立计算。账号到期或被禁用后,登录被拒绝,已有 Token 也不能继续访问;Token 自身到期后,在账号仍有效时重新登录获取。遇到业务 401,先核对账号、密码、机器码、Token 和账号期限;账号已到期需联系管理员续期。
安装 requests 后运行以下 Python 示例,输入获批的账号密码,客户端标识自动生成。示例自动获取 Token 并查询设备列表,不触发短信或小红书注册。返回 HTTP 200 时仍需检查 JSON 中的业务 code。
# Python 3; first install: python -m pip install requests
import getpass
import requests
BASE_URL = "https://a.ttjian.com"
username = input("Platform username: ").strip()
password = getpass.getpass("Platform password: ")
from pathlib import Path
import uuid
client_file = Path.home() / ".xhs-platform-client-id"
if not client_file.exists():
client_file.write_text(str(uuid.uuid4()), encoding="utf-8")
machine_code = client_file.read_text(encoding="utf-8").strip()
def read_result(response):
response.raise_for_status()
result = response.json()
if result.get("code") != 200:
raise RuntimeError(f"{result.get('code')}: {result.get('msg')}")
return result["data"]
# Login uses username/password/machineCode; no Bearer token required.
login = read_result(requests.post(
BASE_URL + "/api/auth/login",
json={"username": username, "password": password,
"machineCode": machine_code}, timeout=30))
token = login["token"]
# Subsequent API calls use only the Bearer token for platform authentication.
# This read-only call lists your devices; it does not send SMS or register users.
devices = read_result(requests.get(
BASE_URL + "/api/device/list",
headers={"Authorization": "Bearer " + token}, timeout=30))
print(devices)
当前平台支持 HTTPS 下的明文 JSON 请求,也兼容原 Java 客户端的 AES-GCM 请求封装。请在自己的后端保存平台密码与 Token,避免放到公开网页代码、公开日志或仓库中。
客户端 ↔ 平台 API:HTTPS、Bearer Token;支持明文 JSON 或兼容的 AES-GCM 请求封装。服务端 ↔ 业务接口:使用设备绑定的代理与设备签名状态。
| 状态 | 含义 |
|---|---|
| CREATED | 本地设备档案已创建。 |
| ACTIVATED | 游客激活完成,完整注册步骤仍可能未通过。 |
| REGISTERED | 要求的 cfg、onboarding 与 tiny 步骤均返回成功。 |
| LOGGED_IN | 账号登录成功并完成会话检查。 |
| LOGOUT | 已清除当前登录凭据。 |
读取 registrationSteps 查看未完成的具体步骤。前端停在对应步骤,显示实际状态,不改写成成功。正式版会提供可展开的脱敏响应。
代理绑定到设备,注册、发码、登录与代发复用同一出口。清空 proxy 可切回直连。
| 输入区号 | 默认线路 |
|---|---|
| 86 / +86 | edith.xiaohongshu.com |
| 其他区号 | edith.rnote.com |
按区号选择 API 域名与使用国内/海外代理是两个不同设置。当前默认没有“国内失败自动重发海外”的逻辑。
公开案例中仅显示代理地区与是否配置,隐藏 IP、用户名和密码。
平台接口统一返回 {code, msg, data}。先检查业务 code,再读取 data;不能只凭 HTTP 200 判断成功。
| code | 处理 |
|---|---|
| 200 | 检查设备状态或目标 httpCode/body。 |
| 400 | 检查参数、目标地址或代理格式。 |
| 401 | 检查平台登录、机器码或账号有效期。 |
| 404 | 设备不存在或不属于当前账号。 |
| 501 | 当前尚未实现的登录方式。 |
| 502 | 上游失败;展示阶段,避免自动重复发码。 |
正式案例保留请求编号、阶段、HTTP 状态和业务状态,脱敏 Token、手机号、设备凭据与代理信息。
上线后的案例以已验证的功能为准,显示测试环境和日期。未验证能力不显示“真实可用”标签。
按功能查找接口,查看来源、接入方式与验证状态。
只复制结构,不执行请求。未核对的参数不会生成伪造的可运行示例。
这些功能保留在规划中,拿到完整抓包与参数验证后再加入可调用列表。
平台账号用于调用我们的 API,不是小红书账号。有效期从管理员批准时起计算,申请不代表已经开通。
审批、续期或账号问题,请联系向你提供本平台的管理员。目前未配置公开客服联系方式。