跳到正文

在 Galxe、Zealy 和 TaskOn 上验证 X(Twitter)任务

Galxe、Zealy 和 TaskOn 通过各自与 X 的连接来检查 X 任务,而且要花钱:Galxe 每确认一次关注或转发消耗 10 点额度,Zealy 则在每个 X 操作上另加 1 到 3 点领取额度。

  • 更新于
  • 发布于
  • 阅读约 12 分钟

简短回答: 想要更多次检查,或平台没有的任务(比如加入社群),每个平台都有一种 API 任务,会把参与者的 X 账号发到你的服务器,并等待 5 到 10 秒来获取是或否的回答。用 Sorsa API 来回答它:每个任务一次请求,每次检查 $0.0014 起,100 次免费请求可覆盖你的前 100 次检查。

接口
POST /check-follow
每个任务 1 次请求
价格
每次检查 $0.0014 起

#Galxe、Zealy 和 TaskOn 如何验证 X 任务

三个平台都通过参与者连接的 X 账号来检查 X 任务,而且各自以自己的方式限制这些检查:Galxe 用验证额度,Zealy 用付费套餐和领取额度,TaskOn 则只提供固定的任务类型。

任务上线之前,免费的 Twitter 关注关系检查可以双向查看一个账号是否关注了另一个,所以你可以手动测试自己的关注任务。下表对比了各平台自带的能力。

GalxeZealyTaskOn
原生 X 任务关注、转发、引用、带关键词发帖关注、发帖、回复、转发、点赞、引用、Space关注、转发、点赞、带话题标签或 @ 提及的引用、发帖
操作是否经过确认?只有开启 Authentic Verification 才会确认;默认点一下就算是,来自已连接的账号是,来自已连接的账号
X 检查的成本每次检查 10 点额度,需要 Rewards Hub 2 级或 Business+每个操作 1 到 3 点领取额度,仅限付费套餐包含在 Quest 套餐内
连接你自己服务器的方式REST 凭证API 任务Completion-Based API Task
  • 原生 X 任务

    Galxe
    关注、转发、引用、带关键词发帖
    Zealy
    关注、发帖、回复、转发、点赞、引用、Space
    TaskOn
    关注、转发、点赞、带话题标签或 @ 提及的引用、发帖
  • 操作是否经过确认?

    Galxe
    只有开启 Authentic Verification 才会确认;默认点一下就算
    Zealy
    是,来自已连接的账号
    TaskOn
    是,来自已连接的账号
  • X 检查的成本

    Galxe
    每次检查 10 点额度,需要 Rewards Hub 2 级或 Business+
    Zealy
    每个操作 1 到 3 点领取额度,仅限付费套餐
    TaskOn
    包含在 Quest 套餐内
  • 连接你自己服务器的方式

    Galxe
    REST 凭证
    Zealy
    API 任务
    TaskOn
    Completion-Based API Task

在 Galxe 上,X 任务默认是不经确认的。每个 X 凭证一开始都关闭了 Authentic Verification,使用的是“Page Visit”方式,它只记录参与者打开过链接,而不记录他们是否关注或转发过(见 Galxe: Create Quest, Tasks Settings(在新标签页打开))。开启 Authentic Verification 后,每次关注、转发或引用检查消耗 10 点额度:Rewards Hub 2 级有 1 万点,3 级 4 万点,4 级 8 万点,额度用完后 Galxe 就会关闭检查(见 Galxe: X Authentic Verification Credits(在新标签页打开))。点赞则根本无法开启验证。

Zealy 的 X 任务从参与者已连接的账号检查五种操作,而且除了每次领取本身要花的 1 点额度外,每种操作还要另加领取额度:关注、发帖、引用或回复加 1,转发加 2,点赞加 3(见 Zealy: Twitter task(在新标签页打开))。X 任务只在付费套餐里提供,年付每月 $149 起,超出套餐月度额度的部分,Standard 套餐每 1,000 点 $15(见 Zealy 价格(在新标签页打开))。

TaskOn 在 Quest 套餐里有七种 X 任务类型,每六个月结算一次,每月 $199。它没有回复检查或社群检查,而且它给参与者的帮助要求 X 检查失败的人等 15 分钟,并一次只验证一个任务。

#用 Sorsa API 在你自己的服务器上验证 X 任务

要在 Galxe、Zealy 或 TaskOn 上确认 X 任务而不消耗它们的额度,就把平台的自定义 API 任务指向你自己的一台小服务器,让它去问 Sorsa API,一款 Twitter(X)API 与爬虫:每个任务是一次请求,回答真或假,$0.0014 起,一个 API 密钥,所有套餐统一每秒 20 次请求。

登录仍由平台负责。Zealy 和 TaskOn 会让参与者先连接 X 账号再运行检查,所以你的服务器收到的用户名属于正在领取的那个人。你的服务器用各平台自己的格式回答,不让 Sorsa API 密钥暴露给平台,并运行平台缺少的检查,比如回复或加入社群。

Galxe REST 凭证 GET ?user=$socialId Zealy API 任务 POST accounts.twitter TaskOn API 任务 GET ?address=handle 你的验证服务器 每个平台一条路由 保管你的 API 密钥 同时执行检查 Sorsa API 每个任务一次请求 /check-follow /check-retweet /check-quoted /check-comment /check-community-member Galxe 收到 {"eligible": 1} 你的表达式返回 1 Zealy 收到 HTTP 200 或 400 400 显示你的提示 TaskOn 收到 {"isValid": true} 始终为 HTTP 200
一台服务器应对三个平台:每个任务一次 Sorsa API 请求,按各平台的格式回复一次。

五种任务对应五种 Sorsa API 检查,每种检查都根据响应里的一个字段判定通过。

任务Sorsa API 请求通过条件
关注一个账号POST /check-follow(在新标签页打开)follow 为 true
转发一条帖子POST /check-retweet(在新标签页打开)retweet 为 true
引用一条帖子POST /check-quoted(在新标签页打开)status 为 quoted
回复一条帖子GET /check-comment(在新标签页打开)commented 为 true
加入一个 X 社群POST /check-community-member(在新标签页打开)is_member 为 true

官方 X API 没有针对单个参与者作答的请求。它的做法是读取整份列表:你账号的粉丝每页 1,000 个,每个粉丝 $0.001;帖子的转发者每个账号 $0.010,转发者请求每 15 分钟限 75 次(见 X API 价格(在新标签页打开)、X API 速率限制(在新标签页打开))。列表读取塞不进 5 秒的回答时间里,所以这条路在服务器之外还需要同步任务、开发者账号和 OAuth。

#各个 API 任务会向你的服务器发送什么

各平台发送参与者信息的形式不同,读取的回答也不同,所以服务器需要为每个平台写一个小路由。

Galxe REST 凭证Zealy API 任务TaskOn Completion-Based API Task
请求向你的 URL 发 GET 或 POST带 JSON 请求体的 POST带 ?address= 的 GET
X 用户如何传来$socialId,放在你的 URL 里accounts.twitter.id 和 .username用户名,从不是数字 ID
你的密钥你添加的一个请求头X-Api-Key 请求头Authorization: Bearer
通过你的表达式返回 1HTTP 200{"result": {"isValid": true}}
失败你的表达式返回 0HTTP 400,附带 messageisValid: false,仍是 HTTP 200
时间限制5 秒10 秒10 秒,不重试
  • 请求

    Galxe REST 凭证
    向你的 URL 发 GET 或 POST
    Zealy API 任务
    带 JSON 请求体的 POST
    TaskOn Completion-Based API Task
    带 ?address= 的 GET
  • X 用户如何传来

    Galxe REST 凭证
    $socialId,放在你的 URL 里
    Zealy API 任务
    accounts.twitter.id 和 .username
    TaskOn Completion-Based API Task
    用户名,从不是数字 ID
  • 你的密钥

    Galxe REST 凭证
    你添加的一个请求头
    Zealy API 任务
    X-Api-Key 请求头
    TaskOn Completion-Based API Task
    Authorization: Bearer
  • 通过

    Galxe REST 凭证
    你的表达式返回 1
    Zealy API 任务
    HTTP 200
    TaskOn Completion-Based API Task
    {"result": {"isValid": true}}
  • 失败

    Galxe REST 凭证
    你的表达式返回 0
    Zealy API 任务
    HTTP 400,附带 message
    TaskOn Completion-Based API Task
    isValid: false,仍是 HTTP 200
  • 时间限制

    Galxe REST 凭证
    5 秒
    Zealy API 任务
    10 秒
    TaskOn Completion-Based API Task
    10 秒,不重试

Galxe 的文档没有说明 $socialId 里是 X 用户名还是数字 ID,所以下面的服务器两种都接受:纯数字作为 user_id 发给 Sorsa API,其他的作为 username。

#四步搭建验证服务器

下面的服务器用一个 Node.js 文件应对三个平台,每个平台一个路由,再加一个共用函数,在 Sorsa API 上并行运行一个任务活动的所有检查。

  1. 获取密钥。 注册并从控制台复制你的 API 密钥。前 100 次请求免费,无需绑卡。

  2. 试一次检查。 问问某位参与者是否关注了你的项目:username_1 是你的账号,username_2 是参与者。

    Terminal
    curl -X POST "https://api.sorsa.io/v3/check-follow" \
      -H "ApiKey: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"username_1": "tidewell_protocol",
           "username_2": "nova_quest_hunter"}'
    
    Response200 OK
    {
      "follow": true,
      "user_protected": false
    }
    
  3. 描述每个任务活动。 在 QUESTS 里,为每个活动写上名称和它的 X 任务:follow 填你的用户名,retweet、quote 和 reply 填帖子链接,community 填社群的 ID。

  4. 运行服务器。 保存文件,设置 SORSA_API_KEY 和一个足够长的随机 RELAY_SECRET,在 HTTPS 之后的 443 或 80 端口上用 node verify-server.mjs 启动它。

    Node.js
    // verify-server.mjs: Node.js 18+, after `npm install express`
    import express from "express";
    
    const SORSA = "https://api.sorsa.io/v3";
    const KEY = process.env.SORSA_API_KEY || "YOUR_API_KEY";
    const SECRET = process.env.RELAY_SECRET; // the same value on each platform
    
    // The X tasks each quest requires; the URL path names the quest
    const QUESTS = {
      "launch-week": {
        follow: "tidewell_protocol",
        retweet: "https://x.com/tidewell_protocol/status/2116180244581376001",
      },
    };
    
    async function sorsa(method, path, data) {
      const url = new URL(SORSA + path);
      const init = { method, headers: { ApiKey: KEY },
        signal: AbortSignal.timeout(4000) };
      if (method === "GET") {
        url.search = new URLSearchParams(data);
      } else {
        init.headers["Content-Type"] = "application/json";
        init.body = JSON.stringify(data);
      }
      const res = await fetch(url, init);
      if (!res.ok) throw new Error(`Sorsa API ${res.status}`);
      return res.json();
    }
    
    // One check per task type, each resolving to true or false
    const CHECKS = {
      follow: async (account, u) => (await sorsa("POST", "/check-follow", {
        username_1: account,
        ...(u.user_id ? { user_id_2: u.user_id } : { username_2: u.username }),
      })).follow,
      retweet: async (post, u) => (await sorsa("POST", "/check-retweet",
        { tweet_link: post, ...u })).retweet,
      quote: async (post, u) => (await sorsa("POST", "/check-quoted",
        { tweet_link: post, ...u })).status === "quoted",
      reply: async (post, u) => (await sorsa("GET", "/check-comment",
        { tweet_link: post, ...u })).commented,
      community: async (id, u) => (await sorsa("POST",
        "/check-community-member", { community_id: id, ...u })).is_member,
    };
    
    // The tasks still missing; throws when a check couldn't run
    async function missing(questId, x) {
      const quest = QUESTS[questId];
      if (!quest || !x) throw new Error("unknown quest or user");
      const u = /^\d+$/.test(x) ? { user_id: x }
        : { username: x.replace(/^@/, "") };
      const tasks = Object.entries(quest);
      const done = await Promise.all(tasks.map(([t, v]) => CHECKS[t](v, u)));
      return tasks.filter((_, i) => !done[i]).map(([t]) => t);
    }
    
    const app = express();
    app.use(express.json());
    
    // Galxe REST credential: GET /galxe/<quest>?user=$socialId
    const GALXE = {
      "Access-Control-Allow-Origin": "https://dashboard.galxe.com",
      "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
      "Access-Control-Allow-Headers": "Content-Type, X-Relay-Secret",
    };
    app.options("/galxe/:quest", (req, res) => res.set(GALXE).sendStatus(204));
    app.get("/galxe/:quest", async (req, res) => {
      res.set(GALXE);
      if (req.get("X-Relay-Secret") !== SECRET) return res.status(401).end();
      try {
        const left = await missing(req.params.quest, String(req.query.user));
        res.json({ eligible: left.length ? 0 : 1, missing: left });
      } catch {
        res.json({ eligible: 0, missing: ["not checked, try again"] });
      }
    });
    
    // Zealy API task: POST /zealy/<quest>, the secret arrives as X-Api-Key
    app.post("/zealy/:quest", async (req, res) => {
      if (req.get("X-Api-Key") !== SECRET) {
        return res.status(400).json({ message: "Invalid API key" });
      }
      const x = req.body.accounts?.twitter;
      try {
        const left = await missing(req.params.quest, x?.id || x?.username);
        if (!left.length) return res.json({ message: "X tasks verified" });
        res.status(400).json({ message: `Not done yet: ${left.join(", ")}` });
      } catch {
        res.status(400).json({ message: "Couldn't check now, retry in a minute" });
      }
    });
    
    // TaskOn Completion-Based API Task: GET /taskon/<quest>?address=<handle>
    app.get("/taskon/:quest", async (req, res) => {
      if (req.get("Authorization") !== `Bearer ${SECRET}`) {
        return res.status(401).json({ result: { isValid: false } });
      }
      let isValid = false;
      try {
        const left = await missing(req.params.quest, String(req.query.address));
        isValid = left.length === 0;
      } catch {} // TaskOn reads anything but HTTP 200 as a broken endpoint
      res.json({ result: { isValid } });
    });
    
    app.listen(process.env.PORT || 3000);
    

一个任务活动每次领取、每个任务花一次请求,而同一次领取的检查是同时运行的,所以五个任务的回答时间和一个任务差不多。每次对 Sorsa API 的调用 4 秒后就会终止,落在 Galxe 的 5 秒窗口之内。

服务器把两种回答区分开。检查返回 false,领取失败,并指出缺少哪个任务。来自 Sorsa API 的超时、429 或 403 则表示服务器没能完成检查,这时会请参与者再试一次,而不是告诉他们没做到:403 表示密钥缺失或请求次数用完,429 表示一秒内发出了超过 20 次请求。失败的请求从不收费。

须知

POST /check-retweet 每次请求会扫描一条帖子最新的 100 条转发。参与者刚转发完就点击验证,正好落在这个窗口里;而在有成千上万条转发的帖子上,几天前转发的人就不在了。请让参与者转发后立即验证,或者像 Twitter 验证 API 指南里展示的那样,在后台任务里跟随 next_cursor。

#用 REST 凭证连接 Galxe

在 Galxe 上,服务器以 REST 凭证的形式接入:参与者点击验证时,Galxe 调用你的 URL,对返回的 JSON 运行你的表达式,表达式返回 1 就把任务标记为完成。

  1. 打开凭证。 在任务活动的 Task Settings 里,选择 Import Your Own Data,然后选 REST、GET 方法和 Single Dimension。

  2. 选择 ID 类型。 选参与者的 X 账号,Galxe 就会把它填入 $socialId。

  3. 填写接口地址。 使用 https://verify.example.com/galxe/launch-week?user=$socialId,并添加请求头 X-Relay-Secret 填入你的密钥;Galxe 只向 Space 管理员显示请求头。

  4. 粘贴表达式。 它必须返回数字 1 或 0,不能是 true 或 false。

    Galxe expression
    function(resp) {
      return resp && resp.eligible === 1 ? 1 : 0;
    }
    
  5. 测试并保存。 发送一个完成了任务的账号和一个没完成的账号,检查两个回答。

Galxe 会取消任何超过 5 秒的请求,只接受 443 和 80 端口,并且在你保存凭证时发送 CORS 预检请求,服务器的 OPTIONS 路由会处理它。请求来自 Galxe 位于 35.185.209.0 和 35.203.155.18 的服务器,所以如果服务器前面有防火墙,要放行这两个地址(见 Galxe Docs: REST credential(在新标签页打开))。表达式本身是公开的,所以不要把密钥放在里面。

#用 API 任务连接 Zealy

在 Zealy 上,服务器成为一个 API 任务:Zealy 发送一个带有参与者 X ID 和用户名的 POST,返回 200 就完成领取,返回 400 则把你的消息显示给参与者。

  1. 添加任务。 在任务活动编辑器里,选择 Add task,再选 Api。

  2. 设置接口和密钥。 填入 https://verify.example.com/zealy/launch-week,并把你的密钥作为 API key;Zealy 会把它放在 X-Api-Key 请求头里发送。

  3. 选择用 Twitter 识别用户。 这样 Zealy 会在每个请求里带上 accounts.twitter.id 和 accounts.twitter.username。

  4. 保存。 Zealy 会先测试这个接口:它必须在 10 秒内回答,且只能返回 HTTP 200 或 400。

想看看 Zealy 会看到什么,可以自己用测试账号发同样的请求:

Terminal
curl -X POST "https://verify.example.com/zealy/launch-week" \
  -H "X-Api-Key: YOUR_RELAY_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"requestId": "test-1", "accounts": {"twitter":
       {"id": "1849021166738190336", "username": "nova_quest_hunter"}}}'
Response400 Bad Request
{
  "message": "Not done yet: retweet"
}

Zealy 会把这条消息连同这次领取的 requestId 一起显示给参与者,这样他们知道缺了哪个任务,你也能在日志里找到这次领取(见 Zealy: API task(在新标签页打开))。API 任务不属于 Zealy 的 X 任务,所以不会增加 X 额度:这样搭建的任务活动,每次领取只消耗 1 点基础领取额度,而原生的关注加转发要消耗 4 点。

#连接 TaskOn 的 Completion-Based API Task

在 TaskOn 上,服务器是一个 Completion-Based API Task:TaskOn 发送一个 GET,把参与者的 X 用户名放在 address 里,服务器始终以 HTTP 200 回答,把 isValid 设为 true 或 false。

  1. 添加任务。 在活动或任务里添加一个任务,打开 Custom API 标签页,选择 Completion-Based API Task。

  2. 设置 API URL。 点击 Set API URL,依次选择 Social Media Account 和 X handle,然后填入 https://verify.example.com/taskon/launch-week。

  3. 限定只允许 TaskOn 访问。 打开 Restrict API access exclusively to TaskOn,并把你的密钥填为 Bearer 令牌。

  4. 测试并确认。 输入一个完成了任务的账号和一个没完成的账号,分别点击 Verify,两个回答都正确后点击 Confirm。

TaskOn 每次点击只尝试一次,从不重试,并且把任何非 200 的状态码或缺少 result 都当作接口坏了(见 TaskOn: Completion-Based API Task(在新标签页打开))。这就是当 Sorsa API 无法连接时,服务器回答 isValid: false 的原因:参与者一分钟后再点一次验证,下一次检查会重新运行。

#每条路线上一次通过验证的领取成本

一次需要关注加转发的领取,在开启 Authentic Verification 的 Galxe 上消耗 20 点额度,在使用原生 X 任务的 Zealy 上消耗 4 点领取额度,在 API 任务后面用 Sorsa API 则是 2 次请求,$0.0028 起。

Galxe Authentic Verification 每次检查 10 点,所以一次关注 + 转发申领花费 20 2 级:1 万点 500 次申领 3 级:4 万点 2,000 次申领 4 级:8 万点 4,000 次申领 Zealy 申领点数 每次关注 + 转发申领 原生 X 任务 4 点 使用 API 任务 1 点 Standard 每月 1 万点: 原生可申领 2,500 次, 通过 API 任务可申领 1 万次 API 任务背后,Sorsa API 每个任务花 1 次请求: 每次关注 + 转发申领 2 次请求,$0.0028 起
原生 X 检查消耗各平台的额度;放在 API 任务后面,X 检查就变成了 Sorsa API 请求。

只有 Sorsa API 这条路线是随着你自己的套餐扩展,而不是受平台额度限制的,下表以一次关注加转发的领取为例:

路线一次关注加转发的领取消耗能支持多少
API 任务后面的 Sorsa API2 次请求,$0.0028 起你套餐的请求数能支持多少次领取就有多少次
Zealy,原生 X 任务4 点领取额度,按每 1,000 点 $15 折合 $0.06Standard 每月 1 万点额度可支持 2,500 次领取
Zealy,使用 API 任务1 点领取额度加 2 次请求同样的 1 万点额度可支持 1 万次领取
Galxe,Authentic Verification20 点 X 验证额度2 级 500 次领取,4 级 4,000 次
API 任务后面的官方 X API列表读取:你的每个粉丝 $0.001,每个转发者 $0.010需要开发者账号、OAuth 和同步任务
  • API 任务后面的 Sorsa API

    一次关注加转发的领取消耗
    2 次请求,$0.0028 起
    能支持多少
    你套餐的请求数能支持多少次领取就有多少次
  • Zealy,原生 X 任务

    一次关注加转发的领取消耗
    4 点领取额度,按每 1,000 点 $15 折合 $0.06
    能支持多少
    Standard 每月 1 万点额度可支持 2,500 次领取
  • Zealy,使用 API 任务

    一次关注加转发的领取消耗
    1 点领取额度加 2 次请求
    能支持多少
    同样的 1 万点额度可支持 1 万次领取
  • Galxe,Authentic Verification

    一次关注加转发的领取消耗
    20 点 X 验证额度
    能支持多少
    2 级 500 次领取,4 级 4,000 次
  • API 任务后面的官方 X API

    一次关注加转发的领取消耗
    列表读取:你的每个粉丝 $0.001,每个转发者 $0.010
    能支持多少
    需要开发者账号、OAuth 和同步任务
每月领取次数
任务中的 X 任务
API 任务背后的 Sorsa API
$39.80
20K 次请求/月,按 Pro 套餐每 1,000 次 $1.99
Zealy 原生 X 任务
$450
另加 30K 领取额度,每 1,000 个 $15
Galxe Authentic Verification
200K 额度
超过 Level 4 的 80K:仅限 Business+

每个任务每次领取一次请求,每次转发在发出后不久就核验。

选择每月领取次数和 X 任务;三个合计金额会随之变化。

Sorsa API 按请求计费,而不是按参与者,失败的请求从不收费。每 1,000 次请求的费率从 Starter 的 $4.90 到最大套餐的 $1.40 不等。

#把机器人和取关者挡在奖励名单之外

通过验证的任务只能证明某一次操作,不能证明是一个真人,所以在发放奖励之前还应该再做三项检查:账号年龄、公开账号,以及关注关系仍然存在。

  • 账号年龄和规模。 GET /info(在新标签页打开) 一次请求就返回参与者的 created_at、followers_count 和 tweets_count,所以服务器可以拒绝注册不满 30 天或没有任何帖子的账号。Galxe 自带年龄和粉丝数限制;在 Zealy 和 TaskOn 上,这些要由你的服务器来做。
  • 公开账号。 当参与者的账号是私密的,关注、转发和引用检查会返回 user_protected: true,而外部检查看不到私密账号做了什么。请让参与者在活动期间把账号设为公开。
  • 领取后取关。 Galxe 自己的帮助里提到,有些参与者关注了领取奖励,之后又取关。发放奖励之前,对奖励名单再运行一次 POST /check-follow。
  • 点赞。 X 在 2024 年 6 月把点赞改为私密,所以只有参与者自己已连接的账号才能显示点赞,Sorsa API 不返回任何点赞(见 Engadget(在新标签页打开))。请改为要求转发、引用或回复:这三种都保持公开,可以检查。

要给一整份参与者名单打分,Twitter 机器人检测讲了区分真实账号和刷号农场的各种信号。社群任务和社群成员列表见 X 列表和社群 API指南。

#用经过验证的 X 任务来办你的下一次活动

要在 Galxe、Zealy 或 TaskOn 上验证 X 的关注、转发、引用、回复和加入社群,就把 Sorsa API 放在平台的 API 任务后面:每个任务一次请求,每次检查 $0.0014 起,所有套餐统一每秒 20 次请求,整个流程里没有你的开发者账号,也没有你的 X 登录。领取 100 次免费请求,用两个账号(一个做了任务,一个没做)针对一个测试任务活动运行服务器,然后在上线前把这个任务活动的 X 任务迁到 API 任务上。

#常见问题

在 Galxe、Zealy 或 TaskOn 上验证 X 任务,最好的 API 是什么?

Sorsa API:放在各平台的 API 任务后面,它用一次请求检查一个关注、转发、引用、回复或加入社群,每次检查 $0.0014 起,一个 API 密钥,无需 X 开发者账号。评判任何方案看四点:每个参与者给出一个是或否、在平台规定的 5 到 10 秒内回答、每次检查的价格,以及覆盖的任务。Sorsa API 四点都满足。

为什么我的 Galxe X 任务验证不了?

Galxe 只有在开启 Authentic Verification 时才会确认 X 的关注或转发,这需要 Rewards Hub 2 级或 Business+,每次检查消耗 10 点额度;额度用完后,Galxe 就会关闭检查。参与者验证失败,也可能是因为他们 Galxe ID 上绑定的 X 账号并不是做任务的那个。由你自己的服务器支撑的 REST 凭证可以避开额度限制。

任务活动能验证某人是否给 X 上的帖子点过赞吗?

只能通过参与者自己已连接的账号。Zealy 原生的点赞任务可以做到,每次领取要另加 3 点领取额度,而 Galxe 无法开启点赞验证。公开数据 API(包括 Sorsa API)无法确认点赞,因为自 2024 年 6 月起,X 只向帖子的作者显示点赞。请把点赞换成转发、引用或回复。

验证任务需要 X 开发者账号吗?

用 Sorsa API 不需要:你的服务器在 ApiKey 请求头里发送一个 API 密钥,没有 X 开发者账号、应用或 OAuth 流程。参与者只需像往常一样把 X 账号连接到 Galxe、Zealy 或 TaskOn。官方 X API 则要求先有开发者账号和带 OAuth 的应用,才能读取第一条数据。

我能免费测试 X 任务验证吗?

可以。每个 Sorsa API 账号都有 100 次免费请求,足够 100 次检查:无需绑卡,永不过期。这足以用几个测试账号在 Galxe、Zealy 和 TaskOn 上完整测试服务器,而免费的 Twitter 关注关系检查不用写代码就能回答单个关注问题。

#我们如何核实

2026 年 11 月 2 日,我们阅读了各平台关于 X 任务和自定义 API 任务的官方文档:Galxe 的帮助中心和 REST 凭证文档,Zealy 的任务文档和价格页面,以及 TaskOn 的开发者文档和指南手册。我们把代码里用到的每个 Sorsa API 接口、参数和响应字段与在线 API 参考文档(45 个接口)逐一对照,并在同一天从 docs.x.com 取得官方 X API 的价格和速率限制。请求和响应使用的是演示账号,额度和成本数字是我们根据已公布的费率自己算出来的。

Sorsa API 团队撰写。 我们开发和运营 Sorsa API,这是只读的 Twitter/X API 与爬虫,2022 年起运行于生产环境(前身为 TweetScout API),累计处理请求超 60 亿次。 关于 Sorsa API

更新内容
  • 首次发布。