DokuEntwickler
TaskerData-API
Erstelle Kampagnen, sammle die Einreichungen der Worker und prüfe sie aus deinem eigenen Code, oder binde einen externen Qualifikationstest an. Jede Anfrage wird mit deinem API-Schlüssel authentifiziert.
Überblick
Mit der Kampagnen-API kann dein Code das tun, was du im Auftraggeber-Dashboard tust: Kampagnen erstellen, ihren Fortschritt verfolgen, Einreichungen samt Nachweisen herunterladen und sie genehmigen oder ablehnen. Über die Endpunkte für externe Qualifikationen kann ein Test auf deiner eigenen Website TaskerData mitteilen, ob jeder Worker bestanden hat.
Alle Anfragen gehen an https://taskerdata.com über HTTPS. Gesendet und empfangen wird JSON.
Über die API erstellte Kampagnen kosten dasselbe und folgen denselben Regeln wie im Dashboard. TaskerData prüft sie, bevor sie live gehen (vertrauenswürdige Auftraggeber gehen sofort live), und Geld wird auf dieselbe Weise reserviert und ausgezahlt.
Authentifizierung
Öffne das Auftraggeber-Dashboard und gehe zu „API“. Dort findest du zwei Schlüssel:
- API-Schlüssel: für echte Anfragen. Die Kampagnen-API liest ihn aus dem Authorization-Header. Der Qualifikations-Endpunkt erwartet ihn als api_token.
- Test-API-Schlüssel: nur für den Test-Endpunkt der Qualifikation, damit du diese Integration ausprobieren kannst, ohne echte Worker zu beeinflussen.
Ein neu erzeugter Schlüssel ersetzt den alten sofort, also aktualisiere dann dein Backend. Du kannst bis zu 3 neue Schlüssel pro Stunde erzeugen.
Wichtig: Halte deinen API-Schlüssel geheim. Nutze ihn nur auf deinem Server, niemals in einer Webseite oder App, die Besucher öffnen können.
Sende deinen API-Schlüssel mit jeder Anfrage an die Kampagnen-API:
Authorization: Bearer YOUR_API_KEYDu kannst bis zu 120 Anfragen pro Minute an die Kampagnen-API senden. Der Header X-RateLimit-Remaining zeigt, wie viele noch übrig sind. Danach erhältst du Status 429, und der Header Retry-After gibt an, wie viele Sekunden du warten musst.
Kampagnen-API
Erstelle Kampagnen und verarbeite die eingehende Arbeit aus deinem eigenen Code.
Kampagnen auflisten
GET/api/v1/campaigns
Deine Kampagnen, die neuesten zuerst. total gibt an, wie viele Kampagnen passen, damit du mit limit und offset durch sie blättern kannst.
Query-Parameter
| Parameter | Beschreibung |
|---|---|
status | Nur Kampagnen mit diesem Status: pending, in review, active, paused, completed, terminated oder rejected |
limit | Wie viele zurückgegeben werden, 1 bis 100 (Standard 20) |
offset | Wie viele übersprungen werden, zum Blättern (Standard 0) |
curl "https://taskerdata.com/api/v1/campaigns?status=active&limit=20" \
-H "Authorization: Bearer $TASKERDATA_API_KEY"Antwort · 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
}Fehlerbeispiel
// status 401
{
"success": false,
"error": {
"code": "invalid_api_key",
"message": "Invalid API key."
}
}Eine Kampagne abrufen
GET/api/v1/campaigns/{id}
Eine Kampagne mit ihren Einstellungen und der Anzahl der Einreichungen, die auf Prüfung oder Überarbeitung warten, genehmigt oder abgelehnt sind. Nutze das, um den Fortschritt einer Kampagne zu verfolgen.
In der Adresse
| Parameter | Beschreibung |
|---|---|
id erforderlich | Die Kampagnen-ID (id in der Kampagnenliste) |
curl "https://taskerdata.com/api/v1/campaigns/CAMPAIGN_ID" \
-H "Authorization: Bearer $TASKERDATA_API_KEY"Antwort · 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
}
}
}Fehlerbeispiel
// status 404
{
"success": false,
"error": {
"code": "not_found",
"message": "Campaign not found."
}
}Eine Kampagne erstellen
POST/api/v1/campaigns
Erstellt eine neue Kampagne und reserviert ihre vollen Kosten von deinem verfügbaren Guthaben, genau wie im Dashboard. Die Antwort enthält die id der Kampagne, ihre Kosten und ihren Status: pending, solange TaskerData sie prüft, oder sofort active, wenn du ein vertrauenswürdiger Auftraggeber bist.
JSON-Body
| Parameter | Beschreibung |
|---|---|
title erforderlich | Kampagnentitel, bis zu 100 Zeichen |
category erforderlich | Eine Kategorie aus GET /api/v1/options. Lass sie weg, wenn du eine Vorlage nutzt |
instructions erforderlich | Was Worker tun sollen, bis zu 5.000 Zeichen |
url | Der Link, den Worker öffnen. Erforderlich bei Kategorien, bei denen needs_url true ist |
payment erforderlich | Vergütung pro Aufgabe in USD, mindestens 0.12 |
positions erforderlich | Wie viele Worker, mindestens 10. Bei einer Datendatei für die Vorlage wird es aus den Zeilen berechnet |
time_to_complete erforderlich | Minuten, die ein Worker zum Fertigstellen hat, 1 bis 120 |
time_to_rate erforderlich | Tage, die du zum Prüfen jeder Einreichung hast, 1 bis 30. Danach wird sie automatisch genehmigt |
proof.text | Eine Textantwort verlangen: sag dem Worker, was er schreiben soll |
proof.images | Screenshots oder Fotos verlangen: eine Beschreibung pro Bild |
proof.video | Ein Video oder eine Aufnahme verlangen: was darauf zu sehen sein soll |
targeting.region | international (Standard), usa, west-europe, east-europe, latin-america oder asia-africa |
targeting.exclude_countries | Ländernamen, die aus der Region ausgeschlossen werden |
targeting.min_success_rate | Minimale Erfolgsquote des Workers: 75 (Standard), 80, 85, 90, 95 oder 100 |
targeting.type, targeting.group_id | Setze type auf "group" und group_id auf eine deiner Worker-Gruppen, um die Aufgabe nur an diese Gruppe zu senden |
qualification_id | Nur Worker, die diesen Qualifikationstest bestanden haben, können die Aufgabe übernehmen |
template | Nutze eine deiner Vorlagen statt einer Anleitung: id, dazu data mit columns und rows, die ihre Platzhalter füllen, eine Zeile pro Aufgabe. answers_per_row (1 bis 5) und rows_per_task (1 bis 50) sind optional |
drip_feed | Worker in Schüben freigeben: min_workers und max_workers (1 bis 50) und interval_minutes (15, 30, 60, 120, 180, 360, 720 oder 1440) |
location | Für lokale Außendienstaufgaben und Mystery Shopping: lat, lng, radius_m (50 bis 50.000) und optional address |
Kategorien, für die du Dateien hochladen musst (etwa Audiotranskription oder Bildmarkierung), Videoaufgaben und Beispielbilder können vorerst nur im Dashboard erstellt werden. Die Anleitung „Kosten und Gebühren“ erklärt, wie der Preis berechnet wird.
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
}
}'Antwort · 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
}
}Fehlerbeispiel
// status 402
{
"success": false,
"error": {
"code": "insufficient_balance",
"message": "Insufficient balance"
}
}Einreichungen abrufen
GET/api/v1/campaigns/{id}/submissions
Die Arbeit, die Worker für eine Kampagne gesendet haben, die ältesten zuerst, mit ihren Nachweisen: die Textantwort, Links zu Bildern und Video, Antworten auf Vorlagen (answers), die bearbeitete Datenzeile und bei Außendienstaufgaben ihr Standort.
In der Adresse
| Parameter | Beschreibung |
|---|---|
id erforderlich | Die Kampagnen-ID (id in der Kampagnenliste) |
Query-Parameter
| Parameter | Beschreibung |
|---|---|
status | to_review (pending und resubmitted), pending, resubmitted, revision_requested, approved oder rejected |
since | Nur Einreichungen, die zu oder nach diesem Zeitpunkt gesendet wurden, zum Beispiel 2026-10-01T00:00:00Z |
after_id | Zum Blättern: nur Einreichungen mit höherer id. Nutze next_after_id der vorherigen Seite |
limit | Wie viele zurückgegeben werden, 1 bis 100 (Standard 50) |
Um regelmäßig neue Arbeit abzuholen, speichere die letzte erhaltene id und sende sie beim nächsten Mal als after_id. raw enthält alles, was der Worker gesendet hat, falls du etwas brauchst, das nicht aufgeführt ist.
curl "https://taskerdata.com/api/v1/campaigns/CAMPAIGN_ID/submissions?status=to_review&after_id=0" \
-H "Authorization: Bearer $TASKERDATA_API_KEY"Antwort · 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
}Fehlerbeispiel
// status 400
{
"success": false,
"error": {
"code": "invalid_status",
"message": "status must be one of: to_review, pending, resubmitted, revision_requested, approved, rejected."
}
}Eine Einreichung prüfen
POST/api/v1/submissions/{id}/review
Genehmigen, ablehnen oder eine Überarbeitung anfordern, genau wie mit den Buttons im Dashboard. Beim Genehmigen wird der Worker aus dem reservierten Geld bezahlt. Beim Ablehnen gehen Vergütung und Gebühr zurück auf dein Guthaben, und der Platz wird für einen anderen Worker frei.
In der Adresse
| Parameter | Beschreibung |
|---|---|
id erforderlich | Die ID der Einreichung |
JSON-Body
| Parameter | Beschreibung |
|---|---|
action erforderlich | approve, reject oder revision |
reason | Bei reject: die Begründung, die der Worker sieht |
note | Bei revision (erforderlich): was der Worker korrigieren soll |
Du kannst eine Einreichung nur prüfen, solange sie auf Prüfung wartet (pending oder resubmitted). Überarbeitungen sind durch das Überarbeitungslimit der Kampagne begrenzt; danach kannst du nur noch genehmigen oder ablehnen.
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."
}'Antwort · 200
{
"success": true,
"submission": {
"id": 1842,
"status": "revision_requested"
},
"balance": {
"available": 65.94,
"reserved": 34.06
}
}Fehlerbeispiel
// status 409
{
"success": false,
"error": {
"code": "already_reviewed",
"message": "Submission already reviewed"
}
}Guthaben prüfen
GET/api/v1/balance
available ist, was du für neue Kampagnen ausgeben kannst, reserved ist für laufende Kampagnen zurückgehalten, und spent ist, was du Workern bisher gezahlt hast.
curl "https://taskerdata.com/api/v1/balance" \
-H "Authorization: Bearer $TASKERDATA_API_KEY"Antwort · 200
{
"success": true,
"balance": {
"available": 65.94,
"reserved": 34.06,
"spent": 212.4
}
}Optionen und IDs
GET/api/v1/options
Listet die Kategorien, die du über die API nutzen kannst (needs_url und needs_location zeigen, welche einen Link oder einen Ort brauchen), die erlaubten Werte für Zielgruppe und Drip-Feed sowie die IDs deiner Vorlagen, Worker-Gruppen und Qualifikationstests.
curl "https://taskerdata.com/api/v1/options" \
-H "Authorization: Bearer $TASKERDATA_API_KEY"Antwort · 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"
}
]
}Fehler
Die Kampagnen-API nutzt HTTP-Statuscodes. Wenn etwas schiefgeht, ist success false, und error enthält einen code, den du in deinem Code prüfen kannst, und eine message zum Anzeigen oder Protokollieren. Die Prüfungen von Kampagnen nutzen dieselben Meldungen wie das Dashboard.
| Status | error.code | Bedeutung |
|---|---|---|
| 400 | invalid_body, invalid_campaign, invalid_region, category_needs_files, invalid_status, invalid_since, invalid_action, note_required | Etwas in der Anfrage fehlt oder ist nicht erlaubt. message sagt, was. |
| 401 | missing_api_key, invalid_api_key | Kein API-Schlüssel, oder der Schlüssel ist falsch oder wurde durch einen neueren ersetzt. |
| 402 | insufficient_balance | Dein verfügbares Guthaben deckt die Kampagne nicht. Lade Guthaben auf und versuch es erneut. |
| 403 | test_key_not_allowed, account_suspended | Nutze deinen echten API-Schlüssel. Ein gesperrtes Konto kann die API nicht nutzen. |
| 404 | not_found | In deinem Konto gibt es keine Kampagne oder Einreichung mit dieser ID. |
| 409 | already_reviewed, review_refused | Die Einreichung wurde bereits geprüft, oder die Prüfung ist gerade nicht möglich, zum Beispiel weil das Überarbeitungslimit erreicht ist. |
| 429 | rate_limited | Mehr als 120 Anfragen in einer Minute. Warte die in Retry-After angegebenen Sekunden. |
| 500 | internal_error | Ein Problem auf unserer Seite. Versuch es erneut und kontaktiere den Support, wenn es weiter passiert. |
Externe Qualifikationstests
Für Qualifikationstests, die auf deiner eigenen Website laufen.
Ein Testergebnis melden Live
GET/api/worker/external_qualification/data
Für Qualifikationstests, die als extern markiert sind. Der Worker öffnet deinen Test über die Qualifikation und gibt seinen Worker-Token auf deiner Website ein. Wenn er fertig ist, rufe diesen Endpunkt mit approve oder reject auf.
| Parameter | Beschreibung |
|---|---|
qualification_id erforderlich | Die ID deines Qualifikationstests |
worker_token erforderlich | Der Worker-Token, den der Worker auf deiner Website eingegeben hat |
api_token erforderlich | Dein API-Schlüssel (der Testschlüssel für den Test-Endpunkt) |
decision erforderlich | approve oder reject |
Zahlt der Test einen Bonus fürs Bestehen und reicht dein Auftraggeber-Guthaben dafür nicht, wird die Einreichung stattdessen als ausstehend gespeichert, damit du Guthaben aufladen und sie im Dashboard genehmigen kannst.
Ein Worker kann pro Test einmal bewertet werden. Der Test muss aktiv und als extern markiert sein, und der API-Schlüssel muss dem Besitzer des Tests gehören.
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"Antwort · 200
{
"success": true
}Fehlerbeispiel
{
"success": false,
"error": "This worker has already been evaluated for this qualification"
}Deine Einrichtung testen
POST/api/worker/external_qualification/data_test
Sende dieselben Felder als JSON an den Test-Endpunkt, mit deinem Test-API-Schlüssel. Es wird nichts gespeichert und kein Worker beeinflusst: Es wird nur deine Anfrage geprüft.
| Parameter | Beschreibung |
|---|---|
qualification_id erforderlich | Die ID deines Qualifikationstests |
worker_token erforderlich | Der Worker-Token, den der Worker auf deiner Website eingegeben hat |
api_token erforderlich | Dein API-Schlüssel (der Testschlüssel für den Test-Endpunkt) |
decision erforderlich | approve oder reject |
Ein falscher Testschlüssel liefert Status 401; fehlende Felder oder eine falsche decision liefern 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"
}'Antwort · 200
{
"success": true
}Fehlerbeispiel
// status 401
{
"statusCode": 401,
"statusMessage": "Invalid API test key"
}Fehler bei Testergebnissen
Der Ergebnis-Endpunkt antwortet immer mit Status 200. Prüfe success: Ist es false, nennt error den Grund:
| error | Bedeutung |
|---|---|
Missing required parameters: qualification_id, worker_token, api_token, decision | Einer der vier Parameter fehlt. |
Decision must be 'approve' or 'reject' | decision hat einen anderen Wert. |
Invalid API token | Der API-Schlüssel ist falsch oder wurde durch einen neueren ersetzt. |
Worker token not found for this qualification | Der Token gehört nicht zu diesem Test. Bitte den Worker, ihn zu überprüfen. |
API token does not belong to the qualification owner | Nutze den Schlüssel des Kontos, das den Test erstellt hat. |
This qualification is not configured for external submissions | Der Test ist nicht als extern markiert. |
This qualification is no longer active | Der Test ist pausiert oder beendet. |
This worker has already been evaluated for this qualification | Jeder Worker bekommt ein Ergebnis pro Test. |
Worker account is suspended | Der Worker kann gerade keine Tests absolvieren. |
No remaining positions for this qualification | Alle Plätze im Test sind vergeben. |