Galxe・Zealy・TaskOn で X(Twitter)タスクを確認する
Galxe、Zealy、TaskOn は、それぞれ独自の X 連携で X タスクを確認しますが、費用がかかります。Galxe はフォローやリツイートの確認1件につき10クレジット、Zealy は X の操作1件ごとにクレームクレジットを1〜3追加します。
結論: 確認の回数を増やしたい場合や、コミュニティ参加のようにプラットフォームにないタスクが必要な場合、各プラットフォームの API タスクを使います。参加者の X アカウントを自社のサーバーに送り、5〜10秒待って、はい/いいえの答えを受け取るしくみです。その答えを Sorsa API で返します。タスク1件につき1リクエスト、1チェック$0.0014からで、100回分の無料リクエストで最初の100チェックをカバーできます。
- エンドポイント
POST /check-follow- タスク1件につき1リクエスト
- 料金
- 1チェックあたり$0.0014から
#Galxe、Zealy、TaskOn の X タスク確認のしくみ
3つのプラットフォームはいずれも、参加者が連携した X アカウントを通じて X タスクを確認しますが、確認の回数を制限する方法はそれぞれ違います。Galxe は確認用クレジット、Zealy は有料プランとクレームクレジット、TaskOn は固定のタスク種別です。
クエストを公開する前に、無料の 相互フォロー確認ツールを使うと、一方のアカウントが他方をフォローしているかを双方向で確認できます。自分で作ったフォロータスクを、手動でテストできます。次の表は、各プラットフォームが単独で行う内容の比較です。
| Galxe | Zealy | TaskOn | |
|---|---|---|---|
| 標準の X タスク | フォロー、リツイート、引用、キーワード付き投稿 | フォロー、投稿、リプライ、リツイート、いいね、引用、スペース | フォロー、リツイート、いいね、ハッシュタグやタグ付きの引用、投稿 |
| 操作は確認されるか | Authentic Verification がオンの場合のみ。既定ではクリックだけで通る | 確認される(連携アカウントから) | 確認される(連携アカウントから) |
| X の確認にかかる費用 | 1チェック10クレジット。Rewards Hub レベル2または Business+ から | 操作1件あたりクレームクレジット1〜3。有料プランのみ | Quest プランに含まれる |
| 自社サーバー向けの経路 | REST credential | API task | Completion-Based API Task |
標準の X タスク
- Galxe
- フォロー、リツイート、引用、キーワード付き投稿
- Zealy
- フォロー、投稿、リプライ、リツイート、いいね、引用、スペース
- TaskOn
- フォロー、リツイート、いいね、ハッシュタグやタグ付きの引用、投稿
操作は確認されるか
- Galxe
- Authentic Verification がオンの場合のみ。既定ではクリックだけで通る
- Zealy
- 確認される(連携アカウントから)
- TaskOn
- 確認される(連携アカウントから)
X の確認にかかる費用
- Galxe
- 1チェック10クレジット。Rewards Hub レベル2または Business+ から
- Zealy
- 操作1件あたりクレームクレジット1〜3。有料プランのみ
- TaskOn
- Quest プランに含まれる
自社サーバー向けの経路
- Galxe
- REST credential
- Zealy
- API task
- TaskOn
- Completion-Based API Task
Galxe では、X タスクは既定では確認されません。X の credential はすべて、Authentic Verification がオフの状態で始まり、「Page Visit」方式を使います。この方式が記録するのは、参加者がリンクを開いたことであり、フォローやリポストをしたことではありません(Galxe: Create Quest, Tasks Settings(新しいタブで開きます))。Authentic Verification をオンにすると、フォロー、リツイート、引用のチェックごとに10クレジットを消費します。Rewards Hub のレベル2には10K、レベル3には40K、レベル4には80Kのクレジットが付与され、使い切ると Galxe がチェックをオフにします(Galxe: X Authentic Verification Credits(新しいタブで開きます))。いいねは、確認の対象として有効にすることができません。
Zealy の X タスクは、参加者が連携したアカウントから5つの操作を確認します。1回のクレームに必要な1クレジットに、操作ごとのクレームクレジットが加算されます。フォロー、投稿、引用、リプライは1、リツイートは2、いいねは3です(Zealy: Twitter task(新しいタブで開きます))。X タスクは有料プランでのみ利用でき、年払いで月額$149から。プランの月間枠を超えたクレジットは、Standard で1,000あたり$15です(Zealy の料金(新しいタブで開きます))。
TaskOn には、Quest プラン(6か月ごとの支払いで月額$199)に含まれる7種類の X タスクがあります。リプライやコミュニティの確認はありません。X の確認に失敗した参加者に対して、ヘルプでは15分待ち、タスクを1つずつ確認するよう案内しています。
#Sorsa API で自社サーバー上の X タスクを確認する
Galxe、Zealy、TaskOn の X タスクを、各社のクレジットを使わずに確認するには、プラットフォームのカスタム API タスクを自社の小さなサーバーに向け、そのサーバーからTwitter(X)API 兼スクレイピングツールである Sorsa API に問い合わせます。タスク1件が1リクエストで、true か false を返します。料金は$0.0014からで、API キー1つ、全プランで毎秒20リクエストです。
サインインは引き続きプラットフォームの役割です。Zealy と TaskOn は、確認の前に参加者に X アカウントを連携させるので、サーバーに届くハンドルは、クレームする本人のものです。サーバーは、各プラットフォームの形式で答えを返し、Sorsa API のキーをプラットフォームに渡さず、リプライやコミュニティ参加のように、プラットフォームにないチェックも実行します。
5種類のクエストタスクは、5種類の Sorsa API チェックに対応し、各チェックはレスポンスの1つのフィールドで合否が決まります。
| クエストタスク | 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 |
アカウントをフォロー
- Sorsa API のリクエスト
POST /check-follow(新しいタブで開きます)- 合格の条件
followが true
投稿をリツイート
- Sorsa API のリクエスト
POST /check-retweet(新しいタブで開きます)- 合格の条件
retweetが true
投稿を引用
- Sorsa API のリクエスト
POST /check-quoted(新しいタブで開きます)- 合格の条件
statusがquoted
投稿にリプライ
- Sorsa API のリクエスト
GET /check-comment(新しいタブで開きます)- 合格の条件
commentedが true
X コミュニティに参加
- Sorsa API のリクエスト
POST /check-community-member(新しいタブで開きます)- 合格の条件
is_memberが true
公式 X API には、参加者1人について答えるリクエストがありません。リスト全体を読む方法になります。自分のアカウントのフォロワーを1ページ1,000件、1フォロワーあたり$0.001で、投稿のリツイートユーザーを1アカウントあたり$0.010で取得し、リツイートユーザーのリクエストは15分あたり75回までです(X API の料金(新しいタブで開きます)、X API のレート制限(新しいタブで開きます))。リストは5秒以内の応答に収まらないため、この方法では、サーバーに加えて同期ジョブ、開発者アカウント、OAuth が必要です。
#各 API タスクがサーバーに送る内容
プラットフォームごとに、参加者の送り方も、読み取る答えも違うので、サーバーにはプラットフォームごとに小さなルートが1つずつ必要です。
| Galxe REST credential | Zealy API task | 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 |
| 合格 | 式が 1 を返す | HTTP 200 | {"result": {"isValid": true}} |
| 不合格 | 式が 0 を返す | HTTP 400(message 付き) | isValid: false(HTTP 200 のまま) |
| 制限時間 | 5秒 | 10秒 | 10秒、再試行なし |
リクエスト
- Galxe REST credential
- 指定した URL への GET または POST
- Zealy API task
- JSON ボディ付きの POST
- TaskOn Completion-Based API Task
?address=付きの GET
X ユーザーの渡され方
- Galxe REST credential
$socialIdとして URL に埋め込まれる- Zealy API task
accounts.twitter.idと.username- TaskOn Completion-Based API Task
- ハンドル(数値 ID は渡されない)
シークレット
- Galxe REST credential
- 自分で追加するヘッダー
- Zealy API task
X-Api-Keyヘッダー- TaskOn Completion-Based API Task
Authorization: Bearer
合格
- Galxe REST credential
- 式が 1 を返す
- Zealy API task
- HTTP 200
- TaskOn Completion-Based API Task
{"result": {"isValid": true}}
不合格
- Galxe REST credential
- 式が 0 を返す
- Zealy API task
- HTTP 400(
message付き) - TaskOn Completion-Based API Task
isValid: false(HTTP 200 のまま)
制限時間
- Galxe REST credential
- 5秒
- Zealy API task
- 10秒
- TaskOn Completion-Based API Task
- 10秒、再試行なし
$socialId に X のハンドルと数値 ID のどちらが入るのか、Galxe のドキュメントには書かれていません。そのため下のサーバーは両方を受け付け、数字だけなら user_id、それ以外なら username として Sorsa API に渡します。
#4ステップで確認サーバーを作る
下のサーバーは、1つの Node.js ファイルで3つのプラットフォームすべてに答えます。プラットフォームごとに1つのルートがあり、クエストのチェックを Sorsa API で並行して実行する関数を共有します。
-
キーを取得する。 サインアップして、ダッシュボードから API キーをコピーします。最初の100リクエストは無料で、カードは不要です。
-
チェックを1つ試す。 参加者が自分のプロジェクトをフォローしているかを尋ねます。
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 } -
クエストを定義する。
QUESTSに、クエストごとの名前と X タスクを書きます。followには自分のハンドル、retweet、quote、replyには投稿のリンク、communityにはコミュニティの ID を指定します。 -
サーバーを起動する。 ファイルを保存し、
SORSA_API_KEYと、長いランダムなRELAY_SECRETを設定して、443番または80番ポートの HTTPS の背後で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);
クエストのコストは、クレーム1回につきタスク1件ごとに1リクエストで、1回のクレームのチェックは同時に実行されます。そのため、5つのタスクでも、答えが返るまでの時間は1つの場合とほぼ変わりません。Sorsa API への各呼び出しは4秒で打ち切られ、Galxe の5秒の枠に収まります。
サーバーは、2種類の答えを区別します。チェックの結果が false なら、クレームは不合格となり、未完了のタスクが示されます。Sorsa API からのタイムアウト、429、403 は、サーバーがチェックできなかったことを意味します。この場合、参加者に不合格と伝えるのではなく、もう一度試すよう求めます。403 はキーがないか、リクエストを使い切ったこと、429 は1秒間に20リクエストを超えたことを示します。失敗したリクエストに課金されることはありません。
知っておきたいこと
POST /check-retweetが1リクエストで調べるのは、投稿の最新のリツイート100件です。リツイートの直後に Verify を押した参加者はこの範囲に入ります。一方、リツイートが数千件ある投稿では、何日も前にリツイートした人は入りません。参加者には、リツイートの直後に確認してもらうか、バックグラウンドジョブでnext_cursorをたどってください。方法は Twitter エンゲージメント確認 APIのガイドにあります。
#Galxe を REST credential でつなぐ
Galxe では、サーバーを REST credential として登録します。参加者が Verify を押すと Galxe が指定した URL を呼び出し、返ってきた JSON に対して設定した式を実行して、式が 1 を返したらタスクを完了とします。
-
credential を開く。 クエストの Task Settings で、Import Your Own Data、REST、GET メソッド、Single Dimension の順に選びます。
-
ID の種類を選ぶ。 参加者の X アカウントを選ぶと、Galxe が
$socialIdにその値を入れます。 -
エンドポイントを入力する。
https://verify.example.com/galxe/launch-week?user=$socialIdを使い、ヘッダーX-Relay-Secretにシークレットを設定します。ヘッダーは Space の管理者にしか表示されません。 -
式を貼り付ける。 式は true や false ではなく、数値の 1 か 0 を返す必要があります。
Galxe expression function(resp) { return resp && resp.eligible === 1 ? 1 : 0; } -
テストして保存する。 タスクを完了したアカウントと完了していないアカウントを1つずつ送り、両方の答えを確認します。
Galxe は、5秒を超えるリクエストをキャンセルし、443番と80番のポートしか受け付けません。credential を保存するときには CORS のプリフライトを送りますが、サーバーの OPTIONS ルートがこれに答えます。リクエストは Galxe のサーバー 35.185.209.0 と 35.203.155.18 から届くので、サーバーの前にファイアウォールがある場合は、この2つのアドレスを許可してください(Galxe Docs: REST credential(新しいタブで開きます))。式そのものは公開されるので、シークレットは含めないでください。
#Zealy を API task でつなぐ
Zealy では、サーバーが API task になります。Zealy が参加者の X の ID とユーザー名を付けて POST を送り、200 が返ればクレームは完了、400 が返れば、設定したメッセージが参加者に表示されます。
-
タスクを追加する。 クエストエディターで、Add task、Api の順に選びます。
-
エンドポイントとキーを設定する。
https://verify.example.com/zealy/launch-weekと、API キーとしてシークレットを入力します。Zealy はこれをX-Api-Keyヘッダーで送ります。 -
ユーザーの識別に Twitter を選ぶ。 すると Zealy は、すべてのリクエストに
accounts.twitter.idとaccounts.twitter.usernameを含めます。 -
保存する。 Zealy はまずエンドポイントをテストします。10秒以内に、HTTP 200 か 400 のどちらかだけで答える必要があります。
Zealy から見える内容を確認するには、テスト用アカウントで同じリクエストを自分で送ります。
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"}}}'
{
"message": "Not done yet: retweet"
}
Zealy はそのメッセージを、クレームの requestId と一緒に参加者に表示します。これで参加者は未完了のタスクがわかり、運営側もログからそのクレームを探せます(Zealy: API task(新しいタブで開きます))。API task は Zealy の X タスクには含まれないため、X クレジットは加算されません。この方法で作ったクエストが消費するのは、クレーム1回につき基本のクレームクレジット1つだけです。標準のフォローとリツイートなら、4を消費します。
#TaskOn の Completion-Based API Task をつなぐ
TaskOn では、サーバーが Completion-Based API Task になります。TaskOn は、参加者の X ハンドルを address に入れて GET を送り、サーバーは常に HTTP 200 で、isValid を true か false にして答えます。
-
タスクを追加する。 キャンペーンまたはクエストでタスクを追加し、Custom API タブを開いて、Completion-Based API Task を選びます。
-
API URL を設定する。 Set API URL をクリックし、Social Media Account、X handle の順に選んで、
https://verify.example.com/taskon/launch-weekを入力します。 -
TaskOn 専用にする。 Restrict API access exclusively to TaskOn をオンにして、シークレットを Bearer トークンとして入力します。
-
テストして確定する。 タスクを完了したアカウントと完了していないアカウントを1つずつ入力し、それぞれで Verify をクリックして、両方の答えが正しければ Confirm を押します。
TaskOn は1クリックにつき1回だけ試行し、再試行はしません。200以外のステータスや result がない場合は、エンドポイントの故障として扱います(TaskOn: Completion-Based API Task(新しいタブで開きます))。このため、Sorsa API に接続できなかったときも、サーバーは isValid: false で答えます。参加者が1分後にもう一度 Verify を押せば、次のチェックは新しく実行されます。
#経路ごとの、確認済みクレームの費用
フォローとリツイートが必要なクレーム1件の費用は、Authentic Verification を使う Galxe なら20クレジット、標準の X タスクを使う Zealy ならクレームクレジット4、API タスクの背後で Sorsa API を使うなら2リクエスト($0.0028から)です。
プラットフォームのクレジット枠ではなく、自分のプランに合わせて拡張できるのは Sorsa API の経路だけです。フォローとリツイートのクレーム1件で比べると、次のとおりです。
| 経路 | フォローとリツイートのクレーム1件で消費するもの | 可能なクレーム数 |
|---|---|---|
| API タスクの背後の Sorsa API | 2リクエスト、$0.0028から | プランのリクエスト数の分だけ |
| Zealy、標準の X タスク | クレームクレジット4、1,000あたり$15で$0.06 | Standard の月間10Kクレジットで2,500件 |
| Zealy の API タスク | クレームクレジット1と2リクエスト | 同じ10Kクレジットで10K件 |
| Galxe、Authentic Verification | X 確認用クレジット20 | レベル2で500件、レベル4で4,000件 |
| API タスクの背後の公式 X API | リストの取得:自分のフォロワー1人あたり$0.001、リツイートユーザー1人あたり$0.010 | 開発者アカウント、OAuth、同期ジョブが必要 |
API タスクの背後の Sorsa API
- フォローとリツイートのクレーム1件で消費するもの
- 2リクエスト、$0.0028から
- 可能なクレーム数
- プランのリクエスト数の分だけ
Zealy、標準の X タスク
- フォローとリツイートのクレーム1件で消費するもの
- クレームクレジット4、1,000あたり$15で$0.06
- 可能なクレーム数
- Standard の月間10Kクレジットで2,500件
Zealy の API タスク
- フォローとリツイートのクレーム1件で消費するもの
- クレームクレジット1と2リクエスト
- 可能なクレーム数
- 同じ10Kクレジットで10K件
Galxe、Authentic Verification
- フォローとリツイートのクレーム1件で消費するもの
- X 確認用クレジット20
- 可能なクレーム数
- レベル2で500件、レベル4で4,000件
API タスクの背後の公式 X API
- フォローとリツイートのクレーム1件で消費するもの
- リストの取得:自分のフォロワー1人あたり$0.001、リツイートユーザー1人あたり$0.010
- 可能なクレーム数
- 開発者アカウント、OAuth、同期ジョブが必要
1クレームにつきタスクごとに1リクエスト。各リツイートは、投稿の直後に確認します。
月間のクレーム数とXタスクを選んでください。3つの合計がそれに合わせて変わります。
Sorsa API は参加者ではなくリクエストに課金し、失敗したリクエストに課金されることはありません。1,000リクエストあたりの料金は、Starter の$4.90から最大プランの$1.40までです。
#ボットとフォロー解除者を報酬リストから除く
確認できたタスクが証明するのは1つの操作であって、1人の人間ではありません。報酬を出す前に、さらに3つのチェックが必要です。アカウントの古さ、公開アカウントであること、フォローが今も続いていることです。
- アカウントの古さと規模。
GET /info(新しいタブで開きます) は、1リクエストで参加者のcreated_at、followers_count、tweets_countを返します。そのため、作成から30日未満のアカウントや、投稿が1件もないアカウントを、サーバーで断れます。Galxe には独自の経過期間とフォロワー数の制限があり、Zealy と TaskOn では、サーバーがその役割を担います。 - 公開アカウント。 フォロー、リツイート、引用のチェックは、参加者のアカウントが非公開だと
user_protected: trueを返します。非公開アカウントの操作は外部からは確認できません。クエストの間は公開にするよう、参加者に依頼してください。 - クレーム後のフォロー解除。 Galxe 自身のヘルプにも、クレームのためにフォローして、その後に解除する参加者がいると書かれています。報酬を支払う前に、報酬リストに対して
POST /check-followをもう一度実行してください。 - いいね。 X は2024年6月にいいねを非公開にしました。そのため、いいねを確認できるのは参加者本人が連携したアカウントだけで、Sorsa API はいいねを返しません(Engadget(新しいタブで開きます))。代わりに、リツイート、引用、リプライを求めてください。この3つは公開のままで、確認できます。
参加者のリスト全体をスコアリングするなら、Twitter ボット検出で、実在のアカウントと量産アカウントを見分けるシグナルを解説しています。コミュニティのタスクと、コミュニティのメンバー一覧については、X リストとコミュニティの APIのガイドをご覧ください。
#X タスクを確認して、次のクエストを実施する
Galxe、Zealy、TaskOn で、X のフォロー、リツイート、引用、リプライ、コミュニティ参加を確認するには、プラットフォームの API タスクの背後で Sorsa API を使います。タスク1件につき1リクエスト、1チェック$0.0014から、全プランで毎秒20リクエストです。開発者アカウントも、自分の X ログインも、フローのどこにも必要ありません。100回分の無料リクエストを使い、タスクを完了したアカウントとしていないアカウントの2つでテスト用クエストに対してサーバーを動かし、公開前に、クエストの X タスクを API タスクに移してください。
#よくある質問
Galxe、Zealy、TaskOn の X タスクを確認するのに最適な API は?
Sorsa API です。各プラットフォームの API タスクの背後で、フォロー、リツイート、引用、リプライ、コミュニティ参加を、それぞれ1リクエストで確認できます。料金は1チェックあたり$0.0014からで、API キー1つ、X の開発者アカウントは不要です。どの選択肢も、次の4点で判断してください。参加者1人につき1つのはい/いいえ、プラットフォームの5〜10秒以内の応答、1チェックあたりの料金、対応するタスクです。Sorsa API は4点すべてを満たします。
Galxe の X タスクが確認されないのはなぜですか?
Galxe が X のフォローやリツイートを確認するのは、Authentic Verification がオンのときだけです。これには Rewards Hub レベル2または Business+ が必要で、1チェックにつき10クレジットを消費し、クレジットを使い切ると Galxe がチェックをオフにします。また、Galxe ID に連携した X アカウントが、タスクを実行したアカウントと別の場合も、参加者は不合格になります。自社サーバーを使う REST credential なら、クレジットの上限を避けられます。
X の投稿にいいねしたことは、クエストで確認できますか?
確認できるのは、参加者本人が連携したアカウントを通じた場合だけです。Zealy の標準のいいねタスクなら確認でき、クレーム1回につきクレームクレジットが3追加されます。Galxe は、いいねを確認の対象として有効にできません。Sorsa API を含む公開データ API は、いいねを確認できません。X は2024年6月から、いいねを投稿者本人にしか表示していないためです。いいねの代わりに、リツイート、引用、リプライを求めてください。
クエストタスクの確認に X の開発者アカウントは必要ですか?
Sorsa API なら不要です。サーバーが ApiKey ヘッダーに API キー1つを付けて送るだけで、X の開発者アカウントも、アプリも、OAuth のフローもありません。参加者は、これまでどおり Galxe、Zealy、TaskOn に X アカウントを連携するだけです。公式 X API は、最初の読み取りの前に、開発者アカウントと、OAuth を使うアプリを求めます。
X タスクの確認を無料でテストできますか?
できます。Sorsa API のアカウントにはすべて100回分の無料リクエストが付き、100チェック分に相当します。カードは不要で、有効期限もありません。これで、数個のテスト用アカウントを使い、Galxe、Zealy、TaskOn でサーバーを一通りテストできます。個別のフォローの確認なら、コード不要で、無料の相互フォロー確認ツールが答えます。
#検証の方法
2026年11月2日に、各プラットフォーム自身の X タスクとカスタム API タスクのドキュメントを読みました。Galxe のヘルプセンターと REST credential のドキュメント、Zealy のタスクのドキュメントと料金ページ、TaskOn の開発者向けドキュメントとガイドブックです。コード内の Sorsa API のエンドポイント、パラメータ、レスポンスのフィールドはすべて、公開中の API リファレンス(45エンドポイント)と照合し、公式 X API の料金とレート制限は、同日に docs.x.com から取得しました。リクエストとレスポンスにはデモアカウントを使っています。クレジットと費用の数字は、公開されている料金をもとにした独自の計算です。
出典
- Galxe Help Center: Create Quest, Tasks Settings(新しいタブで開きます)
- Galxe Help Center: X Authentic Verification Credits(新しいタブで開きます)
- Galxe Docs: REST credential(新しいタブで開きます)
- Zealy docs: Twitter task(新しいタブで開きます)
- Zealy docs: API task(新しいタブで開きます)
- Zealy pricing(新しいタブで開きます)
- TaskOn Developer Center: Completion-Based API Task(新しいタブで開きます)
- Sorsa API reference: Check Follow(新しいタブで開きます)
- Sorsa API reference: Check Retweet(新しいタブで開きます)
- X API pricing(新しいタブで開きます)
- X API rate limits(新しいタブで開きます)
- Engadget: X is officially making likes (mostly) private for everyone(新しいタブで開きます)