ДокументацияРазработчикам
API TaskerData
Размещайте кампании, получайте и проверяйте работы исполнителей из своего кода или подключите внешний квалификационный тест. Каждый запрос аутентифицируется вашим API-ключом.
Обзор
API кампаний позволяет вашему коду делать то же, что вы делаете в панели заказчика: создавать кампании, следить за их ходом, скачивать отправленные работы с подтверждениями, одобрять и отклонять их. Эндпоинты внешних квалификационных тестов позволяют тесту на вашем сайте сообщать TaskerData, прошёл ли его каждый исполнитель.
Все запросы отправляются на https://taskerdata.com по HTTPS. Данные передаются и возвращаются в формате JSON.
Кампании, созданные через API, стоят столько же и подчиняются тем же правилам, что и в панели. TaskerData проверяет их перед запуском (у доверенных заказчиков они запускаются сразу), а деньги резервируются и выплачиваются так же.
Аутентификация
Откройте панель заказчика и перейдите в раздел API. Там вы найдёте два ключа:
- API-ключ: для реальных запросов. API кампаний берёт его из заголовка Authorization. Эндпоинт квалификации принимает его как api_token.
- Тестовый API-ключ: только для тестового эндпоинта квалификации, чтобы вы могли проверить эту интеграцию, не затрагивая реальных исполнителей.
Новый ключ сразу заменяет старый, поэтому после создания обновите его в бэкенде. Можно создавать не более 3 новых ключей в час.
Важно: Храните API-ключ в секрете. Используйте его только на своём сервере и никогда — на веб-странице или в приложении, доступном посетителям.
Передавайте API-ключ в каждом запросе к API кампаний:
Authorization: Bearer YOUR_API_KEYМожно отправлять до 120 запросов к API кампаний в минуту. Заголовок 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}
Одна кампания с её настройками и количеством работ: ожидающих проверки, ожидающих доработки, одобренных и отклонённых. Используйте, чтобы следить за ходом кампании.
В адресе
| Параметр | Описание |
|---|---|
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 кампании, её стоимость и статус: pending, пока TaskerData её проверяет, или сразу 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 | Запросить скриншоты или фото: по одному описанию на каждое изображение |
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, а также data со столбцами (columns) и строками (rows), которые заполняют его метки, по одной строке на задание. 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
Работы, которые исполнители отправили по одной кампании, сначала старые, с подтверждениями: текстовый ответ, ссылки на изображения и видео, ответы по шаблону (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 | Больше 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 |
Если за прохождение теста положен бонус, а на балансе заказчика не хватает средств, работа сохраняется со статусом «на проверке»: вы сможете пополнить баланс и одобрить её в панели.
Исполнителя можно оценить только один раз за тест. Тест должен быть активным и отмеченным как внешний, а 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
Отправьте те же поля в формате JSON на тестовый эндпоинт вместе с тестовым API-ключом. Ничего не сохраняется, и исполнители не затрагиваются: проверяется только ваш запрос.
| Параметр | Описание |
|---|---|
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 | Не передан один из четырёх параметров. |
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 | Каждый исполнитель получает только один результат за тест. |
Worker account is suspended | Исполнитель сейчас не может проходить тесты. |
No remaining positions for this qualification | Все места в тесте заняты. |