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_KEY

Du 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

ParameterBeschreibung
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

ParameterBeschreibung
id erforderlichDie 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

ParameterBeschreibung
title erforderlichKampagnentitel, bis zu 100 Zeichen
category erforderlichEine Kategorie aus GET /api/v1/options. Lass sie weg, wenn du eine Vorlage nutzt
instructions erforderlichWas Worker tun sollen, bis zu 5.000 Zeichen
url Der Link, den Worker öffnen. Erforderlich bei Kategorien, bei denen needs_url true ist
payment erforderlichVergütung pro Aufgabe in USD, mindestens 0.12
positions erforderlichWie viele Worker, mindestens 10. Bei einer Datendatei für die Vorlage wird es aus den Zeilen berechnet
time_to_complete erforderlichMinuten, die ein Worker zum Fertigstellen hat, 1 bis 120
time_to_rate erforderlichTage, 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

ParameterBeschreibung
id erforderlichDie Kampagnen-ID (id in der Kampagnenliste)

Query-Parameter

ParameterBeschreibung
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

ParameterBeschreibung
id erforderlichDie ID der Einreichung

JSON-Body

ParameterBeschreibung
action erforderlichapprove, 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.

Statuserror.codeBedeutung
400invalid_body, invalid_campaign, invalid_region, category_needs_files, invalid_status, invalid_since, invalid_action, note_requiredEtwas in der Anfrage fehlt oder ist nicht erlaubt. message sagt, was.
401missing_api_key, invalid_api_keyKein API-Schlüssel, oder der Schlüssel ist falsch oder wurde durch einen neueren ersetzt.
402insufficient_balanceDein verfügbares Guthaben deckt die Kampagne nicht. Lade Guthaben auf und versuch es erneut.
403test_key_not_allowed, account_suspendedNutze deinen echten API-Schlüssel. Ein gesperrtes Konto kann die API nicht nutzen.
404not_foundIn deinem Konto gibt es keine Kampagne oder Einreichung mit dieser ID.
409already_reviewed, review_refusedDie Einreichung wurde bereits geprüft, oder die Prüfung ist gerade nicht möglich, zum Beispiel weil das Überarbeitungslimit erreicht ist.
429rate_limitedMehr als 120 Anfragen in einer Minute. Warte die in Retry-After angegebenen Sekunden.
500internal_errorEin 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.

ParameterBeschreibung
qualification_id erforderlichDie ID deines Qualifikationstests
worker_token erforderlichDer Worker-Token, den der Worker auf deiner Website eingegeben hat
api_token erforderlichDein API-Schlüssel (der Testschlüssel für den Test-Endpunkt)
decision erforderlichapprove 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.

ParameterBeschreibung
qualification_id erforderlichDie ID deines Qualifikationstests
worker_token erforderlichDer Worker-Token, den der Worker auf deiner Website eingegeben hat
api_token erforderlichDein API-Schlüssel (der Testschlüssel für den Test-Endpunkt)
decision erforderlichapprove 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:

errorBedeutung
Missing required parameters: qualification_id, worker_token, api_token, decisionEiner der vier Parameter fehlt.
Decision must be 'approve' or 'reject'decision hat einen anderen Wert.
Invalid API tokenDer API-Schlüssel ist falsch oder wurde durch einen neueren ersetzt.
Worker token not found for this qualificationDer Token gehört nicht zu diesem Test. Bitte den Worker, ihn zu überprüfen.
API token does not belong to the qualification ownerNutze den Schlüssel des Kontos, das den Test erstellt hat.
This qualification is not configured for external submissionsDer Test ist nicht als extern markiert.
This qualification is no longer activeDer Test ist pausiert oder beendet.
This worker has already been evaluated for this qualificationJeder Worker bekommt ein Ergebnis pro Test.
Worker account is suspendedDer Worker kann gerade keine Tests absolvieren.
No remaining positions for this qualificationAlle Plätze im Test sind vergeben.