Can You Just
API v1 · Documentation navigation

DEVELOPER DOCUMENTATION / API v1

Incoming work

Accept, plan, reassign and complete Incoming work routed to a worker, using recipient ownership and request revision preconditions.

Work routed to a recipient

Incoming work is a request routed to a resource before it is committed to that recipient’s capacity. Floating work has no reserved allocation. A suggested start is advice, not acceptance. The mapped worker can read and act only on its own Incoming requests.

curl -i 'https://cyj.example/api/v1/incoming?includeAccepted=true' \
  -H "Authorization: Bearer $CYJ_API_TOKEN"

GET /api/v1/incoming requires tasks:read and returns floating work by default. includeAccepted=true also returns owned planned, inprogress and completed requests, enabling later completion of accepted work. Results are unpaginated, ordered by priority, requestedAtUtc, then ID; an empty result is [].

Incoming item · one element of the list · JSON response
{
  "id": 92,
  "title": "Review release summary",
  "details": null,
  "estimatedMinutes": 15,
  "priority": "normal",
  "requester": "Alice Morgan",
  "requestedAtUtc": "2026-10-19T09:00:00Z",
  "status": "floating",
  "suggestedStart": null,
  "suggestionReason": "No suggestion available",
  "plannedStart": null,
  "response": null,
  "responseState": "open",
  "actualStartUtc": null,
  "actualEffortMinutes": null,
  "etag": "\u002211111111-1111-4111-8111-111111111111\u0022"
}

Use the Incoming revision

Each action requires tasks:update, the item’s quoted revision etag in If-Match and a required Idempotency-Key. This is not the task ETag and does not use a task claim. Re-read the queue after a successful action for the next current revision. Missing preconditions are 428; malformed/stale ones are 412.

Choose one action

POST operationExact bodyEffect
/incoming/92/startNo body or {}Commit/start now.
/incoming/92/planRequired plannedStartCommit at an explicit London planning time.
/incoming/92/reassignRequired positive assigneeIdMove floating work to another recipient.
/incoming/92/completeOptional response, up to 20,000 charactersRecord the outcome; no inferred factual effort.

All paths use the /api/v1 prefix; all successful actions return 204 without a body. Irrelevant fields are rejected: a start request cannot silently carry a plannedStart or reassignment. Domain/lifecycle conflicts remain 409.

One coherent planned lifecycle

Alice routes fictional Incoming 92, “Review release summary”, to Atlas. Atlas reads the floating request and chooses to plan it for 14:00. The suggestedStart may be null and did not reserve capacity. Planning does not create factual actual start/effort.

Plan Incoming for later · curl request
curl -i -X POST 'https://cyj.example/api/v1/incoming/92/plan' \
  -H "Authorization: Bearer $CYJ_API_TOKEN" \
  -H 'If-Match: "11111111-1111-4111-8111-111111111111"' \
  -H 'Idempotency-Key: example-plan-001' \
  -H 'Content-Type: application/json' \
  --data-raw '{"plannedStart":"2026-10-19T14:00:00"}'

Later, Atlas reads /incoming?includeAccepted=true, obtains the new etag, and completes that same Incoming 92 with the known outcome. Replace the illustrated initial revision below with the current one; use a new key for completion.

Complete Incoming with an outcome · curl request
curl -i -X POST 'https://cyj.example/api/v1/incoming/92/complete' \
  -H "Authorization: Bearer $CYJ_API_TOKEN" \
  -H 'If-Match: "11111111-1111-4111-8111-111111111111"' \
  -H 'Idempotency-Key: example-complete-001' \
  -H 'Content-Type: application/json' \
  --data-raw '{"response":"Summary checked and approved."}'

Alternative choices while floating

Starting now and reassignment are alternatives to planning this request, not additional actions to send blindly after the lifecycle above.

Start Incoming now · curl request
curl -i -X POST 'https://cyj.example/api/v1/incoming/92/start' \
  -H "Authorization: Bearer $CYJ_API_TOKEN" \
  -H 'If-Match: "11111111-1111-4111-8111-111111111111"' \
  -H 'Idempotency-Key: example-start-001' \
  -H 'Content-Type: application/json' \
  --data-raw '{}'
Reassign floating Incoming · curl request
curl -i -X POST 'https://cyj.example/api/v1/incoming/92/reassign' \
  -H "Authorization: Bearer $CYJ_API_TOKEN" \
  -H 'If-Match: "11111111-1111-4111-8111-111111111111"' \
  -H 'Idempotency-Key: example-reassign-001' \
  -H 'Content-Type: application/json' \
  --data-raw '{"assigneeId":9}'

See concurrency, planning time, safe retries and assistance-stage versus Incoming identity.