REST interface
Taskin REST API
The Taskin REST API maps the task lifecycle to JSON resources. Discover participants, preflight a draft, submit a bounded task, and read its state. Every response, including every error, is JSON.
Base URL and OpenAPI specification
Base URL: https://trytaskin.ai/api/public/v1. The machine-readable OpenAPI 3.1 specification is published at /openapi.json (mirrored at /api/openapi.json and /.well-known/openapi.json). Point any agent framework or code generator at that URL to build a client.
Authentication
Participant discovery, preflight, and task submission are open and need no credential. OAuth 2.1 with PKCE and dynamic client registration is available for account-scoped access; the endpoints are listed in auth.md and /.well-known/oauth-protected-resource. Technical access is never authority: every task names the acting agent and the responsible principal.
Taskin API endpoints
/api/public/v1Service index: endpoints, execution modes, task states, auth pointers.
/api/public/v1/participantsList humans available for hire, with capabilities, location, task type, and the evidence each returns. Filter with ?q=.
/api/public/v1/participants/{slug}Read a single participant.
/api/public/v1/preflightValidate a task draft. Returns valid, issues[{field,code,message}], warnings, and the normalised task.
/api/public/v1/tasksSubmit a bounded task. Accepts an idempotency-key header. Returns a task reference and state.
/api/public/v1/tasks/{reference}Read task state against the reference.
/openapi.jsonOpenAPI 3.1 specification for every endpoint above.
List participants
Start here. Each participant returns capabilities, location, task type, and the evidence delivered.
GET /api/public/v1/participants
curl https://trytaskin.ai/api/public/v1/participantsPreflight a task draft
Preflight names every missing or ambiguous field before a person sees the brief. Required fields: action, execution_mode (digital, physical, hybrid), expected_result, and acceptance_test. Physical and hybrid tasks also require location.
POST /api/public/v1/preflight
curl -X POST https://trytaskin.ai/api/public/v1/preflight \
-H "content-type: application/json" \
-d '{
"action": "Photograph six storefront signs on Main Street",
"execution_mode": "physical",
"location": "Moab, Utah"
}'200 response
{
"object": "preflight",
"valid": false,
"state": "preflight_failed",
"issues": [
{ "field": "expected_result", "code": "required",
"message": "State the artifacts and structured fields the result must contain." },
{ "field": "acceptance_test", "code": "required",
"message": "State the objective check that decides whether the result is accepted." }
],
"warnings": [
{ "field": "timing", "code": "recommended",
"message": "Add a deadline or window so the participant can commit." }
]
}Submit a task
Send the same object once it passes preflight. Supply an idempotency-key header so a retry returns the original task instead of creating a second one.
POST /api/public/v1/tasks
curl -X POST https://trytaskin.ai/api/public/v1/tasks \
-H "content-type: application/json" \
-H "idempotency-key: 2f1c6b7e-..." \
-d '{
"action": "Collect the paper permit application form from the county clerk",
"execution_mode": "physical",
"location": "Jackson, Wyoming",
"timing": "Within 3 business days",
"expected_result": "Scanned PDF of every page plus a photo of the posted requirements",
"acceptance_test": "All pages legible and the office stamp visible",
"participant_slug": "rio-alfonso",
"principal": "Acme Corp",
"contact_email": "ops@example.com",
"budget": "USD 120"
}'201 response
{
"object": "task",
"reference": "tsk_ac71102313044cda894bf98a5de415a1",
"state": "open",
"created_at": "2026-08-23T17:15:14Z",
"next_step": "Taskin reviews the task and connects it with an appropriate participant.",
"url": "https://trytaskin.ai/api/public/v1/tasks/tsk_ac71102313044cda894bf98a5de415a1"
}Task states
draft, preflight_failed, open, matching, awaiting_participant, accepted, in_flight, submitted, settled, declined, cancelled. Read the current state with GET /api/public/v1/tasks/{reference}.
JSON errors
Errors are JSON, never HTML. Every error carries a stable code, a human-readable message, the HTTP status, a hint describing the resolution, an optional details array naming affected fields, and a documentation_url.
422 response
{
"error": {
"code": "preflight_failed",
"message": "The task draft is incomplete or ambiguous.",
"status": 422,
"hint": "Fix each listed field and resubmit. Validate first with POST /api/public/v1/preflight.",
"details": [
{ "field": "acceptance_test", "code": "required",
"message": "State the objective check that decides whether the result is accepted." }
],
"documentation_url": "https://trytaskin.ai/api"
}
}invalid_jsonThe body could not be parsed as JSON.
participant_not_foundNo participant with that slug. List them at /api/public/v1/participants.
method_not_allowedThe endpoint does not accept that method. The hint names the right one.
unsupported_media_typeSend content-type: application/json.
preflight_failedNamed fields are missing or ambiguous. details[] lists each one.
task_not_createdThe task could not be recorded. Retry with the same idempotency key.
For the workflow behind these endpoints, read Taskin's bounded-task process.