GeekNums开发者文档

产品

产品以数字 ID 标识。本接口与网页控制台同源(同一个后端 service),返回的价格与限制即控制台所用。下表实时拉取,请以接口为准,不要硬编码本页快照。

GET/api/open/v1/products可用产品、单价、数量范围与国家要求

响应与网页控制台的产品配置接口同源(同一个后端 service),故这里看到的 ID、价格、数量范围、国家要求,与你在控制台下单时看到的完全一致。

字段说明

字段类型说明
idinteger对外产品 ID,创建任务时作为 type 传入。一经发布永不复用、永不改指向
unit_pricenumberUSD / 每一条(不是每千条)。计费 = 有效条数 × 本值
min_numbersinteger单个任务的最小条数,按归一去重、国家过滤后的有效条数判定,不足即拒绝
max_numbersinteger单个任务的最大条数。超出请自行拆分为多个任务
visiblebooleanfalse = 未对你的账号开放,传入会被拒。请按本字段过滤,不要硬编码可用 ID 列表
country_requiredbooleantrue = 创建任务必须传 country;false(邮箱 / 用户名类)传了会被忽略
allowed_countriesstring[]国家白名单(ISO-2 大写)。非空 = 只接受名单内的国家;空数组 = 不限(转而看 blocked_countries)
blocked_countriesstring[]国家黑名单(ISO-2 大写)。非空 = 除名单内之外都接受;空数组 = 不限。与 allowed_countries 互斥,两者不会同时非空
result_columnsobject[]该产品结果文件的列,顺序即 CSV 列序;每项为 { name, facet }
result_columns[].namestring列名,即结果 CSV 的表头(phone、activated、gender…)
result_columns[].facetboolean该列是否可用作结果下载的筛选条件(对应 active_day / sex 等参数)
price_display_unitinteger控制台按「每 N 条」展示报价所用的 N,纯展示口径,不参与任何计算(顶层字段,不在 products 内)

国家限制怎么读

两个名单互斥,永远不会同时非空——后端在服务启动时就会拒绝这种配置。所以判断逻辑很简单:

allowed_countries 非空只接受名单内的国家,其余一律拒绝
blocked_countries 非空除名单内的国家外都接受
两个都是空数组不限国家

名单内容来自该产品当前所用上游通道的技术能力,换供应商就会变,请每次读接口,不要缓存或硬编码。country_required 为 false 的产品(邮箱 / 用户名类)不看这两个字段。

响应结构

{
  "products": [
    {
      "id": 19,
      "unit_price": 0.0025,          // USD/条(注意:每一条的单价,不是每千条)
      "min_numbers": 1000,
      "max_numbers": 10000000,
      "visible": true,
      "country_required": true,
      "allowed_countries": ["US", "CA"],   // 空数组 = 不限
      "blocked_countries": [],
      "result_columns": [ { "name": "phone", "facet": false } ]
    }
  ],
  "price_display_unit": 1000         // 控制台按"每 N 条"展示价格,仅影响展示
}

关于产品名称

接口只返回产品 ID,不返回名称——名称是各语言的展示文案,随界面语言变化,不属于接口契约。请以 ID 作为程序中的唯一标识;需要人读的名称时,在你自己的系统里维护一份 ID → 名称的映射。

查看你账号的产品

仅保存在你的浏览器本地,不会上传到任何服务器。

填入 API Key 后即可加载你账号可用的产品与价格。