API 文档与开发者接入
通过 Nuomi 后端使用已开放服务。标准项目和通用短信分别使用独立接口,并共享现有账户、订单、余额与账务规则。
基础信息
| API 基础地址 | https://ckkk.lol/api/v1 |
|---|---|
| 传输与内容 | 仅使用 HTTPS。JSON 请求发送 Content-Type: application/json;项目搜索使用 UTF-8 查询参数。 |
| 认证 | 请求头 Authorization: Bearer YOUR_NUOMI_API_KEY。不得把密钥放在 URL、网页前端或日志中。 |
| 密钥管理 | 登录后打开「API Key 管理」创建、轮换或撤销自己的密钥。完整密钥只在创建/轮换响应中显示一次;服务端只保存摘要。每个账户最多 5 个有效 Key。 |
| 账户隔离 | 每个 Key 绑定创建者账户。订单列表、短信查询与释放只作用于该账户自己的订单;使用其他账户订单号不会获得其订单数据。 |
| 货币 | 金额以整数分返回,货币代码为 CNY。所有售价由 Nuomi 服务端读取;请求体传价格会被拒绝。 |
| 时间 | 网站页面统一显示北京时间(UTC+8);API 时间字段使用 ISO 8601,并带有 +08:00 时区偏移。 |
当前项目搜索只返回指定关键词对应的上游结果及已发布本地匹配项目;上游不支持完整目录下载或分页时,不代表全部项目。通用短信没有只读服务目录接口,直接使用关键词取号,不提供伪造的项目列表。
统一响应与错误
成功响应使用 {"ok": true, "data": ...};失败响应使用 {"ok": false, "error": {"code": "...", "message": "..."}}。实际错误码由接口返回。
| HTTP | 常见错误码 | 含义与处理 |
|---|---|---|
| 400 | INVALID_PARAMETER、INVALID_FILTER、INVALID_KEYWORD、CLIENT_PRICE_REJECTED | 修正 JSON 类型、参数范围或筛选值后再提交。 |
| 401 | AUTHENTICATION_FAILED | 密钥无效、已撤销或账户不可用;重新核对密钥并检查账户状态。 |
| 402 | INSUFFICIENT_BALANCE | 可用余额不足。可用余额已扣除仍处于预留中的金额。 |
| 409 | PROJECT_NOT_AVAILABLE、ORDER_IN_PROGRESS、ORDER_RECONCILIATION_REQUIRED、ORDER_UNAVAILABLE | 项目未达到取号条件,或同一请求仍在处理。相同幂等键只对应原订单;另一笔独立任务可使用新的请求标识继续创建。 |
| 422 | SUPPLIER_REJECTED | 号码请求被明确拒绝,订单失败且未扣费;不要把它当成待核订单。 |
| 429 | RATE_LIMITED、MAX_ACTIVE_ORDERS、SUPPLIER_REJECTED | RATE_LIMITED 表示请求频率受限;MAX_ACTIVE_ORDERS 表示账户已有 100 笔未结束订单;SUPPLIER_REJECTED 表示号码请求被明确拒绝且未扣费。 |
| 502 | UPSTREAM_UNAVAILABLE、NUMBER_UNAVAILABLE、RELEASE_FAILED | 上游不可用、明确无号或释放失败。按响应中的订单信息核对;不要因网络重试而创建新订单。 |
| 503 | API_DISABLED、CATALOG_DISABLED、ORDER_STATE_UNKNOWN、SETTLEMENT_PENDING、RELEASE_PENDING | 功能未开放,或单笔订单结果暂未确认。Nuomi 后台会继续处理原订单;请保留原请求标识用于该订单幂等重放,其他独立任务可使用新的请求标识。 |
如果返回 HTTP 403,且响应头带有 Cloudflare Ray ID,这表示请求可能被安全边缘或接口服务拒绝。请记录北京时间(UTC+8)、状态码和 Ray ID,提供给 Nuomi 支持排查;这不等同于“无库存”。不要把 Key 或完整响应正文发给支持人员。
标准项目 API
项目代码由上游搜索返回;项目必须已在 Nuomi 核验、启用并对当前账户配置有效 CNY 售价才能取号。每个账户最多同时保留 100 笔未结束的标准或通用短信订单,单笔结果待处理不会阻止其他独立订单;每个业务类型仍执行每秒新请求限制和上游共享队列约束。生产数据库核验到项目 57118,名称为「新电途科技/新电途」,适用范围记录为中国大陆(代码 CN,依据为已观察分配记录,不代表上游承诺所有号码均来自该地区)。当前通用平台售价配置为 ¥1.00 CNY;用户价格覆盖或后台调整会改变实际响应,以下均以 API 实时返回为准。
搜索标准项目
GET /standard/projects?keyword={关键词} · 每账户每分钟最多 30 次。搜索是真实上游关键词查询并补充 Nuomi 已发布目录,不支持完整目录下载,也没有上游分页参数。已录入 Nuomi 的项目代码可精确本地匹配;上游接口不保证能按未同步项目代码搜索。
| 参数 | 类型 | 规则 |
|---|---|---|
keyword | 字符串,必填 | 2–80 个字符,可用项目名称、应用关键词或项目代码。按 URL 编码。 |
curl --get 'https://ckkk.lol/api/v1/standard/projects' \
--data-urlencode 'keyword=新电途' \
-H 'Authorization: Bearer YOUR_NUOMI_API_KEY'
import requests
response = requests.get(
"https://ckkk.lol/api/v1/standard/projects",
params={"keyword": "新电途"},
headers={"Authorization": "Bearer YOUR_NUOMI_API_KEY"},
timeout=15,
)
print(response.json())
const response = await fetch(
"https://ckkk.lol/api/v1/standard/projects?keyword=" + encodeURIComponent("新电途"),
{ headers: { Authorization: "Bearer YOUR_NUOMI_API_KEY" } }
);
const result = await response.json();
成功结构与当前服务一致。project_id 是上游项目代码;local_project_id 仅对已发布项目提供。只有 order_enabled: true 才可通过本 API 申请号码。
{
"ok": true,
"data": {
"currency_code": "CNY",
"currency_name": "RMB(人民币)",
"minor_unit": "fen",
"keyword": "新电途",
"projects": [{
"project_id": "57118",
"name": "新电途科技/新电途",
"country_code": "CN",
"upstream_confirmed": true,
"published": true,
"order_enabled": true,
"status": "order_open",
"price_minor": 100,
"price_currency_code": "CNY"
}],
"upstream_result_count": 1,
"upstream_status": "ok",
"upstream_pagination_supported": false,
"complete_directory_supported": false
}
}
这是响应字段摘录;实际搜索响应还会返回 match_source、available、status 和已发布项目的 local_project_id。项目数量及本地项目主键会随查询和数据库变化;上面显示的价格是当前平台默认配置的示例值,不应缓存为固定售价。取号时服务端会重新检查项目状态和当前账户价格。
获取号码
POST /standard/orders · 新请求每账户每秒最多 1 次。正文中的 project_id 必须是搜索返回的上游项目代码(例如 "57118"),不是本地数据库主键。request_key 是调用方生成的 20–100 位字母、数字、下划线或连字符标识;网络超时后必须用同一个值核对/重试原单,新的业务请求才生成新值。
| 字段 | 类型 | 说明 |
|---|---|---|
project_id | 字符串或整数,必填 | 已核验的上游数字项目代码。未启用、无适用范围记录、无有效 CNY 价格时拒绝取号。 |
request_key | 字符串,必填 | 客户端幂等标识;同一意图的网络重试保持不变。 |
filters | 对象,可选 | 仅支持 isp、Province、ascription、paragraph、exclude、phone。运营商代码限 1、5、9、14、16(按接口代码值传递);省份代码限 11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65;号码类型 1 或 2;号段使用 3–7 位数字、多个值以 | 分隔;指定号码为 5–20 位数字。 |
curl -X POST 'https://ckkk.lol/api/v1/standard/orders' \
-H 'Authorization: Bearer YOUR_NUOMI_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"project_id":"57118","request_key":"client-unique-request-000001","filters":{}}'
import requests
payload = {
"project_id": "57118",
"request_key": "client-unique-request-000001",
"filters": {},
}
response = requests.post(
"https://ckkk.lol/api/v1/standard/orders",
json=payload,
headers={"Authorization": "Bearer YOUR_NUOMI_API_KEY"},
timeout=30,
)
print(response.status_code, response.json())
const response = await fetch("https://ckkk.lol/api/v1/standard/orders", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_NUOMI_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
project_id: "57118",
request_key: "client-unique-request-000001",
filters: {}
})
});
const result = await response.json();
新单成功通常为 HTTP 201,幂等重放为 HTTP 200。标准项目取号成功后先预留 Nuomi 售价;等待短信不扣款,收到有效验证码后结算一次。明确失败释放预留;上游超时/结果未知时订单保留待核,切勿用新 request_key 再下一单。
查询订单、短信与释放
| 方法与路径 | 响应/副作用 |
|---|---|
GET /standard/orders | 每账户每分钟最多 60 次;返回当前 Key 所属账户最近 100 笔标准订单,无分页参数。 |
POST /standard/orders/{order_id}/sms | 每账户每分钟最多 30 次;查询该账户订单的短信并在收到有效验证码时结算一次,未到短信时返回当前订单状态。 |
POST /standard/orders/{order_id}/release | 每账户每分钟最多 10 次;请求释放该账户订单。未收码时释放预留;已结算订单不会因释放自动退款。 |
curl 'https://ckkk.lol/api/v1/standard/orders' \
-H 'Authorization: Bearer YOUR_NUOMI_API_KEY'
curl -X POST 'https://ckkk.lol/api/v1/standard/orders/ORDER_ID/sms' \
-H 'Authorization: Bearer YOUR_NUOMI_API_KEY'
curl -X POST 'https://ckkk.lol/api/v1/standard/orders/ORDER_ID/release' \
-H 'Authorization: Bearer YOUR_NUOMI_API_KEY'
固定单项目协议接入
现有 API 文档:固定项目协议
现有固定单项目协议对应接口根地址 https://ckkk.lol/api/v1。使用此协议时,将客户端地址设为该根地址,并使用 Nuomi 账号生成的 API Key。项目固定为新电途,协议项目码为 newdian,Nuomi 内部映射至已核验项目 57118;该协议不提供项目搜索。
| 方法与路径 | 用途及格式 |
|---|---|
GET /project | 固定项目及当前用户售价:data.project_id 为 newdian,含 name、price_cents。 |
GET /balance | data.balance_cents、reserved_cents、available_cents。 |
POST /number | JSON 正文只传可选筛选字段 isp、Province、ascription、paragraph、exclude、phone;必须提供 8–128 位 Idempotency-Key 请求头。新单 201,原请求重放 200。 |
GET /order?order_id=...、GET /orders?limit=50 | 读取当前用户新电途订单,单笔在 data.order,列表在 data.orders。 |
GET /sms?order_id=... | 短信字段直接位于 data:order_id、status、message、verification_code、charged、reserved。 |
POST /release | JSON 正文传 order_id;释放字段直接位于 data,包含 status、charged、reserved、billing_status、idempotent_replay。 |
新订单返回 HTTP 201,同一幂等键重放返回 HTTP 200;供应商明确拒绝返回 422/429 SUPPLIER_REJECTED,订单失败、预留释放且不扣费;结果不确定返回 503 ORDER_STATE_UNKNOWN 并保留原请求待核;上游已有待核订单时返回 409 ORDER_RECONCILIATION_REQUIRED,当前请求不会再次购买。收到 409 后应查询已有订单,不要自动重试或更换请求标识。该兼容入口复用 Nuomi 自己的余额预留、订单、价格和账务逻辑。请使用 Nuomi 为当前账号签发的 API Key;不同平台的 API Key 不能混用。
全项目 API 文档:动态项目协议
全项目协议的 Nuomi 接口根地址为 https://ckkk.lol/api/docc/v1,需要客户端支持动态项目搜索及显式传入项目 ID。它与固定单项目协议使用不同的请求字段、项目 ID 和订单命名空间。
| 方法与路径 | 用途 |
|---|---|
GET /docc/v1/balance | 查询余额、预留和可用余额。 |
GET /docc/v1/projects?keyword=... | 关键词查询项目;未核验、未启用或未配置 CNY 售价的结果不可取号。 |
POST /docc/v1/number | 创建订单;接受 project_id、号码筛选参数和 Idempotency-Key 请求头。新单 201,幂等重放 200。 |
GET /docc/v1/order?order_id=...、GET /docc/v1/orders?limit=... | 查询当前 API Key 所属账户的订单。 |
GET /docc/v1/sms?order_id=... | 短信字段直接位于 data;收到有效验证码时按 Nuomi 规则结算一次。 |
POST /docc/v1/release | JSON 正文传入 order_id;释放字段直接位于 data。 |
创建或订单对象提供 verification_code、reserved、billing_status 等字段;短信查询的核心字段直接位于 data。price_cents 是 Nuomi 为当前用户配置的 CNY 零售价分值,不是其他平台的价格。待核结果必须查询原订单,不能使用新键重发。
curl -X POST 'https://ckkk.lol/api/docc/v1/number' \\
-H 'Authorization: Bearer YOUR_NUOMI_API_KEY' \\
-H 'Idempotency-Key: client-unique-request-000001' \\
-H 'Content-Type: application/json' \\
-d '{"project_id":"57118","isp":"1"}'
通用短信 API
通用短信使用关键词直接获取号码,不传标准项目 ID。它使用 Nuomi 自己设置的 CNY 售价,并由现有通用短信订单服务处理。上游没有可安全读取的只读服务目录接口,因此本 API 不提供虚构的通用项目搜索列表。
关键词获取号码
POST /general-sms/orders · 新请求每账户每秒最多 1 次。request_key 格式与标准项目相同,同一请求重试不得更换。不得传价格字段。
| 字段 | 类型 | 说明 |
|---|---|---|
keyword | 字符串,必填 | 1–80 个字符的短信服务关键词,不是项目 ID。 |
request_key | 字符串,必填 | 20–100 位幂等标识。 |
phone | 字符串,可选 | 指定号码,6–20 位数字。 |
card_type | 字符串,可选 | 实卡、虚卡 或 全部;默认 全部。 |
filter_duplicates | 布尔,可选 | 是否过滤重复号码;默认 false。 |
curl -X POST 'https://ckkk.lol/api/v1/general-sms/orders' \
-H 'Authorization: Bearer YOUR_NUOMI_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"keyword":"Telegram","request_key":"client-unique-request-000002","card_type":"全部","filter_duplicates":false}'
import requests
payload = {
"keyword": "Telegram",
"request_key": "client-unique-request-000002",
"card_type": "全部",
"filter_duplicates": False,
}
response = requests.post(
"https://ckkk.lol/api/v1/general-sms/orders",
json=payload,
headers={"Authorization": "Bearer YOUR_NUOMI_API_KEY"},
timeout=30,
)
print(response.status_code, response.json())
const response = await fetch("https://ckkk.lol/api/v1/general-sms/orders", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_NUOMI_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
keyword: "Telegram",
request_key: "client-unique-request-000002",
card_type: "全部",
filter_duplicates: false
})
});
const result = await response.json();
通用短信在上游明确成功分配号码后,按订单创建时 Nuomi 的价格快照扣费一次;明确失败不扣费。超时和结果未知时保留原订单待核,不自动创建新单。查询短信不重复扣费;释放号码不重复扣费且不自动退款。
查询订单、短信与释放
| 方法与路径 | 响应/副作用 |
|---|---|
GET /general-sms/orders | 每账户每分钟最多 60 次;返回当前 Key 所属账户最近 100 笔通用短信订单。 |
POST /general-sms/orders/{order_id}/sms | 每账户每分钟最多 30 次;查询该账户订单的短信状态与内容,不创建新会话、不重复扣费。 |
POST /general-sms/orders/{order_id}/release | 每账户每分钟最多 10 次;请求释放该账户订单,不自动退款。 |
curl 'https://ckkk.lol/api/v1/general-sms/orders' \
-H 'Authorization: Bearer YOUR_NUOMI_API_KEY'
curl -X POST 'https://ckkk.lol/api/v1/general-sms/orders/ORDER_ID/sms' \
-H 'Authorization: Bearer YOUR_NUOMI_API_KEY'
curl -X POST 'https://ckkk.lol/api/v1/general-sms/orders/ORDER_ID/release' \
-H 'Authorization: Bearer YOUR_NUOMI_API_KEY'
账户余额与状态
GET /account/balance 每账户每分钟最多 60 次,返回当前 Key 所属账户余额、预留金额和可用余额,均为 CNY 分。余额查询只读业务数据。
{
"ok": true,
"data": {
"currency_code": "CNY",
"currency_name": "RMB(人民币)",
"minor_unit": "fen",
"balance_minor": 10000,
"reserved_minor": 100,
"available_minor": 9900
}
}
订单状态:requesting 请求中;unknown 结果待核;active 等待短信;received 已收到短信;releasing 释放中;release_unknown 释放结果待核;released 已释放;failed 取号失败。
查询和释放是 POST 请求,但只针对指定的已有订单。它们不会调用新的取号流程。订单列表只返回当前 API Key 所属账户的数据。
调用日志与排障
- 登录后在「API Key 管理」查看最近 50 条调用元数据:接口、时间、HTTP 状态、业务错误码和耗时。系统不会记录密钥、请求正文、验证码或完整响应。
- HTTP 429:根据返回的等待时间再提交;不要在客户端循环重试。
- HTTP 502/503:先用相同订单号查询原订单。若取号结果待核,重复取号必须使用相同
request_key,不得创建新标识掩盖未知结果。 - HTTP 403:记录北京时间(UTC+8)和 Cloudflare Ray ID,并通过 Nuomi 支持渠道排查;切勿发送 API Key。
- API Key 泄漏或不再使用时,立即在账户页面撤销或轮换。撤销后服务端会在下一次请求鉴权时拒绝该 Key。