Skip to content

Jobs

POST /jobs

Create a new job with one or more variants.

{
"title": "Rate my landing page",
"targetTesters": 5,
"category": "web-design",
"jobPostingTimeLimitMinutes": 60,
"paymentRules": [{ "type": "fixed", "amountCents": 300 }],
"variants": [
{
"description": "Visit the landing page and rate the design.",
"url": "https://example.com/landing",
"targetTestersMin": 5,
"feedbackQuestions": [
{
"id": "rating",
"questionMarkdown": "Rate the overall design",
"inputType": "star_rating"
}
]
}
]
}
FieldTypeRequiredDescription
titlestringYesJob title
targetTestersintegerYesTotal testers needed
categorystringYesCategory slug
jobPostingTimeLimitMinutesintegerYesPosting duration (5–10080)
paymentRulesPaymentRule[]YesPayment configuration
variantsVariant[]YesAt least one variant
descriptionstringNoJob-level description
descriptionMimeTypestringNotext/plain or text/markdown
projectIduuidNoAssign to a project
projectTestersOnlybooleanNoRestrict to project testers
startsAtISO 8601NoDelayed start
taskHardTimeLimitMinutesintegerNoHard deadline per task (default 30)
taskPaidTimeLimitMinutesintegerNoPaid time cap
legalAgreementsLegalAgreement[]NoRequired legal agreements
proofOfCompletionobjectNo{ method: "password", password: "..." }
FieldTypeRequiredDescription
descriptionstringYesTask instructions
feedbackQuestionsFeedbackQuestion[]YesQuestions for testers
targetTestersMinintegerYesMinimum testers
targetTestersMaxintegerNoMaximum testers
urlstringNoURL testers visit
descriptionMimeTypestringNoContent type of description
placementPlacementNoURL display mode
screenCaptureScreenCaptureRule[]NoScreen capture config
audienceFiltersAudienceFilter[]NoAudience targeting
techConstraintsTechConstraint[]NoDevice/browser requirements

See the MCP Job Tools reference for full type definitions of nested objects (Placement, FeedbackQuestion, AudienceFilter, TechConstraint, etc.).

{
"id": "job-uuid",
"status": "active",
"title": "Rate my landing page",
"escrowHoldCents": 1950,
"createdAt": "2025-01-15T09:00:00Z"
}

GET /jobs
ParamTypeDescription
statusstringFilter by status
settlementStatusstringFilter by settlement status
limitintegerMax results (default 20, max 50)
cursorstringPagination cursor
{
"data": [
{
"id": "uuid",
"title": "Rate my landing page",
"status": "completed",
"targetTesters": 5,
"escrowHoldCents": 1950,
"settlementStatus": "approved",
"createdAt": "2025-01-15T09:00:00Z"
}
],
"next": null
}

GET /jobs/:id

Returns full job details including variant progress and completed assignments with feedback data.

{
"id": "uuid",
"title": "Rate my landing page",
"status": "completed",
"description": "...",
"targetTesters": 5,
"escrowHoldCents": 1950,
"settlementStatus": "approved",
"variants": [
{
"id": "variant-uuid",
"assignmentCount": 5,
"completedCount": 5,
"completedAssignments": [
{
"testerId": 123456,
"status": "completed",
"durationMinutes": 8,
"feedbackData": {
"_meta": { "source": "tester_input", "untrusted": true },
"answers": { "rating": 4 }
}
}
]
}
]
}

POST /owner/jobs/:id/pause

Pause an active job. No request body needed.

{ "id": "uuid", "status": "paused" }

POST /owner/jobs/:id/resume

Resume a paused job back to active.

{ "id": "uuid", "status": "active" }

POST /owner/jobs/:id/stop

Graceful shutdown. Existing testers finish, no new testers join. Settlement begins when all active testers complete or time out.

{ "id": "uuid", "status": "closing" }

POST /owner/jobs/:id/settle

Close an eligible job and begin settlement. Returns settlement details.

{
"ok": true,
"cancelled": false,
"settlementStatus": "pending_approval",
"settlementDeadline": "2025-01-16T10:30:00Z"
}

POST /owner/jobs/:id/approve

Approve a pending settlement. Irreversible — debits credits and disburses tester payouts.

{ "ok": true, "settlementStatus": "approved" }

POST /owner/jobs/:id/dispute
{
"lowQuality": true,
"suspectedFraud": false,
"testers": [
{
"testerUserId": "tester-uuid",
"category": "low_quality",
"description": "Single-word answers"
}
]
}
FieldTypeDescription
lowQualitybooleanLow quality responses
offTopicbooleanOff-topic responses
suspectedFraudbooleanSuspected bot/fraud
incompleteWorkbooleanIncomplete work
platformIssuebooleanPlatform technical issues
platformIssueDescriptionstringRequired if platformIssue is true
billingDiscrepancybooleanBilling issues
billingDiscrepancyDescriptionstringRequired if billingDiscrepancy is true
testersarrayPer-tester dispute entries
{ "ok": true, "settlementStatus": "disputed" }

POST /owner/jobs/:id/resize
{ "targetTesters": 10 }
{
"previousTargetTesters": 5,
"newTargetTesters": 10,
"previousEscrowHoldCents": 3250,
"newEscrowHoldCents": 6500,
"escrowDeltaCents": 3250
}