Skip to main content

Tasks API

Tasks are the core resource in WorkFunder. A task represents a discrete unit of physical work at a specific location that a verified worker can complete.

Base path: /v1/tasks


Create Task

POST /v1/tasks

Create a new task. The task starts in pending status and must be funded before it becomes visible to workers.

Request Body

FieldTypeRequiredDescription
titlestringYesTask title (1-200 characters)
descriptionstringYesDetailed description (1-2000 characters)
instructionsstringNoPrivate instructions shown only to the assigned worker (max 5000 characters)
categorystringYesTask category (see below)
required_skillsstring[]NoSkills the worker must have
locationobjectYesTask location (see below)
budget_centsintegerYesTotal budget in cents (minimum 500 = $5.00)
prioritystringNo"normal" (default) or "urgent"
deadlinestringNoISO 8601 datetime deadline
proof_typesstring[]NoRequired proof types: "photo", "video", "signature" (default: ["photo"])
metadataobjectNoArbitrary key-value pairs for your reference

Location Object

FieldTypeRequiredDescription
addressstringNoStreet address
citystringYesCity name
statestringYesState code (e.g., "NY")
latitudenumberYesLatitude (-90 to 90)
longitudenumberYesLongitude (-180 to 180)

Task Categories

photography | inspection | delivery | data_collection | mystery_shopping | installation | assembly | cleaning | survey | retail_audit | event | notary | other

Worker Skills

photography | data_collection | mystery_shopping | delivery | inspection | installation | assembly | cleaning | driving | spanish_speaking | mandarin_speaking | data_entry | signage_placement | flyer_distribution | survey_taking | retail_audit | price_checking | inventory_count | window_display | product_demo | event_staffing | notary | signature_collection

Example Request

curl -X POST https://api.workfunder.com/v1/tasks \
-H "Authorization: Bearer wf_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Photograph storefront at 123 Main St",
"description": "Take 3 clear photos of the storefront, including signage, entrance, and full building facade. Photos should be taken during business hours with good lighting.",
"instructions": "Please arrive between 10am-4pm. Take photos from across the street for the full facade shot. Include the street number in at least one photo.",
"category": "photography",
"required_skills": ["photography"],
"location": {
"address": "123 Main St",
"city": "Brooklyn",
"state": "NY",
"latitude": 40.6782,
"longitude": -73.9442
},
"budget_cents": 5000,
"priority": "normal",
"proof_types": ["photo"],
"metadata": {
"internal_ref": "STORE-789",
"client": "retail-audit-q1"
}
}'

Example Response

{
"id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"developer_id": "d1e2f3a4b5c6d1e2f3a4b5c6d1e2f3a4",
"title": "Photograph storefront at 123 Main St",
"description": "Take 3 clear photos of the storefront, including signage, entrance, and full building facade. Photos should be taken during business hours with good lighting.",
"instructions": "Please arrive between 10am-4pm. Take photos from across the street for the full facade shot. Include the street number in at least one photo.",
"category": "photography",
"required_skills": ["photography"],
"location_address": "123 Main St",
"location_city": "Brooklyn",
"location_state": "NY",
"location_latitude": 40.6782,
"location_longitude": -73.9442,
"budget_cents": 5000,
"platform_fee_cents": 800,
"worker_payout_cents": 4200,
"priority": "normal",
"status": "pending",
"environment": "live",
"worker_id": null,
"deadline": null,
"max_proof_attempts": 3,
"proof_types": ["photo"],
"metadata": {
"internal_ref": "STORE-789",
"client": "retail-audit-q1"
},
"assigned_at": null,
"started_at": null,
"completed_at": null,
"cancelled_at": null,
"created_at": "2026-02-24T12:00:00.000Z",
"updated_at": "2026-02-24T12:00:00.000Z"
}

Pricing Breakdown

The budget_cents you specify is the total amount charged. The platform fee is calculated automatically:

Task TypePlatform FeeWorker Payout
Standard task16% of budget84% of budget
Bounty20% of budget80% of budget
Enterprise tier12% of budget88% of budget

For a $50.00 task (budget_cents: 5000):

  • Platform fee: $8.00 (platform_fee_cents: 800)
  • Worker payout: $42.00 (worker_payout_cents: 4200)

Errors

CodeStatusDescription
VALIDATION_ERROR400Invalid request body
TASK_LIMIT_EXCEEDED403Monthly task limit reached for your tier

List Tasks

GET /v1/tasks

Retrieve a paginated list of your tasks. Only returns tasks belonging to the authenticated developer.

Query Parameters

ParameterTypeDefaultDescription
statusstring--Filter by status (e.g., funded, completed)
limitinteger20Results per page (max 100)
offsetinteger0Number of results to skip

Example Request

curl "https://api.workfunder.com/v1/tasks?status=funded&limit=10&offset=0" \
-H "Authorization: Bearer wf_live_your_key"

Example Response

{
"data": [
{
"id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"title": "Photograph storefront at 123 Main St",
"status": "funded",
"category": "photography",
"budget_cents": 5000,
"location_city": "Brooklyn",
"location_state": "NY",
"priority": "normal",
"worker_id": null,
"created_at": "2026-02-24T12:00:00.000Z",
"updated_at": "2026-02-24T12:00:00.000Z"
}
],
"meta": {
"total": 1,
"limit": 10,
"offset": 0
}
}

Get Task

GET /v1/tasks/:id

Retrieve a single task by ID.

Path Parameters

ParameterTypeDescription
idstringThe task ID (32-character hex string)

Example Request

curl https://api.workfunder.com/v1/tasks/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 \
-H "Authorization: Bearer wf_live_your_key"

Example Response

Returns the full task object (same format as the Create Task response).

Errors

CodeStatusDescription
TASK_NOT_FOUND404Task does not exist or does not belong to your account

Update Task

PATCH /v1/tasks/:id

Update a task. Only tasks in pending status can be updated. Only certain fields are mutable.

Request Body

FieldTypeDescription
titlestringUpdated title (1-200 characters)
descriptionstringUpdated description (1-2000 characters)
instructionsstringUpdated private instructions (max 5000 characters)
deadlinestringUpdated deadline (ISO 8601)

All fields are optional. Only include the fields you want to change.

Example Request

curl -X PATCH https://api.workfunder.com/v1/tasks/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 \
-H "Authorization: Bearer wf_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Updated: Photograph storefront at 123 Main St",
"deadline": "2026-03-01T17:00:00.000Z"
}'

Example Response

Returns the updated task object.

Errors

CodeStatusDescription
TASK_NOT_FOUND404Task not found
INVALID_TASK_STATE409Task is not in a mutable state (pending)

Cancel Task

POST /v1/tasks/:id/cancel

Cancel a task. Cancellation behavior depends on the current task status:

Task StatusCancellation Result
pendingCancelled, no charge
fundedCancelled, full refund
postedCancelled, full refund
assignedCancelled, 50% refund (worker compensated for time)
in_progressCannot cancel

Example Request

curl -X POST https://api.workfunder.com/v1/tasks/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4/cancel \
-H "Authorization: Bearer wf_live_your_key"

Example Response

{
"id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"status": "cancelled",
"cancelled_at": "2026-02-24T14:30:00.000Z",
"updated_at": "2026-02-24T14:30:00.000Z"
}

Errors

CodeStatusDescription
TASK_NOT_FOUND404Task not found
INVALID_TASK_STATE409Task cannot be cancelled in its current state
info

Funding: Tasks are automatically funded via Stripe when created. If you have a default payment method configured, the task auto-funds on creation. Otherwise, the response includes a payment_client_secret you can use to complete payment via Stripe.js.