ドキュメント開発者向け
TaskerData API
自分のコードからキャンペーンを作成し、ワーカーの提出を集めて確認したり、外部資格テストを連携したりできます。すべてのリクエストはAPIキーで認証されます。
概要
キャンペーンAPIを使うと、依頼者ダッシュボードで行う操作をコードから実行できます: キャンペーンの作成、進行状況の確認、証拠付きの提出のダウンロード、承認・却下。外部資格テストのエンドポイントを使うと、自分のウェブサイト上のテストから、各ワーカーが合格したかどうかをTaskerDataに伝えられます。
すべてのリクエストはHTTPSで https://taskerdata.com に送信します。送受信はJSONで行います。
APIで作成したキャンペーンは、ダッシュボードと同じ費用で、同じルールに従います。公開前にTaskerDataが審査し(信頼できる依頼者はすぐに公開されます)、お金の確保と支払いも同じように行われます。
認証
依頼者ダッシュボードを開き、「API」に移動します。そこに2つのキーがあります:
- APIキー: 本番のリクエスト用です。キャンペーンAPIはAuthorizationヘッダーから読み取ります。資格テストのエンドポイントでは api_token として受け取ります。
- テスト用APIキー: 資格テストのテスト用エンドポイント専用です。実際のワーカーに影響を与えずに連携を試せます。
新しいキーを生成すると古いキーはすぐに置き換わるので、そのときはバックエンドを更新してください。新しいキーは1時間に3つまで生成できます。
重要: APIキーは秘密にしてください。サーバー上でのみ使い、訪問者が開けるウェブページやアプリでは絶対に使わないでください。
キャンペーンAPIのリクエストには毎回APIキーを付けて送信します:
Authorization: Bearer YOUR_API_KEYキャンペーンAPIのリクエストは1分あたり120回までです。残り回数はX-RateLimit-Remainingヘッダーで確認できます。上限を超えるとステータス429が返され、Retry-Afterヘッダーに待つべき秒数が示されます。
キャンペーンAPI
自分のコードからキャンペーンを作成し、集まった作業を処理します。
キャンペーンの一覧
GET/api/v1/campaigns
あなたのキャンペーンを新しい順に返します。total は条件に合うキャンペーンの数で、limit と offset を使ってページ送りできます。
クエリパラメータ
| パラメータ | 説明 |
|---|---|
status | このステータスのキャンペーンのみ: pending、in review、active、paused、completed、terminated、rejected |
limit | 返す件数、1〜100(デフォルト20) |
offset | ページング用にスキップする件数(デフォルト0) |
curl "https://taskerdata.com/api/v1/campaigns?status=active&limit=20" \
-H "Authorization: Bearer $TASKERDATA_API_KEY"レスポンス · 200
{
"success": true,
"campaigns": [
{
"id": "Ab12…-Cd34…-Ef56…",
"title": "Test our sign-up page",
"status": "active",
"category": "Website Testing",
"type": "instructions",
"url": "https://example.com/signup",
"payment": 0.5,
"positions": 50,
"filled_positions": 12,
"time_to_complete": 10,
"time_to_rate": 3,
"cost": 34.06,
"proof": {
"text": "What went wrong?",
"images": [
"Screenshot after signing up"
],
"video": null
},
"qualification_id": null,
"created_at": "2026-10-16T09:30:00.000Z"
}
],
"total": 1,
"limit": 20,
"offset": 0
}エラーの例
// status 401
{
"success": false,
"error": {
"code": "invalid_api_key",
"message": "Invalid API key."
}
}キャンペーンの取得
GET/api/v1/campaigns/{id}
1つのキャンペーンの設定と、確認待ち、修正待ち、承認済み、却下の提出の数を返します。キャンペーンの進行状況の確認に使います。
アドレス内
| パラメータ | 説明 |
|---|---|
id 必須 | キャンペーンID(キャンペーン一覧の id) |
curl "https://taskerdata.com/api/v1/campaigns/CAMPAIGN_ID" \
-H "Authorization: Bearer $TASKERDATA_API_KEY"レスポンス · 200
{
"success": true,
"campaign": {
"id": "Ab12…-Cd34…-Ef56…",
"title": "Test our sign-up page",
"status": "active",
"category": "Website Testing",
"type": "instructions",
"url": "https://example.com/signup",
"payment": 0.5,
"positions": 50,
"filled_positions": 12,
"time_to_complete": 10,
"time_to_rate": 3,
"cost": 34.06,
"proof": {
"text": "What went wrong?",
"images": [
"Screenshot after signing up"
],
"video": null
},
"qualification_id": null,
"created_at": "2026-10-16T09:30:00.000Z",
"submissions": {
"total": 14,
"to_review": 3,
"revision_requested": 1,
"approved": 9,
"rejected": 1
}
}
}エラーの例
// status 404
{
"success": false,
"error": {
"code": "not_found",
"message": "Campaign not found."
}
}キャンペーンの作成
POST/api/v1/campaigns
ダッシュボードとまったく同じように、新しいキャンペーンを作成し、その費用の全額を利用可能残高から確保します。レスポンスには、キャンペーンの id、費用、ステータスが含まれます: TaskerDataの審査中は pending、信頼できる依頼者ならすぐに active になります。
JSON本文
| パラメータ | 説明 |
|---|---|
title 必須 | キャンペーンのタイトル、100文字まで |
category 必須 | GET /api/v1/options のカテゴリー。テンプレートを使う場合は省略します |
instructions 必須 | ワーカーが行うこと、5,000文字まで |
url | ワーカーが開くリンク。needs_url が true のカテゴリーでは必須です |
payment 必須 | タスクあたりの報酬(USD)、0.12以上 |
positions 必須 | ワーカーの人数、10以上。テンプレートのデータファイルを使う場合は行数から計算されます |
time_to_complete 必須 | ワーカーが作業を終えるまでの時間(分)、1〜120 |
time_to_rate 必須 | 各提出を確認できる日数、1〜30。それを過ぎると自動で承認されます |
proof.text | テキストでの回答を求める: ワーカーに書く内容を伝えます |
proof.images | スクリーンショットや写真を求める: 画像ごとに説明を1つ |
proof.video | 動画や録画を求める: 写すべき内容 |
targeting.region | international(デフォルト)、usa、west-europe、east-europe、latin-america、asia-africa |
targeting.exclude_countries | 地域から除外する国の名前 |
targeting.min_success_rate | ワーカーの成功率の下限: 75(デフォルト)、80、85、90、95、100 |
targeting.type, targeting.group_id | type を "group" に、group_id を自分のワーカーグループのいずれかに設定すると、そのグループだけにタスクを送ります |
qualification_id | この資格テストに合格したワーカーだけがタスクに参加できます |
template | 指示の代わりに自分のテンプレートを使います: id と、プレースホルダーを埋める columns と rows を持つ data(1行が1タスク)。answers_per_row(1〜5)と rows_per_task(1〜50)は任意です |
drip_feed | ワーカーを段階的に公開します: min_workers と max_workers(1〜50)、interval_minutes(15、30、60、120、180、360、720、1440) |
location | 現地タスクと覆面調査用: lat、lng、radius_m(50〜50,000)と任意の address |
現時点では、アップロードするファイルが必要なカテゴリー(音声文字起こしや画像タグ付けなど)、動画タスク、見本画像は、ダッシュボードでのみ作成できます。料金の計算方法は「費用と手数料」ガイドで説明しています。
curl -X POST "https://taskerdata.com/api/v1/campaigns" \
-H "Authorization: Bearer $TASKERDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Test our sign-up page",
"category": "Website Testing",
"url": "https://example.com/signup",
"instructions": "Open the page, create an account and tell us anything that went wrong.",
"payment": 0.5,
"positions": 50,
"time_to_complete": 10,
"time_to_rate": 3,
"proof": {
"text": "What went wrong?",
"images": [
"Screenshot after signing up"
]
},
"targeting": {
"region": "international",
"min_success_rate": 90
}
}'レスポンス · 201
{
"success": true,
"campaign": {
"id": "Ab12…-Cd34…-Ef56…",
"title": "Test our sign-up page",
"status": "pending",
"category": "Website Testing",
"type": "instructions",
"url": "https://example.com/signup",
"payment": 0.5,
"positions": 50,
"filled_positions": 0,
"time_to_complete": 10,
"time_to_rate": 3,
"cost": 34.06,
"proof": {
"text": "What went wrong?",
"images": [
"Screenshot after signing up"
],
"video": null
},
"qualification_id": null,
"created_at": "2026-10-16T09:30:00.000Z"
},
"balance": {
"available": 65.94,
"reserved": 34.06
}
}エラーの例
// status 402
{
"success": false,
"error": {
"code": "insufficient_balance",
"message": "Insufficient balance"
}
}提出の取得
GET/api/v1/campaigns/{id}/submissions
1つのキャンペーンでワーカーが送った作業を古い順に、証拠とともに返します: テキストの回答、画像や動画へのリンク、テンプレートへの回答(answers)、作業したデータ行、現地タスクの場合はその位置。
アドレス内
| パラメータ | 説明 |
|---|---|
id 必須 | キャンペーンID(キャンペーン一覧の id) |
クエリパラメータ
| パラメータ | 説明 |
|---|---|
status | to_review(pending と resubmitted)、pending、resubmitted、revision_requested、approved、rejected |
since | この時刻以降に送信された提出のみ。例: 2026-10-01T00:00:00Z |
after_id | ページング用: id がこれより大きい提出のみ。前のページの next_after_id を使います |
limit | 返す件数、1〜100(デフォルト50) |
新しい作業を定期的に集めるには、最後に受け取った id を保存し、次回それを after_id として送信します。raw にはワーカーが送ったすべての内容が入っているので、一覧にないものが必要な場合に使えます。
curl "https://taskerdata.com/api/v1/campaigns/CAMPAIGN_ID/submissions?status=to_review&after_id=0" \
-H "Authorization: Bearer $TASKERDATA_API_KEY"レスポンス · 200
{
"success": true,
"submissions": [
{
"id": 1842,
"campaign_id": "Ab12…-Cd34…-Ef56…",
"worker_id": "wK3…",
"status": "pending",
"started_at": "2026-10-16 10:02:11",
"submitted_at": "2026-10-16 10:09:45",
"revision_count": 0,
"revision_note": null,
"rejection_reason": null,
"payment": 0.5,
"proof": {
"text": "The confirm button did nothing on mobile.",
"image_urls": [
"https://storage.taskerdata.com/…/proof_0.png"
],
"video_url": null
},
"answers": null,
"data_row": null,
"data_row_number": null,
"items": null,
"location": null,
"raw": {
"textProof": "…"
}
}
],
"has_more": false,
"next_after_id": null
}エラーの例
// status 400
{
"success": false,
"error": {
"code": "invalid_status",
"message": "status must be one of: to_review, pending, resubmitted, revision_requested, approved, rejected."
}
}提出の確認
POST/api/v1/submissions/{id}/review
ダッシュボードのボタンと同じように、承認、却下、修正依頼を行います。承認すると、確保されたお金からワーカーに支払われます。却下すると、報酬と手数料が残高に戻り、募集枠が他のワーカーのために空きます。
アドレス内
| パラメータ | 説明 |
|---|---|
id 必須 | 提出ID |
JSON本文
| パラメータ | 説明 |
|---|---|
action 必須 | approve、reject、revision |
reason | reject の場合: ワーカーに表示される理由 |
note | revision の場合(必須): ワーカーが直すべき点 |
提出を確認できるのは、確認待ち(pending または resubmitted)の間だけです。修正はキャンペーンの修正回数の上限までで、それ以降は承認か却下しかできません。
curl -X POST "https://taskerdata.com/api/v1/submissions/1842/review" \
-H "Authorization: Bearer $TASKERDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "revision",
"note": "Please add a screenshot of the error message."
}'レスポンス · 200
{
"success": true,
"submission": {
"id": 1842,
"status": "revision_requested"
},
"balance": {
"available": 65.94,
"reserved": 34.06
}
}エラーの例
// status 409
{
"success": false,
"error": {
"code": "already_reviewed",
"message": "Submission already reviewed"
}
}残高の確認
GET/api/v1/balance
available は新しいキャンペーンに使える額、reserved は公開中のキャンペーン用に確保されている額、spent はこれまでワーカーに支払った額です。
curl "https://taskerdata.com/api/v1/balance" \
-H "Authorization: Bearer $TASKERDATA_API_KEY"レスポンス · 200
{
"success": true,
"balance": {
"available": 65.94,
"reserved": 34.06,
"spent": 212.4
}
}オプションとID
GET/api/v1/options
APIで使えるカテゴリー(needs_url と needs_location で、リンクや場所が必要なものがわかります)、ターゲティングと段階配信で使える値、あなたのテンプレート、ワーカーグループ、資格テストのIDを一覧で返します。
curl "https://taskerdata.com/api/v1/options" \
-H "Authorization: Bearer $TASKERDATA_API_KEY"レスポンス · 200
{
"success": true,
"categories": [
{
"name": "Website Testing",
"needs_url": true,
"needs_location": false
},
"…"
],
"regions": [
"international",
"usa",
"west-europe",
"east-europe",
"latin-america",
"asia-africa"
],
"min_success_rates": [
75,
80,
85,
90,
95,
100
],
"drip_feed_intervals": [
15,
30,
60,
120,
180,
360,
720,
1440
],
"templates": [
{
"id": 12,
"title": "Sentiment check"
}
],
"worker_groups": [
{
"id": 3,
"name": "Trusted testers",
"workers": 25
}
],
"qualifications": [
{
"id": "Qa1…",
"title": "English test",
"status": "active"
}
]
}エラー
キャンペーンAPIはHTTPステータスコードを使います。問題が起きると success が false になり、error にはコードで判定するための code と、表示やログ用の message が入ります。キャンペーンのチェックには、ダッシュボードと同じメッセージが使われます。
| ステータス | error.code | 意味 |
|---|---|---|
| 400 | invalid_body, invalid_campaign, invalid_region, category_needs_files, invalid_status, invalid_since, invalid_action, note_required | リクエストに不足しているもの、または許可されていないものがあります。message に内容が示されます。 |
| 401 | missing_api_key, invalid_api_key | APIキーがないか、キーが間違っているか、新しいキーに置き換えられています。 |
| 402 | insufficient_balance | 利用可能残高がキャンペーンの費用に足りません。残高をチャージしてもう一度お試しください。 |
| 403 | test_key_not_allowed, account_suspended | 本番用のAPIキーを使ってください。停止中のアカウントはAPIを使えません。 |
| 404 | not_found | あなたのアカウントに、そのIDのキャンペーンまたは提出はありません。 |
| 409 | already_reviewed, review_refused | 提出はすでに確認済みか、修正回数の上限に達したなどの理由で、現在は確認できません。 |
| 429 | rate_limited | 1分間に120回を超えるリクエストがありました。Retry-After に示された秒数だけ待ってください。 |
| 500 | internal_error | 当社側の問題です。もう一度お試しください。問題が続く場合はサポートにお問い合わせください。 |
外部資格テスト
自分のウェブサイトで実施する資格テスト用です。
テスト結果の報告 本番
GET/api/worker/external_qualification/data
外部として設定された資格テスト用です。ワーカーは資格テストからあなたのテストを開き、あなたのウェブサイトでワーカートークンを入力します。完了したら、approve または reject を付けてこのエンドポイントを呼び出します。
| パラメータ | 説明 |
|---|---|
qualification_id 必須 | 資格テストのID |
worker_token 必須 | ワーカーがあなたのウェブサイトで入力したワーカートークン |
api_token 必須 | あなたのAPIキー(テスト用エンドポイントではテスト用キー) |
decision 必須 | approve または reject |
合格時にボーナスを支払うテストで依頼者残高が足りない場合、提出は保留として保存されるので、残高をチャージしてダッシュボードで承認できます。
ワーカーの評価はテストごとに1回です。テストが有効で外部として設定されている必要があり、APIキーはテストの所有者のものでなければなりません。
curl -G "https://taskerdata.com/api/worker/external_qualification/data" \
--data-urlencode "qualification_id=QUAL_ID" \
--data-urlencode "worker_token=WORKER_TOKEN" \
--data-urlencode "api_token=YOUR_API_KEY" \
--data-urlencode "decision=approve"レスポンス · 200
{
"success": true
}エラーの例
{
"success": false,
"error": "This worker has already been evaluated for this qualification"
}設定のテスト
POST/api/worker/external_qualification/data_test
テスト用APIキーを使い、同じ項目をJSONでテスト用エンドポイントに送信します。何も保存されず、ワーカーにも影響しません。リクエストを確認するだけです。
| パラメータ | 説明 |
|---|---|
qualification_id 必須 | 資格テストのID |
worker_token 必須 | ワーカーがあなたのウェブサイトで入力したワーカートークン |
api_token 必須 | あなたのAPIキー(テスト用エンドポイントではテスト用キー) |
decision 必須 | approve または reject |
テスト用キーが間違っているとステータス401が、項目の不足やdecisionの誤りはステータス400が返されます。
curl -X POST "https://taskerdata.com/api/worker/external_qualification/data_test" \
-H "Content-Type: application/json" \
-d '{
"qualification_id": "QUAL_ID",
"worker_token": "WORKER_TOKEN",
"api_token": "YOUR_TEST_API_KEY",
"decision": "approve"
}'レスポンス · 200
{
"success": true
}エラーの例
// status 401
{
"statusCode": 401,
"statusMessage": "Invalid API test key"
}テスト結果のエラー
結果のエンドポイントは常にステータス200で応答します。success を確認し、false の場合は error に理由が示されます:
| error | 意味 |
|---|---|
Missing required parameters: qualification_id, worker_token, api_token, decision | 4つのパラメータのいずれかがありません。 |
Decision must be 'approve' or 'reject' | decision に別の値が入っています。 |
Invalid API token | APIキーが間違っているか、新しいキーに置き換えられています。 |
Worker token not found for this qualification | トークンがこのテストのものではありません。ワーカーに確認してもらってください。 |
API token does not belong to the qualification owner | テストを作成したアカウントのキーを使ってください。 |
This qualification is not configured for external submissions | テストが外部として設定されていません。 |
This qualification is no longer active | テストが一時停止中か終了しています。 |
This worker has already been evaluated for this qualification | 各ワーカーの結果はテストごとに1つです。 |
Worker account is suspended | このワーカーは現在テストを受けられません。 |
No remaining positions for this qualification | テストの枠がすべて埋まっています。 |