Workflow (Task Management) API Task lists, tasks, worklogs, interjections, approvals, and todos.

Base URL: https://api.fast.io/current/ Auth: Bearer {jwt_token} Format: JSON

All workflow endpoints (except toggle) require the workflow feature to be enabled on the target workspace or share. All GET endpoints support format=md query parameter for Markdown output (AI agent-friendly).

Endpoint Summary

Feature Toggle

MethodEndpointDescription
POST/current/workspace/{workspace_id}/workflow/enable/Enable workflow on a workspace
POST/current/workspace/{workspace_id}/workflow/disable/Disable workflow on a workspace
POST/current/share/{share_id}/workflow/enable/Enable workflow on a share
POST/current/share/{share_id}/workflow/disable/Disable workflow on a share

Task Lists & Tasks

MethodEndpointDescription
GET/current/tasks/workspace/{workspace_id}/List task lists in a workspace
GET/current/tasks/share/{share_id}/List task lists in a share
POST/current/tasks/workspace/{workspace_id}/create/Create a task list in a workspace
POST/current/tasks/share/{share_id}/create/Create a task list in a share
GET/current/tasks/{list_id}/details/Get task list details (includes tasks)
POST/current/tasks/{list_id}/update/Update a task list
POST/current/tasks/{list_id}/delete/Soft-delete a task list
GET/current/tasks/{list_id}/items/List tasks in a task list
POST/current/tasks/{list_id}/items/create/Create a task
GET/current/tasks/{list_id}/items/{task_id}/Get task details
POST/current/tasks/{list_id}/items/{task_id}/update/Update a task
POST/current/tasks/{list_id}/items/{task_id}/delete/Soft-delete a task
POST/current/tasks/{list_id}/items/{task_id}/status/Change task status
POST/current/tasks/{list_id}/items/{task_id}/assign/Assign/unassign a task
POST/current/tasks/{list_id}/items/bulk-status/Bulk update task statuses

Worklogs

MethodEndpointDescription
GET/current/worklogs/{entity_type}/{entity_id}/List worklog entries
POST/current/worklogs/{entity_type}/{entity_id}/append/Append a worklog entry
POST/current/worklogs/{entity_type}/{entity_id}/interjection/Create an interjection
GET/current/worklogs/{entity_type}/{entity_id}/interjections/List unacknowledged interjections
GET/current/worklogs/{entry_id}/details/Get entry details
POST/current/worklogs/{entry_id}/acknowledge/Acknowledge an interjection

Approvals

MethodEndpointDescription
GET/current/approvals/workspace/{workspace_id}/List approvals in a workspace
GET/current/approvals/share/{share_id}/List approvals in a share
POST/current/approvals/{entity_type}/{entity_id}/create/Create an approval request
GET/current/approvals/{approval_id}/details/Get approval details
POST/current/approvals/{approval_id}/resolve/Resolve an approval

Todos

MethodEndpointDescription
GET/current/todos/workspace/{workspace_id}/List todos in a workspace
GET/current/todos/share/{share_id}/List todos in a share
POST/current/todos/workspace/{workspace_id}/create/Create a todo in a workspace
POST/current/todos/share/{share_id}/create/Create a todo in a share
GET/current/todos/{todo_id}/details/Get todo details
POST/current/todos/{todo_id}/details/update/Update a todo
POST/current/todos/{todo_id}/details/delete/Soft-delete a todo
POST/current/todos/{todo_id}/details/toggle/Toggle todo done state
POST/current/todos/workspace/{workspace_id}/bulk-toggle/Bulk toggle todos in a workspace
POST/current/todos/share/{share_id}/bulk-toggle/Bulk toggle todos in a share

Common Path Parameters

ParameterTypeFormatDescription
{workspace_id}string20-digit numericWorkspace profile ID
{share_id}string20-digit numericShare profile ID
{list_id}string30-char alphanumericTask list ID
{task_id}string30-char alphanumericTask ID
{entry_id}string30-char alphanumericWorklog entry ID
{approval_id}string30-char alphanumericApproval ID
{todo_id}string30-char alphanumericTodo ID
{entity_type}stringSee per-section enumsEntity type discriminator
{entity_id}stringVaries by entity typeEntity identifier

Common Error Responses

These errors apply to all workflow endpoints (except toggle):

Error CodeHTTP StatusMessageCause
APP_AUTH_INVALID401Authentication requiredMissing or invalid JWT token
APP_DENIED403Workflow is not enabledWorkflow feature not enabled on entity
APP_DENIED403Insufficient permissionsUser lacks required access level
APP_REQUEST_TYPE400Invalid requestWrong HTTP method
APP_RATE_LIMITED429Rate limit exceededToo many requests

Feature Toggle

Enable or disable workflow on a workspace or share. Requires admin-level access. These endpoints do not require workflow to already be enabled.

Enable Workflow on Workspace

POST /current/workspace/{workspace_id}/workflow/enable/

Enable workflow features on a workspace.

Auth: Required (JWT). Admin or owner.

Request Example

curl -X POST "https://api.fast.io/current/workspace/1234567890123456789/workflow/enable/" \
  -H "Authorization: Bearer {jwt_token}"

Response

{
  "result": "yes",
  "response": {
    "message": "Workflow features enabled",
    "workflow": true
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
response.messagestringConfirmation message
response.workflowbooltrue = enabled, false = disabled

Access Levels

RoleAccess
Owner / AdminCan enable/disable
Member / GuestDenied

Error Responses

Error CodeHTTP StatusMessageCause
APP_AUTH_INVALID401Authentication requiredMissing or invalid token
APP_NOT_FOUND404Workspace not foundWorkspace does not exist
APP_DENIED403Insufficient permissionsUser is not owner or admin
APP_ERROR_INPUT_INVALID400Workflow is already enabledAlready enabled
APP_ERROR_GENERAL500Failed to enable workflowInternal error

Disable Workflow on Workspace

POST /current/workspace/{workspace_id}/workflow/disable/

Disable workflow on a workspace. Existing data is preserved but inaccessible until re-enabled.

Request Example

curl -X POST "https://api.fast.io/current/workspace/1234567890123456789/workflow/disable/" \
  -H "Authorization: Bearer {jwt_token}"

Response

{
  "result": "yes",
  "response": {
    "message": "Workflow features disabled",
    "workflow": false
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_AUTH_INVALID401Authentication requiredMissing or invalid token
APP_NOT_FOUND404Workspace not foundWorkspace does not exist
APP_DENIED403Insufficient permissionsUser is not owner or admin
APP_ERROR_INPUT_INVALID400Workflow is already disabledAlready disabled
APP_ERROR_GENERAL500Failed to disable workflowInternal error

Share Toggle Endpoints

POST /current/share/{share_id}/workflow/enable/
POST /current/share/{share_id}/workflow/disable/

Behave identically to the workspace variants above, using {share_id} instead.

Disabling workflow does not delete any data. All entities are preserved and become accessible again when re-enabled.

Task Lists & Tasks

Task lists are containers for tasks, scoped to a workspace or share. Tasks support statuses, priorities, assignees, dependencies, and file/folder node links.

Task Status Values

ValueDescription
pendingNot started
in_progressActively being worked on
completeFinished
blockedBlocked by a dependency or issue

Valid Status Transitions

FromAllowed Transitions
pendingin_progress, blocked
in_progresscomplete, blocked, pending
completepending, in_progress
blockedpending, in_progress

Task Priority (integer)

ValueMeaning
0None (default)
1Low
2Medium
3High
4Critical

Task List Object

FieldTypeDescription
idstring30-character alphanumeric ID
profile_idstringWorkspace or share profile ID (20-digit numeric)
namestringTask list name
descriptionstring|nullTask list description
created_bystringUser profile ID of the creator
propertiesobjectMetadata properties (JSON)
sort_orderintDisplay sort order
createdstringISO 8601 timestamp
updatedstringISO 8601 timestamp
deletedstring|nullISO 8601 deletion timestamp, or null

Task Object

FieldTypeDescription
idstring30-character alphanumeric ID
task_list_idstringParent task list ID
profile_idstringWorkspace or share profile ID (20-digit numeric)
titlestringTask title
descriptionstring|nullTask description
statusstringpending, in_progress, complete, blocked
assignee_idstring|nullAssigned user's profile ID, or null
priorityint0 (none) through 4 (critical)
sort_orderintDisplay sort order
dependenciesarray<string>|nullTask IDs this task depends on
node_idstring|nullAssociated file/folder node ID
propertiesobjectMetadata properties (JSON)
createdstringISO 8601 timestamp
updatedstringISO 8601 timestamp
deletedstring|nullISO 8601 deletion timestamp, or null

List Task Lists

GET /current/tasks/workspace/{workspace_id}/
GET /current/tasks/share/{share_id}/

List all task lists in a workspace or share.

Auth: Required (JWT). Rate limited.

Query Parameters

ParameterTypeRequiredDefaultConstraintsDescription
limitintNo50Max 200Number of task lists to return
offsetintNo0Min 0Number to skip
formatstringNomdMarkdown output

Request Example

curl -X GET "https://api.fast.io/current/tasks/workspace/1234567890123456789/?limit=50" \
  -H "Authorization: Bearer {jwt_token}"

Response

{
  "result": "yes",
  "response": {
    "task_lists": [
      {
        "id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5",
        "profile_id": "1234567890123456789",
        "name": "Sprint 12 Tasks",
        "description": "Tasks for the current sprint",
        "created_by": "9876543210987654321",
        "properties": {},
        "sort_order": 0,
        "created": "2025-06-01T09:00:00+00:00",
        "updated": "2025-06-10T14:30:00+00:00",
        "deleted": null
      }
    ],
    "pagination": {
      "limit": 50,
      "offset": 0,
      "total": 1
    }
  },
  "current_api_version": "1.0"
}

Create Task List

POST /current/tasks/workspace/{workspace_id}/create/
POST /current/tasks/share/{share_id}/create/

Create a new task list.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
namestringYes1-255 charactersTask list name
descriptionstringNoMax 65535 charactersTask list description
propertiesobjectNoMetadata properties
sort_orderintNoDefault 0Display sort order

Request Example

curl -X POST "https://api.fast.io/current/tasks/workspace/1234567890123456789/create/" \
  -H "Authorization: Bearer {jwt_token}" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "name=Sprint%2012%20Tasks&description=Tasks%20for%20the%20current%20sprint"

Response

{
  "result": "yes",
  "response": {
    "task_list": {
      "id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5",
      "profile_id": "1234567890123456789",
      "name": "Sprint 12 Tasks",
      "description": "Tasks for the current sprint",
      "created_by": "9876543210987654321",
      "properties": {},
      "sort_order": 0,
      "created": "2025-06-01T09:00:00+00:00",
      "updated": "2025-06-01T09:00:00+00:00",
      "deleted": null
    }
  },
  "current_api_version": "1.0"
}

Get Task List Details

GET /current/tasks/{list_id}/details/

Get task list details including all tasks in the list.

Auth: Required (JWT). Rate limited.

Query Parameters

ParameterTypeRequiredDefaultDescription
formatstringNomd for Markdown output

Response

{
  "result": "yes",
  "response": {
    "task_list": {
      "id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5",
      "profile_id": "1234567890123456789",
      "name": "Sprint 12 Tasks",
      "description": "Tasks for the current sprint",
      "created_by": "9876543210987654321",
      "properties": {},
      "sort_order": 0,
      "created": "2025-06-01T09:00:00+00:00",
      "updated": "2025-06-10T14:30:00+00:00",
      "deleted": null
    },
    "tasks": [
      {
        "id": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5",
        "task_list_id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5",
        "profile_id": "1234567890123456789",
        "title": "Implement login flow",
        "description": "Build the OAuth2 login flow",
        "status": "in_progress",
        "assignee_id": "9876543210987654321",
        "priority": 3,
        "sort_order": 0,
        "dependencies": null,
        "node_id": null,
        "properties": {},
        "created": "2025-06-01T09:30:00+00:00",
        "updated": "2025-06-10T14:30:00+00:00",
        "deleted": null
      }
    ]
  },
  "current_api_version": "1.0"
}

Update Task List

POST /current/tasks/{list_id}/update/

Update a task list. Only provided fields are changed.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
namestringNo1-255 charactersUpdated name
descriptionstring|nullNoMax 65535 chars; null to clearUpdated description
propertiesobjectNoUpdated properties
sort_orderintNoUpdated sort order

Delete Task List

POST /current/tasks/{list_id}/delete/

Soft-delete a task list.

Auth: Required (JWT). Rate limited.


List Tasks

GET /current/tasks/{list_id}/items/

List all tasks in a task list.

Auth: Required (JWT). Rate limited.

Query Parameters

ParameterTypeRequiredDefaultConstraintsDescription
limitintNo50Max 200Number of tasks to return
offsetintNo0Min 0Number to skip
formatstringNomdMarkdown output

Create Task

POST /current/tasks/{list_id}/items/create/

Create a new task in a task list.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
titlestringYes1-512 charactersTask title
descriptionstringNoMax 65535 charactersTask description
priorityintNo0-4 (default 0)Priority: 0=none, 1=low, 2=medium, 3=high, 4=critical
assignee_idstringNo20-digit numeric profile IDUser to assign
node_idstringNoAlphanumeric opaque IDFile/folder node to link
dependenciesarray<string>NoArray of task IDsTasks this task depends on
propertiesobjectNoMetadata properties
sort_orderintNoDefault 0Display sort order

Request Example

curl -X POST "https://api.fast.io/current/tasks/a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5/items/create/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "title=Implement%20login%20flow&priority=3&assignee_id=9876543210987654321"

Response

{
  "result": "yes",
  "response": {
    "task": {
      "id": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5",
      "task_list_id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5",
      "profile_id": "1234567890123456789",
      "title": "Implement login flow",
      "description": null,
      "status": "pending",
      "assignee_id": "9876543210987654321",
      "priority": 3,
      "sort_order": 0,
      "dependencies": null,
      "node_id": null,
      "properties": {},
      "created": "2025-06-01T09:30:00+00:00",
      "updated": "2025-06-01T09:30:00+00:00",
      "deleted": null
    }
  },
  "current_api_version": "1.0"
}

Get Task Details

GET /current/tasks/{list_id}/items/{task_id}/

Get full details of a single task.

Auth: Required (JWT). Rate limited.

Query Parameters

ParameterTypeRequiredDefaultDescription
formatstringNomd for Markdown output

Update Task

POST /current/tasks/{list_id}/items/{task_id}/update/

Update a task. Only provided fields are changed.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
titlestringNo1-512 charactersUpdated title
descriptionstring|nullNoMax 65535 chars; null to clearUpdated description
priorityintNo0-4Updated priority
assignee_idstring|nullNo20-digit numeric; null to unassignUpdated assignee
node_idstring|nullNoOpaque ID; null to clearUpdated node link
dependenciesarray<string>NoArray of task IDsUpdated dependencies
propertiesobjectNoUpdated properties
sort_orderintNoUpdated sort order

Delete Task

POST /current/tasks/{list_id}/items/{task_id}/delete/

Soft-delete a task.

Auth: Required (JWT). Rate limited.


Change Task Status

POST /current/tasks/{list_id}/items/{task_id}/status/

Change a task's status. Enforces valid transitions.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
statusstringYespending, in_progress, complete, blockedNew status

Request Example

curl -X POST "https://api.fast.io/current/tasks/a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5/items/x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5/status/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "status=in_progress"

Response

{
  "result": "yes",
  "response": {
    "task": {
      "id": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5",
      "status": "in_progress",
      "...": "..."
    },
    "old_status": "pending",
    "new_status": "in_progress"
  },
  "current_api_version": "1.0"
}

Assign Task

POST /current/tasks/{list_id}/items/{task_id}/assign/

Assign or unassign a task.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
assignee_idstring|nullYes20-digit numeric profile ID, or nullUser to assign, or null to unassign

Bulk Update Task Status

POST /current/tasks/{list_id}/items/bulk-status/

Update the status of multiple tasks at once.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
tasksarrayYesMax 100 itemsArray of {"task_id": string, "status": string} objects

Request Example

curl -X POST "https://api.fast.io/current/tasks/a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5/items/bulk-status/" \
  -H "Authorization: Bearer {jwt_token}" \
  -H "Content-Type: application/json" \
  -d '{"tasks": [{"task_id": "x1y2z3...", "status": "complete"}, {"task_id": "p1q2r3...", "status": "in_progress"}]}'

Response

{
  "result": "yes",
  "response": {
    "success": true,
    "updated_count": 2,
    "failed_count": 0,
    "total_count": 2,
    "results": [
      {"task_id": "x1y2z3...", "success": true, "error": null},
      {"task_id": "p1q2r3...", "success": true, "error": null}
    ]
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
response.successbooltrue if all tasks updated successfully
response.updated_countintNumber successfully updated
response.failed_countintNumber that failed
response.total_countintTotal number of tasks in request
response.resultsarrayPer-task results with task_id, success, and error

Worklogs

Worklogs provide an append-only activity stream attached to entities. Entries are immutable after creation. Interjections are urgent entries that require acknowledgement.

Worklog Entity Types

ValueDescription
taskAttached to a task
task_listAttached to a task list
nodeAttached to a file/folder
profileAttached to a workspace or share

Entry Types

ValueDescription
infoGeneral information
decisionA decision record
errorAn error record
status_changeA status change
requestA request for action
interjectionUrgent correction requiring acknowledgement (created via interjection endpoint)

Priority

ValueDescription
normalDefault priority
urgentUrgent (auto-set for interjections)

Worklog Entry Object

FieldTypeDescription
idstring30-character alphanumeric ID
entity_typestringtask, task_list, node, profile
entity_idstringID of the attached entity
profile_idstringWorkspace or share profile ID (20-digit numeric)
author_idstringAuthor's user profile ID
entry_typestringEntry type (see enum above)
contentstringEntry text content
prioritystringnormal or urgent
target_idstring|nullTarget user profile ID (for interjections/requests)
acknowledgedint0 = not acknowledged, 1 = acknowledged
acknowledged_atstring|nullISO 8601 timestamp when acknowledged
propertiesobject|nullMetadata properties (JSON)
createdstringISO 8601 timestamp

Worklog entries are immutable. There is no updated or deleted field. The only mutable operation is acknowledging an interjection.


List Worklog Entries

GET /current/worklogs/{entity_type}/{entity_id}/

List worklog entries for an entity, ordered chronologically.

Auth: Required (JWT). Rate limited.

Path Parameters

ParameterTypeRequiredDescription
{entity_type}stringYestask, task_list, node, profile
{entity_id}stringYesEntity ID

Query Parameters

ParameterTypeRequiredDefaultConstraintsDescription
limitintNo50Max 200Number of entries to return
offsetintNo0Min 0Number to skip
sortstringNoascasc or descSort direction by creation time
formatstringNomdMarkdown output

Request Example

curl -X GET "https://api.fast.io/current/worklogs/task/x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5/?limit=20&sort=desc" \
  -H "Authorization: Bearer {jwt_token}"

Response

{
  "result": "yes",
  "response": {
    "entries": [
      {
        "id": "w1x2y3z4a5b6c7d8e9f0g1h2i3j4k5",
        "entity_type": "task",
        "entity_id": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5",
        "profile_id": "1234567890123456789",
        "author_id": "9876543210987654321",
        "entry_type": "info",
        "content": "Completed initial review of uploaded documents.",
        "priority": "normal",
        "target_id": null,
        "acknowledged": 0,
        "acknowledged_at": null,
        "properties": null,
        "created": "2025-06-10T14:30:00+00:00"
      }
    ],
    "pagination": {
      "limit": 20,
      "offset": 0,
      "total": 1
    }
  },
  "current_api_version": "1.0"
}

Append Worklog Entry

POST /current/worklogs/{entity_type}/{entity_id}/append/

Append a standard entry to the worklog.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
contentstringYes1-65535 charactersEntry text content
entry_typestringNoinfo (default), decision, error, status_change, requestEntry type (cannot use interjection here)
prioritystringNonormal (default) or urgentEntry priority
target_idstringNo20-digit numeric profile IDTarget user profile ID
propertiesobjectNoMetadata properties

Request Example

curl -X POST "https://api.fast.io/current/worklogs/task/x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5/append/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "content=Completed%20initial%20review&entry_type=info"

Response: Returns the created entry under the entry key.


Create Interjection

POST /current/worklogs/{entity_type}/{entity_id}/interjection/

Create an interjection — an urgent entry requiring acknowledgement. Automatically sets entry_type: "interjection" and priority: "urgent".

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
contentstringYes1-65535 charactersInterjection text
target_idstringNo20-digit numeric profile IDTarget user profile ID
propertiesobjectNoMetadata properties

Request Example

curl -X POST "https://api.fast.io/current/worklogs/task/x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5/interjection/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "content=STOP%3A%20The%20uploaded%20contract%20has%20incorrect%20terms&target_id=9876543210987654321"

Response: Returns the created interjection entry under the entry key.


List Unacknowledged Interjections

GET /current/worklogs/{entity_type}/{entity_id}/interjections/

List unacknowledged interjections for an entity.

Auth: Required (JWT). Rate limited.


Get Entry Details

GET /current/worklogs/{entry_id}/details/

Get full details of a single worklog entry.

Auth: Required (JWT). Rate limited.

Response: Returns the entry under the entry key.


Acknowledge Interjection

POST /current/worklogs/{entry_id}/acknowledge/

Acknowledge an interjection. Only interjection-type entries can be acknowledged.

Auth: Required (JWT). Rate limited.

Request Example

curl -X POST "https://api.fast.io/current/worklogs/w1x2y3z4a5b6c7d8e9f0g1h2i3j4k5/acknowledge/" \
  -H "Authorization: Bearer {jwt_token}"

Response: Returns the updated entry with acknowledged: 1 and acknowledged_at set.

Acknowledging a standard (non-interjection) entry returns an error. Acknowledging an already-acknowledged interjection returns an error. Worklog entries are append-only and immutable. Once created, they cannot be edited or deleted.

Approvals

Formal approval requests attached to entities (tasks, nodes, or worklog entries). A designated approver or any admin can approve or reject.

Approval Status

ValueDescription
pendingAwaiting resolution
approvedApproved
rejectedRejected

Approval Entity Types

ValueDescription
taskApproval on a task
nodeApproval on a file/folder
worklog_entryApproval on a worklog entry

Approval Object

FieldTypeDescription
idstring30-character alphanumeric ID
entity_typestringtask, node, worklog_entry
entity_idstringID of the entity being approved
profile_idstringWorkspace or share profile ID (20-digit numeric)
requested_bystringUser profile ID of the requester
descriptionstringWhat is being approved
statusstringpending, approved, rejected
approver_idstring|nullDesignated approver's profile ID, or null (any admin)
resolved_bystring|nullProfile ID of the resolver, or null
resolved_atstring|nullISO 8601 resolution timestamp, or null
commentstring|nullResolution comment, or null
deadlinestring|nullISO 8601 deadline (informational), or null
node_idstring|nullAssociated artifact node ID, or null
propertiesobject|nullMetadata properties (JSON)
createdstringISO 8601 timestamp
updatedstringISO 8601 timestamp

List Approvals

GET /current/approvals/workspace/{workspace_id}/
GET /current/approvals/share/{share_id}/

List approval requests in a workspace or share.

Auth: Required (JWT). Rate limited.

Query Parameters

ParameterTypeRequiredDefaultConstraintsDescription
limitintNo50Max 200Number of approvals to return
offsetintNo0Min 0Number to skip
statusstringNopending, approved, rejectedFilter by status
formatstringNomdMarkdown output

Request Example

curl -X GET "https://api.fast.io/current/approvals/workspace/1234567890123456789/?status=pending" \
  -H "Authorization: Bearer {jwt_token}"

Response

{
  "result": "yes",
  "response": {
    "approvals": [
      {
        "id": "r1s2t3u4v5w6x7y8z9a0b1c2d3e4f5",
        "entity_type": "task",
        "entity_id": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5",
        "profile_id": "1234567890123456789",
        "requested_by": "9876543210987654321",
        "description": "Please review and approve the deployment plan.",
        "status": "pending",
        "approver_id": "5678901234567890123",
        "resolved_by": null,
        "resolved_at": null,
        "comment": null,
        "deadline": "2025-06-15T23:59:59+00:00",
        "node_id": null,
        "properties": null,
        "created": "2025-06-10T09:00:00+00:00",
        "updated": "2025-06-10T09:00:00+00:00"
      }
    ],
    "pagination": {
      "limit": 50,
      "offset": 0,
      "total": 1
    }
  },
  "current_api_version": "1.0"
}

Create Approval

POST /current/approvals/{entity_type}/{entity_id}/create/

Create an approval request on an entity.

Auth: Required (JWT). Rate limited.

Path Parameters

ParameterTypeRequiredDescription
{entity_type}stringYestask, node, worklog_entry
{entity_id}stringYesEntity ID

Request Body

FieldTypeRequiredConstraintsDescription
descriptionstringYes1-65535 charactersWhat is being approved
profile_idstringYes20-digit numericWorkspace or share profile ID
approver_idstringNo20-digit numeric profile IDDesignated approver; omit for any admin
deadlinestringNoISO 8601 datetimeInformational deadline
node_idstringNoAlphanumeric opaque IDAssociated artifact node ID
propertiesobjectNoMetadata properties

Request Example

curl -X POST "https://api.fast.io/current/approvals/task/x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5/create/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "description=Please%20review%20the%20deployment%20plan&profile_id=1234567890123456789&approver_id=5678901234567890123&deadline=2025-06-15T23:59:59%2B00:00"

Response: Returns the created approval under the approval key.

approver_id is a single user (not an array). If omitted, any admin can resolve. There is no title field — use description to describe what is being approved.


Get Approval Details

GET /current/approvals/{approval_id}/details/

Get full details of an approval request.

Auth: Required (JWT). Rate limited.

Response: Returns the approval under the approval key.


Resolve Approval

POST /current/approvals/{approval_id}/resolve/

Resolve an approval by approving or rejecting it. Only pending approvals can be resolved.

Auth: Required (JWT). Designated approver or admin. Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
actionstringYesapprove or rejectResolution action
commentstringNoMax 65535 charactersResolution comment

Request Example

curl -X POST "https://api.fast.io/current/approvals/r1s2t3u4v5w6x7y8z9a0b1c2d3e4f5/resolve/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "action=approve&comment=Looks%20good%2C%20approved."

Response: Returns the resolved approval under the approval key with status, resolved_by, resolved_at, and comment updated.

Access Levels

RoleAccess
Designated ApproverCan resolve (if approver_id is set)
AdminCan resolve any approval
Other MembersCannot resolve

The field is action (not resolution). Values: "approve" or "reject". Only approvals with "pending" status can be resolved. The resolution comment is stored in comment (not resolution_comment).

Todos

Lightweight checklists scoped to workspaces or shares. Each todo has a title, done state, optional assignee, and sort order.

Todo Object

FieldTypeDescription
idstring30-character alphanumeric ID
profile_idstringWorkspace or share profile ID (20-digit numeric)
titlestringTodo title text
doneint0 = not done, 1 = done
assignee_idstring|nullAssigned user's profile ID, or null
sort_orderintDisplay sort order
propertiesobject|nullMetadata properties (JSON)
createdstringISO 8601 timestamp
updatedstringISO 8601 timestamp
deletedstring|nullISO 8601 deletion timestamp, or null

Todos do not have a description field. The done field is an integer (0 or 1), not a boolean.


List Todos

GET /current/todos/workspace/{workspace_id}/
GET /current/todos/share/{share_id}/

List all todos in a workspace or share.

Auth: Required (JWT). Rate limited.

Query Parameters

ParameterTypeRequiredDefaultConstraintsDescription
limitintNo50Max 200Number of todos to return
offsetintNo0Min 0Number to skip
formatstringNomdMarkdown output

Request Example

curl -X GET "https://api.fast.io/current/todos/workspace/1234567890123456789/" \
  -H "Authorization: Bearer {jwt_token}"

Response

{
  "result": "yes",
  "response": {
    "todos": [
      {
        "id": "t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5",
        "profile_id": "1234567890123456789",
        "title": "Review uploaded contracts",
        "done": 0,
        "assignee_id": null,
        "sort_order": 0,
        "properties": null,
        "created": "2025-06-10T09:00:00+00:00",
        "updated": "2025-06-10T09:00:00+00:00",
        "deleted": null
      },
      {
        "id": "u1v2w3x4y5z6a7b8c9d0e1f2g3h4i5",
        "profile_id": "1234567890123456789",
        "title": "Send report to stakeholders",
        "done": 1,
        "assignee_id": "9876543210987654321",
        "sort_order": 1,
        "properties": null,
        "created": "2025-06-09T14:00:00+00:00",
        "updated": "2025-06-10T10:30:00+00:00",
        "deleted": null
      }
    ],
    "pagination": {
      "limit": 50,
      "offset": 0,
      "total": 2
    }
  },
  "current_api_version": "1.0"
}

Create Todo

POST /current/todos/workspace/{workspace_id}/create/
POST /current/todos/share/{share_id}/create/

Create a new todo.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
titlestringYes1-512 charactersTodo title
assignee_idstringNo20-digit numeric profile IDUser to assign
sort_orderintNoDefault 0Display sort order
propertiesobjectNoMetadata properties

Request Example

curl -X POST "https://api.fast.io/current/todos/workspace/1234567890123456789/create/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "title=Review%20uploaded%20contracts"

Response: Returns the created todo under the todo key. Todos are created with done: 0.


Get Todo Details

GET /current/todos/{todo_id}/details/

Get full details of a single todo.

Auth: Required (JWT). Rate limited.

Response: Returns the todo under the todo key.


Update Todo

POST /current/todos/{todo_id}/details/update/

Update a todo. Only provided fields are changed.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
titlestringNo1-512 charactersUpdated title
doneintNo0 or 1Updated done state
assignee_idstring|nullNo20-digit numeric; null to unassignUpdated assignee
sort_orderintNoUpdated sort order
propertiesobjectNoUpdated properties

The endpoint path includes /details/ (i.e., /todos/{todo_id}/details/update/).


Delete Todo

POST /current/todos/{todo_id}/details/delete/

Soft-delete a todo.

Auth: Required (JWT). Rate limited.


Toggle Todo

POST /current/todos/{todo_id}/details/toggle/

Toggle a todo's done state. 0 becomes 1, 1 becomes 0.

Auth: Required (JWT). Rate limited.

Request Example

curl -X POST "https://api.fast.io/current/todos/t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5/details/toggle/" \
  -H "Authorization: Bearer {jwt_token}"

Response: Returns the updated todo under the todo key with the toggled done value.


Bulk Toggle Todos

POST /current/todos/workspace/{workspace_id}/bulk-toggle/
POST /current/todos/share/{share_id}/bulk-toggle/

Bulk toggle the done state of multiple todos.

Auth: Required (JWT). Rate limited.

Request Body

FieldTypeRequiredConstraintsDescription
todo_idsarray<string>YesMax 100 itemsTodo IDs to toggle
doneboolYestrue or falseTarget state: true = mark all done, false = mark all not done

Request Example

curl -X POST "https://api.fast.io/current/todos/workspace/1234567890123456789/bulk-toggle/" \
  -H "Authorization: Bearer {jwt_token}" \
  -H "Content-Type: application/json" \
  -d '{"todo_ids": ["t1u2v3...", "u1v2w3..."], "done": true}'

Response

{
  "result": "yes",
  "response": {
    "success": true,
    "updated_count": 2,
    "failed_count": 0,
    "total_count": 2,
    "results": [
      {"todo_id": "t1u2v3...", "success": true, "error": null},
      {"todo_id": "u1v2w3...", "success": true, "error": null}
    ]
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
response.successbooltrue if all todos updated successfully
response.updated_countintNumber successfully updated
response.failed_countintNumber that failed
response.total_countintTotal number of todo IDs provided
response.resultsarrayPer-todo results with todo_id, success, and error

Workflow Events

Workflow primitives emit events on all state changes. Filter with:

GET /current/events/search/?workspace_id={id}&category=workflow

Task Events

Worklog Events

Approval Events

Todo Events

All workflow events use event category workflow and subcategory workflow.

↑ Back to top