DokumentacjaDla programistów

API TaskerData

Twórz kampanie, zbieraj zgłoszenia wykonawców i oceniaj je z własnego kodu albo podłącz zewnętrzny test kwalifikacyjny. Każde żądanie jest uwierzytelniane twoim kluczem API.

Przegląd

Campaign API pozwala twojemu kodowi robić to, co robisz w panelu zleceniodawcy: tworzyć kampanie, śledzić ich postęp, pobierać zgłoszenia z dowodami oraz je zatwierdzać lub odrzucać. Endpointy kwalifikacji zewnętrznych pozwalają testowi na twojej stronie informować TaskerData, czy każdy wykonawca zdał.

Wszystkie żądania trafiają na https://taskerdata.com przez HTTPS. Wysyłaj i odbieraj JSON.

Kampanie utworzone przez API kosztują tyle samo i podlegają tym samym zasadom co w panelu. TaskerData sprawdza je przed publikacją (kampanie zaufanych zleceniodawców startują od razu), a pieniądze są rezerwowane i wypłacane w ten sam sposób.

Uwierzytelnianie

Otwórz panel zleceniodawcy i przejdź do sekcji API. Znajdziesz tam dwa klucze:

  • Klucz API: do prawdziwych żądań. Campaign API odczytuje go z nagłówka Authorization. Endpoint kwalifikacji przyjmuje go jako api_token.
  • Testowy klucz API: tylko do testowego endpointu kwalifikacji, abyś mógł wypróbować integrację bez wpływu na prawdziwych wykonawców.

Wygenerowanie nowego klucza od razu zastępuje stary, więc zaktualizuj wtedy backend. Możesz wygenerować do 3 nowych kluczy na godzinę.

Ważne: Zachowaj klucz API w tajemnicy. Używaj go tylko na serwerze, nigdy na stronie internetowej ani w aplikacji, którą mogą otworzyć odwiedzający.

Wysyłaj klucz API z każdym żądaniem Campaign API:

Authorization: Bearer YOUR_API_KEY

Możesz wysłać do 120 żądań Campaign API na minutę. Nagłówek X-RateLimit-Remaining pokazuje, ile zostało. Po przekroczeniu limitu otrzymasz status 429, a nagłówek Retry-After poda, ile sekund odczekać.

Campaign API

Twórz kampanie i obsługuj pracę, którą przynoszą, z własnego kodu.

Lista kampanii

GET/api/v1/campaigns

Twoje kampanie, od najnowszych. total to liczba pasujących kampanii, więc możesz je stronicować za pomocą limit i offset.

Parametry zapytania

ParametrOpis
status Tylko kampanie z tym statusem: pending, in review, active, paused, completed, terminated lub rejected
limit Ile zwrócić, od 1 do 100 (domyślnie 20)
offset Ile pominąć, do stronicowania (domyślnie 0)
curl "https://taskerdata.com/api/v1/campaigns?status=active&limit=20" \
  -H "Authorization: Bearer $TASKERDATA_API_KEY"

Odpowiedź · 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
}

Przykład błędu

// status 401
{
  "success": false,
  "error": {
    "code": "invalid_api_key",
    "message": "Invalid API key."
  }
}

Pobierz kampanię

GET/api/v1/campaigns/{id}

Jedna kampania z ustawieniami i liczbą zgłoszeń czekających na ocenę, czekających na poprawkę, zatwierdzonych i odrzuconych. Użyj tego, aby śledzić postęp kampanii.

W adresie

ParametrOpis
id wymaganyID kampanii (id na liście kampanii)
curl "https://taskerdata.com/api/v1/campaigns/CAMPAIGN_ID" \
  -H "Authorization: Bearer $TASKERDATA_API_KEY"

Odpowiedź · 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
    }
  }
}

Przykład błędu

// status 404
{
  "success": false,
  "error": {
    "code": "not_found",
    "message": "Campaign not found."
  }
}

Utwórz kampanię

POST/api/v1/campaigns

Tworzy nową kampanię i rezerwuje jej pełny koszt z dostępnego salda, dokładnie tak jak w panelu. Odpowiedź zawiera id kampanii, jej koszt i status: pending, gdy TaskerData ją sprawdza, lub od razu active, jeśli jesteś zaufanym zleceniodawcą.

Treść JSON

ParametrOpis
title wymaganyTytuł kampanii, do 100 znaków
category wymaganyKategoria z GET /api/v1/options. Pomiń ją, gdy używasz szablonu
instructions wymaganyCo mają zrobić wykonawcy, do 5000 znaków
url Link, który otwierają wykonawcy. Wymagany w kategoriach, w których needs_url ma wartość true
payment wymaganyWynagrodzenie za zadanie w USD, co najmniej 0.12
positions wymaganyIlu wykonawców, co najmniej 10. Przy pliku danych szablonu wynika z liczby wierszy
time_to_complete wymaganyIle minut ma wykonawca na wykonanie, od 1 do 120
time_to_rate wymaganyIle dni masz na ocenę każdego zgłoszenia, od 1 do 30. Potem jest zatwierdzane automatycznie
proof.text Poproś o odpowiedź tekstową: napisz wykonawcy, co ma wpisać
proof.images Poproś o zrzuty ekranu lub zdjęcia: jeden opis na obraz
proof.video Poproś o wideo lub nagranie: co ma pokazywać
targeting.region international (domyślnie), usa, west-europe, east-europe, latin-america lub asia-africa
targeting.exclude_countries Nazwy krajów do wyłączenia z regionu
targeting.min_success_rate Minimalny wskaźnik sukcesu wykonawcy: 75 (domyślnie), 80, 85, 90, 95 lub 100
targeting.type, targeting.group_id Ustaw type na "group" i group_id na jedną ze swoich grup wykonawców, aby wysłać zadanie tylko do tej grupy
qualification_id Zadanie mogą wziąć tylko wykonawcy, którzy zdali ten test kwalifikacyjny
template Użyj jednego ze swoich szablonów zamiast instrukcji: id oraz data z kolumnami i wierszami, które wypełniają jego symbole zastępcze, jeden wiersz na zadanie. answers_per_row (od 1 do 5) i rows_per_task (od 1 do 50) są opcjonalne
drip_feed Udostępniaj wykonawcom partiami: min_workers i max_workers (od 1 do 50) oraz interval_minutes (15, 30, 60, 120, 180, 360, 720 lub 1440)
location Dla Lokalnych zadań terenowych i Tajemniczego klienta: lat, lng, radius_m (od 50 do 50 000) i opcjonalnie address

Na razie kategorie wymagające przesyłanych plików (np. Transkrypcja audio lub Oznaczanie obrazów), zadania wideo i przykładowe obrazy można tworzyć tylko w panelu. Poradnik Koszty i opłaty wyjaśnia, jak obliczana jest cena.

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
    }
  }'

Odpowiedź · 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
  }
}

Przykład błędu

// status 402
{
  "success": false,
  "error": {
    "code": "insufficient_balance",
    "message": "Insufficient balance"
  }
}

Pobierz zgłoszenia

GET/api/v1/campaigns/{id}/submissions

Praca przesłana przez wykonawców w jednej kampanii, od najstarszej, wraz z dowodami: odpowiedzią tekstową, linkami do obrazów i wideo, odpowiedziami z szablonu (answers), wierszem danych, nad którym pracowali, a w zadaniach terenowych — ich lokalizacją.

W adresie

ParametrOpis
id wymaganyID kampanii (id na liście kampanii)

Parametry zapytania

ParametrOpis
status to_review (pending i resubmitted), pending, resubmitted, revision_requested, approved lub rejected
since Tylko zgłoszenia wysłane w tym czasie lub później, np. 2026-10-01T00:00:00Z
after_id Do stronicowania: tylko zgłoszenia z wyższym id. Użyj next_after_id z poprzedniej strony
limit Ile zwrócić, od 1 do 100 (domyślnie 50)

Aby regularnie pobierać nową pracę, zapamiętuj ostatnie otrzymane id i wysyłaj je następnym razem jako after_id. raw zawiera wszystko, co wysłał wykonawca, na wypadek gdybyś potrzebował czegoś, czego nie ma na liście.

curl "https://taskerdata.com/api/v1/campaigns/CAMPAIGN_ID/submissions?status=to_review&after_id=0" \
  -H "Authorization: Bearer $TASKERDATA_API_KEY"

Odpowiedź · 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
}

Przykład błędu

// status 400
{
  "success": false,
  "error": {
    "code": "invalid_status",
    "message": "status must be one of: to_review, pending, resubmitted, revision_requested, approved, rejected."
  }
}

Oceń zgłoszenie

POST/api/v1/submissions/{id}/review

Zatwierdź, odrzuć lub poproś o poprawkę, tak jak przyciskami w panelu. Zatwierdzenie płaci wykonawcy z zarezerwowanych pieniędzy. Odrzucenie zwraca wynagrodzenie i prowizję na twoje saldo i zwalnia miejsce dla innego wykonawcy.

W adresie

ParametrOpis
id wymaganyID zgłoszenia

Treść JSON

ParametrOpis
action wymaganyapprove, reject lub revision
reason Przy reject: powód, który zobaczy wykonawca
note Przy revision (wymagane): co wykonawca ma poprawić

Zgłoszenie możesz ocenić tylko wtedy, gdy czeka na ocenę (pending lub resubmitted). Liczba poprawek jest ograniczona limitem poprawek kampanii; potem możesz tylko zatwierdzić lub odrzucić.

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."
  }'

Odpowiedź · 200

{
  "success": true,
  "submission": {
    "id": 1842,
    "status": "revision_requested"
  },
  "balance": {
    "available": 65.94,
    "reserved": 34.06
  }
}

Przykład błędu

// status 409
{
  "success": false,
  "error": {
    "code": "already_reviewed",
    "message": "Submission already reviewed"
  }
}

Sprawdź saldo

GET/api/v1/balance

available to kwota, którą możesz wydać na nowe kampanie, reserved jest zatrzymane dla aktywnych kampanii, a spent to suma dotychczas wypłacona wykonawcom.

curl "https://taskerdata.com/api/v1/balance" \
  -H "Authorization: Bearer $TASKERDATA_API_KEY"

Odpowiedź · 200

{
  "success": true,
  "balance": {
    "available": 65.94,
    "reserved": 34.06,
    "spent": 212.4
  }
}

Opcje i identyfikatory

GET/api/v1/options

Wymienia kategorie dostępne przez API (needs_url i needs_location pokazują, które wymagają linku lub lokalizacji), dozwolone wartości grupy docelowej i drip feed oraz identyfikatory twoich szablonów, grup wykonawców i testów kwalifikacyjnych.

curl "https://taskerdata.com/api/v1/options" \
  -H "Authorization: Bearer $TASKERDATA_API_KEY"

Odpowiedź · 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"
    }
  ]
}

Błędy

Campaign API używa kodów statusu HTTP. Gdy coś pójdzie nie tak, success ma wartość false, a error zawiera code do sprawdzenia w kodzie i message do wyświetlenia lub zalogowania. Kontrole kampanii używają tych samych komunikatów co panel.

Statuserror.codeCo oznacza
400invalid_body, invalid_campaign, invalid_region, category_needs_files, invalid_status, invalid_since, invalid_action, note_requiredCzegoś w żądaniu brakuje lub jest niedozwolone. message mówi, czego.
401missing_api_key, invalid_api_keyBrak klucza API albo klucz jest błędny lub został zastąpiony nowszym.
402insufficient_balanceDostępne saldo nie pokrywa kampanii. Doładuj saldo i spróbuj ponownie.
403test_key_not_allowed, account_suspendedUżyj produkcyjnego klucza API. Zawieszone konto nie może korzystać z API.
404not_foundNa twoim koncie nie ma kampanii ani zgłoszenia o tym ID.
409already_reviewed, review_refusedZgłoszenie zostało już ocenione albo ocena nie jest teraz możliwa, np. dlatego, że osiągnięto limit poprawek.
429rate_limitedPonad 120 żądań na minutę. Odczekaj liczbę sekund podaną w Retry-After.
500internal_errorProblem po naszej stronie. Spróbuj ponownie, a jeśli się powtarza, skontaktuj się z pomocą.

Zewnętrzne testy kwalifikacyjne

Dla testów kwalifikacyjnych działających na twojej stronie.

Przekaż wynik testu Produkcja

GET/api/worker/external_qualification/data

Dla testów kwalifikacyjnych oznaczonych jako zewnętrzne. Wykonawca otwiera twój test z poziomu kwalifikacji i wpisuje swój token wykonawcy na twojej stronie. Gdy skończy, wywołaj ten endpoint z wartością approve lub reject.

ParametrOpis
qualification_id wymaganyID twojego testu kwalifikacyjnego
worker_token wymaganyToken wykonawcy wpisany przez wykonawcę na twojej stronie
api_token wymaganyTwój klucz API (klucz testowy dla testowego endpointu)
decision wymaganyapprove lub reject

Jeśli test płaci premię za zdanie, a saldo zleceniodawcy jej nie pokrywa, zgłoszenie zostaje zapisane jako oczekujące, abyś mógł doładować saldo i zatwierdzić je w panelu.

Wykonawcę można ocenić raz na test. Test musi być aktywny i oznaczony jako zewnętrzny, a klucz API musi należeć do właściciela testu.

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"

Odpowiedź · 200

{
  "success": true
}

Przykład błędu

{
  "success": false,
  "error": "This worker has already been evaluated for this qualification"
}

Przetestuj konfigurację

POST/api/worker/external_qualification/data_test

Wyślij te same pola jako JSON na testowy endpoint, używając testowego klucza API. Nic nie jest zapisywane i żaden wykonawca nie jest dotknięty: sprawdzane jest tylko twoje żądanie.

ParametrOpis
qualification_id wymaganyID twojego testu kwalifikacyjnego
worker_token wymaganyToken wykonawcy wpisany przez wykonawcę na twojej stronie
api_token wymaganyTwój klucz API (klucz testowy dla testowego endpointu)
decision wymaganyapprove lub reject

Błędny klucz testowy zwraca status 401; brakujące pola lub błędna decyzja zwracają status 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"
  }'

Odpowiedź · 200

{
  "success": true
}

Przykład błędu

// status 401
{
  "statusCode": 401,
  "statusMessage": "Invalid API test key"
}

Błędy wyniku testu

Endpoint wyniku zawsze odpowiada statusem 200. Sprawdź success: gdy ma wartość false, pole error podaje przyczynę:

errorCo oznacza
Missing required parameters: qualification_id, worker_token, api_token, decisionBrakuje jednego z czterech parametrów.
Decision must be 'approve' or 'reject'decision ma inną wartość.
Invalid API tokenKlucz API jest błędny lub został zastąpiony nowszym.
Worker token not found for this qualificationToken nie należy do tego testu. Poproś wykonawcę o jego sprawdzenie.
API token does not belong to the qualification ownerUżyj klucza konta, które utworzyło test.
This qualification is not configured for external submissionsTest nie jest oznaczony jako zewnętrzny.
This qualification is no longer activeTest jest wstrzymany lub zakończony.
This worker has already been evaluated for this qualificationKażdy wykonawca dostaje jeden wynik na test.
Worker account is suspendedWykonawca nie może teraz zdawać testów.
No remaining positions for this qualificationWszystkie miejsca w teście są zajęte.