DEVELOPER DOCUMENTATION
Create a Project To-do
Create one item and its initial assignments atomically, with an explicit audience and a request-bound idempotency key.
/api/public/v1/project-todos/manageCreates one to-do item, its first immutable version, and every initial assignment in a single transaction. Requires project_todos:write, a claimed account, and employer access to the job.
actionstringbodyrequiredcreate_itemidempotencyKeystringbodyrequired8–200 characters, bound to the complete request. Reuse the same key only to retry the identical request.
jobIdstringbodyrequiredaudiencestringbodyrequiredACTIVE, FUTURE, ACTIVE_AND_FUTURE, or SELECTED. There is no default — omission fails with 400.
selectedContractIdsstring[]bodySELECTED only: a non-empty, duplicate-free list of active contracts on this exact job (up to 500). Invalid IDs reject the whole request with per-ID reasons.
preflightReceiptstringbodyRequired for ACTIVE, FUTURE, and ACTIVE_AND_FUTURE. Mint it with preflight.
versionobjectbodyrequiredThe worker-facing definition: title, type, optional description, content, ownerRole, required, priority (NORMAL | HIGH | URGENT), blockingMode (NONE | IMMEDIATE | AFTER_DUE), blockingScope, dueOffsetMinutes, reminderPolicy, and completionConfig.
categoryIdstringbodykeystringbodyautoAssignNewHiresbooleanbodyAdds future-hire auto-assignment to ACTIVE. Not allowed with SELECTED.
allowDuplicatebooleanbodyOverrides the 409 LIKELY_DUPLICATE refusal when an active item already carries this exact request.
Response
Section titled “Response”{ "ok": true, "action": "create_item", "itemId": "…", "versionId": "…", "audience": "SELECTED", "includesFutureHires": false, "fanOut": { "matchedContracts": 1, "createdAssignments": 1, "assignmentIds": ["…"] }, "recipients": [{ "contractId": "…", "workerUserId": "…", "displayName": "Alex B." }], "replayed": false, "warnings": []}recipients are the masked people this exact request was verified against. On an identical-request retry, replayed is true, createdAssignments is 0, and the roster is not re-resolved — a person hired after the original create is never silently added.
Failure modes
Section titled “Failure modes”Beyond the common errors: the reserved time-tracking setup to-do cannot be authored here, and integration-type items require the matching configured provider on the job.